2010-01-29  Mark Rowe  <mrowe@apple.com>

        Fix the Mac build.

        Disable ENABLE_INDEXED_DATABASE since it is "completely non-functional".

        As the comment in FeatureDefines.xcconfig notes, the list of feature defines
        needs to be kept in sync across the various files.  The default values also
        need to be kept in sync between these files and build-webkit.

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Darin Adler.

        Timeout for client-based Geolocation shouldn't start until user gives consent
        https://bugs.webkit.org/show_bug.cgi?id=34352

        * page/Geolocation.cpp:
        (WebCore::Geolocation::startRequest): Don't start timer if we're blocked on user consent.
        (WebCore::Geolocation::setIsAllowed): Start timer after user gives consent.

2010-01-29  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Nikolas Zimmermann.

        [OpenVG] Implement more graphics primitives
        https://bugs.webkit.org/show_bug.cgi?id=34339

        Adds lines, arcs, ellipses, polygons and rounded
        rectangles to PainterOpenVG and GraphicsContext.

        Rounded rects support by Eli Fidler <efidler@rim.com>.

        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::strokeRect):
        * platform/graphics/openvg/PainterOpenVG.cpp:
        (WebCore::PainterOpenVG::drawRect):
        (WebCore::PainterOpenVG::drawRoundedRect):
        (WebCore::PainterOpenVG::drawLine):
        (WebCore::PainterOpenVG::drawArc):
        (WebCore::PainterOpenVG::drawEllipse):
        (WebCore::PainterOpenVG::drawPolygon):
        * platform/graphics/openvg/PainterOpenVG.h:

2010-01-29  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitri Glazkov.

        A first step towards the Indexed Database API
        https://bugs.webkit.org/show_bug.cgi?id=34342

        Flesh out the first part of Indexed Database API.
        Currently only compiles with v8 + chromium for now.
        Completely non-functional, but it seems best to do
        this in chunks.

        No tests because nothing works yet.

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/RuntimeEnabledFeatures.cpp:
        * bindings/v8/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setIndexedDatabaseEnabled):
        (WebCore::RuntimeEnabledFeatures::indexedDatabaseEnabled):
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::IndexedDBEnabled):
        * bindings/v8/custom/V8IDBRequestCustom.cpp: Added.
        (WebCore::V8IDBRequest::resultAccessorGetter):
        * bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp: Added.
        (WebCore::V8IndexedDatabaseRequest::openCallback):
        * dom/EventNames.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::indexedDB):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * storage/IDBDatabaseError.h: Added.
        (WebCore::IDBDatabaseError::create):
        (WebCore::IDBDatabaseError::~IDBDatabaseError):
        (WebCore::IDBDatabaseError::code):
        (WebCore::IDBDatabaseError::setCode):
        (WebCore::IDBDatabaseError::message):
        (WebCore::IDBDatabaseError::setMessage):
        (WebCore::IDBDatabaseError::IDBDatabaseError):
        * storage/IDBDatabaseError.idl: Added.
        * storage/IDBDatabaseException.h: Added.
        (WebCore::IDBDatabaseException::create):
        (WebCore::IDBDatabaseException::~IDBDatabaseException):
        (WebCore::IDBDatabaseException::code):
        (WebCore::IDBDatabaseException::setCode):
        (WebCore::IDBDatabaseException::message):
        (WebCore::IDBDatabaseException::setMessage):
        (WebCore::IDBDatabaseException::IDBDatabaseException):
        * storage/IDBDatabaseException.idl: Added.
        * storage/IDBRequest.cpp: Added.
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::~IDBRequest):
        (WebCore::IDBRequest::abort):
        (WebCore::IDBRequest::eventTargetData):
        (WebCore::IDBRequest::ensureEventTargetData):
        * storage/IDBRequest.h: Added.
        (WebCore::IDBRequest::create):
        (WebCore::IDBRequest::readyState):
        (WebCore::IDBRequest::error):
        (WebCore::IDBRequest::result):
        (WebCore::IDBRequest::scriptExecutionContext):
        (WebCore::IDBRequest::toIDBRequest):
        (WebCore::IDBRequest::refEventTarget):
        (WebCore::IDBRequest::derefEventTarget):
        * storage/IDBRequest.idl: Added.
        * storage/IndexedDatabaseRequest.cpp: Added.
        (WebCore::IndexedDatabaseRequest::IndexedDatabaseRequest):
        (WebCore::IndexedDatabaseRequest::~IndexedDatabaseRequest):
        (WebCore::IndexedDatabaseRequest::open):
        * storage/IndexedDatabaseRequest.h: Added.
        (WebCore::IndexedDatabaseRequest::create):
        (WebCore::IndexedDatabaseRequest::request):
        * storage/IndexedDatabaseRequest.idl: Added.

2010-01-29  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Drag and Drop: Windows uses "stop" sign as cursor when dragging
        https://bugs.webkit.org/show_bug.cgi?id=34305
        <rdar://problem/7589672>

        Add a FIXME for the code that needs to be changed to support full
        custom cursors.

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

2010-01-29  Victor Wang  <victorw@chromium.org>

        Reviewed by darin@apple.com.

        Fix the issue that both main frome and iframe are
        focused if window.onblur calls window.focus.
        https://bugs.webkit.org/show_bug.cgi?id=31692

        The problem is caused by the focused frame in FocusController
        is messed up if window.onblur calls window.focus:
        When user clicks iframe to switch focus from main frame to iframe,
        FocusController::setFocusedFrame fires onblur event, which calls
        window.focus and then calls setFocusedFrame again to switch back.
        This messes up the old focused frame and new focused frame and
        leaves the FocusController confused. As a result, controlls
        in both main frame and iframe look like get focused.

        To fix it, add a flag to FocusController and do no switch the focused
        frame when FocusController is in the middle of changing the focused frame. 

        Test: fast/events/change-frame-focus.html

        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
        (WebCore::FocusController::setFocusedFrame):
        * page/FocusController.h:
        (WebCore::FocusController::focusedFrame):
        (WebCore::FocusController::isActive):
        (WebCore::FocusController::isFocused):

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

        Reviewed by Dan Bernstein.

        <rdar://problem/7441982> REGRESSION (TOT): Adobe CS4: Installer alerts are displayed as
        blank windows

        We probably shouldn't be deferring loads below modal dialogs and alerts, because that's not
        what being modal means. But making such a change for general Web content would require fixes
        in other parts of code, which I'm not ready to implement right now, so making it application
        specific.

        * page/Page.cpp: (WebCore::Page::setDefersLoading): Do nothing if load deferring is not
        enabled in page settings.

        * WebCore.base.exp:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setLoadDeferringEnabled):
        * page/Settings.h: (WebCore::Settings::loadDeferringEnabled):
        Add the ability for client to disable page deferring (still enabled by default).

        * platform/mac/RuntimeApplicationChecks.h:
        * platform/mac/RuntimeApplicationChecks.mm: (WebCore::applicationIsAdobeInstaller):
        Added a bundle ID test for Adobe installer.

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

        Build fix.

        * page/Geolocation.cpp:
        (WebCore::Geolocation::startUpdating):

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

        Reviewed by Darin Adler.

        Client-based Geolocation starts updating before getting consent from the user
        https://bugs.webkit.org/show_bug.cgi?id=34343

        * page/Geolocation.cpp:
        (WebCore::Geolocation::startRequest): Pass notifier instead of options to startUpdating.
        (WebCore::Geolocation::setIsAllowed): Add the observer or notify of error for deferred startUpdating.
        (WebCore::Geolocation::startUpdating): Pass notifier instead of options, since we may need to call it if we fail to get user consent.
        Defer adding the observer if we don't yet have user consent, since this could kick off
        server-based wifi Geolocation requests.
        * page/Geolocation.h:

2010-01-28  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Crash when posting a notification for a detached object

        https://bugs.webkit.org/show_bug.cgi?id=34309
        <rdar://problem/7409759>

        Reviewed by Darin Adler.

        Test: platform/win/accessibility/detached-object-notification-crash.html

        * accessibility/AccessibilityRenderObject.cpp:
        (AccessibilityRenderObject::document):
        Null check m_renderer. This is the bug fix; the other changes in the
        patch are for the test.

        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        Map AXValueChanged to EVENT_OBJECT_VALUECHANGED, so we'll post a
        notification when AXValueChanged is posted. Receiving an event of this
        type tells us that the test passed.

2010-01-29  Darin Fisher  <darin@chromium.org>

        Okayed by Oliver Hunt.

        Rollout r53949, r53951 and r54013 due to a Chromium regression that it
        causes.  Somehow this code change is triggering an endless repaint loop.

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

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/transforms/TransformationMatrix.h:
        (WebCore::TransformationMatrix::isIdentityOrTranslation):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::~RenderBoxModelObject):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:

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

        Reviewed by Darin Adler.

        Add gdb helper methods for Ranges like we have for VisibleSelections.
        https://bugs.webkit.org/show_bug.cgi?id=34308

        No new tests, these are only for debugging.

        * dom/Position.cpp:
        (WebCore::Position::showTreeForThis):
        * dom/Range.cpp:
        (showTree):
        * dom/Range.h:

2010-01-29  Drew Wilson  <atwilson@chromium.org>

        Reviewed by Adam Barth.

        V8 implementation of MessageEvent.initMessageEvent() does not set source correctly.
        https://bugs.webkit.org/show_bug.cgi?id=34292

        Test: fast/events/init-events.html will pass in Chrome now.

        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::initMessageEventCallback):
        Now properly extracts the reference to the DOMWindow object from the passed-in window parameter.

2010-01-29  Ben Murdoch  <benm@google.com>

        Reviewed by Dimitri Glazkov.

        [Android] Android needs functionality in the ChromeClient to be informed when touch events are and are not needed by the webpage.
        https://bugs.webkit.org/show_bug.cgi?id=34215

        Add a function on the ChromeClient that WebCore can use to inform the platform when it needs touch events. This way the platform can optimise by not forwarding the events if they are not required.

        No new tests as the only implementation is specific to Android.

        * dom/Document.cpp:
        (WebCore::Document::detach): Check if this is the top level document and if so, stop forwarding touch events.
        (WebCore::Document::addListenerTypeIfNeeded): Inform the ChromeClient it should start forwarding touch events and guard touch event code properly.
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore): If the document uses touch events, inform the ChromeClient to start forwarding them.
        (WebCore::CachedFrame::CachedFrame): If the document uses touch events, inform the ChromeClient to stop forwarding them, as the document is being put into the page cache.
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::needTouchEvents): Add an empty implementation.
        * page/ChromeClient.h: Add the needTouchEvents() function.

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

        Reviewed by Pavel Feldman.

        Fix toolbar gradient to match the window's titlebar on Snow Leopard
        https://bugs.webkit.org/show_bug.cgi?id=34320

        * inspector/front-end/inspector.css:

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

        Reviewed by Pavel Feldman.

        Fix MacOS X version detection

        MacOS X version can have 2 or 3 segments.
        https://bugs.webkit.org/show_bug.cgi?id=34322

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

2010-01-29  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Nikolas Zimmermann.

        [OpenVG] Implement a basic GraphicsContext on top of a new PainterOpenVG class
        https://bugs.webkit.org/show_bug.cgi?id=33405

        PainterOpenVG provides painter state management that works
        on a single (EGL) context, and apart from painter state
        implements a single drawing operation (for now), drawRect().

        It is a generic painter class that cooperates with
        SurfaceOpenVG to enable robust surface/context switching
        (given that EGL doesn't notify us if somebody switches
        the surface/context behind our backs), and provides
        painting operations close to OpenVG's way of working
        that GraphicsContext, Path, Image, Font and other WebKit
        platform classes can use to draw on.

        Initial code for state management and OpenVG scissoring by
        Eli Fidler <efidler@rim.com>. VGRect/VGMatrix and the bulk
        of the transformations code by Adam Treat <atreat@rim.com>.
        Preliminary drawFocusRing() implementation by Yong Li <yoli@rim.com>.

        * platform/graphics/FloatRect.h:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp: Added.
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::platformContext):
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::beginPath):
        (WebCore::GraphicsContext::addPath):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::clearPlatformShadow):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineDash):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::setCompositeOperation):
        (WebCore::GraphicsContext::canvasClip):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::origin):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        (WebCore::GraphicsContext::clipToImageBuffer):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::setURLForRect):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::setPlatformShouldAntialias):
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::imageInterpolationQuality):
        * platform/graphics/openvg/PainterOpenVG.cpp: Added.
        (WebCore::isNonRotatedAffineTransformation):
        (WebCore::toVGCapStyle):
        (WebCore::toVGJoinStyle):
        (WebCore::toVGFillRule):
        (WebCore::colorToVGColor):
        (WebCore::setVGSolidColor):
        (WebCore::PlatformPainterState::PlatformPainterState):
        (WebCore::PlatformPainterState::copyPaintState):
        (WebCore::PlatformPainterState::applyState):
        (WebCore::PlatformPainterState::applyBlending):
        (WebCore::PlatformPainterState::applyTransformationMatrix):
        (WebCore::PlatformPainterState::applyScissorRect):
        (WebCore::PlatformPainterState::applyStrokeStyle):
        (WebCore::PlatformPainterState::strokeDisabled):
        (WebCore::PlatformPainterState::fillDisabled):
        (WebCore::PainterOpenVG::PainterOpenVG):
        (WebCore::PainterOpenVG::~PainterOpenVG):
        (WebCore::PainterOpenVG::begin):
        (WebCore::PainterOpenVG::end):
        (WebCore::PainterOpenVG::destroyPainterStates):
        (WebCore::PainterOpenVG::applyState):
        (WebCore::PainterOpenVG::blitToSurface):
        (WebCore::PainterOpenVG::transformationMatrix):
        (WebCore::PainterOpenVG::concatTransformationMatrix):
        (WebCore::PainterOpenVG::setTransformationMatrix):
        (WebCore::PainterOpenVG::compositeOperation):
        (WebCore::PainterOpenVG::setCompositeOperation):
        (WebCore::PainterOpenVG::opacity):
        (WebCore::PainterOpenVG::setOpacity):
        (WebCore::PainterOpenVG::strokeThickness):
        (WebCore::PainterOpenVG::setStrokeThickness):
        (WebCore::PainterOpenVG::strokeStyle):
        (WebCore::PainterOpenVG::setStrokeStyle):
        (WebCore::PainterOpenVG::setLineDash):
        (WebCore::PainterOpenVG::setLineCap):
        (WebCore::PainterOpenVG::setLineJoin):
        (WebCore::PainterOpenVG::setMiterLimit):
        (WebCore::PainterOpenVG::strokeColor):
        (WebCore::PainterOpenVG::setStrokeColor):
        (WebCore::PainterOpenVG::fillColor):
        (WebCore::PainterOpenVG::setFillColor):
        (WebCore::PainterOpenVG::antialiasingEnabled):
        (WebCore::PainterOpenVG::setAntialiasingEnabled):
        (WebCore::PainterOpenVG::scale):
        (WebCore::PainterOpenVG::rotate):
        (WebCore::PainterOpenVG::translate):
        (WebCore::PainterOpenVG::intersectScissorRect):
        (WebCore::PainterOpenVG::intersectClipRect):
        (WebCore::PainterOpenVG::drawRect):
        (WebCore::PainterOpenVG::save):
        (WebCore::PainterOpenVG::restore):
        * platform/graphics/openvg/PainterOpenVG.h: Added.
        (WebCore::PainterOpenVG::):
        (WebCore::PainterOpenVG::surface):
        * platform/graphics/openvg/SurfaceOpenVG.cpp:
        (WebCore::SurfaceOpenVG::SurfaceOpenVG):
        (WebCore::SurfaceOpenVG::~SurfaceOpenVG):
        (WebCore::SurfaceOpenVG::makeCurrent):
        (WebCore::SurfaceOpenVG::makeCompatibleCurrent):
        (WebCore::SurfaceOpenVG::setActivePainter):
        (WebCore::SurfaceOpenVG::activePainter):
        * platform/graphics/openvg/SurfaceOpenVG.h:
        (WebCore::SurfaceOpenVG::):
        * platform/graphics/openvg/VGUtils.cpp: Added.
        (WebCore::VGMatrix::VGMatrix):
        (WebCore::VGMatrix::operator TransformationMatrix):
        (WebCore::TransformationMatrix::operator VGMatrix):
        (WebCore::VGRect::VGRect):
        (WebCore::VGRect::operator FloatRect):
        (WebCore::FloatRect::operator VGRect):
        * platform/graphics/openvg/VGUtils.h:
        (WebCore::VGMatrix::toVGfloat):
        (WebCore::VGRect::toVGfloat):
        * platform/graphics/transforms/TransformationMatrix.h:

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

        Reviewed by Gustavo Noronha Silva.

        [Gtk] Vimeo HTML5 player doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=34327

        Send Referer when requesting media over HTTP.

        Test: http/tests/media/video-referer.html

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateSourceChangedCallback):

2010-01-29  Oswald Buddenhagen <oswald.buddenhagen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Speed up the WebCore::String -> QString conversion

        Use QString(const QChar *, int len) constructor instead of QString::fromUtf16 to
        avoid BOM checks and byteswapping.

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fieldNamed):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):

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

        Reviewed by Timothy Hatcher.

        Web Inspector: Source view displays text using wrong fonts
        https://bugs.webkit.org/show_bug.cgi?id=34269

        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor):
        (WebInspector.TextEditor.prototype._initFont):
        * inspector/front-end/inspector.js:

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

        Reviewed by Gustavo Noronha Silva.

        [Gtk] Apple trailers don't play anymore
        https://bugs.webkit.org/show_bug.cgi?id=34316

        Fake QuickTime when accessing movie trailers.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateSourceChangedCallback):

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

        Reviewed by Timothy Hatcher.

        Web Inspector: migrate to tokenizer-based highlighting in the Elements panel.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/CSSSourceSyntaxHighlighter.js: Removed.
        * inspector/front-end/DOMSyntaxHighlighter.js: Added.
        (WebInspector.DOMSyntaxHighlighter):
        (WebInspector.DOMSyntaxHighlighter.prototype.createSpan):
        (WebInspector.DOMSyntaxHighlighter.prototype.syntaxHighlightNode):
        * inspector/front-end/ElementsTreeOutline.js:
        * inspector/front-end/JavaScriptSourceSyntaxHighlighter.js: Removed.
        * inspector/front-end/SourceCSSTokenizer.js:
        (WebInspector.SourceCSSTokenizer):
        (WebInspector.SourceCSSTokenizer.prototype.nextToken):
        * inspector/front-end/SourceCSSTokenizer.re2js:
        * inspector/front-end/SourceHTMLTokenizer.js:
        (WebInspector.SourceHTMLTokenizer):
        (WebInspector.SourceHTMLTokenizer.prototype.nextToken):
        * inspector/front-end/SourceHTMLTokenizer.re2js:
        * inspector/front-end/SourceJavaScriptTokenizer.js:
        (WebInspector.SourceJavaScriptTokenizer):
        (WebInspector.SourceJavaScriptTokenizer.prototype.nextToken):
        * inspector/front-end/SourceJavaScriptTokenizer.re2js:
        * inspector/front-end/SourceSyntaxHighlighter.js: Removed.
        * inspector/front-end/SourceTokenizer.js: Added.
        (WebInspector.SourceTokenizer):
        (WebInspector.SourceTokenizer.prototype.set line):
        (WebInspector.SourceTokenizer.prototype.set condition):
        (WebInspector.SourceTokenizer.prototype.get condition):
        (WebInspector.SourceTokenizer.prototype.hasCondition):
        (WebInspector.SourceTokenizer.prototype.getLexCondition):
        (WebInspector.SourceTokenizer.prototype.setLexCondition):
        (WebInspector.SourceTokenizer.prototype._charAt):
        (WebInspector.SourceTokenizer.Registry):
        (WebInspector.SourceTokenizer.Registry.getInstance):
        (WebInspector.SourceTokenizer.Registry.prototype.getTokenizer):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype.set mimeType):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

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

        Reviewed by Timothy Hatcher.

        Web Inspector: No need to render background sources
        when performing search.

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

        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView):
        (WebInspector.ScriptView.prototype.show):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.set visible):
        (WebInspector.SourceFrame.prototype.set executionLine):
        (WebInspector.SourceFrame.prototype.revealLine):
        (WebInspector.SourceFrame.prototype.clearMessages):
        (WebInspector.SourceFrame.prototype.sizeToFitContentHeight):
        (WebInspector.SourceFrame.prototype.setContent):
        (WebInspector.SourceFrame.prototype._createEditorIfNeeded):
        (WebInspector.SourceFrame.prototype.setSelection):
        (WebInspector.SourceFrame.prototype.clearSelection):
        (WebInspector.SourceFrame.prototype._contextMenu.addConditionalBreakpoint):
        (WebInspector.SourceFrame.prototype._contextMenu):
        (WebInspector.SourceFrame.prototype._toggleBreakpoint):
        (WebInspector.SourceFrame.prototype.resize):
        (WebInspector.BreakpointLineNumberDecorator):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView):
        (WebInspector.SourceView.prototype.show):
        (WebInspector.SourceView.prototype.hide):
        (WebInspector.SourceView.prototype.resize):
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel):
        (WebInspector.TextEditorModel.prototype.set changeListener):
        (WebInspector.TextEditorModel.prototype.setText):

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

        Reviewed by Adam Barth.

        Remove ScriptState::frame which is only used for reporting exceptions
        in some cases in a way that diverges from the regular exception reporting in
        v8 bindings.

        Cache ScriptState directly on v8::Context instead of providing
        implementations specific for isolated worlds and ScriptController.

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

        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptState.cpp:
        (WebCore::mainWorldScriptState):
        * bindings/js/ScriptState.h:
        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::ScriptCallStack):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        (WebCore::ScriptController::clearWindowShell):
        * bindings/v8/ScriptController.h:
        * bindings/v8/ScriptScope.cpp:
        (WebCore::ScriptScope::ScriptScope):
        (WebCore::ScriptScope::success):
        * bindings/v8/ScriptScope.h:
        * bindings/v8/ScriptState.cpp:
        (WebCore::ScriptState::ScriptState):
        (WebCore::ScriptState::forContext):
        (WebCore::ScriptState::current):
        (WebCore::ScriptState::weakReferenceCallback):
        (WebCore::mainWorldScriptState):
        (WebCore::scriptStateFromPage):
        * bindings/v8/ScriptState.h:
        (WebCore::ScriptState::ScriptState):
        (WebCore::EmptyScriptState::EmptyScriptState):
        (WebCore::EmptyScriptState::~EmptyScriptState):
        * bindings/v8/V8HiddenPropertyName.h:
        * bindings/v8/V8IsolatedContext.cpp:
        * bindings/v8/V8IsolatedContext.h:
        * bindings/v8/V8Utilities.cpp:
        (WebCore::getScriptExecutionContext):
        (WebCore::reportException):
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        (WebCore::V8NodeIterator::nextNodeCallback):
        (WebCore::V8NodeIterator::previousNodeCallback):
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        (WebCore::V8TreeWalker::parentNodeCallback):
        (WebCore::V8TreeWalker::firstChildCallback):
        (WebCore::V8TreeWalker::lastChildCallback):
        (WebCore::V8TreeWalker::nextNodeCallback):
        (WebCore::V8TreeWalker::previousNodeCallback):
        (WebCore::V8TreeWalker::nextSiblingCallback):
        (WebCore::V8TreeWalker::previousSiblingCallback):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::injectedScriptForNodeId):

2010-01-29  Darin Fisher  <darin@chromium.org>

        Reviewed by Adam Barth.

        Add FrameLoaderClient::allowImages method to allow the client to
        overrule image loading policy on a per frame basis.

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

        For completeness, this patch also adds Settings::areImagesEnabled.
        This is different from loadsImagesAutomatically as is explained in
        Settings.h.

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestImage):
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::allowImages):
        * loader/ImageDocument.cpp:
        (WebCore::ImageTokenizer::writeRawData):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setImagesEnabled):
        * page/Settings.h:
        (WebCore::Settings::areImagesEnabled):

2010-01-28  Nicholas Young  <nicholas.young@nokia.com>

        Reviewed by Eric Carlson.

        Prefer provided video element width/height properties to hard coded
        defaults for intrinsic size when natural video size is unavailable.
        https://bugs.webkit.org/show_bug.cgi?id=34302

        No new tests needed.

        * rendering/RenderVideo.cpp: Attempt to use width/height properties
        (WebCore::RenderVideo::RenderVideo):
        * rendering/RenderVideo.h: More appropriate constructor signature

2010-01-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        MessageEvent.data should not be repeated deserialised
        https://bugs.webkit.org/show_bug.cgi?id=34311

        Cache the result of deserialising the event data

        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/MessageEvent.idl:

2010-01-28  Hayato Ito  <hayato@chromium.org>

        Reviewed by Darin Adler.

        Change CSS 'page-break-inside' property from inherited one to non-inherited one because CSS specification defines so.

        Note: Currently, the 'page-break-inside' property is used only when parsing the CSS. That property is not used when rendering.

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

        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::NonInheritedFlags::operator==):
        (WebCore::InheritedFlags::setBitDefaults):
        (WebCore::InheritedFlags::pageBreakInside):
        (WebCore::InheritedFlags::setPageBreakInside):
        * rendering/style/StyleInheritedData.cpp:
        (WebCore::StyleInheritedData::StyleInheritedData):
        (WebCore::StyleInheritedData::operator==):
        * rendering/style/StyleInheritedData.h:

2010-01-28  Michael Nordman  <michaeln@google.com>

        Reviewed by Alexey Proskuryakov.

        ApplicationCache events should be deferred until after Document onload has fired.
        https://bugs.webkit.org/show_bug.cgi?id=29690

        Test: http/tests/appcache/deferred-events.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::handledOnloadEvents):  Tells the ApplicationCacheHost to stop deferring events.
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::ApplicationCacheHost): Initialize m_isDeferringEvents to true.
        (WebCore::ApplicationCacheHost::notifyDOMApplicationCache): Depending, defer or raise the event.
        (WebCore::ApplicationCacheHost::stopDeferringEvents): Raise any deferred events and reset the flag.
        * loader/appcache/ApplicationCacheHost.h: Declare new data members and method.

2010-01-28  Kavita Kanetkar  <kkanetkar@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Generate header declaration for custom constructor callbacks
        https://bugs.webkit.org/show_bug.cgi?id=33680

        Added handling of 'CanBeConstructed' and 'OmitConstructor' and a new extended attribute
        CustomConstructor'.

        Deleted implementation .cpp files for corresponding 'CanBeConstructed'
        extended attributes. These are now generated via CodeGeneratorV8.pm
        Treating 'OmitConstructor' and 'CustomConstructor' to be the same in
        CodeGeneratorJS.pm
        Cleaned idls that had 'CustomConstructor' and 'OmitConstructor' together, and
        same with CustomConstructor and CanBeConstructed.

        * Android.v8bindings.mk:
        * WebCore.gypi: Removed deps for classes being generated.
        * bindings/scripts/CodeGeneratorJS.pm: OmitConstructor and CustomConstructor have the same behavior in generator.
        * bindings/scripts/CodeGeneratorV8.pm: Generating the callbacks for constructors.
        * bindings/v8/V8DOMWrapper.cpp: Removed manual calls to SetCallHandler() for constructor callbacks.
        (WebCore::V8DOMWrapper::getTemplate):
        * bindings/v8/custom/V8CustomBinding.h: Removed manual declarations of constructor callbacks.
        * bindings/v8/custom/V8DOMParserConstructor.cpp:
        * bindings/v8/custom/V8EventSourceConstructor.cpp:
        (WebCore::V8EventSource::constructorCallback):
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::V8MessageChannel::constructorCallback):
        * bindings/v8/custom/V8SharedWorkerCustom.cpp:
        (WebCore::V8SharedWorker::constructorCallback):
        * bindings/v8/custom/V8WebGLArrayBufferCustom.cpp:
        (WebCore::V8WebGLArrayBuffer::constructorCallback):
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp:
        (WebCore::V8WebGLByteArray::constructorCallback):
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp:
        (WebCore::V8WebGLFloatArray::constructorCallback):
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:
        (WebCore::V8WebGLIntArray::constructorCallback):
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp:
        (WebCore::V8WebGLShortArray::constructorCallback):
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp:
        (WebCore::V8WebGLUnsignedByteArray::constructorCallback):
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp:
        (WebCore::V8WebGLUnsignedIntArray::constructorCallback):
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp:
        (WebCore::V8WebGLUnsignedShortArray::constructorCallback):
        * bindings/v8/custom/V8WebKitCSSMatrixConstructor.cpp:
        (WebCore::V8WebKitCSSMatrix::constructorCallback):
        * bindings/v8/custom/V8WebKitPointConstructor.cpp:
        (WebCore::V8WebKitPoint::constructorCallback):
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        (WebCore::V8WebSocket::constructorCallback):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::V8Worker::constructorCallback):
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::V8XMLHttpRequest::constructorCallback):
        * bindings/v8/custom/V8XMLSerializerConstructor.cpp:
        * bindings/v8/custom/V8XPathEvaluatorConstructor.cpp: Deleted the file. Implementation now being generated.
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp: Deleted the file. Implementation now being generated.
        (WebCore::V8XSLTProcessor::constructorCallback): Deleted the file. Implementation now being generated.
        * css/WebKitCSSMatrix.idl: Added CustomConstructor attribute.
        * dom/MessageChannel.idl: Added CustomConstructor attribute.
        * html/canvas/WebGLArrayBuffer.idl: Added CustomConstructor attribute.
        * html/canvas/WebGLByteArray.idl: Added CustomConstructor attribute.
        * html/canvas/WebGLFloatArray.idl: Added CustomConstructor attribute.
        * html/canvas/WebGLIntArray.idl: Added CustomConstructor attribute.
        * html/canvas/WebGLShortArray.idl: Added CustomConstructor attribute.
        * html/canvas/WebGLUnsignedByteArray.idl: Added CustomConstructor attribute.
        * html/canvas/WebGLUnsignedIntArray.idl: Added CustomConstructor attribute.

2010-01-28  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Add stub for AXObjectCache::contentChanged when HAVE(ACCESSIBILITY) is not defined
        https://bugs.webkit.org/show_bug.cgi?id=34271

        No new tests, build fix only.

        * accessibility/AXObjectCache.cpp: Modified. Added HAVE(ACCESSIBILITY) guards around contentChanged
        * accessibility/AXObjectCache.h: Modified.
        (WebCore::AXObjectCache::contentChanged): Added stub

2010-01-28  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Use long long rather than int64 in V8Binding.h
        https://bugs.webkit.org/show_bug.cgi?id=34270

        No new tests, build fix only.

        * bindings/v8/V8Binding.h: Modified.
        (WebCore::toInt64): Returns long long

2010-01-28  Avi Drissman  <avi@chromium.org>

        Reviewed by David Levin.

        Unused variable in ThemeMac (followup to change 49103).
        https://bugs.webkit.org/show_bug.cgi?id=34274

        Covered by existing tests.

        * platform/mac/ThemeMac.mm:
        (WebCore::setupButtonCell):

2010-01-28  Enrica Casucci  <enrica@apple.com>

        Reviewed by Maciej Stachowiak.

        Huge plain text pastes are slow
        <rdar://problem/5195056>
        https://bugs.webkit.org/show_bug.cgi?id=34237

        No new tests. It is a performance improvement.

        The performance of the plain text paste is now linear.
        We treat as a special case, a fragment that has been
        created from plain text. Finding VisiblePositions and
        applying style is greatly simplified, given the nature of
        the fragment.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/markup.cpp:
        (WebCore::isPlainTextMarkup):
        * editing/markup.h:

2010-01-28  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Adam Barth.

        Initialize DOM Storage's quota's current length parameter when we clone it.
        https://bugs.webkit.org/show_bug.cgi?id=34294

        * storage/StorageMap.cpp:
        (WebCore::StorageMap::copy):

2010-01-28  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix after r53411 on WinCairo.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::frameCount):

2010-01-28  Nayan Kumar K  <nayankk@gmail.com>

        Reviewed by Laszlo Gombos.

        Fix for compilation error in WML enabled build introduced because of the changeset 53514.

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

        * wml/WMLDocument.cpp:
        (WebCore::WMLDocument::WMLDocument):

2010-01-28  Alex Milowski  <alex@milowski.com>

        Reviewed by Eric Seidel.

        Update to CSS to remove unnecessary line-height settings

        * css/mathml.css:

2010-01-28  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Add missing includes for HashMap/HashSet
        https://bugs.webkit.org/show_bug.cgi?id=34276

        No new tests, build fix only.

        * platform/KURL.cpp: Modified. Include HashMap.h
        * platform/network/CredentialStorage.cpp: Modified. Include HashMap.h and HashSet.h
        * platform/network/ProtectionSpaceHash.h: Modified. Include HashTraits.h

2010-01-28  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha.

        Pass cookies to the GStreamer HTTP source
        https://bugs.webkit.org/show_bug.cgi?id=34003

        Test: http/tests/media/video-cookie.html

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateSourceChangedCallback):
        When using an appropiate GStreamer HTTP source element, pass
        the cookies for the media URI to it. This fixes playback of
        the YouTube HTML5 videos.

2010-01-28  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix after r54022.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObjectImp::createStructure):
        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapRuntimeObjectImp::createStructure):
        * bridge/qt/qt_runtime.h:
        (JSC::Bindings::QtRuntimeMethod::createStructure):

2010-01-28  Adam Roben  <aroben@apple.com>

        Fix an assertion beneath SerializedScriptValue::deserialize on 32-bit
        builds (e.g., on Windows)

        Passing a JSValue to toRef on 32-bit builds can perform an allocation,
        so we need to make sure we hold a JSLock when that occurs.

        Reviewed by Oliver Hunt.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValueData::serialize):
        (WebCore::SerializedScriptValueData::deserialize):
        Moved JSLocks from here...

        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::deserialize):
        ...to this higher level, from which toRef can be called.

2010-01-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        DOM Objects shouldn't all require custom mark functions
        https://bugs.webkit.org/show_bug.cgi?id=34291

        Make DOMObjectWithGlobalPointer use an anonymous slot to store the global object
        reference.

        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWithGlobalPointer::globalObject):
        (WebCore::DOMObjectWithGlobalPointer::scriptExecutionContext):
        (WebCore::DOMObjectWithGlobalPointer::DOMObjectWithGlobalPointer):

2010-01-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Simplify anonymous slot implementation
        https://bugs.webkit.org/show_bug.cgi?id=34282

        Update the WebCore JS DOM bindings to correctly pass and
        propagate the anonymous slot count information.

        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWithGlobalPointer::createStructure):
        (WebCore::DOMConstructorObject::createStructure):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::createStructure):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/objc/objc_runtime.h:
        (JSC::Bindings::ObjcFallbackObjectImp::createStructure):
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::createStructure):
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::createStructure):
        * bridge/runtime_object.h:
        (JSC::RuntimeObjectImp::createStructure):

2010-01-27  Evan Martin  <evan@chromium.org>

        Reviewed by David Levin.

        [chromium] hebrew vowel marks incorrectly positioned
        https://bugs.webkit.org/show_bug.cgi?id=34234

        Fix glyph metrics computation such that the glyph offsets
        are correct, so we can now make use of them.

        Test: fast/text/international/hebrew-vowels.html

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::createGlyphArrays): initialize per-glyph
        offset table.
        (WebCore::TextRunWalker::setGlyphXPositions): use per-glyph
        offsets.
        * platform/graphics/chromium/HarfbuzzSkia.cpp:
        (WebCore::getGlyphMetrics): fix metrics computation such that
        per-glyph offsets are computed correctly.

2010-01-28  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed build fix.

        [Qt] Build fix if websockets support is turned off after r53947.

        * WebCore.pro:

2010-01-28  Dimitri Glazkov  <dglazkov@chromium.org>

        No review, rolling out r54012.
        http://trac.webkit.org/changeset/54012
        https://bugs.webkit.org/show_bug.cgi?id=34266

        Introduced 33 crashes in V8 traversal/ tests.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::mainWorldScriptState):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptState.cpp:
        * bindings/js/ScriptState.h:
        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::ScriptCallStack):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::mainWorldScriptState):
        (WebCore::ScriptController::currentScriptState):
        (WebCore::ScriptController::clearWindowShell):
        * bindings/v8/ScriptController.h:
        * bindings/v8/ScriptScope.cpp:
        (WebCore::ScriptScope::ScriptScope):
        (WebCore::ScriptScope::success):
        * bindings/v8/ScriptScope.h:
        * bindings/v8/ScriptState.cpp:
        (WebCore::ScriptState::ScriptState):
        (WebCore::scriptStateFromPage):
        * bindings/v8/ScriptState.h:
        (WebCore::ScriptState::ScriptState):
        (WebCore::ScriptState::frame):
        * bindings/v8/V8HiddenPropertyName.h:
        * bindings/v8/V8IsolatedContext.cpp:
        (WebCore::V8IsolatedContext::scriptState):
        * bindings/v8/V8IsolatedContext.h:
        * bindings/v8/V8Utilities.cpp:
        (WebCore::getScriptExecutionContext):
        (WebCore::reportException):
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        (WebCore::V8NodeIterator::nextNodeCallback):
        (WebCore::V8NodeIterator::previousNodeCallback):
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        (WebCore::V8TreeWalker::parentNodeCallback):
        (WebCore::V8TreeWalker::firstChildCallback):
        (WebCore::V8TreeWalker::lastChildCallback):
        (WebCore::V8TreeWalker::nextNodeCallback):
        (WebCore::V8TreeWalker::previousNodeCallback):
        (WebCore::V8TreeWalker::nextSiblingCallback):
        (WebCore::V8TreeWalker::previousSiblingCallback):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::injectedScriptForNodeId):

2010-01-28  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Fix missing forward-declarations and includes in V8 bindings
        https://bugs.webkit.org/show_bug.cgi?id=34272

        No new tests, build fix only.

        * bindings/v8/ScriptController.h: Modified. Forward-declare NPObject
        * bindings/v8/V8DOMWindowShell.cpp: Modified. Include CString.h and PlatformBridge.h
        * bindings/v8/V8DOMWrapper.h: Modified. Forward-declare V8Proxy

2010-01-28  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Adam Barth.

        Remove ScriptState::frame which is only used for reporting exceptions
        in some cases in a way that diverges from the regular exception reporting in
        v8 bindings.
        
        Cache ScriptState directly on v8::Context instead of providing
        implementations specific for isolated worlds and ScriptController.

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

        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptState.cpp:
        (WebCore::mainWorldScriptState):
        * bindings/js/ScriptState.h:
        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::ScriptCallStack):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::clearWindowShell):
        * bindings/v8/ScriptController.h:
        * bindings/v8/ScriptScope.cpp:
        (WebCore::ScriptScope::ScriptScope):
        (WebCore::ScriptScope::success):
        * bindings/v8/ScriptScope.h:
        * bindings/v8/ScriptState.cpp:
        (WebCore::ScriptState::ScriptState):
        (WebCore::ScriptState::forContext):
        (WebCore::ScriptState::current):
        (WebCore::ScriptState::empty):
        (WebCore::ScriptState::weakReferenceCallback):
        (WebCore::mainWorldScriptState):
        (WebCore::scriptStateFromPage):
        * bindings/v8/ScriptState.h:
        * bindings/v8/V8HiddenPropertyName.h:
        * bindings/v8/V8IsolatedContext.cpp:
        * bindings/v8/V8IsolatedContext.h:
        * bindings/v8/V8Utilities.cpp:
        (WebCore::getScriptExecutionContext):
        (WebCore::reportException):
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        (WebCore::V8NodeIterator::nextNodeCallback):
        (WebCore::V8NodeIterator::previousNodeCallback):
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        (WebCore::V8TreeWalker::parentNodeCallback):
        (WebCore::V8TreeWalker::firstChildCallback):
        (WebCore::V8TreeWalker::lastChildCallback):
        (WebCore::V8TreeWalker::nextNodeCallback):
        (WebCore::V8TreeWalker::previousNodeCallback):
        (WebCore::V8TreeWalker::nextSiblingCallback):
        (WebCore::V8TreeWalker::previousSiblingCallback):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::injectedScriptForNodeId):

2010-01-28  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Remove XSSAuditor false positive for Google Translate
        https://bugs.webkit.org/show_bug.cgi?id=34242

        Google translate takes a base URL as a parameter, causing a false
        positive in the XSS filter.  This patch removes the false positive by
        allowing direct injections into the href property of the base tag.

        Test: http/tests/security/xssAuditor/base-href-direct.html

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canSetBaseElementURL):

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

        Reviewed by Dirk Schulze.

        Save additional memory in SVG*Element classes, by introducing SVGElementRareData
        https://bugs.webkit.org/show_bug.cgi?id=34268

        Introduce SVGElementRareData, to remove the need to store any members in SVGElement/SVGStyledElement.
        This saves some additional MB for the svg-node-count-vs-scroll.xhtml testcase.

        SVGElementRareData works just like NodeRareData. Unlike ElementRareData, we're not inheriting from
        NodeRareData in SVG, as we don't need all the rare data stored there, unlike Element.

        * GNUmakefile.am: Add SVGElementRareData.h to build.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/Node.cpp: Use Nodes bitfield to keep track wheter a SVGElement has a SVGElementRareData object associated.
        (WebCore::Node::Node):
        * dom/Node.h: Add m_hasRareSVGData flag, merged with the existing bitfield, 10 bits remaining now.
        (WebCore::Node::hasRareSVGData):
        * svg/SVGAnimateMotionElement.cpp: SVGElement::instancesForElement() now returns a const-reference to the HashMap instead of copying.
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget):
        * svg/SVGAnimateTransformElement.cpp: Ditto.
        (WebCore::SVGAnimateTransformElement::applyResultsToTarget):
        * svg/SVGAnimationElement.cpp: Ditto.
        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue):
        * svg/SVGElement.cpp: Move the element instances HashSet and two cursor-related pointers into SVGElementRareData.
        (WebCore::SVGElement::SVGElement):
        (WebCore::SVGElement::~SVGElement):
        (WebCore::SVGElement::rareSVGData): Modelled just like Node::rareData().
        (WebCore::SVGElement::ensureRareSVGData): Dito.
        (WebCore::SVGElement::accessDocumentSVGExtensions):
        (WebCore::SVGElement::mapInstanceToElement): Route call through SVGElementRareData.
        (WebCore::SVGElement::removeInstanceMapping): Ditto.
        (WebCore::SVGElement::instancesForElement): Ditto.
        (WebCore::SVGElement::setCursorElement): Ditto.
        (WebCore::SVGElement::setCursorImageValue): Ditto.
        * svg/SVGElement.h:
        * svg/SVGElementInstance.cpp: Ditto.
        (WebCore::SVGElementInstance::invalidateAllInstancesOfElement):
        * svg/SVGElementRareData.h: Added. Based on NodeRareData - works exactly the same.
        (WebCore::SVGElementRareData::SVGElementRareData):
        (WebCore::SVGElementRareData::rareDataMap):
        (WebCore::SVGElementRareData::rareDataFromMap):
        (WebCore::SVGElementRareData::elementInstances):
        (WebCore::SVGElementRareData::instanceUpdatesBlocked):
        (WebCore::SVGElementRareData::setInstanceUpdatesBlocked):
        (WebCore::SVGElementRareData::cursorElement):
        (WebCore::SVGElementRareData::setCursorElement):
        (WebCore::SVGElementRareData::cursorImageValue):
        (WebCore::SVGElementRareData::setCursorImageValue):
        * svg/SVGStyledElement.cpp: Move m_instancesUpdatesBlocked into SVGElementRareData.
        (WebCore::SVGStyledElement::SVGStyledElement):
        (WebCore::SVGStyledElement::instanceUpdatesBlocked):
        (WebCore::SVGStyledElement::setInstanceUpdatesBlocked):
        * svg/SVGStyledElement.h:
        * svg/SVGUseElement.cpp: Adapt to element instances changes, now passed as const-reference.
        (WebCore::dumpInstanceTree):

2010-01-28  Aaron Boodman  <aa@chromium.org>

        Reviewed by Darin Adler.

        Expand the NotificationPresenter::checkPermission() interface to send the full
        URL of the requesting context, as well as a pointer to the document if that
        context was a document.

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

        * notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::NotificationCenter):
        (WebCore::NotificationCenter::checkPermission):
        Pass the full URL and document from the requesting context when calling
        NotificationPresenter::checkPermission().
        
        * notifications/NotificationPresenter.h:
        (WebCore::NotificationPresenter::):
        Expand interface.

2010-01-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Video can overlap position:fixed element when scrolling
        https://bugs.webkit.org/show_bug.cgi?id=32180
        
        When the scroll position changes, and we're using overlap to decide what gets composited,
        then we need to re-evaluate what gets compositing when scrolling in case fixed postion elements
        overlap composited elements (e.g. video).

        Test: compositing/geometry/video-fixed-scrolling.html

        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayers):
        (WebCore::FrameView::scrollPositionChanged): Annotate the calls to updateCompositingLayers()
        with the type of change that occurred.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateCompositingAndLayerListsIfNeeded): Ditto.
        
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers): For scroll changes, check
        for hierarchy update if m_compositingConsultsOverlap is true, and do
        a geometry update. For other changes, always check for hierarchy updates.

2010-01-27  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        Fix for user stylesheet bugs where they get parsed using the wrong compatibility mode.  This was a regression
        caused from Safari 3 -> 4 by the Acid3 fixes to create a real DOCTYPE in the DOM.

        This patch makes style selector creation lazy, so that the selector isn't built unless someone asks for it.

        In order to avoid creating the style selector before the compatibility mode has been determined, document
        style is now created without having a dependence on an instantiated style selector.  The creation of the style
        is now done as a static method on CSSStyleSelector called styleForDocument, and a couple of font-related
        functions have been made static as well so that they can be used by this method.

        m_styleSelector on Document is now an OwnPtr.

        Added userscripts/mixed-case-stylesheet.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForDocument):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::checkForGenericFamilyChange):
        (WebCore::CSSStyleSelector::setFontSize):
        (WebCore::CSSStyleSelector::getComputedSizeFromSpecifiedSize):
        (WebCore::CSSStyleSelector::fontSizeForKeyword):
        * css/CSSStyleSelector.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::recalcStyle):
        (WebCore::Document::createStyleSelector):
        (WebCore::Document::attach):
        (WebCore::Document::setVisuallyOrdered):
        (WebCore::Document::recalcStyleSelector):
        * dom/Document.h:
        (WebCore::Document::styleSelector):
        (WebCore::Document::visuallyOrdered):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::determineParseMode):
        * loader/PlaceholderDocument.cpp:
        (WebCore::PlaceholderDocument::attach):

2010-01-28  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Rename ISODateTime.{cpp,h} to DateComponents.{cpp,h}
        https://bugs.webkit.org/show_bug.cgi?id=34245

        No functional changes.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/DateComponents.cpp: Copied from WebCore/html/ISODateTime.cpp.
        (WebCore::DateComponents::maxWeekNumberInYear):
        (WebCore::DateComponents::parseYear):
        (WebCore::DateComponents::addDay):
        (WebCore::DateComponents::addMinute):
        (WebCore::DateComponents::parseTimeZone):
        (WebCore::DateComponents::parseMonth):
        (WebCore::DateComponents::parseDate):
        (WebCore::DateComponents::parseWeek):
        (WebCore::DateComponents::parseTime):
        (WebCore::DateComponents::parseDateTimeLocal):
        (WebCore::DateComponents::parseDateTime):
        (WebCore::DateComponents::setMillisecondsSinceMidnightInternal):
        (WebCore::DateComponents::setMillisecondsSinceEpochForDateInternal):
        (WebCore::DateComponents::setMillisecondsSinceEpochForDate):
        (WebCore::DateComponents::setMillisecondsSinceEpochForDateTime):
        (WebCore::DateComponents::setMillisecondsSinceEpochForDateTimeLocal):
        (WebCore::DateComponents::setMillisecondsSinceEpochForMonth):
        (WebCore::DateComponents::setMillisecondsSinceMidnight):
        (WebCore::DateComponents::setMillisecondsSinceEpochForWeek):
        (WebCore::DateComponents::millisecondsSinceEpochForTime):
        (WebCore::DateComponents::millisecondsSinceEpoch):
        (WebCore::DateComponents::toStringForTime):
        (WebCore::DateComponents::toString):
        * html/DateComponents.h: Copied from WebCore/html/ISODateTime.h.
        (WebCore::DateComponents::DateComponents):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseToDouble):
        (WebCore::HTMLInputElement::valueAsDate):
        (WebCore::HTMLInputElement::setValueAsDate):
        (WebCore::HTMLInputElement::setValueAsNumber):
        (WebCore::HTMLInputElement::formStringToDateComponents):
        * html/HTMLInputElement.h:
        * html/ISODateTime.cpp: Removed.
        * html/ISODateTime.h: Removed.
        * html/ValidityState.cpp:
        (WebCore::ValidityState::typeMismatch):

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

        Reviewed by Pavel Feldman.

        Use platform-specific monospace fonts in the Web Inspector

        Move the OS version detection code into the frontend,
        add custom CSS monospace styles for known platforms.
        https://bugs.webkit.org/show_bug.cgi?id=34040

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::platform):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane.prototype._appendBreakpointElement):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView):
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.releaseWrapperObjectGroup):
        (.WebInspector.InspectorBackendStub.prototype.setInjectedScriptSource):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._createConditionElement):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.URLRegExp.i.get platform):
        (WebInspector._detectPlatform):

2010-01-28  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Simplify views logic in Profiler panel, and fix the problem described in the issue.
        Remove image from Welcome view.
        Preserve border on status bar-like buttons in Welcome view on window deactivation.

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

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.show):
        (WebInspector.ProfilesPanel.prototype.reset):
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        (WebInspector.ProfilesPanel.prototype.showView):
        (WebInspector.ProfilesPanel.prototype._updateInterface):
        * inspector/front-end/WelcomeView.js:
        (WebInspector.WelcomeView):
        * inspector/front-end/inspector.css:

2010-01-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Eric Seidel.

        [Qt] Speed up KURL to QUrl conversion
        https://bugs.webkit.org/show_bug.cgi?id=33873

        The WebCore::String::utf8 method will use the generic WebCore::TextCodec
        and then call the encode method on it. In QtWebKit this class is implemented
        around the QTextCodec class. Instead of going the generic codec way we treat
        the WebCore::String as a QString (no copying) and then use the built-in
        QString::toUtf8 to do the conversion.

        * platform/qt/KURLQt.cpp:
        (WebCore::KURL::operator QUrl):

2010-01-28  Ben Murdoch  <benm@google.com>

        Reviewed by Simon Hausmann.

        [Android] [Qt] Touch event page co-ordinates are incorrect when touch is received in an iframe.
        https://bugs.webkit.org/show_bug.cgi?id=34162

        The pageX/pageY co-ordinates of a touch event should be relative to the containing frame, not the main frame. This change implements that and also updates the existing touch-inside-iframe test to also examine the page co-ordinates.

        * dom/Touch.cpp:
        (WebCore::Touch::Touch): Remove dead code.
        * dom/Touch.h: Remove dead code.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent): Rename framePoint to pagePoint, as it seems a clearer name. Also adjust the pagePoint to be relative to the touch target element's containing frame rather than the main frame.
        * platform/PlatformTouchEvent.h: Rename Android specific constructor parameter to better reflect it's contents.
        * platform/PlatformTouchPoint.h: Ditto.
        * platform/android/PlatformTouchEventAndroid.cpp: Ditto.
        * platform/android/PlatformTouchPointAndroid.cpp: Ditto.

2010-01-28  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Simplify isActivation method.

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

        Test: WebCore/manual-tests/inspector/debugger-scopes-inspection.html

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::isActivation):

2010-01-27  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        rangeOverflow/rangeUnderflow support for type=date
        https://bugs.webkit.org/show_bug.cgi?id=34209

        Add DATE type support to rangeUnderflow(), rangeOverflow(),
        minimum(), and maximum() of HTMLInputElement.
        In order to unify parsing code for value, min, and max strings,
        introduce parseToDouble() function and it is called by
        valueAsDate() and valueAsNumber() too.

        Tests: fast/forms/ValidityState-rangeOverflow-date.html
               fast/forms/ValidityState-rangeUnderflow-date.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::rangeUnderflow): Support DATE type, and use parseToDouble().
        (WebCore::HTMLInputElement::rangeOverflow): ditto.
        (WebCore::HTMLInputElement::minimum): ditto.
        (WebCore::HTMLInputElement::maximum): ditto.
        (WebCore::HTMLInputElement::doubleValueFor): Added.
        (WebCore::HTMLInputElement::valueAsDate): Use parseToDouble().
        (WebCore::HTMLInputElement::valueAsNumber): Use parseToDouble().
        * html/HTMLInputElement.h: Declare parseToDouble().

2010-01-27  Darin Fisher  <darin@chromium.org>

        Fix chromium build bustage (take 2).

        * bindings/scripts/CodeGeneratorV8.pm: Really treat V8CustomGetter like CustomGetter in all cases.

2010-01-27  Darin Fisher  <darin@chromium.org>

        Fix chromium build bustage.

        * bindings/scripts/CodeGeneratorV8.pm: Treat V8CustomGetter like CustomGetter in all cases.

2010-01-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        MessageEvent.data should deserialize in the context of the MessageEvent's global object
        https://bugs.webkit.org/show_bug.cgi?id=34227

        Make ScriptValue deserialisation support the provision of a specific global
        object to use when creating new objects.  This then allows us to make
        MessageEvent.data and PopStateEvent.state deserialize in the correct
        context.

        Test: fast/dom/Window/window-postmessage-clone-frames.html

        * bindings/js/JSPopStateEventCustom.cpp:
          Remove custom implementation of state getter
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::DeserializingTreeWalker::DeserializingTreeWalker):
        (WebCore::DeserializingTreeWalker::createOutputArray):
        (WebCore::DeserializingTreeWalker::createOutputObject):
        (WebCore::DeserializingTreeWalker::convertIfTerminal):
        (WebCore::SerializedScriptValueData::deserialize):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/scripts/CodeGeneratorJS.pm:
          Update bindings generation to pass the correct global object, and to
          treat "any" as synonymous with SerializedValue.
        * dom/PopStateEvent.idl:

2010-01-27  Nicholas Young  <nicholas.young@nokia.com>

        Reviewed by Eric Carlson.

        Make media controls fade in/out transition duration configurable on a theme level.
        https://bugs.webkit.org/show_bug.cgi?id=34196

        No new tests needed (I hope).

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::RenderMedia): Removed constant from contructor - the initial value is meaningless.
        (WebCore::RenderMedia::updateControlVisibility): Get fade in/out duration from theme.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::mediaControlsFadeInDuration): New virtual method.
        (WebCore::RenderTheme::mediaControlsFadeOutDuration): New virtual method.

2010-01-27  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Dimitri Glazkov.

        Tests that when a page removes an iframe that sleeps in its unload handler and
        terminates its JS execution, the outer page's JS continues running.
        
        https://bugs.webkit.org/show_bug.cgi?id=34226

        Tests: fast/dom/Window/slow-unload-handler-only-frame-is-stopped.html
               fast/dom/Window/slow-unload-handler.html

        * bindings/v8/DateExtension.cpp:
        (WebCore::DateExtension::OnSleepDetected):

2010-01-27  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Add valueAsNumber support for type=datetime-local.
        https://bugs.webkit.org/show_bug.cgi?id=34200

        Implement necessary methods of ISODateTime, and call them from
        HTMLInputElement.

        Test: fast/forms/input-valueasnumber-datetimelocal.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::valueAsNumber):
        (WebCore::HTMLInputElement::setValueAsNumber):
        * html/ISODateTime.cpp:
        (WebCore::ISODateTime::setMillisecondsSinceEpochForDateTimeLocal):
          Implemented.  Just call setMillisecondsSinceEpochForDateTime().
        (WebCore::ISODateTime::millisecondsSinceEpochForTime):
          Accept to be called for m_type=DateTimeLocal.
        (WebCore::ISODateTime::toString): Add DateTimeLocal support.
        * html/ISODateTime.h: Declare new methods.

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

        Windows Debug_All build fix.

        * platform/graphics/win/WKCACFLayer.cpp:
        * platform/graphics/win/WKCACFLayerRenderer.cpp:

2010-01-27  Evan Martin  <evan@chromium.org>

        Reviewed by David Levin.

        [chromium] complex text draws newlines as bells
        https://bugs.webkit.org/show_bug.cgi?id=34186

        Revert r45496 -- once we've got a glyph array, it is too late to normalize
        because we could have had multiple codepoints combine into one glyph.  The
        Uniscribe code it mentions it's duplicating uses the log cluster map to fix
        this.

        Instead, we just normalize the input text if it contains any non-ascii-space
        whitespace.

        This fixes fast/text/international/hindi-whitespace, which currently has an
        incorrect baseline containing a square box glyph.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::getTextRun):
        (WebCore::TextRunWalker::getNormalizedTextRun):
        * platform/graphics/chromium/HarfbuzzSkia.cpp:
        (WebCore::stringToGlyphs):

2010-01-27  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=34150
        WebKit needs a mechanism to catch stale HashMap entries

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSRuleSet::getIDRules):
        (WebCore::CSSRuleSet::getClassRules):
        (WebCore::CSSRuleSet::getTagRules):
        (WebCore::CSSStyleSelector::keyframeStylesForAnimation):
        * dom/CheckedRadioButtons.cpp:
        (WebCore::CheckedRadioButtons::checkedButtonForGroup):
        (WebCore::CheckedRadioButtons::removeButton):
        * editing/markup.cpp:
        (WebCore::shouldAddNamespaceAttr):
        (WebCore::appendNamespace):
        (WebCore::appendStartMarkup):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::namedItems):
        (WebCore::HTMLCollection::nextNamedItem):
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::formCollectionInfo):
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::collectionInfo):
        * loader/loader.cpp:
        (WebCore::Loader::load):
        (WebCore::Loader::servePendingRequests):
        (WebCore::Loader::nonCacheRequestInFlight):
        (WebCore::Loader::nonCacheRequestComplete):
        (WebCore::Loader::cancelRequests):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::clearRenderer):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::animate):
        (WebCore::CompositeAnimation::getAnimatedStyle):
        (WebCore::CompositeAnimation::setAnimating):
        (WebCore::CompositeAnimation::timeToNextService):
        (WebCore::CompositeAnimation::getAnimationForProperty):
        (WebCore::CompositeAnimation::suspendAnimations):
        (WebCore::CompositeAnimation::resumeAnimations):
        (WebCore::CompositeAnimation::isAnimatingProperty):
        (WebCore::CompositeAnimation::pauseAnimationAtTime):
        (WebCore::CompositeAnimation::numberOfActiveAnimations):
        Added checkConsistency checks before lookups in HashMaps with AtomicStringImpl* keys.

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef): Clear m_elementsById map, because removeAllChildren()
        doesn't always update it correctly when called during docuemnt destruction.
        (WebCore::Document::getElementById): Added checkConsistency().
        (WebCore::Document::removeElementById): Ditto.
        (WebCore::Document::removeImageMap): Ditto.
        (WebCore::Document::getImageMap): Ditto.
        (WebCore::Document::nameCollectionInfo): Ditto.
        * dom/Document.h:
        (WebCore::Document::collectionInfo): Ditto.

        * html/CollectionCache.cpp:
        (WebCore::CollectionCache::checkConsistency):
        * html/CollectionCache.h:
        Added a checkConsistency() method that checks both HashMaps in the cache.

        * platform/TreeShared.h:
        (WebCore::TreeShared::~TreeShared): Assert that m_refCount is null. Since Nodes can be
        destroyed with operator delete (as done in ContainerNodeAlgorithms), this is important to check.
        (WebCore::TreeShared::deref): Assert that m_refCount isn't already negative.

2010-01-27  Brian Tarricone  <brian@kakai.com>

        Reviewed by Gustavo Noronha Silva.

        [gtk] Add support for windowless NPAPI plugins

        Much of this is a translation of how the Qt backend does this,
        modified for Gtk.

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

        No new tests; there is already a windowless test in the tree.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::handleEvent):
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::getRootWindow):
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::inputEventState):
        (WebCore::PluginView::initXEvent):
        (WebCore::setXButtonEventSpecificFields):
        (WebCore::setXMotionEventSpecificFields):
        (WebCore::setXCrossingEventSpecificFields):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::handleFocusInEvent):
        (WebCore::PluginView::handleFocusOutEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::getValueStatic):
        (WebCore::PluginView::invalidateRect):
        (WebCore::getPluginDisplay):
        (WebCore::plug_removed_cb):
        (WebCore::getVisualAndColormap):
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::platformDestroy):

2010-01-27  Anton Muhin  <antonm@chromium.org>

        Reviewed by David Levin.

        [v8] minor cosmetic fix in V8 bindings codegenerator
        https://bugs.webkit.org/show_bug.cgi?id=34224

        * bindings/scripts/CodeGeneratorV8.pm:

2010-01-27  Darin Fisher  <darin@chromium.org>

        Fix Chromium build bustage.

        * rendering/RenderBoxModelObject.cpp: Add wtf/CurrentTime.h include.

2010-01-26  Darin Fisher  <darin@chromium.org>

        Reviewed by Brady Eidson and David Levin.

        Chains of history items representing same-document navigation need to
        always remember that association

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

        Replace HistoryItem's Document pointer with a DocumentSequenceNumber.
        During session history traversal, if the current HistoryItem and the
        target HistoryItem have the same DocumentSequenceNumber, then it means
        that the current Document should remain.

        NOTE: To support Chromium's serialization of HistoryItems, I generate
        DocumentSequenceNumbers that are unique across application launches.
        DocumentSequenceNumbers are generated using a counter initialized with
        the time of day.

        Test: fast/loader/stateobjects/document-destroyed-navigate-back.html

        * dom/Document.cpp:
        (WebCore::Document::detach):
        * dom/Document.h:
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::pushStateItem):
        * history/BackForwardListChromium.cpp:
        (WebCore::BackForwardList::pushStateItem):
        * history/HistoryItem.cpp:
        (WebCore::generateDocumentSequenceNumber):
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::~HistoryItem):
        (WebCore::HistoryItem::setStateObject):
        * history/HistoryItem.h:
        (WebCore::HistoryItem::setDocumentSequenceNumber):
        (WebCore::HistoryItem::documentSequenceNumber):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::navigateWithinDocument):
        (WebCore::FrameLoader::loadItem):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateBackForwardListForFragmentScroll):
        (WebCore::HistoryController::pushState):
        (WebCore::HistoryController::replaceState):
        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::scheduleHistoryNavigation):
        * page/History.cpp:
        (WebCore::History::stateObjectAdded):
        * page/Page.cpp:
        (WebCore::Page::goToItem):

2010-01-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Simon Fraser.

        Animated scaling of background-image is too slow
        https://bugs.webkit.org/show_bug.cgi?id=33808

        Implement a version of the RenderImage animated scaling optimisation
        for background images.  Due to the possibility of arbitrary transforms
        being applied to containing elements we explicitly check the current
        CTM of the context for scaling or rotation.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/transforms/TransformationMatrix.h:
        (WebCore::TransformationMatrix::isIdentityOrTranslation):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelScaleData::RenderBoxModelScaleData):
        (WebCore::RenderBoxModelScaleData::~RenderBoxModelScaleData):
        (WebCore::RenderBoxModelScaleData::size):
        (WebCore::RenderBoxModelScaleData::time):
        (WebCore::RenderBoxModelScaleData::useLowQualityScale):
        (WebCore::RenderBoxModelScaleData::hiqhQualityRepaintTimer):
        (WebCore::RenderBoxModelScaleData::setSize):
        (WebCore::RenderBoxModelScaleData::setTime):
        (WebCore::RenderBoxModelScaleData::setUseLowQualityScale):
        (WebCore::RenderBoxModelScaleObserver::boxModelObjectDestroyed):
        (WebCore::RenderBoxModelScaleObserver::highQualityRepaintTimerFired):
        (WebCore::RenderBoxModelScaleObserver::shouldPaintBackgroundAtLowQuality):
        (WebCore::RenderBoxModelObject::highQualityRepaintTimerFired):
        (WebCore::RenderBoxModelObject::~RenderBoxModelObject):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:

2010-01-27  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Enable websockets support in QtWebKit
        https://bugs.webkit.org/show_bug.cgi?id=34180

        Connected between SocketStreamHandle and QTcpSocket/QSslSocket
        to enable support for websockets.
        Proxy authentication is not yet supported.
        SSL certificate errors are ignored while this is under development.

        * WebCore.pro:
        * platform/network/qt/SocketStreamHandle.h:
        * platform/network/qt/SocketStreamHandlePrivate.h: Added.
        * platform/network/qt/SocketStreamHandleQt.cpp:
        (WebCore::SocketStreamHandlePrivate::SocketStreamHandlePrivate):
        (WebCore::SocketStreamHandlePrivate::~SocketStreamHandlePrivate):
        (WebCore::SocketStreamHandlePrivate::socketConnected):
        (WebCore::SocketStreamHandlePrivate::socketReadyRead):
        (WebCore::SocketStreamHandlePrivate::send):
        (WebCore::SocketStreamHandlePrivate::close):
        (WebCore::SocketStreamHandlePrivate::socketSentdata):
        (WebCore::SocketStreamHandlePrivate::socketClosed):
        (WebCore::SocketStreamHandlePrivate::socketError):
        (WebCore::SocketStreamHandlePrivate::socketClosedCallback):
        (WebCore::SocketStreamHandlePrivate::socketErrorCallback):
        (WebCore::SocketStreamHandlePrivate::socketSslErrors):
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        (WebCore::SocketStreamHandle::~SocketStreamHandle):
        (WebCore::SocketStreamHandle::platformSend):
        (WebCore::SocketStreamHandle::platformClose):

2010-01-27  Mads Ager  <ager@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Support getting integer-named properties using indexing notation on document object
        https://bugs.webkit.org/show_bug.cgi?id=34211

        Add indexed property getter to HTMLDocument to support getting
        elements with integer names using indexing notation on document.

        Test: fast/dom/HTMLDocument/get-iframe-with-integer-name.html

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::indexedPropertyGetter):

2010-01-27  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Oliver Hunt.

        Instead of relying on Object.prototype.toString result use JSObject::isActivationObject
        to check if a scope node is a JSActivation. Object.prototype.toString for JSActivation
        will call JSActivation::toThisObject whose result depends on the current call stack.

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

        Test: WebCore/manual-tests/inspector/debugger-scopes-inspection.html

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::isActivation):
        * inspector/InjectedScriptHost.idl:
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor.):
        * manual-tests/inspector/debugger-scopes-inspection.html: Added.

2010-01-27 Anton Muhin <antonm@google.com>
        Review by Adam Barth.

        Implement Node map in intrusive way for better speed.
        https://bugs.webkit.org/show_bug.cgi?id=33957

        * bindings/v8/DOMData.h:
        (WebCore::DOMData::removeObjectsFromWrapperMap):
        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::get):
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::set):
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::removeIfPresent):
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::contains):
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::visit):
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::clear):
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::allocateTableEntry):
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::freeTableEntry):
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::IntrusiveDOMWrapperMap):
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::clearEntry):
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::clearEntries):
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::visitEntries):
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::TableChunk::TableChunk):
        (WebCore::DOMDataStore::domNodeMap):
        * bindings/v8/StaticDOMDataStore.cpp:
        (WebCore::StaticDOMDataStore::StaticDOMDataStore):
        * bindings/v8/StaticDOMDataStore.h:
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::getDOMNodeMap):
        * bindings/v8/V8DOMMap.h:
        (WebCore::AbstractWeakReferenceMap::AbstractWeakReferenceMap):
        (WebCore::AbstractWeakReferenceMap::weakReferenceCallback):
        (WebCore::WeakReferenceMap::WeakReferenceMap):
        (WebCore::WeakReferenceMap::set):
        (WebCore::WeakReferenceMap::visit):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertDocumentToV8Object):
        (WebCore::getWrapper):
        (WebCore::V8DOMWrapper::convertNodeToV8Object):
        (WebCore::V8DOMWrapper::convertNewNodeToV8Object):
        * bindings/v8/V8DOMWrapper.h:

2010-01-27  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Eric Seidel.

        Add key event mappings for numpad keys for Gtk and Chromium/Gtk.
        http://bugs.webkit.org/show_bug.cgi?id=28247

        Test: fast/events/keydown-numpad-keys.html

        * platform/chromium/KeyCodeConversionGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):
        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2010-01-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: migrate from SourceFrame to SourceFrame2.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorBackendStub.js:
        * inspector/front-end/InspectorFrontendHostStub.js:
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._innerSelectContentTab):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.getResourceContent):
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView):
        (WebInspector.ScriptView.prototype.setupSourceFrameIfNeeded):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._sidebarResizeDrag):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.set executionLine):
        (WebInspector.SourceFrame.prototype.revealLine):
        (WebInspector.SourceFrame.prototype.addBreakpoint):
        (WebInspector.SourceFrame.prototype.removeBreakpoint):
        (WebInspector.SourceFrame.prototype.addMessage):
        (WebInspector.SourceFrame.prototype.clearMessages):
        (WebInspector.SourceFrame.prototype.sizeToFitContentHeight):
        (WebInspector.SourceFrame.prototype.setContent):
        (WebInspector.SourceFrame.prototype.findSearchMatches):
        (WebInspector.SourceFrame.prototype._collectRegexMatches):
        (WebInspector.SourceFrame.prototype.setSelection):
        (WebInspector.SourceFrame.prototype._incrementMessageRepeatCount):
        (WebInspector.SourceFrame.prototype._addExistingMessagesToSource):
        (WebInspector.SourceFrame.prototype._addMessageToSource):
        (WebInspector.SourceFrame.prototype._addExistingBreakpointsToSource):
        (WebInspector.SourceFrame.prototype._addBreakpointToSource):
        (WebInspector.SourceFrame.prototype._removeBreakpointFromSource):
        (WebInspector.SourceFrame.prototype._contextMenu.addConditionalBreakpoint):
        (WebInspector.SourceFrame.prototype._contextMenu):
        (WebInspector.SourceFrame.prototype._toggleBreakpoint):
        (WebInspector.SourceFrame.prototype._editBreakpointCondition.committed):
        (WebInspector.SourceFrame.prototype._editBreakpointCondition.dismissed):
        (WebInspector.SourceFrame.prototype._editBreakpointCondition):
        (WebInspector.SourceFrame.prototype._showBreakpointConditionPopup):
        (WebInspector.SourceFrame.prototype._createConditionElement):
        (WebInspector.SourceFrame.prototype._keyDown):
        (WebInspector.SourceFrame.prototype._evalSelectionInCallFrame):
        (WebInspector.SourceFrame.prototype._breakpointChanged):
        (WebInspector.SourceFrame.prototype.resize):
        (WebInspector.BreakpointLineNumberDecorator):
        (WebInspector.BreakpointLineNumberDecorator.prototype.decorate):
        (WebInspector.BreakpointLineNumberDecorator.prototype._paintBreakpoint):
        (WebInspector.BreakpointLineNumberDecorator.prototype._paintProgramCounter):
        (WebInspector.BreakpointLineNumberDecorator.prototype.mouseDown):
        (WebInspector.BreakpointLineNumberDecorator.prototype.contextMenu):
        (WebInspector.ExecutionLineDecorator):
        (WebInspector.ExecutionLineDecorator.prototype.decorate):
        * inspector/front-end/SourceFrame2.js: Removed.
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView):
        (WebInspector.SourceView.prototype.show):
        (WebInspector.SourceView.prototype.resize):
        (WebInspector.SourceView.prototype.setupSourceFrameIfNeeded):
        (WebInspector.SourceView.prototype._contentLoaded):
        (WebInspector.SourceView.prototype.performSearch.findSearchMatches):
        (WebInspector.SourceView.prototype.performSearch):
        (WebInspector.SourceView.prototype._jumpToSearchResult):
        (WebInspector.SourceView.prototype._sourceFrameSetupFinished):
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor.prototype._mouseDown):
        (WebInspector.TextEditor.prototype._copy.delayCopy):
        (WebInspector.TextEditor.prototype._copy):
        (WebInspector.TextEditor.prototype._cut):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2010-01-27  Dominik Röttsches  <dominik.roettsches@access-company.com>

        Reviewed by Xan Lopez.

        [Gtk] For removing ICU, implement IDN support by means of libidn
        https://bugs.webkit.org/show_bug.cgi?id=31470

        In order to avoid a new dependency, 
        IDN support now based on GLib for the GLib unicode backend.

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

2010-01-27  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] For package builds use the .def files on Symbian

        * WebCore.pro:

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

        Reviewed by Timothy Hatcher.

        Avoid watch expressions duplication
        https://bugs.webkit.org/show_bug.cgi?id=33996

        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSidebarPane.prototype._settingsLoaded):

2010-01-27  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Dimitri Glazkov.

        Adds EventSource bindings for V8
        https://bugs.webkit.org/show_bug.cgi?id=33695

        No new tests (existing layout tests for EventSource should pass).

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8EventSourceConstructor.cpp: Added.
        * bindings/v8/custom/V8EventSourceCustom.cpp: Added.

2010-01-27  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Meta-methods can't be introspected using ES5 API
        https://bugs.webkit.org/show_bug.cgi?id=34087

        Add getOwnPropertyDescriptor() and getOwnPropertyNames() reimplementations.

        Tests are in WebKit/qt/tests/qwebframe

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::getOwnPropertyDescriptor):
        (JSC::Bindings::QtRuntimeMetaMethod::getOwnPropertyNames):
        (JSC::Bindings::QtRuntimeConnectionMethod::getOwnPropertyDescriptor):
        (JSC::Bindings::QtRuntimeConnectionMethod::getOwnPropertyNames):
        * bridge/qt/qt_runtime.h:

2010-01-27  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        Fix a crash when trying to indent a block element that was contained
        in a list.  This was happening because enclosingBlock() in
        htmlediting.cpp can return the current the same Node when a block
        element (like an <hr> or a <table>) is passed in.  This causes
        the indent command to think that it is not in a list item.

        Work around this by checking to see if enclosingBlock returned the
        same Node.

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

        Test: editing/execCommand/indent-block-in-list.html

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem):

2010-01-27  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Add the "d" suffix to QtWebKit's dll on Windows.

        * WebCore.pro:

2010-01-27  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Eric Seidel.

        Fix a bug where dispatchDocumentElementAvailable was fired for fragment parsing on XML documents.
        https://bugs.webkit.org/show_bug.cgi?id=33920

        Tests: userscripts/script-not-run-for-fragments.html
               userscripts/script-run-at-start.html

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::startElementNs):

2010-01-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Improve SourceHTMLTokenizer so that it treats script tag well.

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

        * inspector/front-end/SourceHTMLTokenizer.js:
        (WebInspector.SourceHTMLTokenizer):
        (WebInspector.SourceHTMLTokenizer.prototype._isAttribute):
        (WebInspector.SourceHTMLTokenizer.prototype._isAttributeValue):
        (WebInspector.SourceHTMLTokenizer.prototype._setAttributeValue):
        (WebInspector.SourceHTMLTokenizer.prototype._setAttribute):
        (WebInspector.SourceHTMLTokenizer.prototype._stringToken):
        (WebInspector.SourceHTMLTokenizer.prototype.nextToken):
        * inspector/front-end/SourceHTMLTokenizer.re2js:

2010-01-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: nuke quarantine wrappers.

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

        * Android.jscbindings.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSInspectedObjectWrapper.cpp: Removed.
        * bindings/js/JSInspectedObjectWrapper.h: Removed.
        * bindings/js/JSInspectorCallbackWrapper.cpp: Removed.
        * bindings/js/JSInspectorCallbackWrapper.h: Removed.
        * bindings/js/JSQuarantinedObjectWrapper.cpp: Removed.
        * bindings/js/JSQuarantinedObjectWrapper.h: Removed.

2010-01-27  Alexey Proskuryakov  <ap@apple.com>

        Revert r53899 (HashMap<AtomicStringImpl*, Value> key checks) and subsequent build fixes,
        because they make SVG tests crash in release builds.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSRuleSet::getIDRules):
        (WebCore::CSSRuleSet::getClassRules):
        (WebCore::CSSRuleSet::getTagRules):
        (WebCore::CSSStyleSelector::keyframeStylesForAnimation):
        * dom/CheckedRadioButtons.cpp:
        (WebCore::CheckedRadioButtons::checkedButtonForGroup):
        (WebCore::CheckedRadioButtons::removeButton):
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::removeAllChildrenInContainer):
        * dom/Document.cpp:
        (WebCore::Document::getElementById):
        (WebCore::Document::removeElementById):
        (WebCore::Document::removeImageMap):
        (WebCore::Document::getImageMap):
        (WebCore::Document::nameCollectionInfo):
        * dom/Document.h:
        (WebCore::Document::collectionInfo):
        * editing/markup.cpp:
        (WebCore::shouldAddNamespaceAttr):
        (WebCore::appendNamespace):
        (WebCore::appendStartMarkup):
        * html/CollectionCache.cpp:
        * html/CollectionCache.h:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::namedItems):
        (WebCore::HTMLCollection::nextNamedItem):
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::formCollectionInfo):
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::collectionInfo):
        * loader/loader.cpp:
        (WebCore::Loader::load):
        (WebCore::Loader::servePendingRequests):
        (WebCore::Loader::nonCacheRequestInFlight):
        (WebCore::Loader::nonCacheRequestComplete):
        (WebCore::Loader::cancelRequests):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::clearRenderer):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::animate):
        (WebCore::CompositeAnimation::getAnimatedStyle):
        (WebCore::CompositeAnimation::setAnimating):
        (WebCore::CompositeAnimation::timeToNextService):
        (WebCore::CompositeAnimation::getAnimationForProperty):
        (WebCore::CompositeAnimation::suspendAnimations):
        (WebCore::CompositeAnimation::resumeAnimations):
        (WebCore::CompositeAnimation::isAnimatingProperty):
        (WebCore::CompositeAnimation::pauseAnimationAtTime):
        (WebCore::CompositeAnimation::numberOfActiveAnimations):
        * platform/TreeShared.h:
        (WebCore::TreeShared::~TreeShared):
        (WebCore::TreeShared::deref):

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

        Reviewed by Eric Seidel.

        autobuffer value not forwarded media element to MediaPlayer
        https://bugs.webkit.org/show_bug.cgi?id=33889

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource): Forward autobuffer
        value to MediaPlayer instance.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load): Forward autobuffer and
        preservesPitch values to newly created platform media player instance.

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

        Reviewed by Eric Seidel.

        [Gtk] media/video-reverse-play-duration.html fails on and off on Gtk buildbots
        https://bugs.webkit.org/show_bug.cgi?id=34086

        Cache media duration and fix didEnd() in case of reverse
        playback. When EOS was reached but in case of reverse playback the
        position is not always 0. So to not confuse the HTMLMediaElement
        we synchronize position and duration values.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::duration):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::didEnd):
        (WebCore::MediaPlayerPrivate::durationChanged):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2010-01-27  Alexey Proskuryakov  <ap@apple.com>

        * WebCore.xcodeproj/project.pbxproj: Actually land the change to add ContainerNodeAlgorithms.h
        (it's "svn resolved", not "svn revert"!).

2010-01-26  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=34150
        WebKit needs a mechanism to catch stale HashMap entries

        * WebCore.xcodeproj/project.pbxproj: Added ContainerNodeAlgorithms.h to the project to make
        it easier to search for.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSRuleSet::getIDRules):
        (WebCore::CSSRuleSet::getClassRules):
        (WebCore::CSSRuleSet::getTagRules):
        (WebCore::CSSStyleSelector::keyframeStylesForAnimation):
        * dom/CheckedRadioButtons.cpp:
        (WebCore::CheckedRadioButtons::checkedButtonForGroup):
        (WebCore::CheckedRadioButtons::removeButton):
        * dom/Document.cpp:
        (WebCore::Document::getElementById):
        (WebCore::Document::removeElementById):
        (WebCore::Document::removeImageMap):
        (WebCore::Document::getImageMap):
        (WebCore::Document::nameCollectionInfo):
        * dom/Document.h:
        (WebCore::Document::collectionInfo):
        * editing/markup.cpp:
        (WebCore::shouldAddNamespaceAttr):
        (WebCore::appendNamespace):
        (WebCore::appendStartMarkup):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::namedItems):
        (WebCore::HTMLCollection::nextNamedItem):
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::formCollectionInfo):
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::collectionInfo):
        * loader/loader.cpp:
        (WebCore::Loader::load):
        (WebCore::Loader::servePendingRequests):
        (WebCore::Loader::nonCacheRequestInFlight):
        (WebCore::Loader::nonCacheRequestComplete):
        (WebCore::Loader::cancelRequests):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::clearRenderer):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::animate):
        (WebCore::CompositeAnimation::getAnimatedStyle):
        (WebCore::CompositeAnimation::setAnimating):
        (WebCore::CompositeAnimation::timeToNextService):
        (WebCore::CompositeAnimation::getAnimationForProperty):
        (WebCore::CompositeAnimation::suspendAnimations):
        (WebCore::CompositeAnimation::resumeAnimations):
        (WebCore::CompositeAnimation::isAnimatingProperty):
        (WebCore::CompositeAnimation::pauseAnimationAtTime):
        (WebCore::CompositeAnimation::numberOfActiveAnimations):
        Added checkConsistency checks before lookups in HashMaps with AtomicStringImpl* keys.

        * dom/ContainerNodeAlgorithms.h: (WebCore::removeAllChildrenInContainer): Be sure to notify
        about removed child nodes that can be deleted immediately.

        * html/CollectionCache.cpp:
        (WebCore::CollectionCache::checkConsistency):
        * html/CollectionCache.h:
        Added a checkConsistency() method that checks both HashMaps in the cache.

        * platform/TreeShared.h:
        (WebCore::TreeShared::~TreeShared): Assert that m_refCount is null. Since Nodes can be
        destroyed with operator delete (as done in ContainerNodeAlgorithms), this is important to check.
        (WebCore::TreeShared::deref): Assert that m_refCount isn't already negative.

2010-01-26  Daniel Bates  <dbates@webkit.org>

        Reviewed by Tor Arne Vestbø.

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

        [Qt] Fixes an issue where the height of <button>- and
        <input type="button">- elements are fixed to the height of the
        button label font plus padding. That is, the CSS height property
        is being ignored.

        Instead, we should honor the user-specified height, if appropriate
        for the platform and context. Notice, the Mac ports do not honor the
        height for <input type="button"> elements unless a border and/or
        background is also specified.

        Test: fast/css/button-height.html

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

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

        Reviewed by Timothy Hatcher.

        Enable the Audits panel via a shortcut (Cmd/Ctrl+Alt+A)
        https://bugs.webkit.org/show_bug.cgi?id=34158

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

2010-01-26  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        HTMLInputElement::valueAsNumber support except type=datetime-local.
        https://bugs.webkit.org/show_bug.cgi?id=32696

        Tests: fast/forms/input-valueasnumber-date.html
               fast/forms/input-valueasnumber-datetime.html
               fast/forms/input-valueasnumber-month.html
               fast/forms/input-valueasnumber-number.html
               fast/forms/input-valueasnumber-range.html
               fast/forms/input-valueasnumber-time.html
               fast/forms/input-valueasnumber-unsupported.html
               fast/forms/input-valueasnumber-week.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::valueAsNumber):
          According to the specification, we should return NaN for invalid values.
        (WebCore::HTMLInputElement::setValueAsNumber):
          According to the specification, throws NOT_SUPPORTED_ERR for Infinitiy or NaN,
          and throws INVALID_STATE_ERR for unsupported types.
        (WebCore::HTMLInputElement::formStringToDouble):
          According to the step 14 of Real Number in the specification, we
          should round -0 to 0.
        * html/HTMLInputElement.h: Declare valueAsNumber() and setValueAsNumber().
        * html/HTMLInputElement.idl: Add valueAsNumber.

2010-01-26  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        Make sure there is a lock on serialize in SerializedScriptValueData, since type errors can be created when
        exceptions are thrown.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValueData::serialize):

2010-01-26  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Add Date type support for Objective-C binding.
        https://bugs.webkit.org/show_bug.cgi?id=32810

        The Date type in IDLs is mapped to NSTimeInterval in Objective-C.

        * bindings/objc/DOMInternal.h: Add kit() and core() for NSTimeInterval.
        * bindings/scripts/CodeGenerator.pm: Make Date a primitive type.
        * bindings/scripts/CodeGeneratorJS.pm: Move some code for the CodeGeenrator.pm change.
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm: Move some code for the CodeGeenrator.pm change.
        * html/HTMLInputElement.idl: Remove Objective-C exclusion for valueAsDate.

2010-01-26  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, attempt to fix Tiger build.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::write): Use UNUSED_PARAM macros to prevent compiler warning on targets without accelerated compositing.

2010-01-26  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Darin Adler.

        Incorrect boolean expression in isMailBlockquote() (WebCore/htmlediting.cpp)
        https://bugs.webkit.org/show_bug.cgi?id=34156

        No new tests (minor code change).

        * editing/htmlediting.cpp:
        (WebCore::isMailBlockquote):

2010-01-26  Peter Kasting  <pkasting@google.com>

        Reviewed by David Levin.

        Handle broken images more correctly in the open-source image decoders.
        https://bugs.webkit.org/show_bug.cgi?id=33747

        No tests since Safari doesn't use these decoders and there's already a
        broken-image test in the tree.

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::createFrameAtIndex): No need to check isSizeAvailable() since size() is now always safe.
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::size): Don't assert that the bitmap is valid; we don't need a complete successful decode to be able to give info about the size.
        * platform/image-decoders/qt/RGBA32BufferQt.cpp:
        (WebCore::RGBA32Buffer::setSize): Don't set the frame to complete on failure, since it's not complete, but empty, and callers can better handle empty frames.
        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
        (WebCore::RGBA32Buffer::setSize): Don't set the frame to complete on failure, since it's not complete, but empty, and callers can better handle empty frames.

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

        Not reviewed. Synchronize Qt/Gtk build systems with Mac/Win, should fix Qt compilation. Gtk results still pending.

        * GNUmakefile.am:
        * WebCore.pro:

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

        Not reviewed. Attempt to fix V8 - change SetterMethod function signatures, just like it has been done for JSSVGPODTypeWrapper.

        * bindings/v8/V8SVGPODTypeWrapper.h:

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

        Not reviewed. Revert Base.xcconfig changes, was not meant to be committed.

        * Configurations/Base.xcconfig:

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

        Reviewed by Oliver Hunt.

        SVG consumes way too much memory to store animated properties in the DOM
        https://bugs.webkit.org/show_bug.cgi?id=34188

        Shrink WebCore library size to 75% (measured in debug builds) and reduce SVG memory usage to <25%.
        Adding Oliver testcase as manual-tests/svg-node-count-vs-scroll.xhtml, which creates an arbitary number of
        rects (50.000 <rect> elements added to the DOM by default) - memory usage down to 111M from 503M (RPRVT).
        The SVG DOM side is almost fine, still some optimizations possible, that will be implemented soon - next
        target is the SVG render tree, there are plenty of possibilities to reduce memory usage there.

        Redesign the way we store animated properties in the individual SVG*Element files. Short story: In order
        to support SVG DOM through the bindings (e.g. JS) we need to associate SVGAnimatedProperty objects with
        the SVGElement object that created it - we used to store this pointer directly in the SVGAnimatedProperty.
        This means, every SVGAnimatedProperty stored in a SVGRectElement, stored a pointer to the SVGRectElement, resulting
        in excessive memory usage. This is now properly implemented, without wasting tons of memory. Unfortunately this
        requires touching all SVG*Element files.

        Detailed list of changes:
        - Remove template bloat by not specializing class templates for each attributeName/tagName combination. Instead
          SVGAnimatedProperty is a non-specialized template class now, only depending on the AnimatedType (ie. SVGLength for SVGAnimatedLength)
          -> This heavily reduces the generated code, thus shrinking WebCore size. I hope we can build windows again without SVGAllInOne.cpp

        - Remove "exportStrings" / "exportString" handling from make_names.pl - SVG defined string literals for each QualifiedName,
          in order to use template specialization based on "const char*" parameters. All that bloat is gone, so there's no need for it anymore.

        - Redesign SVGAnimatedProperty so it does not need any back-pointers to the SVGElement that created it

        - Don't actually store the XML DOM attribute name associated with a SVG DOM property in SVGAnimatedProperty, move the associatedAttributeName()
          function inside the macro declaration and just return the passed macro parameter DOMAttribute there, storing is inefficient and useless.

        - Remove SynchronizablePropertyController, which was living in SVGElement as member variable, keeping a HashMap<AttributeName, SVGAnimatedProperty>.
          It was needed before to lookup a SVGAnimatedProperty for a XML DOM attribute, in order to synchronize SVG <-> XML dom properties/attributes.
          Instead just add a "synchronizeProperty(const QualifiedName&)" method to all SVG*Element classes. As each SVG*Element class knows about its
          animated properties it can just ask them to synchronize themselves - no need for any dynamic lookups anymore.

        - Remove SynchronizableTypeWrapper which added more complexity for the sake of SVG <-> XML DOM synchronization, all replaced by synchronizeProperty.

        - Pass around any POD objects as const references, instead of copying them for no reason.

        - Clean up SVGAnimatedProperty, splitting up into SVGAnimatedProperty/PropertySynchronizer/PropertyTraits.

        - Remove baseValue/setBaseValue code from SVGDocumentExtensions, not needed anymore.

        ... and tons of changes to all SVG*Element classes, adapting to the new way of handling animated properties.

        * GNUmakefile.am: Remove Synchronizable* from build, add new SVGAnimatedPropertySynchronizer/Traits files
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSSVGPODTypeWrapper.h: Change synchronization callback signatures, as we pass around const-references now.
        * dom/Element.cpp: Let updateAnimatedSVGAttribute take a QualifiedName instead of pure Strings.
        (WebCore::Element::getAttribute):
        (WebCore::Element::hasAttributes):
        * dom/Element.h:
        (WebCore::Element::updateAnimatedSVGAttribute):
        (WebCore::Element::attributes):
        * dom/make_names.pl: Remove SVG specific "exportString" / "exportStrings" functionality, see above.
        * html/HTMLAttributeNames.in: Remove "exportString" tag from "className" attribute.
        * manual-tests/svg-node-count-vs-scroll.xhtml: Added. Can be used to verify memory consumption with a lot of DOM objects.
        * mathml/mathattrs.in: MathML doesn't need "exportStrings" - remove it.
        * mathml/mathtags.in: Ditto.
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::SVGAElement):
        (WebCore::SVGAElement::synchronizeProperty):
        * svg/SVGAElement.h:
        * svg/SVGAllInOne.cpp: Remove SynchronizablePropertyController.cpp
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::SVGAltGlyphElement):
        (WebCore::SVGAltGlyphElement::synchronizeProperty):
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::applyResultsToTarget):
        * svg/SVGAnimatedProperty.h: Rewritten, see above for details.
        (WebCore::SVGAnimatedPropertyTearOff::create):
        (WebCore::SVGAnimatedPropertyTearOff::setBaseVal):
        (WebCore::SVGAnimatedPropertyTearOff::setAnimVal):
        (WebCore::SVGAnimatedPropertyTearOff::baseVal):
        (WebCore::SVGAnimatedPropertyTearOff::animVal):
        (WebCore::SVGAnimatedPropertyTearOff::associatedAttributeName):
        (WebCore::SVGAnimatedPropertyTearOff::SVGAnimatedPropertyTearOff):
        (WebCore::SVGAnimatedPropertyTearOff::~SVGAnimatedPropertyTearOff):
        (WebCore::SVGAnimatedProperty::~SVGAnimatedProperty):
        (WebCore::SVGAnimatedProperty::SVGAnimatedProperty):
        (WebCore::SVGAnimatedProperty::value):
        (WebCore::SVGAnimatedProperty::baseValue):
        (WebCore::SVGAnimatedProperty::setValue):
        (WebCore::SVGAnimatedProperty::setBaseValue):
        (WebCore::SVGAnimatedProperty::shouldSynchronize):
        (WebCore::SVGAnimatedProperty::setShouldSynchronize):
        * svg/SVGAnimatedPropertySynchronizer.h: Added.
        (WebCore::):
        * svg/SVGAnimatedPropertyTraits.h: Added.
        (WebCore::):
        * svg/SVGAnimatedTemplate.h: Move SVGAnimatedPropertyTraits into its own file.
        (WebCore::SVGAnimatedTemplate::forgetWrapper):
        (WebCore::lookupOrCreateWrapper):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::SVGAnimationElement):
        (WebCore::SVGAnimationElement::synchronizeProperty):
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::SVGCircleElement):
        (WebCore::SVGCircleElement::synchronizeProperty):
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::SVGClipPathElement):
        (WebCore::SVGClipPathElement::synchronizeProperty):
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
        (WebCore::SVGComponentTransferFunctionElement::parseMappedAttribute):
        (WebCore::SVGComponentTransferFunctionElement::synchronizeProperty):
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::SVGCursorElement):
        (WebCore::SVGCursorElement::synchronizeProperty):
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.cpp:
        (WebCore::SVGDefsElement::SVGDefsElement):
        (WebCore::SVGDefsElement::synchronizeProperty):
        * svg/SVGDefsElement.h:
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp: Adapt to synchronization changes: use synchronizeProperty() call, instead of SynchronizablePropertyController.
        (WebCore::SVGElement::updateAnimatedSVGAttribute):
        * svg/SVGElement.h: Don't store SynchronizablePropertyController anymore, it's gone.
        (WebCore::SVGElement::synchronizeProperty):
        (WebCore::SVGElement::setSynchronizedSVGAttributes):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::SVGEllipseElement):
        (WebCore::SVGEllipseElement::synchronizeProperty):
        * svg/SVGEllipseElement.h:
        * svg/SVGExternalResourcesRequired.cpp:
        * svg/SVGExternalResourcesRequired.h:
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::SVGFEBlendElement):
        (WebCore::SVGFEBlendElement::synchronizeProperty):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        (WebCore::SVGFEColorMatrixElement::synchronizeProperty):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::SVGFEComponentTransferElement):
        (WebCore::SVGFEComponentTransferElement::synchronizeProperty):
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::SVGFECompositeElement):
        (WebCore::SVGFECompositeElement::parseMappedAttribute):
        (WebCore::SVGFECompositeElement::synchronizeProperty):
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement):
        (WebCore::SVGFEDiffuseLightingElement::synchronizeProperty):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
        (WebCore::SVGFEDisplacementMapElement::synchronizeProperty):
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::SVGFEGaussianBlurElement):
        (WebCore::SVGFEGaussianBlurElement::synchronizeProperty):
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::SVGFEImageElement):
        (WebCore::SVGFEImageElement::synchronizeProperty):
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::SVGFELightElement):
        (WebCore::SVGFELightElement::synchronizeProperty):
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::SVGFEMergeNodeElement):
        (WebCore::SVGFEMergeNodeElement::synchronizeProperty):
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::SVGFEMorphologyElement):
        (WebCore::SVGFEMorphologyElement::synchronizeProperty):
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::SVGFEOffsetElement):
        (WebCore::SVGFEOffsetElement::synchronizeProperty):
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::SVGFESpecularLightingElement):
        (WebCore::SVGFESpecularLightingElement::synchronizeProperty):
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::SVGFETileElement):
        (WebCore::SVGFETileElement::synchronizeProperty):
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::SVGFETurbulenceElement):
        (WebCore::SVGFETurbulenceElement::synchronizeProperty):
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        (WebCore::SVGFilterElement::synchronizeProperty):
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes):
        (WebCore::SVGFilterPrimitiveStandardAttributes::synchronizeProperty):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFitToViewBox.cpp:
        * svg/SVGFitToViewBox.h:
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::SVGFontElement):
        (WebCore::SVGFontElement::synchronizeProperty):
        * svg/SVGFontElement.h:
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        (WebCore::SVGForeignObjectElement::synchronizeProperty):
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::SVGGElement):
        (WebCore::SVGGElement::synchronizeProperty):
        * svg/SVGGElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement):
        (WebCore::SVGGradientElement::synchronizeProperty):
        * svg/SVGGradientElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        (WebCore::SVGImageElement::synchronizeProperty):
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::SVGLineElement):
        (WebCore::SVGLineElement::synchronizeProperty):
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::SVGLinearGradientElement):
        (WebCore::SVGLinearGradientElement::synchronizeProperty):
        * svg/SVGLinearGradientElement.h:
        * svg/SVGList.h: Adapt to const-reference changes.
        (WebCore::SVGPODListItem::setValue):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::SVGMPathElement):
        (WebCore::SVGMPathElement::synchronizeProperty):
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::synchronizeProperty):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        (WebCore::SVGMaskElement::synchronizeProperty):
        * svg/SVGMaskElement.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        (WebCore::SVGPathElement::synchronizeProperty):
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::synchronizeProperty):
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::SVGPolyElement):
        (WebCore::SVGPolyElement::svgAttributeChanged):
        (WebCore::SVGPolyElement::synchronizeProperty):
        * svg/SVGPolyElement.h:
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::SVGRadialGradientElement):
        (WebCore::SVGRadialGradientElement::synchronizeProperty):
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::SVGRectElement):
        (WebCore::SVGRectElement::synchronizeProperty):
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::synchronizeProperty):
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        (WebCore::SVGScriptElement::synchronizeProperty):
        * svg/SVGScriptElement.h:
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::SVGStopElement):
        (WebCore::SVGStopElement::synchronizeProperty):
        * svg/SVGStopElement.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::SVGStyledElement):
        (WebCore::SVGStyledElement::parseMappedAttribute):
        (WebCore::SVGStyledElement::synchronizeProperty):
        * svg/SVGStyledElement.h:
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::SVGStyledTransformableElement):
        (WebCore::SVGStyledTransformableElement::synchronizeProperty):
        * svg/SVGStyledTransformableElement.h:
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::SVGSwitchElement):
        (WebCore::SVGSwitchElement::synchronizeProperty):
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::SVGSymbolElement):
        (WebCore::SVGSymbolElement::synchronizeProperty):
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::SVGTRefElement):
        (WebCore::SVGTRefElement::synchronizeProperty):
        * svg/SVGTRefElement.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::SVGTextContentElement):
        (WebCore::SVGTextContentElement::synchronizeProperty):
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::SVGTextElement):
        (WebCore::SVGTextElement::synchronizeProperty):
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::SVGTextPathElement):
        (WebCore::SVGTextPathElement::synchronizeProperty):
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::SVGTextPositioningElement):
        (WebCore::SVGTextPositioningElement::synchronizeProperty):
        * svg/SVGTextPositioningElement.h:
        * svg/SVGURIReference.cpp:
        * svg/SVGURIReference.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        (WebCore::SVGUseElement::synchronizeProperty):
        * svg/SVGUseElement.h:
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::SVGViewElement):
        (WebCore::SVGViewElement::synchronizeProperty):
        * svg/SVGViewElement.h:
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::SVGViewSpec):
        * svg/SVGViewSpec.h:
        (WebCore::SVGViewSpec::contextElement):
        * svg/SynchronizablePropertyController.cpp: Removed.
        * svg/SynchronizablePropertyController.h: Removed.
        * svg/SynchronizableTypeWrapper.h: Removed.
        * svg/svgattrs.in: Remove "exportStrings" tag.
        * svg/svgtags.in: Ditto.
        * svg/xlinkattrs.in:

2010-01-26  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/7169464> REGRESSION (r47444): PLT is 1% slower due to implementation of :valid and :invalid CSS selectors
        https://bugs.webkit.org/show_bug.cgi?id=34029

        If we never hit the valid or invalid selectors for a particular document, 
        then we'll skip the validity checks when deciding about style sharing.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        
        * dom/Document.cpp: (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::considerValidity):
        (WebCore::Document::setConsiderValidity):

2010-01-26  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Simon Fraser.

        Revert 53797 as it seems to be causing crashes.
        https://bugs.webkit.org/show_bug.cgi?id=34153

        * page/FrameView.cpp:
        (WebCore::FrameView::useSlowRepaints):
        (WebCore::FrameView::useSlowRepaintsIfNotOverlapped):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        * platform/ScrollView.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):
        (WebCore::RenderObject::destroy):

2010-01-26  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Steve Falkenburg.

        DumpRenderTree silently crashes at the end of the run because geolocationControllerClient pointer is 0.
        https://bugs.webkit.org/show_bug.cgi?id=34191

        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::~GeolocationController): Add check for m_client being 0.
        (WebCore::GeolocationController::addObserver): Ditto.
        (WebCore::GeolocationController::removeObserver): Ditto.
        (WebCore::GeolocationController::lastPosition): Ditto.

2010-01-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adele Peterson.

        Enhance externalRepresentation() to make it more useful for layer debugging
        https://bugs.webkit.org/show_bug.cgi?id=34143

        Enhance externalRepresentation() to output additional information about layers when certain flags are passed.
        The new flags allow you to show all layers (not just those that would paint), to the structure of the z-order
        and normal flow lists, and to show which layers are composited.

        * WebCore.base.exp: The signature of externalRepresentation() changed.

        * platform/text/TextStream.h: Add operator<<(void*)
        * platform/text/TextStream.cpp: Implement operator<<(void*)

        * rendering/RenderLayer.h:
        * rendering/RenderLayer.cpp:
        (showLayerTree): New method outside the WebCore namespace, for ease of calling from gdb.

        * rendering/RenderTreeAsText.h: New behavior flags for externalRepresentation().
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write): Output compositing information if requested. Also clean up some -1/1 magic
        numbers with an enum.
        (WebCore::writeLayers): If requested, show layer nesting via the z-order and normal flow lists.
        (WebCore::externalRepresentation): New arguments

2010-01-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Fixed an off-by-one error.

        * rendering/break_lines.cpp:
        (WebCore::shouldBreakAfter):

2010-01-26  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Avoid reloading iframe on re-parenting between documents.
        https://bugs.webkit.org/show_bug.cgi?id=32848

        Achieved by setting a flag on iframe element when it is a target of document.adoptNode(node) operation.
        The flag prevents unload/load cycle and is reset once element is attached to a new document.
        If iframe is adopted but not actually inserted into the tree, it gets unloaded by async timer
        once JS yields, to avoid having active content in non-attached iframe.

        Test: fast/frames/iframe-reparenting.html

        * dom/Document.cpp:
        (WebCore::Document::adoptNode): If the adopted node is iframe, set a remainsAliveOnRemovalFromTree on it.
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::HTMLFrameElementBase):
        (WebCore::HTMLFrameElementBase::attach): Skip actual loading of the frame if it has remainsAliveOnRemovalFromTree flag. Reset the flag.
        (WebCore::HTMLFrameElementBase::willRemove): Skip unloading the frame if it has remainsAliveOnRemovalFromTree flag set.
        (WebCore::HTMLFrameElementBase::setRemainsAliveOnRemovalFromTree): Set the flag, start the async timer to check if the frame was actually attached.
        (WebCore::HTMLFrameElementBase::checkAttachedTimerFired):
        * html/HTMLFrameOwnerElement.h:
        (WebCore::HTMLFrameOwnerElement::willRemove): Move from private to protected, since it is conditionally called in HTMLFrameElementBase::willRemove now.

2010-01-26  Adam Roben  <aroben@apple.com>

        No review, rolling out r53861.
        http://trac.webkit.org/changeset/53861
        https://bugs.webkit.org/show_bug.cgi?id=33224

        Caused 2 regression tests to fail.

        * dom/Document.cpp:
        (WebCore::Document::detach):
        (WebCore::Document::registerHistoryItem):
        (WebCore::Document::unregisterHistoryItem):
        * dom/Document.h:
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::pushStateItem):
        * history/BackForwardListChromium.cpp:
        (WebCore::BackForwardList::pushStateItem):
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::~HistoryItem):
        (WebCore::HistoryItem::setStateObject):
        (WebCore::HistoryItem::setDocument):
        (WebCore::HistoryItem::documentDetached):
        * history/HistoryItem.h:
        (WebCore::HistoryItem::document):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::navigateWithinDocument):
        (WebCore::FrameLoader::loadItem):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateBackForwardListForFragmentScroll):
        (WebCore::HistoryController::pushState):
        (WebCore::HistoryController::replaceState):
        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::scheduleHistoryNavigation):
        * page/History.cpp:
        (WebCore::History::stateObjectAdded):
        * page/Page.cpp:
        (WebCore::Page::goToItem):

2010-01-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/7576663> Crash caused by anonymous list item
        https://bugs.webkit.org/show_bug.cgi?id=34183

        Test: fast/lists/anonymous-items.html

        enclosingList() and previousListItem() were DOM-based, but in order to work with anonymous
        list items, they need to work with rthe render tree.

        * rendering/RenderListItem.cpp:
        (WebCore::isList): Factored out.
        (WebCore::enclosingList): Added this variant that takes a RenderObject.
        (WebCore::previousListItem): Changed to travers the render tree.
        (WebCore::RenderListItem::calcValue): Use the RenderObject version of enclosingList()
        (WebCore::RenderListItem::setExplicitValue): Added an assertion.
        (WebCore::RenderListItem::clearExplicitValue): Ditto.

2010-01-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Jon Honeycutt.

        Crash in WebKit!WebCore::RenderMenuList::itemStyle
        https://bugs.webkit.org/show_bug.cgi?id=34182
        <rdar://7087757>
        
        Added bounds checks in RenderMenuList to make sure we are
        not making an out of bounds check in a vector once an option
        element has been deleted. If we are out of bounds, we fall back to
        a default value and return early, and in the case of itemStyle, we use a 
        previous option's style, if it is available.

        * manual-tests/select-delete-item.html: Added.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemText): If out of bounds check, return early.
        (WebCore::RenderMenuList::itemToolTip): Ditto.
        (WebCore::RenderMenuList::itemIsEnabled): Ditto.
        (WebCore::RenderMenuList::itemStyle): If out of bounds check, try using the 0th index
            option style, then fall back to the select's style if that option doesn't exist.
        (WebCore::RenderMenuList::itemBackgroundColor): If out of bounds check, return early.
        (WebCore::RenderMenuList::itemIsSeparator): Ditto.
        (WebCore::RenderMenuList::itemIsLabel): Ditto.
        (WebCore::RenderMenuList::itemIsSelected): Ditto.

2010-01-25  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Anders Carlsson.

        Some methods in JSC JNI bridge need more error checking of results from JNI.
        https://bugs.webkit.org/show_bug.cgi?id=34149

        In JNIUtility.h, callJNIMethodV<jobject> might return null (from CallObjectMethodV, via
        JNICaller<jobject>::callV) if an exception is thrown.  All clients of callJNIMethodV<jobject>
        that are calling methods on the returned object should null check first.

        * bridge/jni/JNIBridge.cpp:
        (JavaField::JavaField):
        (JavaMethod::JavaMethod):
        * bridge/jni/JNIUtility.h:
        (JSC::Bindings::):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::convertJObjectToValue):
        * bridge/jni/jsc/JavaClassJSC.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::stringValue):

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

        Reviewed by Oliver Hunt.

        Windows build references non-existent include paths
        https://bugs.webkit.org/show_bug.cgi?id=34175

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:

2010-01-26  Darin Fisher  <darin@chromium.org>

        Reviewed by Brady Eidson.

        Chains of history items representing same-document navigation need to
        always remember that association

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

        Replace HistoryItem's Document pointer with a DocumentSequenceNumber.
        During session history traversal, if the current HistoryItem and the
        target HistoryItem have the same DocumentSequenceNumber, then it means
        that the current Document should remain.

        NOTE: To support Chromium's serialization of HistoryItems, I generate
        DocumentSequenceNumbers that are unique across application launches.
        DocumentSequenceNumbers are generated using a counter initialized with
        the time of day.

        Test: fast/loader/stateobjects/document-destroyed-navigate-back.html

        * dom/Document.cpp:
        (WebCore::Document::detach):
        * dom/Document.h:
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::pushStateItem):
        * history/BackForwardListChromium.cpp:
        (WebCore::BackForwardList::pushStateItem):
        * history/HistoryItem.cpp:
        (WebCore::generateDocumentSequenceNumber):
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::~HistoryItem):
        (WebCore::HistoryItem::setStateObject):
        * history/HistoryItem.h:
        (WebCore::HistoryItem::setDocumentSequenceNumber):
        (WebCore::HistoryItem::documentSequenceNumber):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::navigateWithinDocument):
        (WebCore::FrameLoader::loadItem):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateBackForwardListForFragmentScroll):
        (WebCore::HistoryController::pushState):
        (WebCore::HistoryController::replaceState):
        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::scheduleHistoryNavigation):
        * page/History.cpp:
        (WebCore::History::stateObjectAdded):
        * page/Page.cpp:
        (WebCore::Page::goToItem):

2010-01-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Add ability for image maps to be focused via tabbing
        https://bugs.webkit.org/show_bug.cgi?id=17513

        Test: fast/events/tab-imagemap.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedImageMapUIElement):
        (WebCore::AXObjectCache::focusedUIElementForPage):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityImageMapLink.h:
        (WebCore::AccessibilityImageMapLink::areaElement):
        (WebCore::AccessibilityImageMapLink::mapElement):
        (WebCore::AccessibilityImageMapLink::isImageMapLink):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isImageMapLink):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityParentForImageMap):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::getPath):
        (WebCore::HTMLAreaElement::getRect):
        (WebCore::HTMLAreaElement::imageElement):
        (WebCore::HTMLAreaElement::isKeyboardFocusable):
        (WebCore::HTMLAreaElement::isFocusable):
        (WebCore::HTMLAreaElement::dispatchBlurEvent):
        (WebCore::HTMLAreaElement::updateFocusAppearance):
        (WebCore::HTMLAreaElement::supportsFocus):
        * html/HTMLAreaElement.h:
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::imageElement):
        * html/HTMLMapElement.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::drawFocusRingToContext):
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):
        (WebCore::RenderImage::paintFocusRings):
        (WebCore::RenderImage::imageMap):
        * rendering/RenderImage.h:
        * rendering/RenderReplaced.h:

2010-01-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: add support for breakpoints, messages and search into the SourceFrame2.

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

        * inspector/front-end/SourceFrame2.js:
        (WebInspector.SourceFrame2):
        (WebInspector.SourceFrame2.prototype.get executionLine):
        (WebInspector.SourceFrame2.prototype.set executionLine):
        (WebInspector.SourceFrame2.prototype.revealLine):
        (WebInspector.SourceFrame2.prototype.addBreakpoint):
        (WebInspector.SourceFrame2.prototype.removeBreakpoint):
        (WebInspector.SourceFrame2.prototype.sizeToFitContentHeight):
        (WebInspector.SourceFrame2.prototype.setContent):
        (WebInspector.SourceFrame2.prototype.findSearchMatches):
        (WebInspector.SourceFrame2.prototype.setSelection):
        (WebInspector.SourceFrame2.prototype._addMessageToSource):
        (WebInspector.SourceFrame2.prototype._addExistingBreakpointsToSource):
        (WebInspector.SourceFrame2.prototype._addBreakpointToSource):
        (WebInspector.SourceFrame2.prototype._removeBreakpointFromSource):
        (WebInspector.SourceFrame2.prototype._contextMenu.addConditionalBreakpoint):
        (WebInspector.SourceFrame2.prototype._contextMenu):
        (WebInspector.SourceFrame2.prototype._toggleBreakpoint):
        (WebInspector.SourceFrame2.prototype._editBreakpointCondition.committed):
        (WebInspector.SourceFrame2.prototype._editBreakpointCondition.dismissed):
        (WebInspector.SourceFrame2.prototype._editBreakpointCondition):
        (WebInspector.SourceFrame2.prototype._showBreakpointConditionPopup):
        (WebInspector.SourceFrame2.prototype._createConditionElement):
        (WebInspector.SourceFrame2.prototype._keyDown):
        (WebInspector.SourceFrame2.prototype._evalSelectionInCallFrame):
        (WebInspector.SourceFrame2.prototype._breakpointChanged):
        (WebInspector.SourceFrame2.prototype.resize):
        (WebInspector.BreakpointLineNumberDecorator.prototype.decorate):
        (WebInspector.BreakpointLineNumberDecorator.prototype._paintBreakpoint):
        (WebInspector.BreakpointLineNumberDecorator.prototype.mouseDown):
        (WebInspector.BreakpointLineNumberDecorator.prototype.contextMenu):
        (WebInspector.ExecutionLineDecorator.prototype.decorate):
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor):
        (WebInspector.TextEditor.prototype.set mimeType):
        (WebInspector.TextEditor.prototype.set readOnly):
        (WebInspector.TextEditor.prototype.setDivDecoration):
        (WebInspector.TextEditor.prototype.reveal):
        (WebInspector.TextEditor.prototype.packAndRepaintAll):
        (WebInspector.TextEditor.prototype._updateSize):
        (WebInspector.TextEditor.prototype.updateCanvasSize):
        (WebInspector.TextEditor.prototype.repaintAll):
        (WebInspector.TextEditor.prototype._paintLinesContinuation):
        (WebInspector.TextEditor.prototype._repaintOnScroll):
        (WebInspector.TextEditor.prototype._mouseDown):
        (WebInspector.TextEditor.prototype._contextMenu):
        (WebInspector.TextEditor.prototype._caretForMouseEvent):
        (WebInspector.TextEditor.prototype._columnForOffset):
        (WebInspector.TextEditor.prototype._handleNavigationKey):
        (WebInspector.TextEditor.prototype._positionDivDecoration):
        (WebInspector.TextEditor.prototype._replaceSelectionWith):
        (WebInspector.TextEditor.prototype.setCoalescingUpdate):
        (WebInspector.TextEditor.prototype._handleUndo):
        (WebInspector.TextEditor.prototype._handleRedo):
        (WebInspector.TextEditor.prototype._changeFont):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype.set mimeType):
        * inspector/front-end/inspector.css:
        * inspector/front-end/textEditor.css:

2010-01-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: add methods for getting resource content from within frontend.

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

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getResourceContent):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didGetResourceContent):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.getResourceContent):
        * inspector/front-end/InspectorFrontendHostStub.js:

2010-01-26  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: added null check into the timeline agent getter.

        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::retrieve):

2010-01-26  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Moves JSC-specific classes from bridge/jni/JNIBridge to bridge/jni/jsc/JNIBridgeJSC
        https://bugs.webkit.org/show_bug.cgi?id=33958

        This allows bridge/jni/JNIBridge to be used with both JSC and V8.
        A later change will add the V8 equivalent of these JSC-specific classes.

        No new tests, refactoring only.

        * Android.jscbindings.mk: Modified. Added JNIBridgeJSC.cpp
        * GNUmakefile.am: Modified. Added JNIBridgeJSC.h
        * WebCore.xcodeproj/project.pbxproj: Modified. Added JNIBridgeJSC.[cpp|h]
        * bridge/jni/JNIBridge.cpp: Modified. Moved JavaField and JavaArray to JNIBridgeJSC.cpp
        (appendClassName): Modfied. Guard calls to JSLock
        (JavaMethod::signature): Modfied. Guard calls to JSLock
        * bridge/jni/JNIBridge.h: Modified. Moved JavaField and JavaArray to JNIBridgeJSC.h
        * bridge/jni/jsc/JNIBridgeJSC.cpp: Copied from WebCore/bridge/jni/JNIBridge.cpp.
        * bridge/jni/jsc/JNIBridgeJSC.h: Copied from WebCore/bridge/jni/JNIBridge.h.
        * bridge/jni/jsc/JNIUtilityPrivate.cpp: Modified. Include JNIBridgeJSC.h
        * bridge/jni/jsc/JavaClassJSC.h: Modified. Include JNIBridgeJSC.h
        * bridge/jni/jsc/JavaInstanceJSC.cpp: Modified. Include JNIBridgeJSC.h

2010-01-26  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Unreviewed build fix.

        [Qt] Fix Windows build when sqlite is not available.

        * WebCore.pri:
        * WebCore.pro:

2010-01-26  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] JavaScript prompt is currently broken.
        https://bugs.webkit.org/show_bug.cgi?id=30914

        Remove the manual test case in favor of an automated
        test case in WebKit/qt/tests/qwebpage.

        * manual-tests/qt/java-script-prompt.html: Removed.

2010-01-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Implement HTML and CSS highlighters.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/JavaScriptTokenizer.js: Removed.
        * inspector/front-end/JavaScriptTokenizer.re2js: Removed.
        * inspector/front-end/SourceCSSTokenizer.js: Added.
        (WebInspector.SourceCSSTokenizer):
        (WebInspector.SourceCSSTokenizer.prototype._stringToken):
        (WebInspector.SourceCSSTokenizer.prototype._isPropertyValue):
        (WebInspector.SourceCSSTokenizer.prototype.nextToken):
        * inspector/front-end/SourceCSSTokenizer.re2js: Added.
        * inspector/front-end/SourceHTMLTokenizer.js: Added.
        (WebInspector.SourceHTMLTokenizer):
        (WebInspector.SourceHTMLTokenizer.prototype._stringToken):
        (WebInspector.SourceHTMLTokenizer.prototype.nextToken):
        * inspector/front-end/SourceHTMLTokenizer.re2js: Added.
        * inspector/front-end/SourceJavaScriptTokenizer.js: Added.
        (WebInspector.SourceJavaScriptTokenizer):
        (WebInspector.SourceJavaScriptTokenizer.prototype.nextToken):
        * inspector/front-end/SourceJavaScriptTokenizer.re2js: Added.
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype._highlightLines):
        (WebInspector.TextEditorHighlighter.Tokenizer):
        (WebInspector.TextEditorHighlighter.Tokenizer.prototype.set line):
        (WebInspector.TextEditorHighlighter.Tokenizer.prototype.set condition):
        (WebInspector.TextEditorHighlighter.Tokenizer.prototype.get condition):
        (WebInspector.TextEditorHighlighter.Tokenizer.prototype.hasCondition):
        (WebInspector.TextEditorHighlighter.Tokenizer.prototype.getLexCondition):
        (WebInspector.TextEditorHighlighter.Tokenizer.prototype.setLexCondition):
        (WebInspector.TextEditorHighlighter.Tokenizer.prototype._charAt):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2010-01-26  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        REGRESSION(r53835): Fix editing/pasteboard/paste-noscript-xhtml.xhtml
        https://bugs.webkit.org/show_bug.cgi?id=34157

        Pass the FragmentScriptingPermission correctly through to the DOM
        and disallow scripting elements in parseEndElement(), similar to
        the libxml tokenizer change in r53835.

        * dom/XMLTokenizerQt.cpp:
        (WebCore::handleElementNamespaces):
        (WebCore::handleElementAttributes):
        (WebCore::XMLTokenizer::parseStartElement):
        (WebCore::XMLTokenizer::parseEndElement):

2010-01-26  Garret Kelly  <gdk@chromium.org>

        Reviewed by Eric Seidel.

        Add missing declaration for the feMorphology SVG element.
        https://bugs.webkit.org/show_bug.cgi?id=34151

        * bindings/v8/V8DOMWrapper.cpp:

2010-01-26  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Unreviewed build fix.

        [Qt] Build fix after API changes in r53835.

        No new tests needed.

        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        (WebCore::parseXMLDocumentFragment):

2010-01-22  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Adler.

        Make storage events match the spec.
        https://bugs.webkit.org/show_bug.cgi?id=30546

        This meat of the patch I just posted is very simple.  It's just making events
        asynchronous, not posting them to the frame that generated them, passing a null
        for the key when issuing a clear storage event, and making the events
        non-cancelable/non-bubbleable...all of which are clearly stated in the spec.

        The asynchronous and not posting to the frame that generated them forced me to
        re-write all the layout tests that dealt with storage events.  There's a lot of
        code there, but I tried to be fairly careful to ensure that test coverage did
        not shrink in any area.

        Tests: storage/domstorage/events/basic-body-attribute.html
               storage/domstorage/events/basic-setattribute.html
               storage/domstorage/events/basic.html
               storage/domstorage/events/case-sensitive.html
               storage/domstorage/events/documentURI.html

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::enqueueStorageEvent):
        (WebCore::Document::storageEventTimerFired):
        * dom/Document.h:
        * storage/StorageEvent.cpp:
        (WebCore::StorageEvent::StorageEvent):
        * storage/StorageEvent.idl:
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatch):

2010-01-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7573493> Error with line break inside ?&raquo; pair of characters.
        https://bugs.webkit.org/show_bug.cgi?id=17475

        Test: fast/text/line-break-after-question-mark.html

        Instead of unconditionally allowing lines to break after a question mark, which was intended
        to mimic Internet Explorer, apply the Unicode line breaking behavior after a question mark,
        with one exception in the ASCII range to match IE, namely not allowing a line break between
        a question mark and a vertical line.

        * rendering/break_lines.cpp:
        (WebCore::shouldBreakAfter): Added a next character parameter. Changed to consult a table
        for the question mark case in order to keep it fast and not require a text break iterator in
        the ASCII case.
        (WebCore::nextBreakablePosition): Pass the next character to shouldBreakAfter.

2010-01-25  Peter Kasting  <pkasting@google.com>

        Reviewed by Dan Bernstein.

        Mac scrollbar thumbs were drawn with the wrong size.
        https://bugs.webkit.org/show_bug.cgi?id=34049

        * platform/chromium/ScrollbarThemeChromiumMac.mm:
        (WebCore::ScrollbarThemeChromiumMac::paint):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):

2010-01-25  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Cleanup unwanted tags after pasting.
        https://bugs.webkit.org/show_bug.cgi?id=34148
        
        Test: editing/pasteboard/paste-noscript-xhtml.xhtml

        * dom/Element.cpp:
        (WebCore::Element::setAttributeNS):
        * dom/Element.h:
        * dom/XMLTokenizer.h:
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        (WebCore::handleElementNamespaces):
        (WebCore::handleElementAttributes):
        (WebCore::XMLTokenizer::startElementNs):
        (WebCore::XMLTokenizer::endElementNs):
        (WebCore::parseXMLDocumentFragment):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createContextualFragment):

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

        Reviewed by Simon Fraser.

        A WebGeolocationControllerClient is leaked for every WebView
        https://bugs.webkit.org/show_bug.cgi?id=34145

        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::~GeolocationController):
        * page/GeolocationControllerClient.h:

2010-01-25  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Fixed bug in positioning of scroll layer within the
        parent root layer.
        https://bugs.webkit.org/show_bug.cgi?id=33847
        
        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::setScrollFrame):
        (WebCore::WKCACFLayerRenderer::createRenderer):

2010-01-25  Alexey Proskuryakov  <ap@apple.com>

        Rubber-stamped by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=34076
        An image remains accessible via form.property syntax after being removed from document.

        Fix crashing regression tests (tables/mozilla/bugs/bug4527.html et al.)

        * html/HTMLImageElement.cpp: (WebCore::HTMLImageElement::insertedIntoTree): Remove incorrect
        assertions added in the previous patch - it's mot true that m_for is always a parent; table
        parsing can reparent the image element, but m_form still needs to be set.

2010-01-25  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=34076
        An image remains accessible via form.property syntax after being removed from document.

        Tests: fast/forms/removed-image-as-property.html
               fast/forms/reparented-image-as-property.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::~HTMLImageElement): This is called during GC - not a good time
        to make observable changes to DOM.
        (WebCore::HTMLImageElement::insertedIntoTree): This is the right place to do any work that
        depends on connectedness to some ancestor. We still allow for m_form to be set via constructor,
        which happens during parsing.
        (WebCore::HTMLImageElement::removedFromTree): Ditto.

        * html/HTMLImageElement.h: Added removedFromTree/insertedIntoTree, moved removedFromDocument
        and insertedIntoDocument to private section, as they shouldn't be called directly.

2010-01-25  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

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

        Fixes misspelled words in comments.

        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::addChildren):
        (WebCore::AccessibilityListBox::doAccessibilityHitTest):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper detach]):
        (AXAttributeStringSetElement):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::completeURL):
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        * bindings/js/JSSVGPODTypeWrapper.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * bridge/NP_jsobject.cpp:
        (_NPN_SetException):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        (JObjectWrapper::JObjectWrapper):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::setValueOfUndefinedField):
        (ObjcInstance::getValueOfUndefinedField):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::sortMatchedRules):
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::CSSStyleSelector::applyProperty):
        * dom/Document.cpp:
        (WebCore::Document::updateLayoutIgnorePendingStylesheets):
        (WebCore::Document::detach):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance):
        * dom/Element.h:
        * dom/MessagePortChannel.h:
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::receivedTarget):
        * dom/Node.cpp:
        (WebCore::Node::isFocusable):
        (WebCore::Node::shadowAncestorNode):
        * dom/Node.h:
        * dom/Position.cpp:
        (WebCore::Position::upstream):
        * dom/Position.h:
        * dom/Range.cpp:
        (WebCore::Range::processContents):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addCSSColor):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::reconcileTextDecorationProperties):
        (WebCore::StyleChange::extractTextStyles):
        (WebCore::prepareEditingStyleToApplyAt):
        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializeStartEnd):
        * editing/Editor.cpp:
        (WebCore::Editor::learnSpelling):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype._format):
        * loader/Cache.cpp:
        (WebCore::Cache::pruneLiveResources):
        (WebCore::Cache::pruneDeadResources):
        * loader/Cache.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::makePurgeable):
        * loader/CachedResource.h:
        * loader/CachedResourceHandle.h:
        * loader/DocumentLoader.h:
        * loader/FTPDirectoryParser.cpp:
        (WebCore::parseOneFTPLine):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didExplicitOpen):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didCancel):
        * loader/WorkerThreadableLoader.h:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::spaceNeeded):
        * notifications/NotificationPresenter.h:
        (WebCore::NotificationPresenter::):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::updateAnimations):
        * platform/LinkHash.cpp:
        (WebCore::cleanPath):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::calculateDrawingMode):
        * platform/graphics/cg/PatternCG.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::offsetForPosition):
        * platform/graphics/mac/GraphicsLayerCA.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::doSeek):
        (WebCore::MediaPlayerPrivate::setClosedCaptionsVisible):
        (WebCore::MediaPlayerPrivate::hasAvailableVideoFrame):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::writeURL):
        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerExtendedEncodingNames):
        * platform/text/TextEncodingDetectorICU.cpp:
        (WebCore::detectTextEncoding):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::calcEffectiveWidth):
        (WebCore::AutoTableLayout::layout):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):
        (WebCore::RenderBox::calcAbsoluteVerticalValues):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        (WebCore::RenderBox::calcAbsoluteVerticalReplaced):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollByRecursively):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setInnerTextValue):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::stateChanged):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::mapLocalToContainer):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::buildTextChunks):
        * rendering/TransformState.cpp:
        (WebCore::TransformState::flattenWithTransform):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::dispatchBlurEvent):
        (WebCore::WMLInputElement::suggestedValue):

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

        Suggested by Darin Adler.

        Fixed a spelling error, tightened up some grammar.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::forgetDOMObject):
        (WebCore::forgetDOMNode):

2010-01-25  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Instead of adding inspector methods to the inspected global objects
        use private implementation visible from inspector code only.
        https://bugs.webkit.org/show_bug.cgi?id=34089

        Test: inspector/inspected-objects-not-overriden.html

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

2010-01-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: don't show headers/content tabs in scripts view.

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

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):
        (WebInspector.ResourceView.prototype.set headersVisible):
        (WebInspector.ResourceView.prototype._selectContentTab):
        (WebInspector.ResourceView.prototype._innerSelectContentTab):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.show):
        (WebInspector.ResourcesPanel.prototype.recreateViewForResourceIfNeeded):
        (WebInspector.ResourcesPanel.prototype.showResource):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.show):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        * inspector/front-end/inspector.css:

2010-01-25  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Reduce the size of the library when compiling for Maemo5
        https://bugs.webkit.org/show_bug.cgi?id=34050

        Exclude the Web Inspector's qrc file in the Maemo5 build, just
        like we do for the Symbian build. Saves about ~900k.

        * WebCore.pro:

2010-01-25  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] In the StyledPainter determine the style from the Render and Scrollbar theme instead of from the paint device
        https://bugs.webkit.org/show_bug.cgi?id=34054

        Getting the style from the painter's paint device is a hack that breaks when
        the paint device's style is different than the style that is used when
        calculating the metries earlier when there is no painter available.

        This change moves us closer to always using the same style.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::StylePainter::StylePainter):
        (WebCore::StylePainter::init):
        (WebCore::RenderThemeQt::paintButton):
        (WebCore::RenderThemeQt::paintTextField):
        (WebCore::RenderThemeQt::paintMenuList):
        (WebCore::RenderThemeQt::paintMenuListButton):
        (WebCore::RenderThemeQt::paintSliderTrack):
        (WebCore::RenderThemeQt::paintMediaMuteButton):
        (WebCore::RenderThemeQt::paintMediaPlayButton):
        (WebCore::RenderThemeQt::paintMediaSliderTrack):
        (WebCore::RenderThemeQt::paintMediaSliderThumb):
        * platform/qt/RenderThemeQt.h:
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarThemeQt::paint):
        (WebCore::ScrollbarThemeQt::hitTest):
        (WebCore::ScrollbarThemeQt::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeQt::scrollbarThickness):
        (WebCore::ScrollbarThemeQt::thumbLength):
        (WebCore::ScrollbarThemeQt::trackPosition):
        (WebCore::ScrollbarThemeQt::trackLength):
        (WebCore::ScrollbarThemeQt::paintScrollCorner):
        (WebCore::ScrollbarThemeQt::style):
        * platform/qt/ScrollbarThemeQt.h:

2010-01-25  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] In RenderThemeQt determine the QStyle from the page client instead of the page's view
        https://bugs.webkit.org/show_bug.cgi?id=34053

        * platform/qt/QWebPageClient.h: Add function to return the style.
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::qStyle): Determine the style from the page client instead of the page's view.

2010-01-25  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] Clean up code to determine palette from page client in RenderThemeQt
        https://bugs.webkit.org/show_bug.cgi?id=34052

        Use the RenderTheme's associated page instead of going through the
        render tree and the document.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::setPaletteFromPageClientIfExists):
        (WebCore::RenderThemeQt::initializeCommonQStyleOptions):
        * platform/qt/RenderThemeQt.h:

2010-01-25  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        [Qt] Phone backup support for QtWebkit for Symbian devices.
        https://bugs.webkit.org/show_bug.cgi?id=34077

        * WebCore.pro:

2010-01-25  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Antti Koivisto.

        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

        * page/FrameView.cpp:
        (WebCore::FrameView::useSlowRepaints):
        (WebCore::FrameView::useSlowRepaintsIfNotOverlapped):
        (WebCore::FrameView::registerFixedPositionedObject):
        (WebCore::FrameView::unregisterFixedPositionedObject):
        (WebCore::FrameView::scrollContentsFastPath):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::scrollContentsFastPath):
        * platform/ScrollView.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):
        (WebCore::RenderObject::destroy):

2010-01-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add support for addMessage/clearMessages to SourceFrame2.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/SourceFrame2.js:
        (WebInspector.SourceFrame2):
        (WebInspector.SourceFrame2.prototype.addMessage):
        (WebInspector.SourceFrame2.prototype.clearMessages):
        (WebInspector.SourceFrame2.prototype._incrementMessageRepeatCount):
        (WebInspector.SourceFrame2.prototype._addExistingMessagesToSource):
        (WebInspector.SourceFrame2.prototype._addMessageToSource):
        (WebInspector.SourceFrame2.prototype.resize):
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor):
        (WebInspector.TextEditor.prototype.setDivDecoration):
        (WebInspector.TextEditor.prototype._lineHeight):
        (WebInspector.TextEditor.prototype._highlightChanged):
        (WebInspector.TextEditor.prototype.packAndRepaintAll):
        (WebInspector.TextEditor.prototype._updateSize):
        (WebInspector.TextEditor.prototype._repaintAll):
        (WebInspector.TextEditor.prototype._paint):
        (WebInspector.TextEditor.prototype._paintLinesContinuation):
        (WebInspector.TextEditor.prototype._mouseOut):
        (WebInspector.TextEditor.prototype._updateDivDecorations):
        (WebInspector.TextEditor.prototype._positionDivDecoration):
        (WebInspector.TextEditor.prototype._paintSelection):
        (WebInspector.TextEditor.prototype._replaceSelectionWith):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter.prototype.updateHighlight):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * inspector/front-end/textEditor.css: Added.

2010-01-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Replace split pane with tabbed pane in resource
        contents view.

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

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):
        (WebInspector.ResourceView.prototype.attach):
        (WebInspector.ResourceView.prototype.show):
        (WebInspector.ResourceView.prototype._selectTab):
        (WebInspector.ResourceView.prototype._selectHeadersTab):
        (WebInspector.ResourceView.prototype._selectContentTab):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.show):
        (WebInspector.ResourcesPanel.prototype.recreateViewForResourceIfNeeded):
        (WebInspector.ResourcesPanel.prototype.showResource):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.show):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings.prototype._load):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._loaded):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView):
        * inspector/front-end/inspector.css:

2010-01-24  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        Media element duration changes to zero after playing in reverse
        https://bugs.webkit.org/show_bug.cgi?id=34041

        Test: media/video-reverse-play-duration.html

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::didEnd): QTKit's ended notification fires at time zero when 
        playing in reverse, so don't reset duration in that case.

2010-01-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Content with heavily nested residual style is so slow, it seems like a hang
        https://bugs.webkit.org/show_bug.cgi?id=34059
        <rdar://problem/7292906>
        
        Test cast: fast/parser/residual-style-hang.html

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks):
        Limit the number of iterations of the main loop to 5.
        
        The reason this limit is necessary is that otherwise, N misnested open tags followed
        by N misnested close tags will cause O(N^2) of work due to cloning and attaching subtrees;
        at a fixed limit, the cost is at worst O(N).
        
        The code that was in the loop originally ran exactly once - the loop was added in
        r21472 to fix <https://bugs.webkit.org/show_bug.cgi?id=13603>. I have verified that
        with the iteration limit, the bug is still fixed, both with the original test case
        and with the layout tests tht were added.

2010-01-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        HTMLInputElement::valueAsDate setter support for type=week.
        https://bugs.webkit.org/show_bug.cgi?id=33986

        Introduce ISODateTime::setMillisecondsSinceEpochForWeek() and add
        Week type support to ISODateTime::toString().

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::valueAsDate): Avoid default:.
        (WebCore::HTMLInputElement::setValueAsDate):
          Add WEEK type handling and avoid default:.
        * html/ISODateTime.cpp:
        (WebCore::offsetTo1stWeekStart):
        (WebCore::ISODateTime::setMillisecondsSinceEpochForWeek):
        (WebCore::ISODateTime::millisecondsSinceEpoch):
        (WebCore::ISODateTime::toString):
          Add Week type support and avoid default:.
        * html/ISODateTime.h:

2010-01-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Object Serialization assumes deserialization will always occur in the context of a webpage
        https://bugs.webkit.org/show_bug.cgi?id=34056
        rdar://7573833

        Added ClassInfo to JSDOMGlobalObject and make the window and worker class info
        inherit from it.  With this in place we're able to determine whether a given
        global object is a DOMGlobalObject, and then use that information to avoid
        attempting to deserialize types that require the presence of the DOM.

        No test as all global objects in webkit inherit from JSDOMGlobalObject.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::JSDOMGlobalObject::classInfo):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::):
        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore::):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::DeserializingTreeWalker::DeserializingTreeWalker):
        (WebCore::DeserializingTreeWalker::convertIfTerminal):

2010-01-24  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=34047
        <rdar://problem/7573699>
        Media element "endedPlayback" logic doesn't match spec

        Test: media/video-timeupdate-reverse-play.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::ended): The 'ended' attribute should only be true when playback
        rate is positive.
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Always schedule a 'timeupdate' event when
        the media engine signals a time discontinuity, scheduleTimeupdateEvent will only queue an event
        if one hasn't already been posted for the current movie time.
        (WebCore::HTMLMediaElement::endedPlayback): Update to match the spec logic.

2010-01-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Video that loads inside reflection doesn't get reflected
        https://bugs.webkit.org/show_bug.cgi?id=34046
        
        ensureCloneLayers() made an incorrect assumption that if a clone of the primaryLayer
        exists already, then the structural layer and content layer can just be returned.
        However, this doesn't account for the situation where a content layer may have
        been create after the clone tree was last updated.
        
        Fix by always creating the structural and clone layers on demand.

        Test: compositing/reflections/load-video-in-reflection.html

        * platform/graphics/mac/GraphicsLayerCA.h: Added utility method, findOrMakeClone().
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::findOrMakeClone): Utility that efficiently finds
        or creates a layer in a LayerMap.
        (WebCore::GraphicsLayerCA::ensureCloneLayers): Always look for or clone the
        structural and content layers, rather than relying on whether there's a primary
        layer clone already.

2010-01-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Implement support for FileList cloning in postMessage
        https://bugs.webkit.org/show_bug.cgi?id=34048

        Support passing FileList through postMessage APIs.  Basically
        mechanical task in line with other terminals in the object
        graph.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedFileList::create):
        (WebCore::SerializedFileList::length):
        (WebCore::SerializedFileList::item):
        (WebCore::SerializedFileList::SerializedFileList):
        (WebCore::SerializedScriptValueData::SerializedScriptValueData):
        (WebCore::SharedSerializedData::asFileList):
        (WebCore::SerializingTreeWalker::convertIfTerminal):
        (WebCore::DeserializingTreeWalker::convertIfTerminal):
        (WebCore::TeardownTreeWalker::convertIfTerminal):
            Rearrange these functions to not use 'default:' handling
            so that the compiler will actually tell us when we're
            not handling cases.
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValueData::):
        (WebCore::SerializedScriptValueData::asFileList):

2010-01-23  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Inject inspector script directly into the inspected context. All the
        communication between the script and the frontend is serialized into
        JSON strings. It allows to get rid of object quarantines in Web Inspector.

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

        Test: inspector/console-log-before-inspector-open.html

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::databaseForId):
        (WebCore::JSInjectedScriptHost::currentCallFrame):
        (WebCore::JSInjectedScriptHost::nodeForId):
        (WebCore::JSInjectedScriptHost::pushNodePathToFrontend):
        (WebCore::JSInjectedScriptHost::selectDatabase):
        (WebCore::JSInjectedScriptHost::selectDOMStorage):
        * bindings/js/ScriptCallStack.h:
        (WebCore::ScriptCallStack::globalState):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::mainWorldScriptState):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptObject.h:
        (WebCore::ScriptObject::scriptState):
        * bindings/js/ScriptValue.cpp:
        * bindings/js/ScriptValue.h:
        * bindings/v8/ScriptCallStack.h:
        (WebCore::ScriptCallStack::globalState):
        * bindings/v8/ScriptObject.h:
        (WebCore::ScriptObject::scriptState):
        * bindings/v8/ScriptValue.h:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::addToConsole):
        (WebCore::ConsoleMessage::isEqual):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::releaseWrapperObjectGroup):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::setInjectedScriptSource):
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        (WebCore::InspectorBackend::releaseWrapperObjectGroup):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::clearConsoleMessages):
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::didPause):
        (WebCore::InspectorController::injectedScriptForNodeId):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addConsoleMessage):
        (WebCore::InspectorFrontend::pausedScript):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype._reloadResources):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.requestClearMessages):
        (WebInspector.ConsoleView.prototype.doEvalInWindow):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.CSSStyleDeclaration):
        (WebInspector.CSSStyleDeclaration.parseRule):
        * inspector/front-end/Database.js:
        (WebInspector.Database.prototype.executeSql):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged.InjectedScriptAccess.get addInspectedNode):
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel.prototype.setDocument):
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.performSearch):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.createTooltipForImageNode):
        * inspector/front-end/EventListenersSidebarPane.js:
        ():
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        (injectedScriptConstructor.):
        * inspector/front-end/InjectedScriptAccess.js:
        (InjectedScriptAccess):
        (InjectedScriptAccess.getDefault):
        (get InjectedScriptAccess):
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.prototype.methodName):
        (InjectedScriptAccess._installHandler):
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane):
        (WebInspector.MetricsSidebarPane.prototype.update.inlineStyleCallback):
        * inspector/front-end/ObjectPropertiesSection.js:
        * inspector/front-end/ObjectProxy.js:
        (WebInspector.ObjectProxy):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.callback):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.ondblclick):
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.pausedScript):
        (WebInspector.addConsoleMessage):
        (WebInspector.log.logMessage):
        (WebInspector.log):

2010-01-22  Alex Milowski  <alex@milowski.com>

        Reviewed by David Hyatt.

        Added support for RenderMathMLBlock base object and isRenderMathMLBlock()
        method on RenderObject. 

        Added support for text elements and updated tag and attribute names

        Also, updated the stylesheet added files to the project

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * css/mathml.css:
        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::createRenderer):
        * mathml/MathMLTextElement.cpp: Added.
        (WebCore::MathMLTextElement::MathMLTextElement):
        (WebCore::MathMLTextElement::create):
        (WebCore::MathMLTextElement::createRenderer):
        * mathml/MathMLTextElement.h: Added.
        * mathml/RenderMathMLBlock.cpp: Added.
        (WebCore::RenderMathMLBlock::RenderMathMLBlock):
        (WebCore::RenderMathMLBlock::styleDidChange):
        (WebCore::RenderMathMLBlock::isChildAllowed):
        (WebCore::RenderMathMLBlock::makeBlockStyle):
        (WebCore::RenderMathMLBlock::nonOperatorHeight):
        (WebCore::RenderMathMLBlock::stretchToHeight):
        * mathml/RenderMathMLBlock.h: Added.
        (WebCore::RenderMathMLBlock::isRenderMathMLBlock):
        (WebCore::RenderMathMLBlock::isRenderMathMLOperator):
        (WebCore::RenderMathMLBlock::isRenderMathMLRow):
        (WebCore::RenderMathMLBlock::isRenderMathMLMath):
        (WebCore::RenderMathMLBlock::hasBase):
        (WebCore::toRenderMathMLBlock):
        * mathml/mathattrs.in: Added.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderMathMLBlock):

2010-01-22  James Robinson  <jamesr@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Ensures that the 'selected' attribute of an <option> is correct
        https://bugs.webkit.org/show_bug.cgi?id=32641

        Adds a check in OptionElement::selected() that checks if list items need to be recalculated and does so if needed,
        so the attribute is up to date more often.  Also gets rid of most of the recalcStyle() side effects.

         Our behavior now matches Firefox 3.5 and IE8 after the </select> is parsed.

         Tests: fast/forms/HTMLOptionElement_selected2.html
                fast/forms/HTMLOptionElement_selected3.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::setOptionsChangedOnRenderer):
        (WebCore::SelectElement::setRecalcListItems):
        (WebCore::SelectElement::recalcListItems):
        (WebCore::SelectElement::restoreFormControlState):
        (WebCore::SelectElement::reset):
        (WebCore::SelectElement::typeAheadFind):
        * dom/SelectElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::selected):
        (WebCore::HTMLOptionElement::insertedIntoTree):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcStyle):
        (WebCore::HTMLSelectElement::recalcListItemsIfNeeded):
        * html/HTMLSelectElement.h:
        * wml/WMLSelectElement.cpp:
        (WebCore::WMLSelectElement::recalcStyle):

2010-01-22  Chris Rogers  <crogers@google.com>

        Reviewed by Eric Seidel.

        Need to handle WebGLUnsignedByteArray as method argument for V8 binding
        https://bugs.webkit.org/show_bug.cgi?id=33929

        V8 code generator does not have associated tests

        * bindings/scripts/CodeGeneratorV8.pm:

2010-01-22  Elliot Glaysher  <erg@chromium.org>

        Reviewed by David Levin.

        Chromium: theme selection colors to match gtk theme
        Add functions to RenderThemeChromiumLinux to change the selection color
        according to the current GTK+ theme.

        Since the change is to the Chromium WebKit API layer, testing is done
        in Chromium's test shell (see Chromium side of this patch:
        http://codereview.chromium.org/554004)

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

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumLinux::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumLinux::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeChromiumLinux::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeChromiumLinux::setSelectionColors):
        * rendering/RenderThemeChromiumLinux.h: Adds static members.

2010-01-22  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Remove the Bakefile build system, which is no longer being used.
        
        https://bugs.webkit.org/show_bug.cgi?id=34022

        * WebCoreSources.bkl: Removed.
        * webcore-base.bkl: Removed.
        * webcore-wx.bkl: Removed.

2010-01-22  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin Adler.

        Remove unnecessary copy of zlib.
        https://bugs.webkit.org/show_bug.cgi?id=34028

        * platform/image-decoders/zlib: Removed.
        * platform/image-decoders/zlib/adler32.c: Removed.
        * platform/image-decoders/zlib/compress.c: Removed.
        * platform/image-decoders/zlib/crc32.c: Removed.
        * platform/image-decoders/zlib/crc32.h: Removed.
        * platform/image-decoders/zlib/deflate.c: Removed.
        * platform/image-decoders/zlib/deflate.h: Removed.
        * platform/image-decoders/zlib/gzio.c: Removed.
        * platform/image-decoders/zlib/infback.c: Removed.
        * platform/image-decoders/zlib/inffast.c: Removed.
        * platform/image-decoders/zlib/inffast.h: Removed.
        * platform/image-decoders/zlib/inffixed.h: Removed.
        * platform/image-decoders/zlib/inflate.c: Removed.
        * platform/image-decoders/zlib/inflate.h: Removed.
        * platform/image-decoders/zlib/inftrees.c: Removed.
        * platform/image-decoders/zlib/inftrees.h: Removed.
        * platform/image-decoders/zlib/mozzconf.h: Removed.
        * platform/image-decoders/zlib/trees.c: Removed.
        * platform/image-decoders/zlib/trees.h: Removed.
        * platform/image-decoders/zlib/uncompr.c: Removed.
        * platform/image-decoders/zlib/zconf.h: Removed.
        * platform/image-decoders/zlib/zlib.h: Removed.
        * platform/image-decoders/zlib/zutil.c: Removed.
        * platform/image-decoders/zlib/zutil.h: Removed.

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=34025
        Enable client-based Geolocation abstraction for Mac, Windows AppleWebKit targets.

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:

2010-01-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Carlson.

        Race condition in video setup can force videos into software mode
        https://bugs.webkit.org/show_bug.cgi?id=34034

        We used to call setUpVideoRendering() unconditionally from
        acceleratedRenderingStateChanged(); this could happen before the movie had any
        data, and thus force the movie into software rendering mode.
        
        Fix by returning early from setUpVideoRendering() if isReadyForRendering() returns false,
        which also allows us to remove some other checks for being ready to render.
        
        Timing dependent, hard to make a test for.

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setContentsToMedia): Optimize to do an early return
        if passing in the same layer that is already being used.
        
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::setUpVideoRendering): Return without doing anything
        if not ready to render.
        (WebCore::MediaPlayerPrivate::updateStates): No need to call isReadyForRendering()
        any more, since setUpVideoRendering() does that.
        (WebCore::MediaPlayerPrivate::setVisible): No need to check the ready state; this
        is equivalent to the check inside of setUpVideoRendering().

2010-01-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION (r53110): Find My iPhone message dialog is offset from original position once it gets focus
        https://bugs.webkit.org/show_bug.cgi?id=33821

        Fix an issue with the geometry of fixed position, composited layers inside other
        composited layers. If we called convertToLayerCoords() on a fixed layer with an ancestor
        layer which is not the root, then we assumed that the fixed layer had a positioning root.
        However, this is not always the case, since the fixed layer may have a compositing ancestor
        which is not a fixed container.
        
        Test: compositing/geometry/fixed-in-composited.html

        * rendering/RenderLayer.cpp:
        (WebCore::isFixedPositionedContainer): Utility function to test whether a layer acts
        as a fixed position container.
        
        (WebCore::RenderLayer::convertToLayerCoords): When called on a fixed position layer
        for an ancestor layer that is not the root, compute the correct offsets by looking for
        the fixed position container, and computing offsets relative to that. If the ancestorLayer
        is the fixed position container, fall through to the existing code that is shared
        with absolutely positioned layers.

2010-01-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        webkitConvertPointFromNodeToPage doesn't take into account most recent transform style
        https://bugs.webkit.org/show_bug.cgi?id=34023

        Be sure to call updateLayoutIgnorePendingStylesheets() before doing point mapping,
        to apply any style changes since the last layout.

        Test: fast/dom/Window/webkitConvertPointUpdateLayout.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitConvertPointFromNodeToPage): Call updateLayoutIgnorePendingStylesheets().
        (WebCore::DOMWindow::webkitConvertPointFromPageToNode): Ditto.

2010-01-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Roben.

        Use stale cache data when going back and forward but not using WebCore’s page cache
        https://bugs.webkit.org/show_bug.cgi?id=33993
        <rdar://problem/7383392>

        No tests since this is a performance change.

        * loader/CachePolicy.h:
        (WebCore::): Add CachePolicyAllowStale.
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::checkForReload): Never reload in the case of
        CachePolicyAllowStale.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::subresourceCachePolicy): Return CachePolicyAllowStale
        if the main resource is being loaded to allow stale data.
        (WebCore::FrameLoader::addExtraFieldsToRequest): Use ReturnCacheDataElseLoad
        on back/forward loads - needed when going back of forward to a page with frames.

2010-01-22  Kelly Norton  <knorton@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: JavaScript Error in DOMAgent.js:375 (_attributesUpdated)
        https://bugs.webkit.org/show_bug.cgi?id=33915

        Errors were caused by the fact that Element::attributes calls Element::setAttribute to
        synchronized the styleAttr. The fix is to simply check the synchronizing style attribute
        flag.

        * dom/Element.cpp:
        (WebCore::Element::setAttribute): Checked for case where styleAttr is being synchronized.

2010-01-22  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Update r53711 for GraphicsLayer method rename.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::createLayerForMovie): Rename from change setContentsToVideo.

2010-01-22  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Adler.

        Add BlobConstructor to DOMWindow.
        https://bugs.webkit.org/show_bug.cgi?id=33982

        * page/DOMWindow.idl:

2010-01-22  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by Adam Roben.
        
        Commit files that were supposed to be part of r53696, but weren't
        landed.

        * English.lproj/localizedStrings.js:
        * manual-tests/debugger-caught-uncaught-exceptions.html: Added.

2010-01-22  Peter Kasting  <pkasting@google.com>

        Reviewed by David Hyatt.

        When scrolling by page, hold back 1/8th of the visible size instead of
        40 px.
        https://bugs.webkit.org/show_bug.cgi?id=32595

        * editing/EditorCommand.cpp:
        (WebCore::verticalScrollDistance):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::wheelEvent):
        * platform/Scrollbar.h:
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::OnScrollWinEvents):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):

2010-01-22  Peter Kasting  <pkasting@google.com>

        Not reviewed, backout.

        Back out r52673, which caused several regressions.
        https://bugs.webkit.org/show_bug.cgi?id=32533

        * platform/PopupMenuClient.h:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::hidePopup):
        (WebCore::PopupListBox::handleKeyEvent):
        (WebCore::PopupListBox::abandon):
        (WebCore::PopupListBox::acceptIndex):
        (WebCore::PopupListBox::selectIndex):
        (WebCore::PopupListBox::clearSelection):
        (WebCore::PopupListBox::hidePopup):
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::menuUnmapped):
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::show):
        * platform/qt/QtAbstractWebPopup.cpp:
        (WebCore::QtAbstractWebPopup::popupDidHide):
        * platform/qt/QtAbstractWebPopup.h:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::hide):
        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenu::OnMenuItemSelected):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::popupDidHide):
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::popupDidHide):
        * rendering/RenderTextControlSingleLine.h:

2010-01-22  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Darin Adler.

        Revert r53693 because it broke scrolling of pages with fixed elements on
        Mac OS X.

        * page/FrameView.cpp:
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        * platform/ScrollView.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):
        (WebCore::RenderObject::destroy):

2010-01-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=34008
        Assertion failure in KURL::setProtocol when running DOM Fuzzer

        Test: fast/dom/Window/invalid-protocol.html

        * bindings/js/JSLocationCustom.cpp: (WebCore::JSLocation::setProtocol): Raise an exception
        if KURL::setProtocol fails.

        * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::setProtocol): Move argument
        tweaking logic into KURL. This way, the ':' trick applies to both JSLocation and
        HTMLAnchorElement, matching IE (but not Firefox). IE behavior is more permissive, and even
        more logical in my opinion.

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::iconURL): Assert that setting protocol
        succeeded.

        * platform/KURL.cpp: (WebCore::KURL::setProtocol): Remove everything past ':', if present.
        Return false if the protocol to set is not valid.
        (WebCore::isValidProtocol): Made this work correctly for empty strings.

        * platform/KURL.h: isValidProtocol() is now static in KURL.cpp, it's only used in setProtocol().

        * platform/KURLGoogle.cpp: 
        (WebCore::KURL::setProtocol): Always return true. This should hopefully prevent Chromium build
        breakage, alhough tests will likely fail.
        (WebCore::isValidProtocol): Removed, as this isn't used at the moment.

        * websockets/WebSocketHandshake.cpp: (WebCore::WebSocketHandshake::httpURLForAuthenticationAndCookies):
        Assert that setting protocol succeeded.

2010-01-22  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/7373568>
        https://bugs.webkit.org/show_bug.cgi?id=34007
        Implement hardware acceleration of video compositing on Windows

        Internally we still have QuickTime render to a bitmap, but frames are then composited
        with the page using an accelerated renderer.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): Initialize m_newFrameAvailable.
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate): Call tearDownVideoRendering.
        (WebCore::MediaPlayerPrivate::cancelLoad): Call tearDownVideoRendering.
        (WebCore::MediaPlayerPrivate::updateStates): Call setUpVideoRendering once the movie 
            is ready to draw.
        (WebCore::MediaPlayerPrivate::isReadyForRendering): New, utility function returns true 
            only when movie is ready to render.
        (WebCore::MediaPlayerPrivate::setSize): Remember the size as we need it when rendering 
            in accelerated mode.
        (WebCore::MediaPlayerPrivate::setVisible): Call setUpVideoRendering when made visible.
        (WebCore::MediaPlayerPrivate::paint): Do nothing when rendering to a layer. Move frame 
            rate drawing code to paintCompleted.
        (WebCore::MediaPlayerPrivate::paintCompleted): New, clear m_newFrameAvailable and, when 
            built with DRAW_FRAME_RATE, draw framerate.
        (WebCore::MediaPlayerPrivate::movieNewImageAvailable): Set m_newFrameAvailable, trigger 
            repaint differently when drawing to a layer.
        (WebCore::MediaPlayerPrivate::currentRenderingMode): New, return the current rendering mode.
        (WebCore::MediaPlayerPrivate::preferredRenderingMode): New, return preferred rendering mode
            (render to a layer whenever possible).
        (WebCore::MediaPlayerPrivate::setUpVideoRendering): New, tear down current rendering mode 
            and set up new mode when necessary.
        (WebCore::MediaPlayerPrivate::tearDownVideoRendering): New, noop unless rendering to a layer.
        (WebCore::MediaPlayerPrivate::hasSetUpVideoRendering): New.
        (WebCore::MediaPlayerPrivate::paintContents): New, callback from compositing layer when it
            is time to draw the current frame.
        (WebCore::MediaPlayerPrivate::createLayerForMovie): New, allocate a layer for the movie.
        (WebCore::MediaPlayerPrivate::destroyLayerForMovie): New, delete movie layer.
        (WebCore::MediaPlayerPrivate::supportsAcceleratedRendering): New, return true unless the 
            movie is not ready to render.
        (WebCore::MediaPlayerPrivate::acceleratedRenderingStateChanged): New, deal with change in 
            accelerated rendering state.
        (WebCore::MediaPlayerPrivate::notifySyncRequired): New, callback from compositing layer 
            when it wants to schedule a redraw.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
        (WebCore::MediaPlayerPrivate::notifyAnimationStarted):
        (WebCore::MediaPlayerPrivate::showDebugBorders):
        (WebCore::MediaPlayerPrivate::showRepaintCounter):

        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::getCurrentFrameInfo):
            New, return information about the offscreen render buffer.
        (QTMovieWin::initializeQuickTime):
        * platform/graphics/win/QTMovieWin.h:

2010-01-21  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        The Chromium WebKit API needs to expose storage event related data
        https://bugs.webkit.org/show_bug.cgi?id=33985

        This change is not visible to layoutTests/web pages.

        * storage/StorageArea.h:
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::setItem): return the old value
        (WebCore::StorageAreaImpl::removeItem): return the old value
        (WebCore::StorageAreaImpl::clear): return whether there was anything to clear
        * storage/StorageAreaImpl.h:

2010-01-22  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein.

        An element that doesn't validate and an invalid element shouldn't share style
        https://bugs.webkit.org/show_bug.cgi?id=34010

        Test: fast/css/pseudo-invalid-novalidate-001.html

        * css/CSSStyleSelector.cpp: (WebCore::CSSStyleSelector::canShareStyleWithElement): 
          Separate the check for willValidate from the check for isValidFormControlElement.
        * html/HTMLFormControlElement.h: The validity method doesn't need to be virtual.

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

        Reviewed by Dan Bernstein.

        Crash in fast/dom/Window/window-properties if Geolocation enabled
        https://bugs.webkit.org/show_bug.cgi?id=34013
        
        Add null check to fix Geolocation crash in fast/dom/Window/window-properties.
        
        * page/Geolocation.cpp:
        (WebCore::createGeoposition):

2010-01-22  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Darin Adler.

        Object.getOwnPropertyDescriptor(window) returns descriptors for properties in the prototype chain
        https://bugs.webkit.org/show_bug.cgi?id=33948

        Even though prototype properties are proxied by JSDOMWindow::getOwnPropertySlot(),
        that proxying should not be performed by JSDOMWindow::getOwnPropertyDescriptor().

        This makes getOwnPropertyDescriptor() consistent with getOwnPropertyNames().

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

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertyDescriptor):

2010-01-22  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Save the QWebPageClient instead of the ownerWidget in QtAbstractWebPopup
        
        The QWebPageClient is required for the QtFallbackWebPopup. QtFallbackWebPopup will
        need it to create a QGraphicsProxyWidget (in a future commit) for the 
        QGraphicsWebView's web popup.

        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::show):
        * platform/qt/QtAbstractWebPopup.cpp:
        (WebCore::QtAbstractWebPopup::QtAbstractWebPopup):
        (WebCore::QtAbstractWebPopup::popupDidHide):
        (WebCore::QtAbstractWebPopup::valueChanged):
        (WebCore::QtAbstractWebPopup::itemType):
        * platform/qt/QtAbstractWebPopup.h:
        (WebCore::QtAbstractWebPopup::itemText):
        (WebCore::QtAbstractWebPopup::itemToolTip):
        (WebCore::QtAbstractWebPopup::itemIsEnabled):
        (WebCore::QtAbstractWebPopup::itemCount):
        (WebCore::QtAbstractWebPopup::pageClient):
        (WebCore::QtAbstractWebPopup::font):

2010-01-22  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Qt "build" fix.

        * WebCore.pro: Fix warning about missing header file that isn't present anymore.

2010-01-22  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha Silva.

        Update copy of the source whenever playbin2's source property
        changes.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateSourceChangedCallback):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
        Connect to the notify::source signal and update the source
        element pointer from there. This makes sure that we never
        store a pointer to an old source element.

2010-01-22  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Caught exceptions still pause the debugger.
        <https://bugs.webkit.org/show_bug.cgi?id=28622>.

        Turn the pauseOnExceptions variable from a bool to an int, because we now have
        3 states, in an enum: DontPauseOnExceptions, PauseOnAllExceptions, and
        PauseOnUncaughtExceptions. The status button for pausing on exceptions is now
        a tri-state button, which cycles from Don't pause (no background) to Pause on All
        (blue background) to Pause on Uncaught (purple background).

        Also added the ability for a status button to have more than 2 states, and added
        style rules for a CSS three state button.

        Added a manual test, manual-tests/debugger-caught-uncaught-exceptions.html, that
        generates caught and uncaught exceptions.

        * English.lproj/localizedStrings.js: Added updated Action / Click to Action text.
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::pauseOnExceptions): Changed from a bool to an int.
        (WebCore::InspectorBackend::setPauseOnExceptions): Ditto.
        * inspector/InspectorBackend.h: Ditto.
        * inspector/InspectorBackend.idl: Ditto.
        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::JavaScriptDebugServer): Changed from bool to PauseOnExceptionsState.
        (WebCore::JavaScriptDebugServer::setPauseOnExceptions): Ditto.
        (WebCore::JavaScriptDebugServer::exception): Updated logic to see if we are breaking
            on uncaught exceptions, and check if we have a handler.
        * inspector/JavaScriptDebugServer.h:
        (WebCore::JavaScriptDebugServer::): Changed from bool to PauseOnExceptionsState.
        (WebCore::JavaScriptDebugServer::pauseOnExceptions): Ditto.
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.pauseOnExceptionsState): Changed from returning false to returning 0 (stub function).
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._updatePauseOnExceptionsButton): Updated to new text/new cycling of variables.
        (WebInspector.ScriptsPanel.prototype._togglePauseOnExceptions): Updated to new text/new cycling of variables.
        * inspector/front-end/StatusBarButton.js:
        (WebInspector.StatusBarButton): Added the option for a different number of states.
        (WebInspector.StatusBarButton.prototype.set toggled): Added rules to toggle on/off with multiple states.
        * inspector/front-end/inspector.css: Added rules for toggled-1 and toggled-2.
        * manual-tests/debugger-caught-uncaught-exceptions.html: Added.

2010-01-22  Ben Murdoch  <benm@google.com>

        Reviewed by Eric Seidel.

        [Android] Android platform specific PlatformTouchEvent and PlatformTouchPoint implementations are not upstream.
        https://bugs.webkit.org/show_bug.cgi?id=33719

        Add the Android specific files and update the Android makefile.

        No new tests as this is all Android-specific code.

        * Android.mk: Add Touch event related files to the makefile.
        * platform/PlatformTouchEvent.h: Add Android constructor.
        * platform/PlatformTouchPoint.h: Ditto.
        * platform/android/PlatformTouchEventAndroid.cpp: Added.
        (WebCore::PlatformTouchEvent::PlatformTouchEvent): Android implementation.
        * platform/android/PlatformTouchPointAndroid.cpp: Added.
        (WebCore::PlatformTouchPoint::PlatformTouchPoint): Android implementation.

2010-01-22  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

        The RenderObjects with fixed position register to the view
        to be taken into account while scrolling.
        The scrolling code update specifically those elements after blitting the pixels.

        * page/FrameView.cpp:
        (WebCore::FrameView::registerFixedPositionedObject):
        (WebCore::FrameView::unregisterFixedPositionedObject):
        (WebCore::FrameView::scrollContentsFastPath):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::scrollContentsFastPath):
        * platform/ScrollView.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):
        (WebCore::RenderObject::destroy):

2010-01-22  Anton Muhin  <antonm@chromium.org>

        Reviewed by Eric Seidel.

        Adding ScriptWrappable into WebCore.
        This allows to associate custom information when Node
        gets wrapped into JavaScript wrapper.

        [v8, dom] Add a pointer field to C++ Node class
        https://bugs.webkit.org/show_bug.cgi?id=32430

        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptWrappable.h: Added.
        (WebCore::ScriptWrappable::ScriptWrappable):
        * bindings/v8/ScriptWrappable.h: Added.
        (WebCore::ScriptWrappable::ScriptWrappable):
        (WebCore::ScriptWrappable::wrapper):
        (WebCore::ScriptWrappable::setWrapper):
        (WebCore::ScriptWrappable::clearWrapper):
        * dom/Node.h:

2010-01-22  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Add stub implementation of dispatchOnInjectedScript method so that
        Chromium source can compile against it and the main fix for the bug
        28622 can be landed without breaking Chromium build.

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

        * inspector/InspectorBackend.h:
        (WebCore::InspectorBackend::dispatchOnInjectedScript):

2010-01-22  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Dmitry Titov.

        ENABLE(DATABASE) guard is missing in ScriptExecutionContext::~ScriptExecutionContext
        https://bugs.webkit.org/show_bug.cgi?id=33990

        Add missing ENABLE(DATABASE) guard.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):

2010-01-22  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=33590

        * bindings/scripts/generate-bindings.pl:

2010-01-22  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=33590

        Rename FEATURE_DEFINES_JAVASCRIPT to FEATURE_DEFINES and remove
        the hardcoded LANGUAGE_JAVASCRIPT=1, in preparation for its use by
        the GObject DOM bindings.

        * GNUmakefile.am:

2010-01-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7568696> Zoom applied to embedded SVG incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=33988

        Test: svg/custom/text-zoom.xhtml

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement): Initialize m_scale.
        (WebCore::SVGSVGElement::currentScale): If this is the document element,
        return the frame’s zoom factor. Otherwise, return m_scale.
        (WebCore::SVGSVGElement::setCurrentScale): If this is the document element,
        set the frame’s zoom factor. Otherwise, set m_scale and mark for layout.
        * svg/SVGSVGElement.h: Added m_scale member.

2010-01-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [chromium] Add allowPlugins callback to allow per-site enabling of plugins
        https://bugs.webkit.org/show_bug.cgi?id=33974

        Add a callback into the FrameLoaderClient to let the embedder enable or
        disable plugins on a per-site basis.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestObject):
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::allowPlugins):

2010-01-21  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25501
        Remove empty font tags when applying a style to a content editable
        region.

        Test: editing/execCommand/change-font.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::isEmptyFontTag):

2010-01-21  Joe Mason  <jmason@rim.com>

        Reviewed by Darin Adler.

        Promote pow argument to double to resolve ambiguous overload (compile fix for RVCT 4.0)
        https://bugs.webkit.org/show_bug.cgi?id=33952

        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::gamma):

2010-01-21  Andrei Popescu  <andreip@google.com>

        Reviewed by David Levin.

        [Android] bindings/v8/ScriptController.cpp needs to include
        PlatformBridge.h instead of ChromiumBridge.h so that it can
        be used on both Chromium and Android.
        https://bugs.webkit.org/show_bug.cgi?id=33673

        Add "static NPObject* pluginScriptableObject(Widget*);" method
        to PlatformBridge.h
        Include PlatformBridge.h from ScriptController.cpp.

        No new tests, just platform code.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * platform/android/PlatformBridge.h:

2010-01-21  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej Stachowiak.

        history.back() for same-document history traversals isn't synchronous as the specification states.
        <rdar://problem/7535011> and https://bugs.webkit.org/show_bug.cgi?id=33538

        In resolving https://bugs.webkit.org/show_bug.cgi?id=25570, all history.back()/forward()/go() navigations
        were made asynchronous. That doesn't agree with the HTML5 spec and might have been overreaching for fixing
        that particular bug. In working with the new history state APIs I noticed some things that should've been
        possible were not possible because of this change.

        The change in loading behavior is well covered via modifications to previous tests.

        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::scheduleHistoryNavigation): Determine beforehand if the traversal is
          a same-document navigation. If it is, perform the load directly instead of scheduling it.

2010-01-21  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Don't allow Phonon's invisible video widget to keep the app running.
        https://bugs.webkit.org/show_bug.cgi?id=33842

        The change made in r38223 should not be limited to Qt < 4.5 only.

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):

2010-01-21  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        HTMLInputElement::valueAsDate setter support for type=datetime.
        https://bugs.webkit.org/show_bug.cgi?id=33939

        Introduce ISODateTime::setMillisecondsSinceEpochForDateTime() and add
        DateTime type support to ISODateTime::toString().

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValueAsDate):
        * html/ISODateTime.cpp:
        (WebCore::ISODateTime::setMillisecondsSinceEpochForDate):
         Set Invalid to m_type.
        (WebCore::ISODateTime::setMillisecondsSinceEpochForDateTime):
        (WebCore::ISODateTime::setMillisecondsSinceEpochForMonth):
         Set Invalid to m_type.
        (WebCore::ISODateTime::setMillisecondsSinceMidnight):
         Set Invalid to m_type.
        (WebCore::ISODateTime::toString):
         Support DateTime type. This always produces UTC representation.
        * html/ISODateTime.h:

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

        Reviewed by Sam Weinig.

        Fixed <rdar://problem/7562574> ASSERT in WebCore::removeWrapper() at the
        end of run-webkit-tests
        
        This was an ASSERT-only bug, introduced by isolated worlds, which
        created the novelty of a wrapper that might outlive its wrapper cache.
        
        When a wrapper outlived its wrapper cache, both the wrapper's destructor
        and the wrapper cache's destructor would claim to have uncached the wrapper,
        causing an ASSERT to fire.
        
        The solution is to distinguish between operations that logically add and
        remove cache entries, and operations that delete whole caches. We track
        when a cache entry is logically added, and when it's logically removed,
        independent of whether the actual cache still exists.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::willCacheWrapper):
        (WebCore::didUncacheWrapper): New names for these functions to help
        explain what they track.

        (WebCore::DOMWrapperWorld::~DOMWrapperWorld): Don't claim to uncache
        all the wrappers in the world; we're deleting the cache, not managing its
        entries.

        (WebCore::cacheDOMObjectWrapper):
        (WebCore::forgetDOMObject):
        (WebCore::forgetDOMNode):
        (WebCore::cacheDOMNodeWrapper):
        (WebCore::forgetAllDOMNodesForDocument):
        (WebCore::forgetWorldOfDOMNodesForDocument):
        (WebCore::takeWrappers):
        (WebCore::updateDOMNodeDocument): Updated for renames.

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

        Reviewed by Sam Weinig.

        SVG JS bindings "context" pointer needs to move onto binding impls
        https://bugs.webkit.org/show_bug.cgi?id=27243

        Rewrite SVG DOM JSC bindings to use a global DOMObject <-> SVGElement context map, similar to V8's approach.
        This allows us to remove DOMObjectWithSVGContext and make all SVG JS objects use DOMObjectWithGlobalPointer.
        We're fitting again in JS_CELL_SIZE, and there's no need to special case SVG anymore.

        Not adding a new test, as we have yet to identify how to test that we're passing around correct global objects.
        For now this is just a code cleanup which lets me continue making progress in that area of the code.

        * GNUmakefile.am: Add new DOMObjectWithSVGContext.h to build.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/DOMObjectWithSVGContext.h: Removed.
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::setDOMException): Add comment, that passing 0 context is intentional.
        * bindings/js/JSDOMBinding.h:
        (WebCore::createDOMObjectWrapper): Add to JSSVGContextCache, when creating wrappers.
        (WebCore::getDOMObjectWrapper): Add assertion guarding the JSSVGContextCache is in-sync with the passed context.
        * bindings/js/JSSVGContextCache.h: Added. Maps DOMObjects to SVGElements - just like V8 approachs to this problem.
        (WebCore::JSSVGContextCache::wrapperMap):
        (WebCore::JSSVGContextCache::addWrapper):
        (WebCore::JSSVGContextCache::forgetWrapper):
        (WebCore::JSSVGContextCache::propagateSVGDOMChange): 
        (WebCore::JSSVGContextCache::svgContextForDOMObject):
        * bindings/js/JSSVGLengthCustom.cpp: Retrieve context from cache, instead of taking it from the JS* class.
        (WebCore::JSSVGLength::value):
        (WebCore::JSSVGLength::convertToSpecifiedUnits):
        * bindings/js/JSSVGMatrixCustom.cpp Ditto.:
        (WebCore::JSSVGMatrix::multiply):
        (WebCore::JSSVGMatrix::inverse):
        (WebCore::JSSVGMatrix::rotateFromVector):
        * bindings/js/JSSVGPODListCustom.h: Ditto.
        (WebCore::JSSVGPODListCustom::finishGetter):
        (WebCore::JSSVGPODListCustom::finishSetter):
        (WebCore::JSSVGPODListCustom::finishSetterReadOnlyResult):
        (WebCore::JSSVGPODListCustom::clear):
        (WebCore::JSSVGPODListCustom::initialize):
        * bindings/js/JSSVGPODTypeWrapper.h: Ditto.
        (WebCore::JSSVGDynamicPODTypeWrapper::commitChange):
        (WebCore::JSSVGStaticPODTypeWrapper::commitChange):
        (WebCore::JSSVGStaticPODTypeWrapperWithPODTypeParent::commitChange):
        (WebCore::JSSVGStaticPODTypeWrapperWithParent::commitChange):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::create):
        (WebCore::JSSVGPODTypeWrapperCreatorForList::commitChange):
        * bindings/js/JSSVGPathSegCustom.cpp: Ditto.
        (WebCore::toJS):
        * bindings/js/JSSVGPathSegListCustom.cpp: Ditto.
        (WebCore::JSSVGPathSegList::clear):
        (WebCore::JSSVGPathSegList::initialize):
        (WebCore::JSSVGPathSegList::getItem):
        (WebCore::JSSVGPathSegList::insertItemBefore):
        (WebCore::JSSVGPathSegList::replaceItem):
        (WebCore::JSSVGPathSegList::removeItem):
        (WebCore::JSSVGPathSegList::appendItem):
        * bindings/scripts/CodeGeneratorJS.pm:
        * svg/SVGAngle.h: Remove unneeded associatedAttributeName() method.
        * svg/SVGPreserveAspectRatio.h: Ditto.
        * svg/SVGTransform.h: Ditto.

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

        Build fix, add missing header.

        * dom/ScriptExecutionContext.cpp:

2010-01-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        -webkit-mask-box-image draws a box while loading
        https://bugs.webkit.org/show_bug.cgi?id=33979
        <rdar://problem/7378662>
        
        Don't render masked elements until the mask images are fully loaded.

        Test: http/tests/misc/slow-loading-mask.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintMaskImages): Check that all mask images (both the single mask-box-image,
        and the possibly multiple mask-image) are fully loaded before allowing the masked content to render.
        If they are not fully loaded, use a fully transparent transparency layer.
        
        * rendering/style/FillLayer.h:
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::imagesAreLoaded): New utility function that returns true if the image
        in every FillLayer is loaded.

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

        Reviewed by Mark Rowe.

        REGRESSION (r52795): New message created in response to mailto: URL has random character in message body
        rdar://problem/7565902

        This regression affects the Mac OS X Mail application.
        I was not able to find a simple way to create a regression test.

        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::SharedBuffer): Initialize m_size to 0 as in the other constructors.

2010-01-21  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Script tags are copied and pasted, making cross-domain attacks possible.
        https://bugs.webkit.org/show_bug.cgi?id=33970

        Tests: editing/pasteboard/paste-noscript-svg.html
               editing/pasteboard/paste-visible-script.html

        We remove the content and the attributes of every script tag before
        pasting into the destination.
        
        * dom/Element.cpp:
        (WebCore::Element::setAttributeMap): Now we are removing xlink:href
        if it contains javascript protocol.
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::parseToken): We strip all the script tag attributes
        we are parsing to create a fragment to paste.
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::HTMLTokenizer):
        (WebCore::HTMLTokenizer::scriptHandler): Removes the script text after it was parsed.
        * html/HTMLTokenizer.h:

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

        Reviewed by Dirk Schulze.

        <use> with % lengths does not update on window resize
        https://bugs.webkit.org/show_bug.cgi?id=14639

        appendChild broken for symbol-use
        https://bugs.webkit.org/show_bug.cgi?id=24802

        Test: svg/custom/relative-sized-shadow-tree-content-with-symbol.xhtml
              svg/custom/svg/custom/relative-sized-use-on-symbol.xhtml

        Fix reaction on window size changes for relative sized elements within <symbol> elements.
        Don't evaluate SVGUseElement width/height attributes in order to propagate them to the shadow tree,
        instead just propagate the attribute values itself so "100%" remains "100%" instead of being evaluated
        to an absolute pixel value in the parent <svg> user-space.

        Needs another fix in SVGStyledElement::childrenChanged(), which is a regression from my last <use>
        patch, that hasn't been detected, as the use-dynamic-append.svg testcase was broken.

        The combination of all the last <use> patches finally fixes the peepo.co.uk website, which was broken by several bugs for years.

        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::childrenChanged): Need to mark shadow trees needing recalcs, even when parsing.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged): Don't reclone for width/height attribute changes, just propagate them down the render tree
        (WebCore::updateContainerSize): Added helper function, updating the width/height attributes in the shadow tree.
        (WebCore::SVGUseElement::updateContainerSizes):
        (WebCore::SVGUseElement::buildShadowAndInstanceTree): Update container width/height after shadow tree creation, instead of doing it inbetween.
        (WebCore::SVGUseElement::buildShadowTree): Don't alter width/height attributes here anymore.
        (WebCore::SVGUseElement::expandUseElementsInShadowTree): Ditto.
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree): Ditto.
        * svg/SVGUseElement.h:

2010-01-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=33972
        Assertion failure in FrameLoader::checkLoadComplete()

        I couldn't make a test for this, after trying rather hard. I'm not too worried, because such
        a test has to depend on details of current implementation so intimately that it would become
        ineffective very quickly anyway.

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::stopAllLoaders): Stop the check timer, we
        don't need it after aborting load.

2010-01-21  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Dave Hyatt.

        Buildfix for r53646.

        * bindings/js/SerializedScriptValue.cpp: path of JSLock.h fixed.

2010-01-21  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r53644.

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::scroll): missing HAVE(ACCESSIBILITY) guard added.

2010-01-21  Darin Fisher  <darin@chromium.org>

        Reviewed by David Levin.

        Unnecessary call to HistoryItem::targetItem in HistoryController::pushState
        https://bugs.webkit.org/show_bug.cgi?id=33969

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::pushState): Remove unnecessary code.

2010-01-21  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, Chromium build fix. Add AccessibilityScrollbar.h and .cpp to WebCore.gypi

        * WebCore.gypi:

2010-01-21  Albert J. Wong  <ajwong@chromium.org>

        [chromium] Unreviewed build fix.

        Fix possible use of initialized variable warning in release mode.

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::ZigZag::Deserializer::doDeserialize):

2010-01-21  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix after r53644.

        * WebCore.pro: accessibility/AccessibilityScrollbar.cpp and accessibility/AccessibilityScrollbar.h added.

2010-01-21  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        Make sure to do a JSLock before deserialization of script values, since they can heap allocate.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValueData::deserialize):

2010-01-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver Hunt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=33923 REGRESSION 
        (Safari 4): AXValueChanged no longer sent for text area scrollbars
        -and corresponding-
        <rdar://problem/6942686>

        New class AccessibilityScrollbar inherits directly from 
        AccessibilityObject.
        * accessibility/AccessibilityScrollbar.cpp: Added.
        (WebCore::AccessibilityScrollbar::AccessibilityScrollbar):
        (WebCore::AccessibilityScrollbar::create):
        (WebCore::AccessibilityScrollbar::valueForRange):
        * accessibility/AccessibilityScrollbar.h: Added.
        (WebCore::AccessibilityScrollbar::setScrollbar):
        (WebCore::AccessibilityScrollbar::roleValue):
        (WebCore::AccessibilityScrollbar::accessibilityIsIgnored):
        (WebCore::AccessibilityScrollbar::size):
        (WebCore::AccessibilityScrollbar::elementRect):
        (WebCore::AccessibilityScrollbar::parentObject):

        AXObjectCache::getOrCreate() now has a case for ScrollBarRole, 
        which will create a new AccessibilityScrollbar. I also added a new 
        version of postNotification() that does not require a renderer. The 
        old postNotification() calls the new one.
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        (WebCore::AXObjectCache::postNotification):
        * accessibility/AXObjectCache.h:

        When AX is enabled, getOrCreate an AccessibilityScrollbar and send 
        a notification.
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::scroll):

        Fix project files.
        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:

2010-01-21  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Dmitry Titov.

        Add changes missing from r53595, without which Chromium has no database.

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

        No new tests - fixes database layout tests in Chromium.

        * bindings/v8/RuntimeEnabledFeatures.cpp:
        * bindings/v8/RuntimeEnabledFeatures.h:

2010-01-21  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Adam Treat.

        Don't call vgGetError()/eglGetError() repeatedly
        https://bugs.webkit.org/show_bug.cgi?id=33959

        For vgGetError(), I missed the part of the spec where
        it says that calling that function clears the error
        and subsequent calls will return VG_NO_ERROR again.

        For eglGetError(), the specification doesn't mention
        that kind of behavior, and interpretations seem to
        differ between EGL implementations (even within
        Khronos: the OpenVG reference implementation doesn't
        reset the error code - and even mentions the difference
        to vgGetError() in a comment - whereas the online
        OpenGL ES API document explicitly specifies clearing
        the error code).

        It thus makes sense not to call either of the two
        error functions more than once for checking a single
        EGL/OpenVG call. This patch adapts assertions to
        accommodate for this behavior, and also needs to
        change surface creation methods as they previously
        relied on multiple calls of eglGetError().

        * platform/graphics/openvg/EGLDisplayOpenVG.cpp:
        (WebCore::EGLDisplayOpenVG::sharedPlatformSurface):
        (WebCore::EGLDisplayOpenVG::createPbufferSurface):
        * platform/graphics/openvg/EGLDisplayOpenVG.h:
        * platform/graphics/openvg/EGLUtils.h:
        * platform/graphics/openvg/SurfaceOpenVG.cpp:
        (WebCore::SurfaceOpenVG::SurfaceOpenVG):
        * platform/graphics/openvg/SurfaceOpenVG.h:
        * platform/graphics/openvg/VGUtils.h:

2010-01-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Hit testing on composited plugins is broken
        https://bugs.webkit.org/show_bug.cgi?id=33927
        <rdar://problem/7559069>

        RenderWidget::paint()'s strategy of moving widgets at paint time, using tx and ty, was flawed
        because tx,ty are not always root-relative, especially when painting into compositing layers.
        This would move widgets to the wrong location, which caused hit testing issues.
        
        Widgets are usually positioned by layout. The one time this was not true was scrolling fixed-position
        elements, so we now reposition widgets after scrolling too.
        
        There was a related problem, which was that widgets expect the graphics context to be set up for
        root-relative painting. To fix this, adjust the CTM and the paintRect when the widget's frameRect
        is in a different coordinate system to the painting offset.
        
        Test: plugins/mouse-events-fixedpos.html

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChanged): Update widget positions, to handle widgets in fixed position
        elements, but only if we're not already inside of layout.

        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::translate): Add a translate() convenience method that takes a FloatSize.

        * platform/graphics/IntSize.h:
        (WebCore::IntSize::isZero): Add a convenience method for testing for a zero size.

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::paint): Adjust a comment.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint): Detect when the widget's frame is in a different coordinate system
        to painting, and adjust the CTM and paintRect in that case.

2010-01-21  Andrei Popescu  <andreip@google.com>

        Reviewed by David Levin.

        [Android] bindings/v8/NPV8Object.cpp does not compile on Android
        https://bugs.webkit.org/show_bug.cgi?id=33608

        Use the standard WebKit header in bridge/npruntime.h.
        Include PlatformBridge.h instead of ChroimiumBridge.h.
        Add popupsAllowed() method to PlatformBridge.h on Android.
        Add ARRAYSIZE_UNSAFE to PlatformBridge.h on Android.

        No new tests, fixing the build.

        * bindings/v8/NPV8Object.cpp:
        (_NPN_Evaluate):
        * bindings/v8/NPV8Object.h:
        * platform/android/PlatformBridge.h:

2010-01-21  Andrei Popescu  <andreip@google.com>

        Reviewed by David Levin.

        Add PlatformBridge.h header and a typedef to give ChromiumBridge a new name: PlatformBridge.
        https://bugs.webkit.org/show_bug.cgi?id=33917

        No new tests needed, this is just to allow other methods to call ChromiumBridge
        using the new 'PlatformBridge' name.

        * platform/chromium/PlatformBridge.h: Added.

2010-01-21  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix after r53625.

        Cleanup MediaPlayer and MediaPlayerPrivateInterface to remove dead methods
        https://bugs.webkit.org/show_bug.cgi?id=30106

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

2010-01-21  Andrei Popescu  <andreip@google.com>

        Reviewed by David Levin.

        [Android] bindings/v8/V8DOMWrapper.h[cpp] are missing guards for XPATH and XSLT features
        https://bugs.webkit.org/show_bug.cgi?id=33944

        Inside V8DOMWrapper.h[cpp], the code for XPATH and XSLT features is not guarded
        by the appropriate #if ENABLE(feature) macros. Add the missing guards.
        V8DOMWrapper.cpp includes ChromiumBridge.h for no reason. Remove the include.

        No new tests needed, functionality not changed.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        * bindings/v8/V8DOMWrapper.h:

2010-01-21  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Intermittent crash when media element is adopted by another document
        https://bugs.webkit.org/show_bug.cgi?id=33919
        rdar://problem/7557527
        
        Test: media/adopt-node-crash.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::willMoveToNewOwnerDocument): Unregister for
        document callbacks.
        (WebCore::HTMLMediaElement::didMoveToNewOwnerDocument): Register for
        document callbacks.
        * html/HTMLMediaElement.h:

2010-01-21  Adam Roben  <aroben@apple.com>

        More Windows build fixing

        * WebCore.vcproj/WebCore.vcproj: Copy bridge/jsc in the post-build
        event of all configurations, not just Debug.

2010-01-21  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix incorrect dependency to QtXmlPatterns in generated include/QtWebKit/QtWebKit header

        The generated file includes QtXmlPatterns/QtXmlPatterns, which is neither used/required by
        the public QtWebKit API nor will it be available if Qt is configured with -no-xmlpatterns.

        * WebCore.pro: Trick syncqt to believe that xmlpatterns is not a dependency, so that it's not
        included in the generated file. It'll still be used and linked to with this trick.

2010-01-21  Steve Block  <steveblock@google.com>

        Unreviewed build fix.

        Copy BridgeJSC.h to generated headers on Windows

        No new tests, build fix only.

        * WebCore.vcproj/WebCore.vcproj:

2010-01-21  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Cleanup MediaPlayer and MediaPlayerPrivateInterface to remove dead methods
        https://bugs.webkit.org/show_bug.cgi?id=30106

        No new tests, only dead code was removed.

        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        * platform/graphics/qt/MediaPlayerPrivatePhonon.h:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::currentTime):
        (WebCore::MediaPlayerPrivate::doSeek):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
        * platform/graphics/wince/MediaPlayerPrivateWince.h:

2010-01-21  Iain Campbell <iain.campbell@accenture.com>

        Reviewed by Simon Hausmann.

        [Qt] Simplify the qmake code for freezing QtWebKit on Symbian.

        * WebCore.pro:

2010-01-21  Steve Block  <steveblock@google.com>

        Unreviewed speculative build fix for Windows.

        Adds missing include path for JSCBridge.h on Windows, added in http://trac.webkit.org/changeset/53620

        No new tests, build fix only.

        * WebCore.vcproj/WebCoreCommon.vsprops:

2010-01-21  Steve Block  <steveblock@google.com>

        Unreviewed build fix.

        Adds missing include path for JSCBridge.h, added in http://trac.webkit.org/changeset/53620

        No new tests, build fix only.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

2010-01-21  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Move bridge interfaces Field, Class, Instance and Array from Bridge to BridgeJSC
        https://bugs.webkit.org/show_bug.cgi?id=33589

        These interfaces use JSC-specific types, so are moved out of Bridge.h to allow the file to
        be used with both JSC and V8.

        No new tests, refactoring only.

        * Android.jscbindings.mk: Modified. Removed Bridge.cpp and added BridgeJSC.cpp
        * GNUmakefile.am: Modified. Removed Bridge.cpp and added BridgeJSC.[cpp|h]
        * WebCore.pro: Modified. Removed Bridge.cpp and added BridgeJSC.[cpp|h]
        * WebCore.xcodeproj/project.pbxproj: Modified. Removed Bridge.cpp and added BridgeJSC.[cpp|h]
        * WebCoreSources.bkl: Modified. Removed Bridge.cpp and added BridgeJSC.cpp
        * bridge/Bridge.cpp: Removed.
        * bridge/Bridge.h: Modfied. Moved Field, Class, Instance and Array interfaces to BridgeJSC.h
        * bridge/jsc: Added.
        * bridge/jsc/BridgeJSC.cpp: Copied from WebCore/bridge/Bridge.cpp.
        * bridge/jsc/BridgeJSC.h: Copied from WebCore/bridge/Bridge.h.

2010-01-21  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Fixes style in WebCore/bridge/jni/JNIBridge
        https://bugs.webkit.org/show_bug.cgi?id=33914

        No new tests, style fixes only.

        * bridge/jni/JNIBridge.cpp:
        * bridge/jni/JNIBridge.h:

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

        Reviewed by Oliver Hunt.

        [GTK] handle media redirections
        https://bugs.webkit.org/show_bug.cgi?id=33539

        Media redirections support.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateMessageCallback):
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::mediaLocationChanged):
        (WebCore::MediaPlayerPrivate::loadNextLocation):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
        (WebCore::MediaPlayerPrivate::pipelineReset):

2010-01-21  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Antti Koivisto.

        [Qt] Implement GraphicsLayer for accelerated layer compositing
        https://bugs.webkit.org/show_bug.cgi?id=33514

        No new tests: tests in LayoutTests/compositing are now relevant for
        QtWebkit!

        * WebCore.pro: added accelerated-compositing related files 
        * platform/graphics/GraphicsLayer.h: define Qt-specific implementation           of GraphicsLayer
        * platform/graphics/qt/GraphicsLayerQt.cpp: Added.
        (WebCore::GraphicsLayerQtImpl::): Implementation of GraphicsLayer with
        a QGraphicsItem
        (WebCore::GraphicsLayerQtImpl::ContentData::ContentData): save 
        pixmap/color info for directly composited content
        (WebCore::GraphicsLayerQtImpl::State::State): save info for syncing
        (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl): ctor
        (WebCore::GraphicsLayerQtImpl::~GraphicsLayerQtImpl): dtor
        (WebCore::GraphicsLayerQtImpl::setBaseTransform): set Qt
        transformation in the way WebCore wants it
        (WebCore::GraphicsLayerQtImpl::opaqueArea): calculate opaque area
        based on info we have
        (WebCore::GraphicsLayerQtImpl::boundingRect): reimp QGraphicsItem
        (WebCore::GraphicsLayerQtImpl::paint): reimp QGraphicsItem
        (WebCore::GraphicsLayerQtImpl::drawContents): draw HTML/Pixmap/Color
        (WebCore::GraphicsLayerQtImpl::notifyChange): let WebCore know
        something has changed
        (WebCore::GraphicsLayerQtImpl::flushChanges): Make the changes appear
        on screen by setting them to QGraphicsItems
        (WebCore::GraphicsLayerQtImpl::notifyAnimationStarted): let WebCore
        know the QAnimation started
        (WebCore::GraphicsLayerQt::GraphicsLayerQt): ctor
        (WebCore::GraphicsLayerQt::~GraphicsLayerQt): dtor
        (WebCore::GraphicsLayer::create): hook for WebCore to know we're
        implementing compositing
        (WebCore::GraphicsLayer::compositingCoordinatesOrientation): hook for
        WebCore to know we use a top-down system
        (WebCore::GraphicsLayerQt::setNeedsDisplay): update the display
        (WebCore::GraphicsLayerQt::setNeedsDisplayInRect): udpate part of the
        display
        (WebCore::GraphicsLayerQt::setName): reimp
        (WebCore::GraphicsLayerQt::setParent): reimp
        (WebCore::GraphicsLayerQt::setChildren): reimp
        (WebCore::GraphicsLayerQt::addChild): reimp
        (WebCore::GraphicsLayerQt::addChildAtIndex): reimp
        (WebCore::GraphicsLayerQt::addChildAbove): reimp
        (WebCore::GraphicsLayerQt::addChildBelow): reimp
        (WebCore::GraphicsLayerQt::replaceChild): reimp
        (WebCore::GraphicsLayerQt::removeFromParent): reimp
        (WebCore::GraphicsLayerQt::setMaskLayer): reimp
        (WebCore::GraphicsLayerQt::setPosition): reimp
        (WebCore::GraphicsLayerQt::setAnchorPoint): reimp
        (WebCore::GraphicsLayerQt::setSize): reimp
        (WebCore::GraphicsLayerQt::setTransform): reimp
        (WebCore::GraphicsLayerQt::setChildrenTransform): reimp
        (WebCore::GraphicsLayerQt::setPreserves3D): reimp
        (WebCore::GraphicsLayerQt::setMasksToBounds): reimp
        (WebCore::GraphicsLayerQt::setDrawsContent): reimp
        (WebCore::GraphicsLayerQt::setBackgroundColor): reimp
        (WebCore::GraphicsLayerQt::clearBackgroundColor): reimp
        (WebCore::GraphicsLayerQt::setContentsOpaque): reimp
        (WebCore::GraphicsLayerQt::setBackfaceVisibility): reimp
        (WebCore::GraphicsLayerQt::setOpacity): reimp
        (WebCore::GraphicsLayerQt::setContentsRect): reimp
        (WebCore::GraphicsLayerQt::setContentsToImage): reimp
        (WebCore::GraphicsLayerQt::setContentsBackgroundColor): reimp
        (WebCore::GraphicsLayerQt::setGeometryOrientation): reimp
        (WebCore::GraphicsLayerQt::setContentsOrientation): reimp
        (WebCore::GraphicsLayerQt::distributeOpacity): reimp
        (WebCore::GraphicsLayerQt::accumulatedOpacity): reimp
        (WebCore::GraphicsLayerQt::syncCompositingState): reimp
        (WebCore::GraphicsLayerQt::nativeLayer): reimp (QGraphicsItem*)
        (WebCore::GraphicsLayerQt::platformLayer): reimp (QGraphicsItem*)
        (WebCore::solveEpsilon): copy from AnimationBase.cpp
        (WebCore::solveCubicBezierFunction): copy from AniamtionBase.cpp
        (WebCore::applyTimingFunction): use WebCore's timing and not Qt's
        (WebCore::webkitAnimationToQtAnimationValue): safely figure out
        animation values
        (WebCore::AnimationQtBase::AnimationQtBase): base class for Qt-based
        Webcore-initiated animations
        (WebCore::AnimationQtBase::updateState): notify when an animation
        starts
        (WebCore::AnimationQtBase::duration): reimp QAbstractAnimation
        (WebCore::AnimationQt:::AnimationQtBase):
        (WebCore::AnimationQt::updateCurrentTime): realize keyframes from
        progress
        (WebCore::TransformAnimationQt::TransformAnimationQt): ctor
        (WebCore::TransformAnimationQt::~TransformAnimationQt): dtor
        (WebCore::TransformAnimationQt::applyFrame): set the actual QTransform
        based on WebCore TransformOperations
        (WebCore::TransformAnimationQt::updateState): change cache mode
        (WebCore::OpacityAnimationQt::OpacityAnimationQt):
        (WebCore::OpacityAnimationQt::applyFrame): change item's opacity
        (WebCore::OpacityAnimationQt::updateState):
        (WebCore::GraphicsLayerQt::addAnimation): convert WebCore Animation to
        Qt Animation
        (WebCore::GraphicsLayerQt::removeAnimationsForProperty):
        (WebCore::GraphicsLayerQt::removeAnimationsForKeyframes):
        (WebCore::GraphicsLayerQt::pauseAnimation):
        (WebCore::GraphicsLayerQt::suspendAnimations):
        (WebCore::GraphicsLayerQt::resumeAnimations):
        * platform/graphics/qt/GraphicsLayerQt.h: Added.
        * platform/qt/QWebPageClient.h: virtual functions for QGraphicsWebView
        compositing
        (QWebPageClient::setRootGraphicsLayer): let QGraphicsWebView know that
        compositing has started/ended
        (QWebPageClient::markForSync): let QGraphicsWebView know the
        compositing layers need to sync, either soon or with the next update

2010-01-21  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Adding QPixmap/QImage support for the Qt hybrid layer
        Allows accesing QPixmap and QImage based arguments from Qt signals,
        slots and properties
        This is done by an intermediate object that can be turned into
        web-based objects by calling either toHTMLImageElement() or
        toDataURL()
        https://bugs.webkit.org/show_bug.cgi?id=32461

        Tests are in WebKit/qt/tests/hybridPixmap

        * WebCore.pro:
        * bridge/qt/qt_pixmapruntime.cpp: Added.
        (JSC::Bindings::QtPixmapWidthField::name): "width"
        (JSC::Bindings::QtPixmapWidthField::valueFromInstance): width of
        pixmap
        (JSC::Bindings::QtPixmapWidthField::setValueToInstance): nothing
        (JSC::Bindings::QtPixmapHeightField::name): "height"
        (JSC::Bindings::QtPixmapHeightField::valueFromInstance): height of
        pixmap
        (JSC::Bindings::QtPixmapHeightField::setValueToInstance): nothing
        (JSC::Bindings::QtPixmapRuntimeMethod::numParameters): 0
        (JSC::Bindings::QtPixmapCreateElementMethod::name): toHTMLImageElement
        (JSC::Bindings::QtPixmapCreateElementMethod::invoke): creates an HTML
        element from the QPixmap
        (JSC::Bindings::QtPixmapToDataUrlMethod::name): "toDataURL"
        (JSC::Bindings::QtPixmapToDataUrlMethod::invoke): encodes the image to
        a base64 data url
        (JSC::Bindings::QtPixmapToStringMethod::name): "toString"
        (JSC::Bindings::QtPixmapToStringMethod::invoke): [Qt Native Pixmap
        w,h]

        (JSC::Bindings::QtPixmapRuntimeObjectImp::createStructure):
        runtime-object broilerplate
        (JSC::Bindings::QtPixmapRuntimeObjectImp::classInfo): ditto
        (JSC::Bindings::QtPixmapRuntimeObjectImp::QtPixmapRuntimeObjectImp):
        ditto
        (JSC::Bindings::): ditto
        (JSC::Bindings::QtPixmapClass::QtPixmapClass): class for the
        intermediate pixmap-holder 
        (JSC::Bindings::QtPixmapInstance::getClass): ditto
        (JSC::Bindings::QtPixmapInstance::invokeMethod): ditto
        (JSC::Bindings::QtPixmapClass::methodsNamed): toHTMLImageElement,
        toDataURL
        (JSC::Bindings::QtPixmapClass::fieldNamed): width, height
        (JSC::Bindings::QtPixmapInstance::getPropertyNames):
                toHTMLImageElement, toDataURL, width, height
        (JSC::Bindings::QtPixmapInstance::defaultValue): nothing
        (JSC::Bindings::QtPixmapInstance::valueOf): toString
        (JSC::Bindings::data): holds a QVariant of type QImage/QPixmap
        (JSC::Bindings::QtPixmapInstance::width): width of the image/pixmap
        (JSC::Bindings::QtPixmapInstance::height): height of the image/pixmap
        (JSC::Bindings::QtPixmapInstance::toPixmap): converts to a QPixmap
        (JSC::Bindings::QtPixmapInstance::toImage): converts to a QImage
        (JSC::Bindings::QtPixmapInstance::variantFromObject): makes sure this
        is the right type of object, and creates a QVariant
        (JSC::Bindings::QtPixmapInstance::createRuntimeObject): creates a new
        intermediate pixmap holder from a QVariant
        (JSC::Bindings::QtPixmapInstance::canHandle): returns true if a
        QPixmap/QImage is required
        * bridge/qt/qt_pixmapruntime.h: Added.
        * bridge/qt/qt_runtime.cpp: hooks for the bridge
        (JSC::Bindings::convertValueToQVariant): handle QPixmap/QImage if the
        object is the intermediate pixmap holder or an HTMLImageElement
        (JSC::Bindings::convertQVariantToValue): creates the intermediate
        object from a QVariant of type QImage/QPixmap

2010-01-21  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Custom select popups.
        https://bugs.webkit.org/show_bug.cgi?id=33418

        Optimization of the WebCore support to combobox popup delegate.

        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::show):
        * platform/qt/QtAbstractWebPopup.cpp:
        (WebCore::QtAbstractWebPopup::QtAbstractWebPopup):
        (WebCore::QtAbstractWebPopup::itemType):
        * platform/qt/QtAbstractWebPopup.h:
        (WebCore::QtAbstractWebPopup::):
        (WebCore::QtAbstractWebPopup::itemText):
        (WebCore::QtAbstractWebPopup::itemToolTip):
        (WebCore::QtAbstractWebPopup::itemIsEnabled):
        (WebCore::QtAbstractWebPopup::itemCount):
        (WebCore::QtAbstractWebPopup::view):
        (WebCore::QtAbstractWebPopup::geometry):
        (WebCore::QtAbstractWebPopup::currentIndex):
        (WebCore::QtAbstractWebPopup::font):

2010-01-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Stylesheet href property shows redirected URL unlike other browsers
        https://bugs.webkit.org/show_bug.cgi?id=33683

        Teach StyleSheet the difference between original and final URLs in
        redirect chains.  Unfortunately, StyleSheet needs to know both of these
        URLs.  The original URL is needed for the href property and the final
        URL is needed as the baseURL.

        This change required touching a lot of lines of code because we need to
        plumb this information to the StyleSheet object.  I audited all
        existing clients of href() and setHref() to see whether they wanted the
        original or final URLs.  I then updated the clients (except the JS
        bindings themselves) to use the correct accessor.

        Test: http/tests/security/stylesheet-href-redirect.html

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::setCSSStyleSheet):
        (WebCore::CSSImportRule::insertedIntoParent):
        * css/CSSImportRule.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::create): 
        (WebCore::CSSStyleSheet::createInline): Added a new constructor to deal
        with "inline" style sheets that don't have a distinct original and
        final URL.
        * css/StyleBase.cpp:
        (WebCore::StyleBase::baseURL): This code wants to use the final URL,
        not the original URL.  Updated it to grab the baseURL directly.
        * css/StyleSheet.cpp:
        (WebCore::StyleSheet::StyleSheet):
        * css/StyleSheet.h:
        (WebCore::StyleSheet::href):
        (WebCore::StyleSheet::setBaseURL): This function really just updates
        the base URL of the style sheet, so I made it more explicit.
        (WebCore::StyleSheet::putativeBaseURL): We need an accessor for the
        base URL, but baseURL is already taken.
        * dom/Document.cpp:
        (WebCore::Document::updateBaseURL):
        (WebCore::Document::pageUserSheet):
        (WebCore::Document::pageGroupUserSheets):
        (WebCore::Document::elementSheet):
        (WebCore::Document::mappedElementSheet):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::setCSSStyleSheet):
        (WebCore::ProcessingInstruction::setXSLStyleSheet):
        * dom/ProcessingInstruction.h:
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::createSheet):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * html/HTMLLinkElement.h:
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::didAddClient):
        (WebCore::CachedCSSStyleSheet::checkNotify): This code now passes both
        the original and final URL into setCSSStyleSheet so that the style
        sheet can have both.
        * loader/CachedResourceClient.h:
        (WebCore::CachedResourceClient::setCSSStyleSheet):
        (WebCore::CachedResourceClient::setXSLStyleSheet):
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::didAddClient):
        (WebCore::CachedXSLStyleSheet::checkNotify): I don't have any direct
        evidence that we need to change the XSLStyleSheet behavior, which is
        why I wasn't able to add a test for the behavior.  However, the objects
        are parallel enough that it seemed like the right thing to do.
        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::setXSLStyleSheet):
        (WebCore::XSLImportRule::loadSheet):
        * xml/XSLImportRule.h:
        * xml/XSLStyleSheet.h:
        (WebCore::XSLStyleSheet::create):
        (WebCore::XSLStyleSheet::createEmbedded):
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::XSLStyleSheet):
        (WebCore::XSLStyleSheet::parseString):
        (WebCore::XSLStyleSheet::loadChildSheets):
        * xml/XSLStyleSheetQt.cpp:
        (WebCore::XSLStyleSheet::XSLStyleSheet):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::xsltStylesheetPointer):
        * xml/XSLTProcessorQt.cpp:
        (WebCore::XSLTProcessor::transformToString):

2010-01-20  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Alexey Proskuryakov.

        Use xmlStrdup instead of strdup for consistency in Libxml2.
        https://bugs.webkit.org/show_bug.cgi?id=33935

        Remove the direct use of strdup.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::PendingCallbacks::appendErrorCallback):
        (WebCore::PendingCallbacks::):
        (WebCore::XMLTokenizer::error):

2010-01-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Dan Bernstein.

        Insufficient repaint issues with html embedded in foreignObject
        https://bugs.webkit.org/show_bug.cgi?id=16318

        Final part of fix -- now we render the selection rect of list
        markers in a transformed context.

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::localSelectionRect):
        (WebCore::RenderListMarker::paint):
        * rendering/RenderListMarker.h:

2010-01-20  Daniel Bates  <dbates@webkit.org>

        No review, rolling out 53591.
        http://trac.webkit.org/changeset/53591
        https://bugs.webkit.org/show_bug.cgi?id=29564

        Rolling out the change committed in change set 53591
        <http://trac.webkit.org/changeset/53591> because it caused
        a regression of test /fast/replaced/table-percent-height.html
        on the Qt bot.

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

2010-01-20  Stephen White  <senorblanco@chromium.org>

        Reviewed by David Levin.

        Disable the "seatbelt" coordinate validation functions in the
        Skia graphics layer.  We believe all the underlying bugs have
        been fixed, but just in case we're being overly optimistic, this
        leaves in the code for an easy revert.

        https://bugs.webkit.org/show_bug.cgi?id=33908
        Exercised by many layout tests.

        * platform/graphics/skia/GraphicsContextSkia.cpp:

2010-01-20  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        HTMLInputElement::valueAsDate setter support for type=date.
        https://bugs.webkit.org/show_bug.cgi?id=33911

        Introduce ISODateTime::setMillisecondsSinceEpochForDate() and add Date
        type support to ISODateTime::toString().

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValueAsDate):
        * html/ISODateTime.cpp:
        (WebCore::ISODateTime::setMillisecondsSinceEpochForDate):
        (WebCore::ISODateTime::toString):
        * html/ISODateTime.h:

2010-01-20  Ben Murdoch  <benm@google.com>

        Reviewed by Simon Hausmann.

        Touch Events are not sent to iframes
        https://bugs.webkit.org/show_bug.cgi?id=33894

        Fix the touch event handler so it does not bail out early if the main frame document does not have any touch listeners registered, as there may be embedded iframes that have registered for touch events.

        Test: fast/events/touch/touch-inside-iframe.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent): Instead of looking at the document of the main frame to see if touch event listeners are registered, look at the document of the target element to account for iframes.

2010-01-20  Michael Nordman  <michaeln@google.com>

        Reviewed by Alexey Proskuryakov.

        Remove an assertion that is not valid in some detached iframes cases.
        https://bugs.webkit.org/show_bug.cgi?id=33827

        Test: http/tests/appcache/detached-iframe.html

        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::DOMApplicationCache):

2010-01-20  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Dmitry Titov.

        Refactoring and plumbing to get the HTML5 SQL Database API accessible to
        web workers.  No new functionality is exposed yet; this just gets the
        infrastructure in place.  It touches a lot of files in small ways; here
        are the main changes:

        1) Database members and methods move from Document up to
        ScriptExecutionContext.  Each of Document and WorkerContext must
        implement a few virtual methods where the Database code requires
        differentiation.
        2) Worker thread shutdown got changed a bunch to handle Database cleanup
        and thread synchronization issues.  Database cleanup tasks need to post
        some cleanup tasks to the JavaScript thread.  However, since database
        cleanup may happen due to the destruction of the WorkerThread, I added a
        handshake [involving WorkerThreadShutdownStartTask,
        WorkerThreadShutdownFinishTask, and a DatabaseTaskSynchronizer] between
        the Database thread and WorkerThread that cleans up all the Database
        stuff before the WorkerThread's runLoop can exit.
        3) The runtime enabler for the Database moved to a static variable
        accessible through Database::isAvailable, following the model used by
        WebSocket.
        4) Worker threads don't run their JavaScript on the Main thread, so
        Database code that differentiated between the Main thread and the
        Database thread now need to deal with a third possibility.
        5) Most of the other changes have to do with having a
        ScriptExecutionContext pointer instead of a Document pointer when
        dealing with a Database.  In many cases it's just a string replacement,
        but in some it required the creation of a new virtual function [e.g.
        databaseExceededQuota, isDatabaseReadOnly]

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

        No new tests; in a future patch I'll add JSC and V8 bindings and new
        layout tests to exercise them.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::OpenDatabaseEnabled):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::isDatabaseReadOnly):
        (WebCore::Document::databaseExceededQuota):
        (WebCore::Document::isContextThread):
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::databaseThread):
        (WebCore::ScriptExecutionContext::addOpenDatabase):
        (WebCore::ScriptExecutionContext::removeOpenDatabase):
        (WebCore::ScriptExecutionContext::stopDatabases):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::setHasOpenDatabases):
        (WebCore::ScriptExecutionContext::hasOpenDatabases):
        (WebCore::ScriptExecutionContext::Task::isCleanupTask):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        * storage/Database.cpp:
        (WebCore::Database::setIsAvailable):
        (WebCore::Database::isAvailable):
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::DerefContextTask::create):
        (WebCore::DerefContextTask::performTask):
        (WebCore::DerefContextTask::isCleanupTask):
        (WebCore::Database::~Database):
        (WebCore::Database::openAndVerifyVersion):
        (WebCore::Database::markAsDeletedAndClose):
        (WebCore::ContextRemoveOpenDatabaseTask::create):
        (WebCore::ContextRemoveOpenDatabaseTask::performTask):
        (WebCore::ContextRemoveOpenDatabaseTask::isCleanupTask):
        (WebCore::ContextRemoveOpenDatabaseTask::ContextRemoveOpenDatabaseTask):
        (WebCore::Database::close):
        (WebCore::Database::performOpenAndVerify):
        (WebCore::Database::scheduleTransaction):
        (WebCore::Database::scheduleTransactionStep):
        (WebCore::DeliverPendingCallbackTask::create):
        (WebCore::DeliverPendingCallbackTask::performTask):
        (WebCore::DeliverPendingCallbackTask::DeliverPendingCallbackTask):
        (WebCore::Database::scheduleTransactionCallback):
        (WebCore::Database::transactionClient):
        (WebCore::Database::transactionCoordinator):
        (WebCore::Database::tableNames):
        (WebCore::Database::securityOrigin):
        * storage/Database.h:
        (WebCore::Database::scriptExecutionContext):
        * storage/DatabaseTask.h:
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        (WebCore::DatabaseThread::~DatabaseThread):
        (WebCore::DatabaseThread::requestTermination):
        (WebCore::DatabaseThread::databaseThread):
        (WebCore::DatabaseThread::unscheduleDatabaseTasks):
        * storage/DatabaseThread.h:
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):
        * storage/DatabaseTracker.h:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::executeSQL):
        * storage/SQLTransactionClient.cpp:
        (WebCore::SQLTransactionClient::didCommitTransaction):
        (WebCore::SQLTransactionClient::didExecuteStatement):
        (WebCore::SQLTransactionClient::didExceedQuota):
        * storage/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::TrackerRemoveOpenDatabaseTask::create):
        (WebCore::TrackerRemoveOpenDatabaseTask::performTask):
        (WebCore::TrackerRemoveOpenDatabaseTask::TrackerRemoveOpenDatabaseTask):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):
        * storage/chromium/SQLTransactionClientChromium.cpp:
        (WebCore::NotifyDatabaseChangedTask::create):
        (WebCore::NotifyDatabaseChangedTask::performTask):
        (WebCore::NotifyDatabaseChangedTask::NotifyDatabaseChangedTask):
        (WebCore::SQLTransactionClient::didCommitTransaction):
        (WebCore::SQLTransactionClient::didExecuteStatement):
        (WebCore::SQLTransactionClient::didExceedQuota):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::openDatabase):
        (WebCore::WorkerContext::isContextThread):
        * workers/WorkerContext.h:
        (WebCore::WorkerContext::clearScript):
        (WebCore::WorkerContext::thread):
        (WebCore::WorkerContext::isDatabaseReadOnly):
        (WebCore::WorkerContext::databaseExceededQuota):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::runInMode):
        (WebCore::WorkerRunLoop::Task::performTask):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):
        (WebCore::WorkerThreadShutdownFinishTask::create):
        (WebCore::WorkerThreadShutdownFinishTask::performTask):
        (WebCore::WorkerThreadShutdownFinishTask::isCleanupTask):
        (WebCore::WorkerThreadShutdownStartTask::create):
        (WebCore::WorkerThreadShutdownStartTask::performTask):
        (WebCore::WorkerThreadShutdownStartTask::isCleanupTask):
        (WebCore::WorkerThread::stop):

2010-01-20  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket: Request-URI should not be empty when no tralling slash in host
        https://bugs.webkit.org/show_bug.cgi?id=33689

        Test: websocket/tests/url-no-trailing-slash.html

        * websockets/WebSocketHandshake.cpp:
        (WebCore::resourceName):

2010-01-20  Daniel Bates  <dbates@webkit.org>

        Reviewed by Tor Arne Vestbø.

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

        [Qt] Fixes an issue where the height of <button>- and
        <input type="button">- elements are fixed to the height of the
        button label font plus padding. That is, the CSS height property
        is being ignored.

        Instead, we should honor the user-specified height, if appropriate
        for the platform and context. Notice, the Mac ports do not honor the
        height for <input type="button"> elements unless a border and/or
        background is also specified.

        Test: fast/css/button-height.html

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

2010-01-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Assertion failure calling history.pushState within popstate event handler.
        https://bugs.webkit.org/show_bug.cgi?id=33830

        Test: fast/loader/stateobjects/pushstate-within-popstate-handler-assert.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::navigateWithinDocument): Remove the ASSERT and invalid part of the comment.

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

        Reviewed by Oliver Hunt.

        Crash on dispatching SVG mouse events
        https://bugs.webkit.org/show_bug.cgi?id=33841

        Return early SVGUseElement::instanceForShadowTreeElement if m_targetElementInstance is zero.
        This only happens if the SVGUseElement has just been removed from the document and EventHandler
        tries to dispatch a mouseout event to the corresponding SVGElementInstance. This is not testable
        using DRT unfortunately, so we have to add another manual testcase for that.

        Tests: manual-tests/use-crash-on-mouse-hover.svg

        * manual-tests/svg-crash-hovering-use.svg: Added.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::instanceForShadowTreeElement): Add ASSERT(!inDocument()) when returning 0 here if m_targetElementInstance is 0.

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

        Reviewed by Pavel Feldman.

        Timeline reset button doesn't clean timeline if the panel is scrolled down.
        The overview pane also stay dirty after reset.
        https://bugs.webkit.org/show_bug.cgi?id=33829

        * inspector/front-end/TimelineGrid.js:
        (WebInspector.TimelineGrid.prototype.updateDividers):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane.prototype.reset):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.reset):
        (WebInspector.TimelinePanel.prototype._refreshRecords):

2010-01-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=33930
        Crash in JSDOMWindowBase::crossDomainAccessErrorMessage when accessing a detached sandboxed frame

        Test: http/tests/security/detached-sandboxed-frame-access.html

        * bindings/js/JSDOMWindowBase.cpp: (WebCore::JSDOMWindowBase::crossDomainAccessErrorMessage):
        Changed the way we discover the url to match what the actual check does. Both old and new
        code correctly fetch the URL of the current window displayed in frame, but going via
        DOMWindowShell avoids crashing on null DOMWindow::m_frame pointer.

2010-01-20  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Pavel Feldman.

        [V8] Support SerializedScriptValue.
        https://bugs.webkit.org/show_bug.cgi?id=32920
        http://crbug.com/30620

        Initial implementation of SerializedScriptValue which is used to
        to create a serialized representation of JavaScript objects.  This
        representation is needed for structured clones and worker messages.

        * WebCore.gypi: Added SerializedScriptValue.cpp.
        * bindings/scripts/CodeGeneratorV8.pm: Removed conversion to string before using SerializedScriptValue.
        * bindings/v8/SerializedScriptValue.cpp: Added.
        (WebCore::):
        (WebCore::ZigZag::encode):
        (WebCore::ZigZag::decode):
        (WebCore::Writer::Writer):
        (WebCore::Writer::writeUndefined):
        (WebCore::Writer::writeNull):
        (WebCore::Writer::writeTrue):
        (WebCore::Writer::writeFalse):
        (WebCore::Writer::writeString):
        (WebCore::Writer::writeInt32):
        (WebCore::Writer::writeNumber):
        (WebCore::Writer::endComposite):
        (WebCore::Writer::data):
        (WebCore::Writer::doWriteUint32):
        (WebCore::Writer::append):
        (WebCore::Writer::ensureSpace):
        (WebCore::Writer::fillHole):
        (WebCore::Writer::charAt):
        (WebCore::Serializer::Serializer):
        (WebCore::Serializer::serialize):
        (WebCore::Serializer::StateBase::~StateBase):
        (WebCore::Serializer::StateBase::nextState):
        (WebCore::Serializer::StateBase::setNextState):
        (WebCore::Serializer::StateBase::composite):
        (WebCore::Serializer::StateBase::StateBase):
        (WebCore::Serializer::State::composite):
        (WebCore::Serializer::State::tag):
        (WebCore::Serializer::State::State):
        (WebCore::Serializer::StackCleaner::StackCleaner):
        (WebCore::Serializer::StackCleaner::~StackCleaner):
        (WebCore::Serializer::ArrayState::ArrayState):
        (WebCore::Serializer::ArrayState::done):
        (WebCore::Serializer::ArrayState::advance):
        (WebCore::Serializer::ObjectState::ObjectState):
        (WebCore::Serializer::ObjectState::done):
        (WebCore::Serializer::ObjectState::advance):
        (WebCore::Serializer::ObjectState::nextProperty):
        (WebCore::Serializer::doSerialize):
        (WebCore::Serializer::push):
        (WebCore::Serializer::top):
        (WebCore::Serializer::pop):
        (WebCore::Serializer::checkComposite):
        (WebCore::Reader::Reader):
        (WebCore::Reader::isEof):
        (WebCore::Reader::read):
        (WebCore::Reader::readTag):
        (WebCore::Reader::readString):
        (WebCore::Reader::readInt32):
        (WebCore::Reader::readNumber):
        (WebCore::Reader::doReadUint32):
        (WebCore::Deserializer::Deserializer):
        (WebCore::Deserializer::deserialize):
        (WebCore::Deserializer::doDeserialize):
        (WebCore::Deserializer::push):
        (WebCore::Deserializer::pop):
        (WebCore::Deserializer::stackDepth):
        (WebCore::Deserializer::element):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/v8/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::createFromWire):
        (WebCore::SerializedScriptValue::release):
        (WebCore::SerializedScriptValue::toWireString):

        Updated uses of SerializedScriptValue:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::postMessageCallback):
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        (WebCore::V8DedicatedWorkerContext::postMessageCallback):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::pushStateCallback):
        (WebCore::V8History::replaceStateCallback):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::initMessageEventCallback):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::V8MessagePort::postMessageCallback):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::V8Worker::postMessageCallback):

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

        Reviewed by Sam Weinig.

        Fix crash in geolocation when observers change during iteration.

        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::positionChanged): Copy observers to vector while iterating.
        (WebCore::GeolocationController::errorOccurred): Copy observers to vector while iterating.

2010-01-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Dan Bernstein.

        Insufficient repaint issues with html embedded in foreignObject
        https://bugs.webkit.org/show_bug.cgi?id=16318

        Partial fix for selection repaint in foreignObject, basically we
        just need to make sure foreignObject correctly applies the svg
        transform to the selection rect.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintSelection):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::mapLocalToContainer):
        * rendering/RenderForeignObject.h:

2010-01-20  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY.

        <rdar://problem/7557695> REGRESSION(r53445-r53449): Many new memory leaks (33867)

        Revert r53447, since this caused leaks.

        * WebCore.base.exp:
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::operator new):
        (WebCore::StringImpl::operator delete):
        (WebCore::StringImpl::StringImpl):
        (WebCore::StringImpl::~StringImpl):
        (WebCore::StringImpl::create):
        (WebCore::StringImpl::createWithTerminatingNullCharacter):
        (WebCore::StringImpl::crossThreadString):
        (WebCore::StringImpl::sharedBuffer):
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::hasTerminatingNullCharacter):
        (WebCore::StringImpl::inTable):
        (WebCore::StringImpl::setInTable):
        (WebCore::StringImpl::):
        * storage/OriginUsageRecord.cpp:
        (WebCore::OriginUsageRecord::addDatabase):
        (WebCore::OriginUsageRecord::markDatabase):

2010-01-20  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Implement File and Blob interfaces as defined in File API spec.
        https://bugs.webkit.org/show_bug.cgi?id=32912

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.mk:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/objc/DOMHTML.h:
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8Binding.h:
        (WebCore::toInt64):
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::sendCallback):
        * html/File.cpp:
        (WebCore::File::File):
        * html/File.h:
        (WebCore::File::create):
        (WebCore::File::name):
        (WebCore::File::fileName):
        (WebCore::File::fileSize):
        * html/File.idl:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        * xml/XMLHttpRequest.h:

2010-01-20  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        WAI-ARIA popup buttons spoken as simply 'button'
        https://bugs.webkit.org/show_bug.cgi?id=33922

        Test: platform/mac/accessibility/aria-popup.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::actionElement):
        (WebCore::AccessibilityRenderObject::determineAriaRoleAttribute):
        * html/HTMLAttributeNames.in:

2010-01-19  David Levin  <levin@chromium.org>

        Reviewed by Oliver Hunt.

        CrossThreadCopier needs to support ThreadSafeShared better.
        https://bugs.webkit.org/show_bug.cgi?id=33698

        Now the copier is able to handle types that derive from ThreadSafeShared.

        No change functionality so no new tests.

        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::cancel): Remove unnecessary cast.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::clearClientWrapper): Ditto.
        * loader/WorkerThreadableLoader.h:
        Change to use the derived class instead of the ThreadSafeShared version.
        * platform/CrossThreadCopier.cpp:
        Add the new template parameter throughout the classes and adjust the class that 
        handles ThreadSafeShared to allow for derived types.
        * platform/CrossThreadCopier.h:
        Add another template parameter to be able to detect classes that derive 
        from ThreadSafeShared.
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        Removed unnecessary casts and changed a type to use the derived class instead of
        the ThreadSafeShared version.
        (WebCore::WorkerThreadableWebSocketChannel::Peer::Peer):
        (WebCore::workerContextDidSend):
        (WebCore::workerContextDidGetBufferedAmount):
        (WebCore::workerContextDidConnect):
        (WebCore::workerContextDidReceiveMessage):
        (WebCore::workerContextDidClose):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::setWebSocketChannel):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::mainThreadCreateWebSocketChannel):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::bufferedAmount):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::clearClientWrapper):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::setMethodNotCompleted):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::waitForMethodCompletion):
        * websockets/WorkerThreadableWebSocketChannel.h:
        (WebCore::WorkerThreadableWebSocketChannel::Peer::create): Changed a type to use the
        derived class instead of the ThreadSafeShared version.

2010-01-20  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/7086565> Crash in WebCore::PlugInView::dispatchNPEvent

        Reviewed by Sam Weinig.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::handleEvent):
        Ref the PluginView to protect it from deletion while calling into the
        plug-in.

2010-01-20  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: accSelect() is not implemented

        https://bugs.webkit.org/show_bug.cgi?id=33918
        <rdar://problem/7436861>

        Reviewed by Darin Adler.

        Test: platform/win/accessibility/selection-and-focus.html

        * accessibility/AccessibilityMenuListOption.cpp:
        (WebCore::AccessibilityMenuListOption::setSelected):
        Return early if the object is not selectable.

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

        Not reviewed. Fix chromium build, introduced a copy&paste error.

        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):

2010-01-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6579204> Exception thrown when opening a <select> pop-up that
        uses a web font
        https://bugs.webkit.org/show_bug.cgi?id=23911

        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::populate): Use the (bold) system font if an NSFont cannot
        be obtained.

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

        Reviewed by Alexey Proskuryakov. 

        svg/custom/use-instanceRoot-event-bubbling.xhtml is flakey
        https://bugs.webkit.org/show_bug.cgi?id=33835

        mouseEvent fires mutiple times in svg/custom/use-instanceRoot-as-event-target.xhtml
        https://bugs.webkit.org/show_bug.cgi?id=32519

        Test: svg/custom/use-instanceRoot-event-listener-liveness.xhtml

        Stabilize <use> scripting support - use tests are reliable now (tested using --repeach-each 50 --random -p)

        Do not reclone trees anymore because of event listener changes, instead keep correspondingElement & shadowTreeElement
        synchronized for each SVGElementInstance - any mutations on any event listeners are live, and take immediate effect,
        w/o having to rely on a reclone - this was the root of several race conditions making the <use> tests flakey.

        Fix SVGUseElement::instanceRoot() to force shadow tree creation, even if it was not attached so far - we can't wait
        for finishedParsing() to be called which would recalculate the document style and attach the shadow tree as result.
        This is now matching Operas behaviour.

        Optimize createAttributeEventListener() to not create event listeners if the supplied Attribute isNull() - otherwhise
        DOM calls like removeAttribute("onclick") cause a temporary JSEventListener to be created, added to the event listener
        cache and removed afterwards.

        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener): Return early if the supplied attribute is null as discussed with Geoffrey.
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener): Ditto.
        * dom/Node.cpp: Synchronize event listeners with all element instances, instead of marking the use elements to reclone.
        (WebCore::instancesForSVGElement):
        (WebCore::tryAddEventListener):
        (WebCore::Node::addEventListener): When adding a listener, get a list of element instances and add it their as well.
        (WebCore::tryRemoveEventListener):
        (WebCore::Node::removeEventListener): Ditto for removals, but with special logic for listeners created from markup (see comments)
        * svg/SVGElementInstance.cpp: Cleaned up, removing unncessary checks of correspondingElement() - there is an ASSERT in the ctor.
        (WebCore::SVGElementInstance::invalidateAllInstancesOfElement):
        (WebCore::SVGElementInstance::scriptExecutionContext):
        (WebCore::SVGElementInstance::addEventListener):
        (WebCore::SVGElementInstance::removeEventListener):
        (WebCore::SVGElementInstance::removeAllEventListeners):
        (WebCore::SVGElementInstance::eventTargetData):
        (WebCore::SVGElementInstance::ensureEventTargetData):
        * svg/SVGUseElement.cpp: Call document()->updateLayoutIgnorePendingStylesheets() to force shadow tree creation, just like CSSStyleDecl works.
        (WebCore::SVGUseElement::instanceRoot):

2010-01-20  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        Move local utility class DocumentWeakReference entirely from Document.h into Document.cpp
        since it is only used there. It is a followup for http://trac.webkit.org/changeset/53345.

        No new tests since no change in functionality.

        * dom/Document.cpp: Move definitions of the methods into declaration of the class, remove 'inline'.
        * dom/Document.h: Replace DocumentWeakReference declaration with a forward declaration.

2010-01-20  Oliver Hunt  <oliver@apple.com>

        No review, rolling out r53561.
        http://trac.webkit.org/changeset/53561
        https://bugs.webkit.org/show_bug.cgi?id=16318

        broke selection repaint for transformed text in html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintSelection):
        * rendering/RenderForeignObject.cpp:
        * rendering/RenderForeignObject.h:

2010-01-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Beth Dakin.

        Insufficient repaint issues with html embedded in foreignObject
        https://bugs.webkit.org/show_bug.cgi?id=16318

        Partial fix for selection repaint in foreignObject, basically we
        just need to make sure foreignObject correctly applies the svg
        transform to the selection rect.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintSelection):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::mapLocalToContainer):
        * rendering/RenderForeignObject.h:

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

        Build fix for !ENABLE(SVG).

        * rendering/TrailingFloatsRootInlineBox.h:
        (WebCore::TrailingFloatsRootInlineBox::TrailingFloatsRootInlineBox):

2010-01-20  David Levin  <levin@chromium.org>

        No review, rolling out r53552.
        http://trac.webkit.org/changeset/53552
        https://bugs.webkit.org/show_bug.cgi?id=32554

        Caused lots of fast/profile test failures.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::databaseForId):
        (WebCore::JSInjectedScriptHost::inspectedWindow):
        (WebCore::JSInjectedScriptHost::wrapCallback):
        (WebCore::JSInjectedScriptHost::currentCallFrame):
        (WebCore::JSInjectedScriptHost::nodeForId):
        (WebCore::JSInjectedScriptHost::wrapObject):
        (WebCore::JSInjectedScriptHost::unwrapObject):
        (WebCore::JSInjectedScriptHost::pushNodePathToFrontend):
        (WebCore::JSInjectedScriptHost::selectDatabase):
        (WebCore::JSInjectedScriptHost::selectDOMStorage):
        * bindings/js/ScriptCallStack.h:
        (WebCore::ScriptCallStack::state):
        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptObject.h:
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::quarantineValue):
        * bindings/js/ScriptValue.h:
        * bindings/v8/ScriptObject.h:
        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::quarantineValue):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::inspectedWindowCallback):
        (WebCore::V8InjectedScriptHost::wrapCallbackCallback):
        (WebCore::V8InjectedScriptHost::wrapObjectCallback):
        (WebCore::V8InjectedScriptHost::unwrapObjectCallback):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::addToConsole):
        (WebCore::ConsoleMessage::isEqual):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::wrapObject):
        (WebCore::InjectedScriptHost::unwrapObject):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        (WebCore::InspectorBackend::releaseWrapperObjectGroup):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::clearConsoleMessages):
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::didPause):
        (WebCore::InspectorController::wrapObject):
        (WebCore::InspectorController::unwrapObject):
        (WebCore::InspectorController::releaseWrapperObjectGroup):
        (WebCore::InspectorController::resetInjectedScript):
        (WebCore::InspectorController::deleteCookie):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addConsoleMessage):
        (WebCore::InspectorFrontend::pausedScript):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype._reloadResources):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.requestClearMessages):
        (WebInspector.ConsoleView.prototype.completions):
        (WebInspector.ConsoleView.prototype.doEvalInWindow):
        (WebInspector.ConsoleView.prototype._formatnode):
        (WebInspector.ConsoleView.prototype._formatarray):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.CSSStyleDeclaration):
        (WebInspector.CSSStyleDeclaration.parseRule):
        * inspector/front-end/Database.js:
        (WebInspector.Database.prototype.executeSql):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel.prototype.setDocument):
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.performSearch):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.createTooltipForImageNode):
        * inspector/front-end/EventListenersSidebarPane.js:
        ():
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.dispatch):
        (InjectedScript.toggleStyleEnabled):
        (InjectedScript._serializeRule):
        (InjectedScript._serializeStyle):
        (InjectedScript.getProperties):
        (InjectedScript.setPropertyValue):
        (InjectedScript._evaluateAndWrap):
        (InjectedScript.getCallFrames):
        (InjectedScript._inspectObject):
        (InjectedScript._ensureCommandLineAPIInstalled):
        (InjectedScript._resolveObject):
        (InjectedScript._window):
        (InjectedScript._objectForId):
        (InjectedScript.createProxyObject):
        (InjectedScript.executeSql):
        (InjectedScript.executeSql.errorCallback):
        (InjectedScript.executeSql.queryTransaction):
        (Object.type):
        (String.prototype.escapeCharacters):
        * inspector/front-end/InjectedScriptAccess.js:
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.methodName):
        (InjectedScriptAccess._installHandler):
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane):
        (WebInspector.MetricsSidebarPane.prototype.update.inlineStyleCallback):
        (WebInspector.MetricsSidebarPane.prototype.update):
        (WebInspector.MetricsSidebarPane.prototype.editingCommitted):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.update):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
        (WebInspector.ObjectPropertyTreeElement.prototype.applyExpression):
        * inspector/front-end/ObjectProxy.js:
        (WebInspector.ObjectProxy):
        (WebInspector.ObjectProxy.getPropertiesAsync):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.callback):
        (WebInspector.PropertiesSidebarPane.prototype.update):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.ondblclick):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.doEvalInCallFrame):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.pausedScript):
        (WebInspector.addConsoleMessage):
        (WebInspector.log.logMessage):
        (WebInspector.log):

2010-01-20  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Renames jni_runtime.[cpp|h] to JNIBridge.[cpp|h]
        https://bugs.webkit.org/show_bug.cgi?id=33899

        No new tests, refactoring only.

        * Android.jscbindings.mk: Modified. Removes jni_runtime.cpp and adds JNIBridge.cpp
        * GNUmakefile.am: Modified. Removes jni_runtime.h and adds JNIBridge.h
        * WebCore.xcodeproj/project.pbxproj: Modified. Removes jni_runtime.[cpp|h] and adds JNIBridge.[cpp|h]
        * bridge/jni/JNIBridge.cpp: Copied from WebCore/bridge/jni/jni_runtime.cpp.
        * bridge/jni/JNIBridge.h: Copied from WebCore/bridge/jni/jni_runtime.h.
        * bridge/jni/jni_jsobject.mm: Modified. Updated to include JNIBridge.h
        * bridge/jni/jni_runtime.cpp: Removed.
        * bridge/jni/jni_runtime.h: Removed.
        * bridge/jni/jsc/JNIUtilityPrivate.cpp: Modified. Updated to include JNIBridge.h
        * bridge/jni/jsc/JavaClassJSC.cpp: Modified. Removed superfluous include
        * bridge/jni/jsc/JavaClassJSC.h: Modified. Updated to include JNIBridge.h
        * bridge/jni/jsc/JavaInstanceJSC.cpp: Modified. Updated to include JNIBridge.h

2010-01-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=33913
        Crash under Media::matchMedium in detached frame

        Also took the opportunity to fix JS bindings for the Media object.

        Test: fast/media/lifetime.html

        * css/Media.h:
        (WebCore::Media::create): Take and store a Frame pointer, like other similar objects do.
        (WebCore::Media::disconnectFrame): Zero out the frame pointer (this is called from
        DOMWindow::clear()).

        * css/Media.cpp:
        (WebCore::Media::Media): Updated to storing Frame pointer.
        (WebCore::Media::type): Ditto.
        (WebCore::Media::matchMedium): Removed null check for document element - every document has
        one. Also, every Frame has a document, so we only need to check for m_frame being zero.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::markChildren):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clear):
        (WebCore::DOMWindow::media):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalMedia):
        Make sure there's only one Media object per window, and keep its wrapper alive.

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

        Reviewed by Darin Adler and Adam Roben.

        Feature defines are difficult to maintain on Windows builds
        https://bugs.webkit.org/show_bug.cgi?id=33883

        FeatureDefines.vsprops are now maintained in a way similar to
        Configurations/FeatureDefines.xcconfig, with the added advantage
        of having a single FeatureDefines file across all projects.

        * Configurations/FeatureDefines.xcconfig: Add comments about keeping feature definitions in sync.
        * WebCore.vcproj/MigrateIDLAndScripts: Remove reference to file that no longer exists.
        * WebCore.vcproj/QTMovieWin.vcproj: Add FeatureDefines.vsprops inherited property sheet.
        * WebCore.vcproj/WebCore.vcproj: Add FeatureDefines.vsprops inherited property sheet.
        * WebCore.vcproj/WebCoreCommon.vsprops: Remove ENABLE_ preprocessor definitions.
        * WebCore.vcproj/WebCoreGenerated.vcproj: Added Cairo configuration for selecting proper features.
        * WebCore.vcproj/WebCoreMediaQT.vsprops: Remove ENABLE_VIDEO. This is picked up from FeatureDefines.vsprops.
        * WebCore.vcproj/build-generated-files.sh: Pick up features from FeatureDefines.vsprops or FeatureDefinesCairo.vsprops.

2010-01-20  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Inject inspector script directly into the inspected context. All the
        communication between the script and the frontend is serialized into
        JSON strings. It allows to get rid of object quarantines in Web Inspector.

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

        Test: inspector/console-log-before-inspector-open.html

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::databaseForId):
        (WebCore::JSInjectedScriptHost::currentCallFrame):
        (WebCore::JSInjectedScriptHost::nodeForId):
        (WebCore::JSInjectedScriptHost::pushNodePathToFrontend):
        (WebCore::JSInjectedScriptHost::selectDatabase):
        (WebCore::JSInjectedScriptHost::selectDOMStorage):
        * bindings/js/ScriptCallStack.h:
        (WebCore::ScriptCallStack::state):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::mainWorldScriptState):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptObject.h:
        (WebCore::ScriptObject::scriptState):
        * bindings/js/ScriptValue.cpp:
        * bindings/js/ScriptValue.h:
        * bindings/v8/ScriptObject.h:
        (WebCore::ScriptObject::scriptState):
        * bindings/v8/ScriptValue.h:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::addToConsole):
        (WebCore::ConsoleMessage::isEqual):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::releaseWrapperObjectGroup):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::setInjectedScriptSource):
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        (WebCore::InspectorBackend::releaseWrapperObjectGroup):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::clearConsoleMessages):
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::didPause):
        (WebCore::InspectorController::injectedScriptForNodeId):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addConsoleMessage):
        (WebCore::InspectorFrontend::pausedScript):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype._reloadResources):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.requestClearMessages):
        (WebInspector.ConsoleView.prototype.doEvalInWindow):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.CSSStyleDeclaration):
        (WebInspector.CSSStyleDeclaration.parseRule):
        * inspector/front-end/Database.js:
        (WebInspector.Database.prototype.executeSql):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged.InjectedScriptAccess.get addInspectedNode):
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel.prototype.setDocument):
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.performSearch):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.createTooltipForImageNode):
        * inspector/front-end/EventListenersSidebarPane.js:
        ():
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        (injectedScriptConstructor.):
        * inspector/front-end/InjectedScriptAccess.js:
        (InjectedScriptAccess):
        (InjectedScriptAccess.getDefault):
        (get InjectedScriptAccess):
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.prototype.methodName):
        (InjectedScriptAccess._installHandler):
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane):
        (WebInspector.MetricsSidebarPane.prototype.update.inlineStyleCallback):
        * inspector/front-end/ObjectPropertiesSection.js:
        * inspector/front-end/ObjectProxy.js:
        (WebInspector.ObjectProxy):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.callback):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.ondblclick):
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.pausedScript):
        (WebInspector.addConsoleMessage):
        (WebInspector.log.logMessage):
        (WebInspector.log):

2010-01-20  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        HTMLInputElement::valueAsDate setter support for type=time.
        https://bugs.webkit.org/show_bug.cgi?id=33825

        Introduce ISODateTime::setMillisecondsSinceMidnight() and add a
        SecondFormat parameter to ISODateTime::toString(). The main code
        logic for type=time is implemented in
        setMillisecondsSinceMidnightInternal() and toStringForTime()
        because the logic is going to be used for other types.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValueAsDate):
        * html/ISODateTime.cpp:
        (WebCore::positiveFmod):
        (WebCore::ISODateTime::setMillisecondsSinceMidnightInternal):
        (WebCore::ISODateTime::setMillisecondsSinceMidnight):
        (WebCore::ISODateTime::toStringForTime):
        (WebCore::ISODateTime::toString):
        * html/ISODateTime.h:
        (WebCore::ISODateTime::):

2010-01-20  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix for r53547.

        * WebCore.pri:

2010-01-20  Ben Murdoch  <benm@google.com>

        Reviewed by Simon Hausmann.

        The touchcancel event is not supported.
        https://bugs.webkit.org/show_bug.cgi?id=33598

        This change adds support for the touchcancel event in WebCore and adds a test.

        Test: fast/events/touch/send-oncancel-event.html

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGestureEvent): Considers touchcancel with the other touch events when working out if the event is a user gesture.
        * dom/Document.cpp:
        (WebCore::Document::addListenerTypeIfNeeded): Adds a check to consider ontouchcancel a touch event listener.
        * dom/Document.h: Add the touchcancel attribute event listener.
        * dom/Document.idl: ditto.
        * dom/Element.h: ditto.
        * dom/Element.idl: ditto.
        * dom/EventNames.h: Adds touchcancel as an event name.
        * html/HTMLAttributeNames.in:Adds touchcancel as an HTML attribute name.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute): Parses the ontouchcancel attribute.
        * page/DOMWindow.h: Adds the touchcancel attribute event listener.
        * page/DOMWindow.idl: ditto.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent): Add code to detect and dispatch touchcancel events.
        * platform/PlatformTouchEvent.h:
        (WebCore::): Add TouchCancel as a touch event type.
        * platform/PlatformTouchPoint.h:
        (WebCore::PlatformTouchPoint::): Add TouchCanceled as a touch point state.

2010-01-20  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Make extraCompilers for generated sources depend on their scripts

        * DerivedSources.pro:
        * WebCore.pri:

2010-01-20  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Barth.

        [Chromium][V8] Fix null pointer dereference in V8Proxy::retrieve().
        https://bugs.webkit.org/show_bug.cgi?id=33886

        This is equivalent to r53433, and fix a crash by
        LayoutTests/http/tests/appcache/destroyed-iframe.html.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::retrieve): Check if context is null.

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

        Reviewed by Timothy Hatcher.

        Optimize resize event handling for hidden views
        https://bugs.webkit.org/show_bug.cgi?id=33803

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype.resize):
        (WebInspector.AbstractTimelinePanel.prototype.updateMainViewWidth):
        * inspector/front-end/AuditsPanel.js:
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.updateSidebarWidth):
        (WebInspector.Panel.prototype.resize):
        * inspector/front-end/PanelEnablerView.js:
        (WebInspector.PanelEnablerView):
        (WebInspector.PanelEnablerView.prototype.show):
        (WebInspector.PanelEnablerView.prototype.resize):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.show):
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        (WebInspector.ProfilesPanel.prototype.showProfile):
        (WebInspector.ProfilesPanel.prototype.showView):
        (WebInspector.ProfilesPanel.prototype.closeVisibleView):
        (WebInspector.ProfilesPanel.prototype._updateInterface):
        (WebInspector.ProfilesPanel.prototype.updateMainViewWidth):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.show):
        (WebInspector.ResourcesPanel.prototype.get visibleView):
        (WebInspector.ResourcesPanel.prototype.updateMainViewWidth):
        * inspector/front-end/Settings.js:
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.updateMainViewWidth):
        * inspector/front-end/WelcomeView.js:
        (WebInspector.WelcomeView):
        (WebInspector.WelcomeView.prototype.show):
        (WebInspector.WelcomeView.prototype.resize):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector.windowResize):

2010-01-20  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Fixes style in WebCore/bridge/Bridge
        https://bugs.webkit.org/show_bug.cgi?id=33839

        No new tests, style fixes only.

        * bridge/Bridge.cpp: Modified.
        * bridge/Bridge.h: Modified.
        * bridge/c/c_instance.cpp: Modified.
        (JSC::Bindings::CInstance::invokeMethod): Modified. Use renamed m_rootObject member
        (JSC::Bindings::CInstance::invokeDefaultMethod): Modified. Use renamed m_rootObject member
        (JSC::Bindings::CInstance::invokeConstruct): Modified. Use renamed m_rootObject member
        * bridge/jni/jni_runtime.cpp: Modified.
        (JavaArray::JavaArray): Modified. Use renamed m_rootObject member
        (JavaArray::rootObject): Modified. Use renamed m_rootObject member
        * bridge/objc/objc_instance.mm: Modified.
        (ObjcInstance::invokeMethod): Modified. Use renamed m_rootObject member
        (ObjcInstance::invokeDefaultMethod): Modified. Use renamed m_rootObject member
        (ObjcInstance::getValueOfUndefinedField): Modified. Use renamed m_rootObject member
        * bridge/objc/objc_runtime.mm: Modified.
        (JSC::Bindings::ObjcArray::valueAt): Modified. Use renamed m_rootObject member
        * bridge/qt/qt_runtime.cpp: Modified.
        (JSC::Bindings::::rootObject): Modified. Use renamed m_rootObject member

2010-01-20  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel.

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

        Fixes style errors exposed by the style bot in the patch
        for bug #33770. Moreover, fixes all style errors reported
        by check-webkit-style.

        No functionality was changed. So, no new tests.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::dataFunctionf):
        (WebCore::dataFunctioni):
        (WebCore::dataFunctionMatrix):

2010-01-19  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Fixes style in WebCore/bridge/JNIUtility
        https://bugs.webkit.org/show_bug.cgi?id=33870

        No new tests, style fixes only.

        * bridge/jni/JNIUtility.cpp:
        * bridge/jni/JNIUtility.h:

2010-01-20  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        On Linux link QtWebKit with -no-undefined to catch build breakages due to missing
        files in the .pro file, resulting in unresolved symbols.

        * WebCore.pro:

2010-01-20  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Make it possible to link with -no-undefined.

        * WebCore.pro: Add missing explicit dependency to libXrender due to the
        use of XRenderFindVisualFormat in the X11 plugin code.

2010-01-20  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Add missing files to the build.

        * WebCore.pro:

2010-01-20  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] computePageRectsForFrame seems to be unnecessary
        https://bugs.webkit.org/show_bug.cgi?id=33881

        * WebCore.gypi: Removed FrameChromium.h
        * page/chromium/FrameChromium.cpp: Removed computePageRectsForFrame.
        * page/chromium/FrameChromium.h: Removed.

2010-01-20  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dan Bernstein.

        Bug 33266 - WebCore::InlineFlowBox::determineSpacingForFlowBoxes ReadAV@NULL (43c64e8abbda6766e5f5edbd254c2d57)
        (https://bugs.webkit.org/show_bug.cgi?id=33266)
        
        Ruby did not handle malformed cases correctly when the ruby base was in
        block flow. Changed the code to handle all possible cases.
        Also, added some simplification methods to RenderBlock.

        Tests: fast/ruby/ruby-illegal-1.html
               fast/ruby/ruby-illegal-2.html
               fast/ruby/ruby-illegal-3.html
               fast/ruby/ruby-illegal-4.html
               fast/ruby/ruby-illegal-5.html
               fast/ruby/ruby-illegal-6.html
               fast/ruby/ruby-illegal-7.html
               fast/ruby/ruby-illegal-combined.html
               fast/ruby/rubyDOM-insert-rt-block-1.html
               fast/ruby/rubyDOM-insert-rt-block-2.html
               fast/ruby/rubyDOM-insert-rt-block-3.html
               fast/ruby/rubyDOM-remove-rt-block-1.html
               fast/ruby/rubyDOM-remove-rt-block-2.html
               fast/ruby/rubyDOM-remove-rt-block-3.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::moveAllChildrenTo): useful for anonymous block manipulation
        (WebCore::RenderBlock::removeChild): making use of moveAllChildrenTo
        * rendering/RenderBlock.h:
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::hasOnlyWrappedInlineChildren):
        (WebCore::RenderRubyBase::moveChildren):
        (WebCore::RenderRubyBase::moveInlineChildren):
        (WebCore::RenderRubyBase::moveBlockChildren):
        (WebCore::RenderRubyBase::mergeBlockChildren):
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::addChild):
        (WebCore::RenderRubyRun::removeChild):

2010-01-19  Dan Bernstein  <mitz@apple.com>

        Build fix after r53514

        * WebCore.base.exp: Removed threadGlobalData(), which was inlined in r53514.

2010-01-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Avoid calling NSEqualRects() on the garbage rect obtained
        by calling -frame on a null view.

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::setFrameRect):

2010-01-19  Maciej Stachowiak  <mjs@apple.com>

        Unreviewed build fix.

        Remove currentWorld from the exports file again, since it is now inline.

        * WebCore.base.exp:

2010-01-19  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Tim Hatcher.

        Part of <http://webkit.org/b/28622>.
        Caught exceptions still pause the debugger.
        
        Update JavaScriptDebugServer::exception to take a hasHandler parameter,
        so later we can differentiate between a caught and an uncaught exception.
        
        This just adds a new parameter, no behavior is changed.

        No change in functionality, so no tests.

        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::exception):
        * inspector/JavaScriptDebugServer.h:

2010-01-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        Inline functions that are hot in DOM manipulation
        https://bugs.webkit.org/show_bug.cgi?id=33820

        (3% speedup on Dromaeo DOM Core tests)

        * bindings/js/JSDOMBinding.h:
        (WebCore::currentWorld): Inlined.
        (WebCore::jsString): Inlined String& overload and split off slow case.
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsStringSlowCase): Slow case for the above.
        * dom/Document.h:
        (WebCore::Document::isHTMLDocument): Use a bit and an inline method
        instead of a virtual method, since this is so hot and size of Document
        is not a prime concern.
        (WebCore::Document::create): Adapt for above.
        (WebCore::Document::createXHTML): ditto
        * dom/Document.cpp:
        (WebCore::Document::Document): ditto
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument): ditto
        * html/HTMLDocument.h: ditto
        * loader/PlaceholderDocument.h:
        (WebCore::PlaceholderDocument::PlaceholderDocument): ditto
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::SVGDocument): ditto
        * dom/Element.h:
        (WebCore::Element::attributes): Inlined.
        (WebCore::Element::updateId): Inlined.
        * dom/Element.cpp: (Remove inlined methods.)
        * dom/NamedAttrMap.h:
        (WebCore::NamedNodeMap::getAttributeItem): Inlined and split off slow case.
        * dom/NamedAttrMap.cpp:
        (WebCore::NamedNodeMap::getAttributeItemSlowCase): Slow case for the above.
        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        (WebCore::InspectorController::didInsertDOMNode): Inlined so the fast case
        early exit doesn't incur a function call.
        (WebCore::InspectorController::didRemoveDOMNode): ditto
        (WebCore::InspectorController::didModifyDOMAttr): ditto
        * platform/ThreadGlobalData.h:
        (WebCore::threadGlobalData): Inlined.
        * platform/ThreadGlobalData.cpp: (Removed inline methods).
        * platform/Timer.h:
        (WebCore::TimerBase::isActive): Inlined.
        * platform/Timer.cpp: (Removed inline methods).
        * WebCore.xcodeproj/project.pbxproj: Install new heares.
        * WebCore.base.exp: Add appropriate exports.

2010-01-19  Jon Honeycutt  <jhoneycutt@apple.com>

        Chromium build fix.

        * accessibility/chromium/AccessibilityObjectChromium.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Call correct function.

2010-01-17  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: The child <option> elements of a non-multiple <select> are not
        exposed

        https://bugs.webkit.org/show_bug.cgi?id=33773
        <rdar://problem/7550556>

        Reviewed by Alice Liu.

        This exposes the child <option> elements in a format similar to
        Firefox's: the <select> element has one child, a hidden list object,
        and this list has as its children the <option> elements.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files to project.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        If the element is a RenderMenuList, create an AccessibilityMenuList.
        (WebCore::AXObjectCache::getOrCreate):
        Add new types to create by role value.

        * accessibility/AccessibilityMenuList.cpp: Added.
        (WebCore::AccessibilityMenuList::AccessibilityMenuList):
        Call the base class constructor. Assert that the RenderObject passed
        is a RenderMenuList.
        (WebCore::AccessibilityMenuList::press):
        Show or hide the popup menu.
        (WebCore::AccessibilityMenuList::addChildren):
        Create an AccessibilityMenuListPopup. If the platform ignores its
        accessibility, remove it from the object cache and return early.
        Otherwise, set its parent object to this object, add it to our list of
        children, and tell it to add its children.
        (WebCore::AccessibilityMenuList::childrenChanged):
        Tell our child hidden list that its children changed.
        (WebCore::AccessibilityMenuList::isCollapsed):
        Return whether the popup menu is visible.

        * accessibility/AccessibilityMenuList.h: Added.
        (WebCore::AccessibilityMenuList::create):
        Adopt and return a new RenderMenuList.
        (WebCore::AccessibilityMenuList::isMenuList):
        (WebCore::AccessibilityMenuList::roleValue):
        (WebCore::AccessibilityMenuList::accessibilityIsIgnored):
        (WebCore::AccessibilityMenuList::canSetFocusAttribute):

        * accessibility/AccessibilityMenuListOption.cpp: Added.
        (WebCore::AccessibilityMenuListOption::AccessibilityMenuListOption):
        Initialize the pointer to our parent popup menu.
        (WebCore::AccessibilityMenuListOption::setElement):
        Assert that the element is an <option> element.
        (WebCore::AccessibilityMenuListOption::actionElement):
        Return our element.
        (WebCore::AccessibilityMenuListOption::parentObject):
        Return our parent popup menu.
        (WebCore::AccessibilityMenuListOption::isEnabled):
        Return true if the element itself is enabled.
        (WebCore::AccessibilityMenuListOption::isVisible):
        Return true if the popup is visible, or return true if the popup is
        collapsed but the element is selected.
        (WebCore::AccessibilityMenuListOption::isOffScreen):
        Return true if the object is invisible.
        (WebCore::AccessibilityMenuListOption::isSelected):
        (WebCore::AccessibilityMenuListOption::setSelected):
        (WebCore::AccessibilityMenuListOption::nameForMSAA):
        Return the <option> element's text.
        (WebCore::AccessibilityMenuListOption::canSetSelectedAttribute):
        Return true if enabled.
        (WebCore::AccessibilityMenuListOption::elementRect):
        Return the AccessibilityMenuList's rect.

        * accessibility/AccessibilityMenuListOption.h: Added.
        (WebCore::AccessibilityMenuListOption::create):
        Adopt and return a new AccessibilityMenuListOption.
        (WebCore::AccessibilityMenuListOption::setParent):
        (WebCore::AccessibilityMenuListOption::isMenuListOption):
        (WebCore::AccessibilityMenuListOption::roleValue):
        (WebCore::AccessibilityMenuListOption::canHaveChildren):
        (WebCore::AccessibilityMenuListOption::size):

        * accessibility/AccessibilityMenuListPopup.cpp: Added.
        (WebCore::AccessibilityMenuListPopup::AccessibilityMenuListPopup):
        Initialize the pointer to our parent list.
        (WebCore::AccessibilityMenuListPopup::isVisible):
        Return false; we're never considered visible.
        (WebCore::AccessibilityMenuListPopup::isOffScreen):
        Return true if the popup is collapsed.
        (WebCore::AccessibilityMenuListPopup::parentObject):
        Return our parent AccessibilityMenuList.
        (WebCore::AccessibilityMenuListPopup::isEnabled):
        Return true if our parent is enabled.
        (WebCore::AccessibilityMenuListPopup::menuListOptionAccessibilityObject):
        If the element is an <option> element, create a list item for it, and
        set the object's element to this element.
        (WebCore::AccessibilityMenuListPopup::press):
        Call our parent's press() function to show or hide the popup menu.
        (WebCore::AccessibilityMenuListPopup::addChildren):
        Walk the select element's children, and create list items for them. Add
        them to our list of children.
        (WebCore::AccessibilityMenuListPopup::childrenChanged):
        If any of our children have been detached from the document, remove
        them from the AXObjectCache and from our child list.
        (WebCore::AccessibilityMenuListPopup::setMenuList):

        * accessibility/AccessibilityMenuListPopup.h: Added.
        (WebCore::AccessibilityMenuListPopup::create):
        Adopt and return an AccessibilityMenuListPopup.
        (WebCore::AccessibilityMenuListPopup::isMenuListPopup):
        (WebCore::AccessibilityMenuListPopup::elementRect):
        (WebCore::AccessibilityMenuListPopup::size):
        (WebCore::AccessibilityMenuListPopup::roleValue):

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::actionVerb):
        Add the menuListAction and menuListPopupAction verbs.

        * accessibility/AccessibilityObject.h:
        (WebCore::):
        Add new roles.
        (WebCore::AccessibilityObject::isMenuList):
        Stubbed.
        (WebCore::AccessibilityObject::isMenuListHiddenList):
        Stubbed.
        (WebCore::AccessibilityObject::isMenuListOption):
        Stubbed.
        (WebCore::AccessibilityObject::isVisible):
        Stubbed.

        * accessibility/chromium/AccessibilityObjectChromium.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Ignore the new object type.

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Ditto.

        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Ditto.

        * accessibility/qt/AccessibilityObjectQt.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Ditto.

        * accessibility/win/AccessibilityObjectWin.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Allow the new object types.

        * accessibility/wx/AccessibilityObjectWx.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Ignore the new object type.

        * accessibility/win/AccessibilityObjectWin.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        If the object is an AccessibilityMenuListHiddenList or
        AccessibilityMenuListOption, include it.

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::disabled):
        Call ownElementDisabled().

        * html/HTMLOptionElement.h:
        (WebCore::HTMLOptionElement::ownElementDisabled):
        Return the base class implementation of disabled, which returns
        whether this <option> itself is disabled.

        * platform/LocalizedStrings.h:
        Declare new localized string functions.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::AXMenuListPopupActionVerb):
        Stubbed.
        (WebCore::AXMenuListActionVerb):
        Stubbed.

        * platform/haiku/LocalizedStringsHaiku.cpp:
        (WebCore::AXMenuListPopupActionVerb):
        Stubbed.
        (WebCore::AXMenuListActionVerb):
        Stubbed.

        * platform/mac/LocalizedStringsMac.mm:
        (WebCore::AXMenuListPopupActionVerb):
        Call the view factory's method.
        (WebCore::AXMenuListActionVerb):
        Ditto.

        * platform/qt/Localizations.cpp:
        (WebCore::AXMenuListPopupActionVerb):
        Stubbed.
        (WebCore::AXMenuListActionVerb):
        Stubbed.

        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::AXMenuListPopupActionVerb):
        Stubbed.
        (WebCore::AXMenuListActionVerb):
        Stubbed.

2010-01-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Support reflections on WebGL
        https://bugs.webkit.org/show_bug.cgi?id=33754

        Support reflections of WebGL content, by ensuring that when the Canvas3DLayer containing the
        WebGL content gets displayed, we correctly copy its content to the clone layers.
        
        Test: compositing/webgl/webgl-reflection.html

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::didDisplay): Give the didDisplay() client method a parameter
        which is the layer that displayed.
        * platform/graphics/mac/Canvas3DLayer.mm:
        (-[Canvas3DLayer display]): Override -[CALayer display], and call the client didDisplay().
        * platform/graphics/mac/GraphicsLayerCA.h: didDisplay() takes a PlatformLayer parameter.

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::~GraphicsLayerCA): We need to clear the layer owner on the content
        layer, since we're setting it for WebGL layers now.
        
        (WebCore::GraphicsLayerCA::didDisplay): Handle didDisplay() calls for the content layer,
        as well as the main layer now, getting the correct layer to copy contents from, and using
        the correct clone map.
        
        (WebCore::GraphicsLayerCA::setContentsToGraphicsContext3D): Set the layer owner for WebGL
        layers, because we need the didDisplay() callback.

        * platform/graphics/mac/WebLayer.mm:
        (-[WebLayer display]): didDisplay() takes a layer argument.
        * platform/graphics/mac/WebTiledLayer.mm:
        (-[WebTiledLayer display]): ditto.

2010-01-19  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/7555330> <http://webkit.org/b/33770> dataFunctionMatrix leaks the array allocated by toArray

        Rework toArray to extract elements in to a vector rather than handing out raw pointers.  This prevents
        callers from forgetting to free the memory, and gives them the option of using stack buffers for
        sufficiently small allocations.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::texSubImage2D):
        (WebCore::toVector):
        (WebCore::dataFunctionf):
        (WebCore::dataFunctioni):
        (WebCore::dataFunctionMatrix):

2010-01-19  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Darin Adler.

        Another crazy counters bug
        https://bugs.webkit.org/show_bug.cgi?id=11031

        This patch actually provides for counter updating when the style
        of a renderer changes.

        Tests: fast/css/counters/counter-increment-002.html
               fast/css/counters/counter-reset-000.html
               fast/css/counters/counter-reset-002.html

        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::rendererStyleChanged):
        This function is added to update the counter hierarchy in 
        response to changes to the style of a renderer.
        * rendering/RenderCounter.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleDidChange):
        For changes that may include the counter directives added a
        call to RenderCounter::rendererStyleChanged.

2010-01-19  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed. Build fixes for make distcheck - missing files.

        * GNUmakefile.am:

2010-01-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=33850
        Attr.childNodes does not get updated after DOM mutations

        Test: fast/dom/Attr/child-nodes-cache.html

        * dom/Node.cpp: (WebCore::Node::notifyLocalNodeListsAttributeChanged): If the node is an
        attribute, then changing it shouldn't take the shortcut that only resets a subset of caches.

2010-01-19  John Sullivan  <sullivan@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=33854
        Would like a variant of WebHTMLRepresentation's searchForLabelsBeforeElement that returns 
        more info about where the result was found

        Reviewed by Darin Adler.

        No new tests. This just adds a couple of out parameters for the benefit of WebKit clients.

        * WebCore.base.exp:
        Updated mangled signature for export.

        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsAboveCell):
        Now fills in an out parameter with the number of characters from the start of the cell.
        (WebCore::Frame::searchForLabelsBeforeElement):
        Now fills in an out parameter with the distance as a number of characters, and another
        with a bool for whether the result was in a table cell above the current cell (otherwise
        it was found in the text before this element and after the previous element or start of form).

        * page/Frame.h:
        Updated signatures.

        * page/mac/FrameMac.mm:
        (WebCore::Frame::searchForNSLabelsAboveCell):
        Same as above. This is a parallel copy of the function using Mac-specific data structures.
        (WebCore::Frame::searchForLabelsBeforeElement):
        Ditto

2010-01-19  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Nikolas Zimmermann.

        [OpenVG] Add (EGL) surface/context management
        https://bugs.webkit.org/show_bug.cgi?id=33403

        The foundations for a new OpenVG port.

        OpenVG is not tied to EGL per se, EGL just happens to be
        the only usable backend for OpenVG state and painting
        at the time of writing.

        The purpose of the SurfaceOpenVG class is to provide
        an EGL-independent interface for OpenVG-specific code.
        The EGLDisplayOpenVG class takes care of keeping track
        of EGL displays, surfaces and contexts. It also makes
        sure that all created contexts are interoperable, and
        that different surfaces use a single context if possible.

        * platform/graphics/openvg/EGLDisplayOpenVG.cpp: Added.
        (WebCore::displayManagers):
        (WebCore::EGLDisplayOpenVG::currentSurface):
        (WebCore::EGLDisplayOpenVG::registerPlatformSurface):
        (WebCore::EGLDisplayOpenVG::unregisterPlatformSurface):
        (WebCore::EGLDisplayOpenVG::setCurrentDisplay):
        (WebCore::EGLDisplayOpenVG::current):
        (WebCore::EGLDisplayOpenVG::forDisplay):
        (WebCore::EGLDisplayOpenVG::EGLDisplayOpenVG):
        (WebCore::EGLDisplayOpenVG::~EGLDisplayOpenVG):
        (WebCore::EGLDisplayOpenVG::setDefaultPbufferConfig):
        (WebCore::EGLDisplayOpenVG::defaultPbufferConfig):
        (WebCore::EGLDisplayOpenVG::setDefaultWindowConfig):
        (WebCore::EGLDisplayOpenVG::defaultWindowConfig):
        (WebCore::EGLDisplayOpenVG::sharedPlatformSurface):
        (WebCore::EGLDisplayOpenVG::createPbufferSurface):
        (WebCore::EGLDisplayOpenVG::surfaceForWindow):
        (WebCore::EGLDisplayOpenVG::surfacesCompatible):
        (WebCore::EGLDisplayOpenVG::destroySurface):
        (WebCore::EGLDisplayOpenVG::contextForSurface):
        * platform/graphics/openvg/EGLDisplayOpenVG.h: Added.
        (WebCore::EGLDisplayOpenVG::display):
        * platform/graphics/openvg/EGLUtils.h: Added.
        (toEGLErrorConstant):
        * platform/graphics/openvg/SurfaceOpenVG.cpp: Added.
        (WebCore::SurfaceOpenVG::currentSurface):
        (WebCore::SurfaceOpenVG::SurfaceOpenVG):
        (WebCore::SurfaceOpenVG::~SurfaceOpenVG):
        (WebCore::SurfaceOpenVG::isValid):
        (WebCore::SurfaceOpenVG::width):
        (WebCore::SurfaceOpenVG::height):
        (WebCore::SurfaceOpenVG::sharedSurface):
        (WebCore::SurfaceOpenVG::makeCurrent):
        (WebCore::SurfaceOpenVG::makeCompatibleCurrent):
        (WebCore::SurfaceOpenVG::flush):
        * platform/graphics/openvg/SurfaceOpenVG.h: Added.
        (WebCore::SurfaceOpenVG::eglDisplay):
        (WebCore::SurfaceOpenVG::eglSurface):
        (WebCore::SurfaceOpenVG::eglContext):
        * platform/graphics/openvg/VGUtils.h: Added.
        (toVGErrorConstant):

2010-01-19  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Renames jni_utility and jni_utility_private to JNIUtility and JNIUtilityPrivate
        https://bugs.webkit.org/show_bug.cgi?id=33843

        No new tests, refactoring only.

        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/jni/JNIUtility.cpp: Copied from WebCore/bridge/jni/jni_utility.cpp.
        * bridge/jni/JNIUtility.h: Copied from WebCore/bridge/jni/jni_utility.h.
        * bridge/jni/jni_jsobject.mm:
        * bridge/jni/jni_objc.mm:
        * bridge/jni/jni_runtime.cpp:
        * bridge/jni/jni_runtime.h:
        * bridge/jni/jni_utility.cpp: Removed.
        * bridge/jni/jni_utility.h: Removed.
        * bridge/jni/jsc/JNIUtilityPrivate.cpp: Copied from WebCore/bridge/jni/jsc/jni_utility_private.cpp.
        (JSC::Bindings::convertValueToJValue):
        * bridge/jni/jsc/JNIUtilityPrivate.h: Copied from WebCore/bridge/jni/jsc/jni_utility_private.h.
        * bridge/jni/jsc/JavaClassJSC.cpp:
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        * bridge/jni/jsc/JavaStringJSC.h:
        * bridge/jni/jsc/jni_utility_private.cpp: Removed.
        * bridge/jni/jsc/jni_utility_private.h: Removed.
        * platform/android/GeolocationServiceBridge.cpp:
        * platform/android/GeolocationServiceBridge.h:
        * platform/android/TemporaryLinkStubs.cpp:

2010-01-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Occasional crash when interacting with page with reflected WebGL
        https://bugs.webkit.org/show_bug.cgi?id=33863
        
        If updateCompositingLayers() was called with an updateRoot that was a reflection layer,
        then we would determine that the layer does not require compositing, and tear down its
        backing (without clearing replicaLayer() on the source layer's GraphicsLayer).
        
        Fix by changing requiresCompositingLayer() on a reflection layer to always give the
        same answer for a reflection and its original.
        
        Also add various belt-and-brances code and null checks to ensure that if we ever end up
        with a non-composited reflection layer, we won't crash.
        
        No new tests, because the crash depends on timing issues that are hard to reproduce in a test.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::replicaLayer): Make this public so we can use it in an assertion.
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking): Clear the source layer's replica layer
        pointer if tearing down backing store of a reflection.
        
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): Null-check reflection->backing().
        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry): Null-check reflection->backing().
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry): reflection->backing().
        (WebCore::RenderLayerCompositor::requiresCompositingLayer): If being called for a reflection layer,
        use the source layer to answer the question.        

2010-01-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Some composited reflections incorrectly positioned
        https://bugs.webkit.org/show_bug.cgi?id=33856
        
        When setting the position of the replicated layer inside the reflection, we need to take
        into account the bounds of the original layer, and the replica layer to get the
        reflection in the right place.

        Tests: compositing/reflections/nested-reflection-transformed2.html
               compositing/reflections/reflection-positioning2.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2010-01-19  Enrica Casucci  <enrica@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION: Infinite recursion in Position::getInlineBoxAndOffset()
        https://bugs.webkit.org/show_bug.cgi?id=33864
        <rdar://problem/7552959>
        
        Regression has been introduced by changeset 53085.
        The original fix had to be limited to editable content.

        Test: editing/selection/selection-applet.html

        * dom/Position.cpp:
        (WebCore::Position::getInlineBoxAndOffset):

2010-01-19  Kristian Amlie <kristian.amlie@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Fix qmake warning with qmake in Qt for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=33786

        * WebCore.pro: Use QMAKE_LFLAGS instead of MMP_RULES.

2010-01-19  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

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

        Fixes an issue in the Apple Mac port where ScrollView::platformVisibleContentRect
        returns the rectangle of the document within the content view of
        the scroll view (i.e. the rectangle not including scrollbars) when
        the parameter includeScrollbars == true

        Currently, this behavior contradicts both the comment in ScrollView.h
        for method visibleContentRect as well as the behavior in
        ScrollView::visibleContentRect() for a platform-independent scroll view.

        Instead, it should return the rectangle whose dimensions include
        the scrollbars.

        Also, removes some extra whitespace at the end of the lines.

        No tests included because we cannot test this using either DRT
        or a manual test.

        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformVisibleContentRect): If includeScrollbars == true
        then return the rectangle whose dimensions are that of
        the frame (i.e. -[NSScrollView frame]).

2010-01-19  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Fixes style in WebCore/bridge/jni/jsc/JavaClassJSC
        https://bugs.webkit.org/show_bug.cgi?id=33819

        No new tests, style fixes only.

        * bridge/jni/jsc/JavaClassJSC.cpp: Modified.
        * bridge/jni/jsc/JavaClassJSC.h: Modified.

2010-01-19  Jaime Yap  <jaimeyap@google.com>

        Reviewed by Pavel Feldman.
        
        Refactors the TimelineRecordFactory and InspectorTimelineAgent to support reporting data
        when closing a record. Also includes grabbing the start and end line number for parse HTML
        records as a reference use case for the above refactor

        Tests updated:
            inspector/timeline-parse-html-expected.txt
            inspector/timeline-layout-expected.txt
            inspector/timeline-recalculate-styles-expected.txt

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

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::write):
        * inspector/InspectorTimelineAgent.cpp:
        (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::willSendResourceRequest):
        (WebCore::InspectorTimelineAgent::didReceiveResourceResponse):
        (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
        (WebCore::InspectorTimelineAgent::didMarkTimeline):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createEventDispatchData):
        (WebCore::TimelineRecordFactory::createGenericTimerData):
        (WebCore::TimelineRecordFactory::createTimerInstallData):
        (WebCore::TimelineRecordFactory::createXHRReadyStateChangeData):
        (WebCore::TimelineRecordFactory::createXHRLoadData):
        (WebCore::TimelineRecordFactory::createEvaluateScriptData):
        (WebCore::TimelineRecordFactory::createMarkTimelineData):
        (WebCore::TimelineRecordFactory::createResourceSendRequestData):
        (WebCore::TimelineRecordFactory::createResourceReceiveResponseData):
        (WebCore::TimelineRecordFactory::createResourceFinishData):
        (WebCore::TimelineRecordFactory::createPaintData):
        (WebCore::TimelineRecordFactory::createParseHTMLData):
        * inspector/TimelineRecordFactory.h:

2010-01-19 Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=30883
        [Gtk] Implement AtkText for HTML elements which contain text

        Moves the text assembling functionality from getPangoLayoutForAtk to
        textForObject, which webkit_accessible_text_get_text now falls back on
        when it comes up empty.

        Adds a check in textForObject so that we don't double-add newlines
        when we have a BR.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (textForObject):
        (getPangoLayoutForAtk):
        (webkit_accessible_text_get_text):

2010-01-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adam Roben.

        error events don't fire if no <source> elements passed to media engine
        https://bugs.webkit.org/show_bug.cgi?id=33855

        Test: media/video-source-error-no-candidate.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::selectMediaResource): Only bail early if
        there is no 'src' attribute and no <source> child elements at all.

2010-01-19  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Roben.

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

        REGRESSION(r53273): Fixes redefinition of XFORM error when building
        WebKit using Qt Windows with the MinGW compiler.
 
        Note, MinGW has a slightly different declaration of the struct XFORM
        from that in the Microsoft SDK. So, we need to substitute an alternative
        typedef for XFORM when compiling with MinGW.

        No functionality was changed. So, no new tests.

        * platform/graphics/transforms/TransformationMatrix.h:

2010-01-19  Stephen White  <senorblanco@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix for crash on large TransparencyWin allocation.  The fix is
        to leave m_layerValid false when the allocPixels of
        OwnedBuffers::m_referenceBitmap fails.  Then TransparencyWin won't
        attempt to use it.

        Will be covered by a new unit test in Chromium's test_shell_tests (when
        this is rolled into Chromium).

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

        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::initializeNewContext):
        Early return when m_referenceBitmap or its pixels is NULL, leaving
        m_layerValid false.

2010-01-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adam Roben.

        video.networkState remains NETWORK_LOADING indefinitely when no <source> element was able to be loaded
        https://bugs.webkit.org/show_bug.cgi?id=33744

        Test: media/video-source-none-supported.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadNextSourceChild): Call waitForSourceChange if
            there are no valid source elements.
        (WebCore::HTMLMediaElement::waitForSourceChange): New, set networkState to NETWORK_NO_SOURCE.
        (WebCore::HTMLMediaElement::setNetworkState): Call waitForSourceChange if the movie
            hasn't reached HAVE_METADATA and there are no more <source> elements to try.
        * html/HTMLMediaElement.h: Declare waitForSourceChange.

2010-01-19  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Treat.

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

        Implements an optimization to ignore fixed background images
        (i.e. background-attachment: fixed) when a page does not contain
        any fixed position elements so as to allow fast repaints (via bit
        blit) when scrolling a page.

        Currently, if a page has elements that specify either a fixed
        background or a fixed position then we perform a slow repaint
        (i.e disable blitting) so as to avoid rendering artifacts.
        However, on low-powered/mobile devices slow repaints can cause
        noticeable delays when scrolling a page with a fixed background
        image. By sacrificing support for fixed background images when
        there are no fixed elements on the page and with come care, we
        don't need to force slow repaints and can avoid rendering artifacts.
        Hence, on such devices we can improve the responsiveness of
        scrolling a page with a fixed background image.

        Note, this optimization is only enabled if the WebKit is built
        with FAST_MOBILE_SCROLLING enabled.

        Tests: fast/fast-mobile-scrolling/fixed-position-element.html
               fast/fast-mobile-scrolling/no-fixed-position-elements.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        Disable fixed background attachment if we can blit on scroll.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):

2010-01-19  Dave Hyatt  <hyatt@apple.com>

        Build bustage fix.  Land modified WebCore.base.exp file that includes export of currentWorld().

        * WebCore.base.exp:

2010-01-19  Brady Eidson  <beidson@apple.com>

        Reviewed by Alexey Proskuryakov.

        Crash in Page::backForwardList when using History object from a detached window
        <rdar://problem/7556252> and https://bugs.webkit.org/show_bug.cgi?id=33828

        Test: fast/loader/stateobjects/state-api-on-detached-frame-crash.html

        * page/History.cpp:
        (WebCore::History::stateObjectAdded): Do an early return when detached. The spec
          doesn't really cover expected behavior and we already do something similar in 
          other places, such as in History::length().

2010-01-19  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by NOBODY (build fix).

        Revert r53467. Browser crashes on opening inspector if there
        are messages in console.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::databaseForId):
        (WebCore::JSInjectedScriptHost::inspectedWindow):
        (WebCore::JSInjectedScriptHost::wrapCallback):
        (WebCore::JSInjectedScriptHost::currentCallFrame):
        (WebCore::JSInjectedScriptHost::nodeForId):
        (WebCore::JSInjectedScriptHost::wrapObject):
        (WebCore::JSInjectedScriptHost::unwrapObject):
        (WebCore::JSInjectedScriptHost::pushNodePathToFrontend):
        (WebCore::JSInjectedScriptHost::selectDatabase):
        (WebCore::JSInjectedScriptHost::selectDOMStorage):
        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptObject.h:
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::quarantineValue):
        * bindings/js/ScriptValue.h:
        * bindings/v8/ScriptObject.h:
        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::quarantineValue):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::inspectedWindowCallback):
        (WebCore::V8InjectedScriptHost::wrapCallbackCallback):
        (WebCore::V8InjectedScriptHost::wrapObjectCallback):
        (WebCore::V8InjectedScriptHost::unwrapObjectCallback):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::addToConsole):
        (WebCore::ConsoleMessage::isEqual):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::wrapObject):
        (WebCore::InjectedScriptHost::unwrapObject):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        (WebCore::InspectorBackend::releaseWrapperObjectGroup):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::clearConsoleMessages):
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::didPause):
        (WebCore::InspectorController::wrapObject):
        (WebCore::InspectorController::unwrapObject):
        (WebCore::InspectorController::releaseWrapperObjectGroup):
        (WebCore::InspectorController::resetInjectedScript):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addConsoleMessage):
        (WebCore::InspectorFrontend::pausedScript):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype._reloadResources):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.requestClearMessages):
        (WebInspector.ConsoleView.prototype.completions):
        (WebInspector.ConsoleView.prototype.doEvalInWindow):
        (WebInspector.ConsoleView.prototype._formatnode):
        (WebInspector.ConsoleView.prototype._formatarray):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.CSSStyleDeclaration):
        (WebInspector.CSSStyleDeclaration.parseRule):
        * inspector/front-end/Database.js:
        (WebInspector.Database.prototype.executeSql):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel.prototype.setDocument):
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.performSearch):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.createTooltipForImageNode):
        * inspector/front-end/EventListenersSidebarPane.js:
        ():
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.dispatch):
        (InjectedScript.toggleStyleEnabled):
        (InjectedScript._serializeRule):
        (InjectedScript._serializeStyle):
        (InjectedScript.getProperties):
        (InjectedScript.setPropertyValue):
        (InjectedScript._evaluateAndWrap):
        (InjectedScript.getCallFrames):
        (InjectedScript._inspectObject):
        (InjectedScript._ensureCommandLineAPIInstalled):
        (InjectedScript._resolveObject):
        (InjectedScript._window):
        (InjectedScript._objectForId):
        (InjectedScript.createProxyObject):
        (InjectedScript.executeSql):
        (InjectedScript.executeSql.errorCallback):
        (InjectedScript.executeSql.queryTransaction):
        (Object.type):
        (String.prototype.escapeCharacters):
        * inspector/front-end/InjectedScriptAccess.js:
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.methodName):
        (InjectedScriptAccess._installHandler):
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane):
        (WebInspector.MetricsSidebarPane.prototype.update.inlineStyleCallback):
        (WebInspector.MetricsSidebarPane.prototype.update):
        (WebInspector.MetricsSidebarPane.prototype.editingCommitted):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.update):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
        (WebInspector.ObjectPropertyTreeElement.prototype.applyExpression):
        * inspector/front-end/ObjectProxy.js:
        (WebInspector.ObjectProxy):
        (WebInspector.ObjectProxy.getPropertiesAsync):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.callback):
        (WebInspector.PropertiesSidebarPane.prototype.update):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.ondblclick):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.doEvalInCallFrame):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.pausedScript):
        (WebInspector.addConsoleMessage):
        (WebInspector.log.logMessage):
        (WebInspector.log):

2010-01-19  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Inject inspector script directly into the inspected context. All the
        communication between the script and the frontend is serialized into
        JSON strings. It allows to get rid of object quarantines in Web Inspector.

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

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::databaseForId):
        (WebCore::JSInjectedScriptHost::currentCallFrame):
        (WebCore::JSInjectedScriptHost::nodeForId):
        (WebCore::JSInjectedScriptHost::pushNodePathToFrontend):
        (WebCore::JSInjectedScriptHost::selectDatabase):
        (WebCore::JSInjectedScriptHost::selectDOMStorage):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::mainWorldScriptState):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptObject.h:
        (WebCore::ScriptObject::scriptState):
        * bindings/js/ScriptValue.cpp:
        * bindings/js/ScriptValue.h:
        * bindings/v8/ScriptObject.h:
        (WebCore::ScriptObject::scriptState):
        * bindings/v8/ScriptValue.h:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::addToConsole):
        (WebCore::ConsoleMessage::isEqual):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::releaseWrapperObjectGroup):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::setInjectedScriptSource):
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        (WebCore::InspectorBackend::releaseWrapperObjectGroup):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::clearConsoleMessages):
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::didPause):
        (WebCore::InspectorController::injectedScriptForNodeId):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addConsoleMessage):
        (WebCore::InspectorFrontend::pausedScript):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype._reloadResources):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.requestClearMessages):
        (WebInspector.ConsoleView.prototype.doEvalInWindow):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.CSSStyleDeclaration):
        (WebInspector.CSSStyleDeclaration.parseRule):
        * inspector/front-end/Database.js:
        (WebInspector.Database.prototype.executeSql):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged.InjectedScriptAccess.get addInspectedNode):
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel.prototype.setDocument):
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.performSearch):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.createTooltipForImageNode):
        * inspector/front-end/EventListenersSidebarPane.js:
        ():
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        (injectedScriptConstructor.):
        * inspector/front-end/InjectedScriptAccess.js:
        (InjectedScriptAccess):
        (InjectedScriptAccess.getDefault):
        (get InjectedScriptAccess):
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.prototype.methodName):
        (InjectedScriptAccess._installHandler):
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane):
        (WebInspector.MetricsSidebarPane.prototype.update.inlineStyleCallback):
        * inspector/front-end/ObjectPropertiesSection.js:
        * inspector/front-end/ObjectProxy.js:
        (WebInspector.ObjectProxy):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.callback):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.ondblclick):
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.pausedScript):
        (WebInspector.addConsoleMessage):
        (WebInspector.log.logMessage):
        (WebInspector.log):

2010-01-19  Steve Block  <steveblock@google.com>

        Unreviewed build fix.

        Fixes Windows build due to http://trac.webkit.org/changeset/53464
        Updates WebCore.vcproj to reflect renaming of runtime.[cpp|h] to Bridge.[cpp|h]

        No new tests, build fix only.

        * WebCore.vcproj/WebCore.vcproj:

2010-01-19  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Renames WebCore/bridge/runtime.[cpp|h] to WebCore/bridge/Bridge.[cpp|h]
        https://bugs.webkit.org/show_bug.cgi?id=33801

        runtime.[cpp|h] contains general interface classes for use in the bridge,
        so Bridge is a more appropriate name than runtime.

        No new tests, renaming only.

        * Android.jscbindings.mk:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSPluginElementFunctions.cpp:
        * bindings/js/ScriptControllerGtk.cpp:
        * bindings/js/ScriptControllerHaiku.cpp:
        * bindings/js/ScriptControllerMac.mm:
        * bindings/js/ScriptControllerQt.cpp:
        * bindings/js/ScriptControllerWin.cpp:
        * bindings/js/ScriptControllerWx.cpp:
        * bindings/js/ScriptInstance.h:
        * bindings/objc/WebScriptObject.mm:
        * bridge/Bridge.cpp: Copied from WebCore/bridge/runtime.cpp.
        * bridge/Bridge.h: Copied from WebCore/bridge/runtime.h.
        * bridge/c/c_class.h:
        * bridge/c/c_instance.h:
        * bridge/c/c_runtime.h:
        * bridge/jni/jni_instance.h:
        * bridge/objc/objc_runtime.h:
        * bridge/qt/qt_class.h:
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_runtime.cpp:
        * bridge/qt/qt_runtime.h:
        * bridge/runtime.cpp: Removed.
        * bridge/runtime.h: Removed.
        * bridge/runtime_array.h:
        * bridge/runtime_method.h:
        * bridge/runtime_object.h:
        * bridge/runtime_root.cpp:
        * bridge/testbindings.cpp:
        * bridge/testbindings.mm:
        * bridge/testqtbindings.cpp:
        * page/win/FrameWin.cpp:
        * platform/graphics/wince/MediaPlayerProxy.cpp:
        * plugins/PluginView.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/mac/PluginViewMac.cpp:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/symbian/PluginViewSymbian.cpp:
        * plugins/win/PluginViewWin.cpp:

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

        Reviewed by Oliver Hunt.

        REGRESSION (52082): Crash on worker thread when reloading http://radnan.public.iastate.edu/procedural/
        https://bugs.webkit.org/show_bug.cgi?id=33826

        Test: fast/workers/worker-gc2.html

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::~WorkerScriptController): Removed some
        ASSERTs that have moved to JavaScriptCore.

2010-01-19  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (build fix).

        Reverting r53455, breaks 2 javascriptcore tests.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::~WorkerScriptController):

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

        Reviewed by Oliver Hunt.

        REGRESSION (52082): Crash on worker thread when reloading http://radnan.public.iastate.edu/procedural/
        https://bugs.webkit.org/show_bug.cgi?id=33826

        Test: fast/workers/worker-gc2.html

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::~WorkerScriptController): Removed some
        ASSERTs that have moved to JavaScriptCore.

2010-01-18  Daniel Bates  <dbates@webkit.org>

        Reviewed by Darin Adler.

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

        Implements all of the alphabetic CSS3 list-style-types as per
        section 4.4 of the CSS3 Lists module <http://www.w3.org/TR/css3-lists/#alphabetic>.

        Test: fast/lists/w3-css3-list-styles-alphabetic.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Updated comment to include
        added list-style-types.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Added new list style types,
        alphabetized enums, and removed indent to conform to the WebKit Code Style Guidelines.
        * css/CSSValueKeywords.in:
        * inspector/front-end/CSSSourceSyntaxHighlighter.js:
        (WebInspector.CSSSourceSyntaxHighlighter): Added new list style types
        and alphabetized array valueKeywords.
        * platform/text/CharacterNames.h: Added constant ethiopicPrefaceColon.
        * rendering/RenderListMarker.cpp:
        (WebCore::toAlphabetic):
        (WebCore::listMarkerSuffix): Added.
        (WebCore::listMarkerText):
        (WebCore::RenderListMarker::paint): Modified to call WebCore::listMarkerSuffix.
        (WebCore::RenderListMarker::calcPrefWidths): Ditto.
        (WebCore::RenderListMarker::getRelativeMarkerRect): Ditto.
        * rendering/style/RenderStyle.h:
        (WebCore::):
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2010-01-18  Daniel Bates  <dbates@webkit.org>

        Unreviewed, fix misspelling of the word maximum in comment.

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

2010-01-18  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Sam Weinig.

        <rdar://problem/7476957> REGRESSION (r49567): Business widget list does not line up: too tall due to line height rounding change

        Reverted r49567.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        * rendering/RenderBR.cpp:
        (WebCore::RenderBR::lineHeight):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::computedLineHeight):

2010-01-18  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Moves JSC-specific implementation of JavaString to a private implementation class.
        https://bugs.webkit.org/show_bug.cgi?id=33558

        Also modifies JavaField::name and JavaMethod::name to return const JavaString&, rather than UString::Rep*,
        which is JSC-specific. This allows this code to be used with both JSC and V8, as required by Android.

        No new tests, refactoring only.

        * WebCore.xcodeproj/project.pbxproj: Modified. Added JavaStringJSC.h
        * bridge/jni/jni_class.cpp: Modified.
        (JavaClass::JavaClass): Modified. Updates call sites of JavaField::name and JavaMethod::name.
        * bridge/jni/jni_runtime.h: Modified.
        (JSC::Bindings::JavaString::JavaString): Modified. Pass through to implementation.
        (JSC::Bindings::JavaString::UTF8String): Modified. Pass through to implementation.
        (JSC::Bindings::JavaString::uchars): Modified. Pass through to implementation.
        (JSC::Bindings::JavaString::length): Modified. Pass through to implementation.
        (JSC::Bindings::JavaString::operator UString): Modified. Pass through to implementation.
        (JSC::Bindings::JavaField::name): Modified. Pass through to implementation.
        (JSC::Bindings::JavaMethod::name): Modified. Pass through to implementation.
        * bridge/jni/jsc/JavaStringJSC.h: Added.
        (JSC::Bindings::JavaStringImpl::~JavaStringImpl):
        (JSC::Bindings::JavaStringImpl::init):
        (JSC::Bindings::JavaStringImpl::UTF8String):
        (JSC::Bindings::JavaStringImpl::uchars):
        (JSC::Bindings::JavaStringImpl::length):
        (JSC::Bindings::JavaStringImpl::uString):

2010-01-18  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Darin Adler.

        Skip an error after invalid blocks in a CSS expression.
        https://bugs.webkit.org/show_bug.cgi?id=33650

        * css/CSSGrammar.y:

2010-01-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler & Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=33731
        Remove uses of PtrAndFlags from WebCore::StringImpl.

        These break the OS X Leaks tool.  Move the management of null-terminated copies
        out from StringImpl to String, and use a bit stolen from the refCount to hold the
        'InTable' flag.

        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::openDatabase):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare):
        * platform/sql/SQLiteStatement.h:
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        (WebCore::String::copyWithNullTermination):
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl):
        (WebCore::StringImpl::~StringImpl):
        (WebCore::StringImpl::create):
        (WebCore::StringImpl::crossThreadString):
        (WebCore::StringImpl::sharedBuffer):
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::inTable):
        (WebCore::StringImpl::setInTable):

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

        Reviewed by Dirk Schulze.

        Rewrite SVG <use> support in a modern-fashion
        https://bugs.webkit.org/show_bug.cgi?id=33776

        Tests: svg/custom/relative-sized-deep-shadow-tree-content.xhtml
               svg/custom/relative-sized-shadow-tree-content.xhtml

        Fixes: svg/W3C-SVG-1.1/animate-elem-30-t.svg (animated circle sometimes takes wrong path)

        Rewrite <use> support in less intrusive way. Try hard to avoid recloning where possible, and do it lazily.
        Introduce RenderSVGShadowTreeRootContainer as special renderer for SVGUseElement, that now manages the
        render tree, instead of SVGUseElement manually hacking around it's own renderer from the DOM side.

        Instead of recloning the whole shadow tree for every attribute change (DOM setAttribute / SVG DOM changes / CSS changes / childrenChanged()...)
        just notify the RenderSVGShadowTreeRootContainer that it's supposed to reclone the tree upon the next updateFromElement() call.

        updateFromElement() is fired from SVGUseElement::attach() / recalcStyle(), as it's done for HTMLFormControlElement/HTMLMediaElement, thus
        lazily recloning the shadow tree if necessary.

        Animations for <use> elements was a real performance bottlenck as the tree got recloned on every attribute change. Reclones are _completly_
        avoided for animations now - the SVGAnim*Element classes already updated the instances of an element manually, though that resulted in a reclone
        nontheless, and thus killing performance. <use> elements can only be recloned through mutations of the elements that they reference to.
        For example referencing a <rect> element from a <use> element and scripting the <rect> element (setAttribute, or child tree mutations etc.).
        We reclone instead of trying to synchronize trees - as it's currenty implemented - because it's very hard to do it right.

        Any DOM / SVG DOM / CSS change on the <use> element don't reclone the tree anymore, this is a huge speed benefit.
        x/y attribute changes are correctly handled in the render tree now (by an additional local transformation), now percentual values work
        as expected, and resize on window changes - affecting lots of testcases.

        The <use> implementation is much safer now, not doing any mutations synchronously from svgAttributeChanged etc.
        Remove hack to force garbage collection on SVGElementInstance destruction - can't reproduce it anymore.

        * Android.mk: Add new files to build.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/RenderSVGShadowTreeRootContainer.cpp: Added. This is the rendered now created by SVGUseElement.
        (WebCore::RenderSVGShadowTreeRootContainer::RenderSVGShadowTreeRootContainer):
        (WebCore::RenderSVGShadowTreeRootContainer::~RenderSVGShadowTreeRootContainer):
        (WebCore::RenderSVGShadowTreeRootContainer::updateStyle): Used form SVGUseElement to request style recalculations for the shadow tree renderers
        (WebCore::RenderSVGShadowTreeRootContainer::updateFromElement): Used from SVGUseElement attach/recalcStyle to eventually request shadow tree updates.
        (WebCore::RenderSVGShadowTreeRootContainer::styleDidChange): Used to propage style updates across shadow tree boundaries.
        * rendering/RenderSVGShadowTreeRootContainer.h: Added.
        (WebCore::RenderSVGShadowTreeRootContainer::markShadowTreeForRecreation): Marks the shadow tree for a reclone, next time updateFromElement is used.
        * rendering/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::calculateLocalTransform): Take containerTranslation() into account, supplied by RenderSVGSDhadowTreeContainer.
        * rendering/SVGShadowTreeElements.cpp: Added. This is the root element of the SVG shadow tree residing as (hidden) child of SVGUseElement (DOM wise).
        (WebCore::SVGShadowTreeContainerElement::SVGShadowTreeContainerElement):
        (WebCore::SVGShadowTreeContainerElement::~SVGShadowTreeContainerElement):
        (WebCore::SVGShadowTreeContainerElement::containerTranslation): Used from calculateLocalTransform() to take x/y translation into account for shadow tree container elements.
        (WebCore::SVGShadowTreeRootElement::SVGShadowTreeRootElement):
        (WebCore::SVGShadowTreeRootElement::~SVGShadowTreeRootElement):
        (WebCore::SVGShadowTreeRootElement::attachElement): Used by RenderSVGShadowTreeRootContainer, instead of attach(), as we're a shadow tree root node.
        * rendering/SVGShadowTreeElements.h: Added. This is the root element of each SVG shadow sub-tree (whenever a <use> element is expanded in the shadow tree).
        (WebCore::SVGShadowTreeContainerElement::isShadowTreeContainerElement): Return true here.
        (WebCore::SVGShadowTreeContainerElement::setContainerOffset): Used from SVGUseElement to propagate x/y translation values set on <use> elements in the shadow tree.
        (WebCore::SVGShadowTreeRootElement::isShadowNode): Identify us as shadow node.
        (WebCore::SVGShadowTreeRootElement::shadowParentNode): Ditto. Return actual shadow parent node (== corresponding use element).
        * svg/SVGElement.cpp: Shrink size of all SVG*Elements, by removing the m_shadowParent parent. SVGShadowTreeRootElement is the new base class for shadow tree.
        (WebCore::SVGElement::SVGElement):
        (WebCore::SVGElement::eventParentNode): Call virtual shadowParentNode() method, instead of accessing m_shadowParent.
        * svg/SVGElement.h: Remove isShadowNode() / shadowParentNode() / setShadowParentNode().
        * svg/SVGElementInstance.cpp: Remove the hack, calling garbage collection before destruction. Can't reproduce this anymore, let's see what the bots say.
        (WebCore::SVGElementInstance::SVGElementInstance): Remove now unnecessary m_needsUpdate flag.
        (WebCore::SVGElementInstance::invalidateAllInstancesOfElement): Don't invalidate if instance updates are blocked (see SVGStyledElement changes)
        * svg/SVGElementInstance.h: Remove m_needsUpdate, and forgetWrapper() method.
        * svg/SVGGElement.h:
        (WebCore::SVGGElement::isShadowTreeContainerElement): Add new virtual method here returning false by default, SVGShadowTreeContainerElement will override it.
        * svg/SVGStyledElement.cpp: Remove gElementsWithInstanceUpdatesBlocked HashSet tracking the state of instancesUpdatesBlocked() per SVGStyledElement - make it a member variable.
        * svg/SVGStyledElement.h: Add inline getter/setters around m_instanceUpdatesBlocked.
        (WebCore::SVGStyledElement::instanceUpdatesBlocked):
        (WebCore::SVGStyledElement::setInstanceUpdatesBlocked):
        * svg/SVGUseElement.cpp: Full rewrite of <use> support, a detailed discussion would blow the ChangeLog - see short version above.
        (WebCore::SVGUseElement::SVGUseElement):
        (WebCore::SVGUseElement::instanceRoot):
        (WebCore::SVGUseElement::insertedIntoDocument):
        (WebCore::SVGUseElement::removedFromDocument):
        (WebCore::SVGUseElement::svgAttributeChanged):
        (WebCore::updateContainerOffset):
        (WebCore::SVGUseElement::updateContainerOffsets):
        (WebCore::SVGUseElement::recalcStyle):
        (WebCore::dumpInstanceTree):
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::buildShadowAndInstanceTree):
        (WebCore::SVGUseElement::createRenderer):
        (WebCore::updateFromElementCallback):
        (WebCore::SVGUseElement::attach):
        (WebCore::SVGUseElement::detach):
        (WebCore::SVGUseElement::toClipPath):
        (WebCore::SVGUseElement::buildInstanceTree):
        (WebCore::SVGUseElement::handleDeepUseReferencing):
        (WebCore::SVGUseElement::buildShadowTree):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree):
        (WebCore::SVGUseElement::instanceForShadowTreeElement):
        (WebCore::SVGUseElement::invalidateShadowTree):
        (WebCore::SVGUseElement::transferUseAttributesToReplacedElement):
        * svg/SVGUseElement.h:
        (WebCore::SVGUseElement::isPendingResource):

2010-01-18  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        HTMLInputElement::valueAsDate setter support for type=month.
        https://bugs.webkit.org/show_bug.cgi?id=33021

        Introduce ISODateTime::setMillisecondsSinceEpochForMonth() and
        toString() for the Month type, and HTMLInputElement::setValueAsDate()
        calls them.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValueAsDate):
        * html/ISODateTime.cpp:
        (WebCore::beforeGregorianStartDate):
        (WebCore::ISODateTime::addDay): Use beforeGregorianStartDate().
        (WebCore::ISODateTime::parseMonth): Use beforeGregorianStartDate().
        (WebCore::ISODateTime::setMillisecondsSinceEpochForDateInternal):
        (WebCore::ISODateTime::setMillisecondsSinceEpochForMonth):
        (WebCore::ISODateTime::toString): Implement only for the Month type.
        * html/ISODateTime.h:

2010-01-18  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Script attributes are copied and pasted, making cross-domain attacks possible (30019)
        <rdar://problem/6008809>
        https://bugs.webkit.org/show_bug.cgi?id=30019

        When we create the document fragment from a markup string,
        either to perform a paste operation or a drag and drop, we
        want to remove all the event handlers and any attribute that contain
        a value that leads to code execution.
        The HTMLParser class is now aware of the needs of stripping these attributes.
        I've modified the call to createMarkupString for every platform.

        Test: editing/pasteboard/paste-noscript.html

        * WebCore.base.exp:
        * dom/Element.cpp:
        (WebCore::isEventHandlerAttribute):
        (WebCore::Element::setAttributeMap):
        * dom/Element.h:
        * dom/MappedAttributeEntry.h:
        (WebCore::):
        * editing/markup.cpp:
        (WebCore::createFragmentFromMarkup):
        * editing/markup.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createContextualFragment):
        * html/HTMLElement.h:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::HTMLParser):
        (WebCore::HTMLParser::parseToken):
        * html/HTMLParser.h:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::HTMLTokenizer):
        (WebCore::parseHTMLDocumentFragment):
        * html/HTMLTokenizer.h:
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asFragment):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::documentFragment):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::documentFragment):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::documentFragment):
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::asFragment):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::documentFragment):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::fragmentFromCF_HTML):
        (WebCore::fragmentFromHTML):

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

        Reviewed by Sam Weinig.

        <https://bugs.webkit.org/show_bug.cgi?id=33816>        
        Crashes in Geolocation code due to refcounting, observer balance issues.
        
        Hold a ref to the GeoNotifier while dispatching a callback. The code was
        copying a data member to avoid accessing a freed this ptr, but was still
        using the this ptr.
        
        Geolocation::removeObserver calls are not always balanced with addObserver.
        Instead of asserting and continuing, don't try to remove non-existant
        observers.

        * page/Geolocation.cpp:
        (WebCore::Geolocation::GeoNotifier::timerFired): Protect notifier.
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::removeObserver): Change ASSERT into an if with early return.

2010-01-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=33815
        Crash when using DOMTimer from a detached frame

        Test: fast/dom/Window/timer-null-script-execution-context.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        Make setTimer and setInterval raise an exception. It is not specified in HTML5, but both
        IE and Firefox do raise an exception in this situation, although different ones.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setTimeout): Raise INVALID_ACCESS_ERR if script execution context is
        null (meaning that the window is detached).
        (WebCore::DOMWindow::setInterval): Ditto.
        (WebCore::DOMWindow::clearTimeout): Silently return early if there is no script execution
        context.
        (WebCore::DOMWindow::clearInterval): Ditto.
        Raise INVALID_ACCESS_ERR if script execution context is null (meaning .

2010-01-18  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Moves JSC-specific version of JavaClass from bridge/jni/jni_class to bridge/jni/jsc/JavaClassJSC
        https://bugs.webkit.org/show_bug.cgi?id=33561

        No new tests, refactoring only.

        * Android.jscbindings.mk: Modified. Removed jni_class.cpp and added JavaClassJSC.cpp
        * GNUmakefile.am: Modified. Removed jni_class.h and added JavaClassJSC.h
        * WebCore.xcodeproj/project.pbxproj: Modified. Removed jni_class.[cpp|h] and added JavaClassJSC.[cpp|h]
        * bridge/jni/jni_class.cpp: Removed.
        * bridge/jni/jni_class.h: Removed.
        * bridge/jni/jsc/JavaClassJSC.cpp: Copied from WebCore/bridge/jni/jni_class.cpp.
        * bridge/jni/jsc/JavaClassJSC.h: Copied from WebCore/bridge/jni/jni_class.h.
        * bridge/jni/jsc/JavaInstanceJSC.cpp: Modified. Includes JavaClassJSC.h

2010-01-18  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Fix style in WebCore/bridge/jni/jsc/JavaInstanceJSC.[cpp|h]
        https://bugs.webkit.org/show_bug.cgi?id=33792

        No new tests, style fixes only.

        * bridge/jni/jni_runtime.cpp: Modified.
        (JavaField::dispatchValueFromInstance): Modified. Updated to use renamed JavaInstance::m_instance
        (JavaField::dispatchSetValueToInstance): Modified. Updated to use renamed JavaInstance::m_instance
        (JavaArray::JavaArray): Modified. Updated to use renamed JavaInstance::m_instance
        * bridge/jni/jni_runtime.h: Modified.
        (JSC::Bindings::JavaArray::javaArray): Modified. Updated to use renamed JavaInstance::m_instance
        * bridge/jni/jsc/JavaInstanceJSC.cpp: Modified. Fixed style
        * bridge/jni/jsc/JavaInstanceJSC.h: Modified. Fixed style

2010-01-18  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=30073
        Moved reshape to HTMLCanvasElement::reset and have it always
        set the size to the canvas width and height attrs.

        This is not testable with LayoutTests, so I instead added logic
        to the demo at:

        https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/sdk/demos/webkit/SpinningBox.html

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

2010-01-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=33813
        <rdar://problem/7545104> Crash when using DOMApplicationCache from a destroyed frame

        Test: http/tests/appcache/destroyed-frame.html

        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::scriptExecutionContext): Return null when there is no frame.

2010-01-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r53420): incomplete repaint of bottom of bugs.webkit.org comment field
        https://bugs.webkit.org/show_bug.cgi?id=33809

        Test: fast/repaint/trailing-floats-root-line-box-overflow.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Copy bottom overflow from the last
        root box to the trailing floats box, which is becoming the last root box. This is
        needed because painting code assumes that the last line in a block is the one with the
        lowest overflow bottom.

2010-01-18  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed trivial buildfix. (r53429)

        * WebCore.pri: missing XMLNS_NAMES added.

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

        Reviewed by Darin Adler.

        Removed unnecessary use of scriptExecutionContext() when creating a JS event listener.
        https://bugs.webkit.org/show_bug.cgi?id=33811

        This change simplifies a bunch of code, and also reduces
        the number of places that use the difficult-to-understand and possibly
        crashy-null scriptExecutionContext() idiom.

        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSEventListener.h:
        (WebCore::createJSAttributeEventListener):
        * bindings/scripts/CodeGeneratorJS.pm:

2010-01-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=33787
        Add constants for more XML strings

        No change in functionality, so no tests.

        * WebCore/xml/xmlnsattrs.in: Added a new file for xmlns namespace and attribute - 
        XMLNames.{h,cpp} are auto-generated, and I dodn't see a reasonable way to extend it.

        * platform/text/AtomicString.cpp: (WebCore::AtomicString::init):
        * platform/text/AtomicString.h:
        Added atomic strings for "xml" and "xmlns".

        * page/Frame.cpp: (WebCore::Frame::Frame): Call XMLNSNames::init().

        * dom/Attr.cpp: (WebCore::Attr::setPrefix):
        * dom/Document.cpp:
        (WebCore::Document::hasPrefixNamespaceMismatch):
        (WebCore::Document::createAttributeNS):
        * dom/Node.cpp:
        (WebCore::Node::checkSetPrefix):
        (WebCore::Node::isDefaultNamespace):
        (WebCore::Node::lookupNamespaceURI):
        (WebCore::Node::lookupNamespacePrefix):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        (WebCore::handleElementNamespaces):
        * editing/markup.cpp:
        (WebCore::shouldAddNamespaceAttr):
        (WebCore::appendNamespace):
        * xml/XPathStep.cpp:
        (WebCore::XPath::nodeMatchesBasicTest):
        (WebCore::XPath::Step::nodesInAxis):
        Use the new constants.

        * Android.derived.mk:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Added the new files to projects.

2010-01-18  Anders Carlsson  <andersca@apple.com>

        Fix !ENABLE(3D_CANVAS) build.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::is3DCanvas):

2010-01-18  Timothy Hatcher  <timothy@apple.com>

        Adjust the scroll position when doing a full page zoom, so the content
        stays in relatively the same position.

        <rdar://problem/6150099> Zooming should keep the page content in the same place

        Reviewed by Oliver Hunt.

        * page/Frame.cpp:
        (WebCore::Frame::setZoomFactor): Apply the zoom percent difference to
        the scroll position, only when doing a full page zoom.

2010-01-18  Adam Roben  <aroben@apple.com>

        Add SecurityOrigin::{set,is}DomainRelaxationForbiddenForURLScheme and
        respect it

        WebCore part of fixing <http://webkit.org/b/33806>
        <rdar://problem/7552837> Would like API to disallow setting of
        document.domain for pages with certain URL schemes

        Test: http/tests/security/setDomainRelaxationForbiddenForURLScheme.html

        Reviewed by Sam Weinig.

        * WebCore.base.exp: Export
        SecurityOrigin::setDomainRelaxationForbiddenForURLScheme.

        * dom/Document.cpp:
        (WebCore::Document::setDomain): If domain relaxation is forbidden for
        our security origin's scheme, throw an exception and don't allow
        the domain to be set.

        * page/SecurityOrigin.cpp:
        (WebCore::schemesForbiddenFromDomainRelaxation): Added. Returns a
        global set of schemes.
        (WebCore::SecurityOrigin::setDomainRelaxationForbiddenForURLScheme):
        Add or remove the scheme to schemesForbiddenFromDomainRelaxation, as
        appropriate.
        (WebCore::SecurityOrigin::isDomainRelaxationForbiddenForURLScheme):
        Returns true if the scheme is in schemesForbiddenFromDomainRelaxation.

        * page/SecurityOrigin.h: Added
        {set,is}DomainRelaxationForbiddenForURLScheme.

2010-01-18  Dan Bernstein  <mitz@apple.com>

        Address review comments on the last change

        * rendering/TrailingFloatsRootInlineBox.h:
        (WebCore::TrailingFloatsRootInlineBox::TrailingFloatsRootInlineBox):

2010-01-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6892207> REGRESSION (Safari 4): Menus at sciencedirect.com push the main article context down the page
        <rdar://problem/7546035> Second right floated image misplacment
        https://bugs.webkit.org/show_bug.cgi?id=33245

        Test: fast/dynamic/float-in-trailing-whitespace-after-last-line-break-2.html

        When the last line of a block contains a line break and there are floats
        after the line break, it is incorrect to put those floats in the last line’s
        floats vector (along with floats from before the break). Instead, create
        an additional line box (a TrailingFloatsRootInlineBox) and put those floats
        in its floats vector. 

        * WebCore.vcproj/WebCore.vcproj: Added TrailingFloatsRootInlineBox.h
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::markLinesDirtyInVerticalRange): Added an optional
        parameter, which is the highest line to dirty.
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Create a TrailingFloatsRootInlineBox
        for the floats occurring after the line break on the last line.
        (WebCore::RenderBlock::determineStartPosition): Prevent dirtying of lines
        above the first dirty line.
        * rendering/TrailingFloatsRootInlineBox.h: Added.
        (WebCore::TrailingFloatsRootInlineBox::TrailingFloatsRootInlineBox): Call
        setHasVirtualHeight().
        (WebCore::TrailingFloatsRootInlineBox::virtualHeight): Return 0.

2010-01-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (build fix).

        Eeeep! reverting r53416 & r53417, more to be done to fix windows.

        * WebCore.base.exp:
        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::openDatabase):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare):
        * platform/sql/SQLiteStatement.h:
        * platform/sql/chromium/SQLiteFileSystemChromium.cpp:
        (WebCore::SQLiteFileSystem::openDatabase):
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        (WebCore::String::charactersWithNullTermination):
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::operator new):
        (WebCore::StringImpl::operator delete):
        (WebCore::StringImpl::StringImpl):
        (WebCore::StringImpl::~StringImpl):
        (WebCore::StringImpl::create):
        (WebCore::StringImpl::createWithTerminatingNullCharacter):
        (WebCore::StringImpl::crossThreadString):
        (WebCore::StringImpl::sharedBuffer):
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::hasTerminatingNullCharacter):
        (WebCore::StringImpl::inTable):
        (WebCore::StringImpl::setInTable):
        (WebCore::StringImpl::):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::createGlobalData):
        * storage/OriginUsageRecord.cpp:
        (WebCore::OriginUsageRecord::addDatabase):
        (WebCore::OriginUsageRecord::markDatabase):

2010-01-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (windows build fix).

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::createGlobalData):

2010-01-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=33731
        Remove uses of PtrAndFlags from WebCore::StringImpl.

        These break the OS X Leaks tool.  Move the management of null-terminated copies
        out from StringImpl to String, and use a bit stolen from the refCount to hold the
        'InTable' flag.

        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::openDatabase):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare):
        * platform/sql/SQLiteStatement.h:
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        (WebCore::String::copyWithNullTermination):
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl):
        (WebCore::StringImpl::~StringImpl):
        (WebCore::StringImpl::create):
        (WebCore::StringImpl::crossThreadString):
        (WebCore::StringImpl::sharedBuffer):
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::inTable):
        (WebCore::StringImpl::setInTable):

2010-01-18  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        Made root compositing layer scroll rather than scroll parent.
        https://bugs.webkit.org/show_bug.cgi?id=32279
        
        There's some general cleanup here so the frames, bounds and
        positions of all the associated layers are correct.
        I also changed API of setScrollFrame to use an IntRect.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer):
        (WebCore::WKCACFLayerRenderer::setScrollFrame):
        (WebCore::WKCACFLayerRenderer::setRootChildLayer):
        (WebCore::WKCACFLayerRenderer::createRenderer):
        (WebCore::WKCACFLayerRenderer::resize):
        * platform/graphics/win/WKCACFLayerRenderer.h:

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

        Reviewed by Pavel Feldman.

        WebInspector: Timeline panel scrolling speed can be 2 times faster.
        https://bugs.webkit.org/show_bug.cgi?id=33794

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._scheduleRefresh):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelineCalculator):
        (WebInspector.TimelineCalculator.prototype.calculateWindow):
        (WebInspector.TimelineCalculator.prototype.reset):
        (WebInspector.TimelineCalculator.prototype.updateBoundaries):
        (WebInspector.TimelineRecordGraphRow.prototype.update):

2010-01-18  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Moves JSC-specific version of JavaInstance from bridge/jni/jni_instance to bridge/jni/jsc/JavaInstanceJSC
        https://bugs.webkit.org/show_bug.cgi?id=33672

        No new tests, refactoring only.

        * Android.jscbindings.mk: Modified. Removed jni_instance.cpp and added JavaInstanceJSC.cpp
        * GNUmakefile.am: Modified. Removed jni_instance.h and added JavaInstanceJSC.h
        * WebCore.xcodeproj/project.pbxproj: Modified. Removed jni_instance.[cpp|h] and added JavaInstanceJSC.[cpp|h]
        * bindings/js/ScriptControllerMac.mm: Modified. Includes JavaInstanceJSC.h
        * bridge/jni/jni_instance.cpp: Removed.
        * bridge/jni/jni_instance.h: Removed.
        * bridge/jni/jni_runtime.h: Modified. Includes JavaInstanceJSC.h
        * bridge/jni/jsc/JavaInstanceJSC.cpp: Copied from WebCore/bridge/jni/jni_instance.cpp.
        * bridge/jni/jsc/JavaInstanceJSC.h: Copied from WebCore/bridge/jni/jni_instance.h.

2010-01-18  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Simplify image decoders slightly by using OwnPtr instead of raw pointers
        and eliminating a basically-useless wrapper class in the GIF decoder.
        https://bugs.webkit.org/show_bug.cgi?id=28751

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ImageDecoderQt):
        (WebCore::ImageDecoderQt::~ImageDecoderQt):
        (WebCore::ImageDecoderQt::setData):
        (WebCore::ImageDecoderQt::internalReadImage):
        (WebCore::ImageDecoderQt::failRead):
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::GIFImageDecoder):
        (WebCore::GIFImageDecoder::~GIFImageDecoder):
        (WebCore::GIFImageDecoder::setData):
        (WebCore::GIFImageDecoder::frameCount):
        (WebCore::GIFImageDecoder::repetitionCount):
        (WebCore::GIFImageDecoder::decode):
        (WebCore::GIFImageDecoder::decodingHalted):
        (WebCore::GIFImageDecoder::initFrameBuffer):
        (WebCore::GIFImageDecoder::haveDecodedRow):
        (WebCore::GIFImageDecoder::gifComplete):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::JPEGImageDecoder):
        (WebCore::JPEGImageDecoder::~JPEGImageDecoder):
        (WebCore::JPEGImageDecoder::setData):
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::PNGImageDecoder):
        (WebCore::PNGImageDecoder::~PNGImageDecoder):
        (WebCore::PNGImageDecoder::setData):
        (WebCore::PNGImageDecoder::decode):
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):
        * platform/image-decoders/png/PNGImageDecoder.h:

2010-01-18  Daniel Cheng  <dcheng@google.com>

        Reviewed by Adam Roben.

        DataTransfer interface broken on Windows--types member is always
        undefined, and getData() does not work.
        https://bugs.webkit.org/show_bug.cgi?id=30527

        * platform/win/ClipboardWin.cpp:
        (WebCore::addMimeTypesForFormat): pass FORMATETC as a const ref.
        (WebCore::ClipboardWin::types): fix calls to IEnumFORMATETC.
        (WebCore::ClipboardWin::hasData): fix calls to IEnumFORMATETC.

2010-01-18  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Don't show Profiles welcome screen on panel switch,
        if a profile view is shown.

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

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.show):

2010-01-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Force qmake to generate a single makefile for DerivedSources.pro

        * DerivedSources.pro:

2010-01-18  Jonathan Dixon  <joth@chromium.org>

        Reviewed by Adam Barth.

        Add support for enabling navigator.geolocation at runtime in the V8 bindings.
        Adds the [EnabledAtRuntime] modifier to the navigator IDL.
        https://bugs.webkit.org/show_bug.cgi?id=33467

        * WebCore.gypi:
        * bindings/v8/RuntimeEnabledFeatures.cpp:
        * bindings/v8/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setGeolocationEnabled):
        (WebCore::RuntimeEnabledFeatures::geolocationEnabled):
        * bindings/v8/custom/V8NavigatorCustom.cpp: Added.
        (WebCore::V8Navigator::GeolocationEnabled):
        * page/Navigator.cpp:
        (WebCore::Navigator::geolocation):
        * page/Navigator.idl:

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

        Reviewed by Pavel Feldman.

        Improve Resources panel performance for lots of resources

        DOM properties are extracted into const's, comparisons are faster.
        https://bugs.webkit.org/show_bug.cgi?id=33790

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype._updateDividersLabelBarPosition):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.CompareByStartTime):
        (WebInspector.Resource.CompareByResponseReceivedTime):
        (WebInspector.Resource.CompareByEndTime):
        (WebInspector.Resource.CompareByDuration):
        (WebInspector.Resource.CompareByLatency):
        (WebInspector.Resource.CompareBySize):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceGraph.prototype.refreshLabelPositions):

2010-01-18  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel.

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

        Following up on changes made with respect to bug #33498, we should
        fix the the style errors found by the style bot.
        
        Moreover, this fixes all the style errors found by check-webkit-style
        except the use of an underline in the variable name _niflags. We should
        fix this in a second run through for all the other variables names that
        contain an underline because there are many.

        No functionality was changed. So, no new tests.

        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::create):
        (WebCore::SVGRenderStyle::copy):
        (WebCore::SVGRenderStyle::operator!=):
        (WebCore::SVGRenderStyle::hasStroke):
        (WebCore::SVGRenderStyle::hasFill):
        (WebCore::SVGRenderStyle::InheritedFlags::operator==):
        (WebCore::SVGRenderStyle::InheritedFlags::operator!=):
        (WebCore::SVGRenderStyle::NonInheritedFlags::operator==):
        (WebCore::SVGRenderStyle::NonInheritedFlags::operator!=):
        (WebCore::SVGRenderStyle::NonInheritedFlags::):
        (WebCore::SVGRenderStyle::):
        (WebCore::SVGRenderStyle::setBitDefaults):

2010-01-18  Andrei Popescu  <andreip@google.com>

        Reviewed by Adam Barth.

        [Android] DOMWrapperMap::Visitor needs virtual destructor
        https://bugs.webkit.org/show_bug.cgi?id=33675

        Add protected virtual dtor to DOMWrapperMap::Visitor. See bug for further discussion.

        No new tests needed, functionality not changed.

        * bindings/v8/V8DOMMap.h:
        (WebCore::DOMWrapperMap::Visitor::~Visitor): Added.

2010-01-18  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Symbian build fix.

        If we don't link with def files, then we have to pass EXPORTUNFROZEN,
        so that the build system still creates the .dso files in
        release/armv5/lib and we can actually link against the created QtWebKit
        dlls.

        Thanks Iain for the help!

        * WebCore.pro:

2010-01-17  Srinidhi Shreedhara  <srinidhi.shreedhara@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] [Symbian] SetWindow call in npapi plugin does not happen when the cooridnates are negative
        https://bugs.webkit.org/show_bug.cgi?id=33573

        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded): Remove tests for negative
        coordinates for early return.

2010-01-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION (r52449): SVG mask wrongly clipped when not at origin for recent nightly build
        https://bugs.webkit.org/show_bug.cgi?id=33782

        Test: svg/custom/transformedMaskFails.svg

        When computing the bounds for elements in a mask, we iterate through
        all of our children requesting their repaint bounds using
        repaintRectInLocalCoordinates(), but we were not converting that
        rect into our own coordinate system, thus leading to an incorrect
        repaint rect.  This patch simply adds the missing localToParent
        transform.

        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):

2010-01-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Avoid slow access to AX objects on attribute access when AX is off
        https://bugs.webkit.org/show_bug.cgi?id=33779

        ~4% Dromaeo attributes test speedup

        * dom/Element.cpp:
        (WebCore::Element::updateAfterAttributeChanged): Don't do expensive lookup of
        AX object cache unless accessibility is on and an AX-related attribute is
        changed.

2010-01-17  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] On Win and GTK, we need to manually apply the transforms when falling back
        to GDI / GDK drawing, but this is not needed on Mac since we always use CG there.
        
        https://bugs.webkit.org/show_bug.cgi?id=33730

        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::paintButton):

2010-01-17  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] GtkWebKit incompatible with rgba colormaps
        https://bugs.webkit.org/show_bug.cgi?id=20736

        Fix GTK theme rendering onto drawables with RGBA colormaps. Now
        each type of colormap has its own collection of GtkWidgets.

        This fix does not introduce any functionality changes, so does not
        includes new tests.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::RenderThemeGtk):
        (WebCore::RenderThemeGtk::~RenderThemeGtk):
        (WebCore::RenderThemeGtk::partsForDrawable):
        (WebCore::adjustMozillaStyle):
        (WebCore::setMozillaState):
        (WebCore::paintMozillaGtkWidget):
        (WebCore::setToggleSize):
        (WebCore::RenderThemeGtk::setCheckboxSize):
        (WebCore::RenderThemeGtk::paintCheckbox):
        (WebCore::RenderThemeGtk::setRadioSize):
        (WebCore::RenderThemeGtk::paintRadio):
        (WebCore::RenderThemeGtk::paintButton):
        (WebCore::RenderThemeGtk::adjustMenuListStyle):
        (WebCore::RenderThemeGtk::paintMenuList):
        (WebCore::RenderThemeGtk::adjustTextFieldStyle):
        (WebCore::RenderThemeGtk::paintTextField):
        (WebCore::RenderThemeGtk::paintSearchFieldResultsButton):
        (WebCore::RenderThemeGtk::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeGtk::paintSearchFieldCancelButton):
        * platform/gtk/RenderThemeGtk.h:
        * platform/gtk/gtk2drawing.c:
        (moz_gtk_use_theme_parts):
        (ensure_window_widget):
        (setup_widget_prototype):
        (ensure_button_widget):
        (ensure_hpaned_widget):
        (ensure_vpaned_widget):
        (ensure_toggle_button_widget):
        (ensure_button_arrow_widget):
        (ensure_checkbox_widget):
        (ensure_radiobutton_widget):
        (ensure_scrollbar_widget):
        (ensure_spin_widget):
        (ensure_scale_widget):
        (ensure_entry_widget):
        (moz_gtk_get_combo_box_inner_button):
        (moz_gtk_get_combo_box_button_inner_widgets):
        (ensure_combo_box_widgets):
        (moz_gtk_get_combo_box_entry_inner_widgets):
        (moz_gtk_get_combo_box_entry_arrow):
        (ensure_combo_box_entry_widgets):
        (ensure_handlebox_widget):
        (ensure_toolbar_widget):
        (ensure_toolbar_separator_widget):
        (ensure_tooltip_widget):
        (ensure_tab_widget):
        (ensure_progress_widget):
        (ensure_statusbar_widget):
        (ensure_frame_widget):
        (ensure_menu_bar_widget):
        (ensure_menu_bar_item_widget):
        (ensure_menu_popup_widget):
        (ensure_menu_item_widget):
        (ensure_image_menu_item_widget):
        (ensure_menu_separator_widget):
        (ensure_check_menu_item_widget):
        (ensure_tree_view_widget):
        (ensure_tree_header_cell_widget):
        (ensure_expander_widget):
        (ensure_scrolled_window_widget):
        (moz_gtk_checkbox_get_metrics):
        (moz_gtk_radio_get_metrics):
        (moz_gtk_splitter_get_metrics):
        (moz_gtk_toggle_paint):
        (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_caret_paint):
        (moz_gtk_treeview_paint):
        (moz_gtk_tree_header_cell_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):
        (moz_gtk_check_menu_item_paint):
        (moz_gtk_window_paint):
        (moz_gtk_get_widget_border):
        (moz_gtk_get_combo_box_entry_button_size):
        (moz_gtk_get_tab_scroll_arrow_size):
        (moz_gtk_get_downarrow_size):
        (moz_gtk_get_toolbar_separator_width):
        (moz_gtk_get_expander_size):
        (moz_gtk_get_treeview_expander_size):
        (moz_gtk_get_menu_separator_height):
        (moz_gtk_get_scalethumb_metrics):
        (moz_gtk_get_scrollbar_metrics):
        (moz_gtk_images_in_menus):
        (moz_gtk_widget_paint):
        (moz_gtk_get_scrollbar_widget):
        (moz_gtk_shutdown):
        (moz_gtk_destroy_theme_parts_widgets):
        * platform/gtk/gtkdrawing.h:

2010-01-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        Cache JS string values made from DOM strings (Dromaeo speedup)
        https://bugs.webkit.org/show_bug.cgi?id=33768
        <rdar://problem/7353576>

        Added a new cache for JSString values that are created from Strings or AtomicStrings
        in the DOM. It's common for the same string to be retrieved from the DOM repeatedly,
        and it is wasteful to make a new JS-level string value every time.
        
        The string cache is per-world, and thus thread-safe and not a
        vector for accidental information exchange.
        
        ~30% speedup on Dromaeo Attributes test, also substantially helps other Dromaeo DOM tests.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsStringCache): Helper function to get the string cache for the current world.
        (WebCore::jsString): Some new overloads including the caching version.
        (WebCore::stringWrapperDestroyed): Finalizer callback - remove from relevant caches.
        * bindings/js/JSDOMBinding.h:
        (WebCore::jsString): Prototype new overloads (and define a few inline).
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::type): Explicitly make a UString.
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::appendArgument): Ditto.
        * WebCore.base.exp: Add new JSString overloads that WebCore gets to see.

2010-01-16  Oliver Hunt  <oliver@apple.com>

        Reviewed by Nikolas Zimmermann.

        SVG Markers are getting culled incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=33767

        Use applyTransformToPaintInfo to transform the paintInfo, otherwise
        the paint rect is not updated leading to incorrect culling.

        * svg/graphics/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::draw):

2010-01-15  John Sullivan  <sullivan@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=33751 and <rdar://problem/7538330>
        Zip code field is misidentified as street address because id attribute isn't checked.

        Reviewed by Darin Adler

        No new tests. I believe this code is used only by Safari AutoFill, but in any case
        it does not affect page rendering or anything else at the WebCore/WebKit level.

        * page/Frame.cpp:
        (WebCore::matchLabelsAgainstString):
        New function, split out from matchLabelsAgainstElement.
        (WebCore::Frame::matchLabelsAgainstElement):
        Now calls matchLabelsAgainstString for the id attribute if no match is found for the name attribute.
        
        * page/mac/FrameMac.mm:
        (WebCore::matchLabelsAgainstString):
        Same as above. This is a parallel copy of the function using Mac-specific data structures.
        (WebCore::Frame::matchLabelsAgainstElement):
        Ditto.

2010-01-16  Timothy Hatcher  <timothy@apple.com>

        Use String.trim() instead of a regex in the Web Inspector.

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

        Reviewed by George Staikos.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.performSearch): Use .trim().
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.applyExpression): Ditto.
        * inspector/front-end/ProfileView.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._evalSelectionInCallFrame): Ditto.
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype): Ditto.
        * inspector/front-end/utilities.js:
        (String.prototype.trimLeadingWhitespace): Removed.
        (String.prototype.trimTrailingWhitespace): Removed.
        (String.prototype.trimWhitespace): Removed.

2010-01-16  Oliver Hunt  <oliver@apple.com>

        Reviewed by Nikolas Zimmermann.

        Copying TransformationMatrix consumed a lot of cpu time while scroll with cursor over content
        https://bugs.webkit.org/show_bug.cgi?id=33766

        Make localToParentTransform return by reference to avid copy overhead.
        This is a little gnarly in places as it means we need to be able to 
        return temporary values in a few implementations, so we have to add
        class fields to hold them, heppily the classes that these effect are
         sufficiently uncommon for this to be okay.

        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::localToParentTransform):
        * rendering/RenderForeignObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::localTransform):
        (WebCore::RenderObject::localToParentTransform):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::localToParentTransform):
        (WebCore::RenderPath::nodeAtFloatPoint):
        * rendering/RenderPath.h:
        * rendering/RenderSVGImage.h:
        (WebCore::RenderSVGImage::localToParentTransform):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::localToParentTransform):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGText.h:
        (WebCore::RenderSVGText::localToParentTransform):
        * rendering/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::localToParentTransform):
        * rendering/RenderSVGTransformableContainer.h:
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::localToParentTransform):
        * rendering/RenderSVGViewportContainer.h:

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

        Reviewed by Oliver Hunt and Alexey Proskuryakov.

        ValidityState can hold a stale pointer to control
        https://bugs.webkit.org/show_bug.cgi?id=33729
        rdar://problem/7545114

        Test: fast/forms/ValidityState-removed-control.html

        * html/HTMLFormControlElement.h: Use OwnPtr instead of
        RefPtr to point to the ValidityState object.

        * html/ValidityState.cpp: Use a constant instead of a
        macro for the email validation regular expression.
        (WebCore::ValidityState::validationMessage): Use
        m_control instead of control function; we don't need
        a function for this. Also marked const.
        (WebCore::ValidityState::typeMismatch): Ditto.
        Fixed some minor style problems.
        (WebCore::ValidityState::rangeUnderflow): Ditto.
        (WebCore::ValidityState::rangeOverflow): Ditto.
        (WebCore::ValidityState::stepMismatch): Ditto.
        (WebCore::ValidityState::valid): Ditto.
        (WebCore::ValidityState::isValidEmailAddress):
        Changed local variable names for clarity. Got rid of
        an unneeded global variable.

        * html/ValidityState.h: Removed RefCounted as a base
        class, deriving from Noncopyable instead. Changed
        creation to use PassOwnPtr instead of PassRefPtr.
        Eliminated unneeded control function. Added ref and
        deref functions that forward the reference counting
        to the control. Moved constructor here and made it
        inline.

2010-01-15  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=33752
        Assertion failure when getting a href attribute with prefix

        This was due to a temporary change made in 2005 (r9639) - checks in checkSetPrefix were
        disabled during introduction of QualifiedName, but never re-enabled.

        Tests: fast/dom/bad-href-attribute.html
               fast/dom/node-prefix-setter-namespace-exception.html

        * dom/Attr.cpp: (WebCore::Attr::setPrefix):
        * dom/Element.cpp: (WebCore::Element::setPrefix):
        * dom/Node.cpp: (WebCore::Node::checkSetPrefix):
        Re-enabled the checks. Also, changed the prefix setter to treat "" as null, matching Firefox
        (DOM 3 Core spec says this behavior is implementation defined).

2010-01-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7536748> and https://bugs.webkit.org/show_bug.cgi?id=33571
        History traversals to a new document do not get the popstate event

        State objects now live-on in their HistoryItem indefinitely.
        This means any back/forward navigation might result in a popstate event, not just to 
        pre-existing documents as was previously the case.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::documentDetached): State objects are held beyond Document lifetime.
       
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin): If there is a pending state object for this Frame load, pass it
          on to the Document after the Document is created.
        (WebCore::FrameLoader::transitionToCommitted): If the current history item has a state object,
          set it as the FrameLoad's pending state object.
        * loader/FrameLoader.h:
        
        * page/Page.cpp:
        (WebCore::Page::goToItem): Remove a now-invalid ASSERT.

2010-01-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein and Adele Peterson.

        Support reflections on composited layers
        https://bugs.webkit.org/show_bug.cgi?id=31885
        
        Implement reflections (via -webkit-box-reflect:) on compositing layers.
        
        We add to the GraphicsLayer the notion of having a replica, and being a replicated layer.
        The replica layer is not parented in the tree, but referenced by another layer.
        RenderLayerBacking sets this up when it finds RenderLayers for reflections.
        
        GraphicsLayerCA implements rendering of replica layers by cloning CA layers,
        and copying their properties, including animations and contents. Deep reflections
        are supported by a hash of clone layers on each GraphicsLayerCA, indexed by
        the path down the tree to each replica instance.
        
        When GraphicsLayerCA properties are changed, in most cases the clones must also
        be updated.

        Tests: compositing/masks/direct-image-mask.html
               compositing/reflections/animation-inside-reflection.html
               compositing/reflections/compositing-change-inside-reflection.html
               compositing/reflections/deeply-nested-reflections.html
               compositing/reflections/masked-reflection-on-composited.html
               compositing/reflections/nested-reflection-anchor-point.html
               compositing/reflections/nested-reflection-animated.html
               compositing/reflections/nested-reflection-mask-change.html
               compositing/reflections/nested-reflection-on-overflow.html
               compositing/reflections/nested-reflection-opacity.html
               compositing/reflections/nested-reflection-size-change.html
               compositing/reflections/nested-reflection-transformed.html
               compositing/reflections/nested-reflection-transition.html
               compositing/reflections/nested-reflection.html
               compositing/reflections/reflection-opacity.html
               compositing/reflections/reflection-ordering.html
               compositing/reflections/reflection-positioning.html
               compositing/reflections/transform-inside-reflection.html

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::isReplicated): Returns true when this layer has a replicated layer.
        (WebCore::GraphicsLayer::replicatedLayerPosition):
        (WebCore::GraphicsLayer::setReplicatedLayerPosition): The position of the replica layer must be 
        special-cased; we cannot just copy the position of the original.
        (WebCore::GraphicsLayer::didDisplay): Method that indicates that the contents of the layer changed,
        which gives us a chance to update clone layers.
        (WebCore::GraphicsLayer::replicaLayer): reference to the replica layer.
        (WebCore::GraphicsLayer::replicatedLayer): reference to the layer that this (replica) layer is replicating.
        (WebCore::GraphicsLayer::setReplicatedLayer):

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        (WebCore::GraphicsLayer::setReplicatedByLayer): Hook up a replica with its replicated layer.
        (WebCore::GraphicsLayer::dumpProperties):

        * platform/graphics/mac/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::primaryLayer): Returns a CALayer, since structural layers may not be WebLayers.
        (WebCore::GraphicsLayerCA::isReplicatedRootClone): Given a cloneID (string representation of the path to a clone
        down the tree, which is a bitstring of 1 (replica), or 0 (non-replica)), returns true if this ID represents the
        root of a replica tree.
        (WebCore::GraphicsLayerCA::primaryLayerClones): Returns a pointer to the hash map of clones of the primary layers.

        (WebCore::GraphicsLayerCA::ReplicaState::ReplicaState): Small struct used to track original/clone branching
        down the tree during recursion, to build cloneID paths.

        (WebCore::GraphicsLayerCA::hasCloneLayers): returns true if this layer has clone layers.

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::~GraphicsLayerCA): remove the clone layers.
        (WebCore::GraphicsLayerCA::setChildren): call noteSublayersChanged() since we may have to update replicas too.
        (WebCore::GraphicsLayerCA::addChild): ditto
        (WebCore::GraphicsLayerCA::addChildAtIndex): ditto
        (WebCore::GraphicsLayerCA::addChildBelow): ditto
        (WebCore::GraphicsLayerCA::addChildAbove): ditto
        (WebCore::GraphicsLayerCA::replaceChild): ditto
        (WebCore::GraphicsLayerCA::removeFromParent): ditto
        (WebCore::GraphicsLayerCA::setMaskLayer): call propagateLayerChangeToReplicas()
        (WebCore::GraphicsLayerCA::setReplicatedLayer): note replica changed.
        (WebCore::GraphicsLayerCA::setReplicatedByLayer): ditto
        (WebCore::GraphicsLayerCA::moveOrCopyAllAnimationsForProperty): Enhanced to allow moving or copying animations.
        (WebCore::GraphicsLayerCA::moveOrCopyAnimationsForProperty): Ditto.
        (WebCore::GraphicsLayerCA::setContentsToImage): call noteSublayersChanged()
        (WebCore::GraphicsLayerCA::setContentsToVideo): call noteSublayersChanged()
        (WebCore::GraphicsLayerCA::didDisplay): here is our chance to copy updated contents to clone layers.
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): pre-order commit, for things that need to be
            committed before we recurse on children.
        (WebCore::GraphicsLayerCA::commitLayerChangesAfterSublayers): post-order commit, for things that need to be
            committed after we recurse on children, like clones.
        (WebCore::GraphicsLayerCA::updateLayerNames): New method to match the other 'update' methods.
        (WebCore::GraphicsLayerCA::updateSublayerList): Insert replica layers into the hierarchy.
        (WebCore::GraphicsLayerCA::updateLayerPosition): update clones.
        (WebCore::GraphicsLayerCA::updateLayerSize): ditto
        (WebCore::GraphicsLayerCA::updateAnchorPoint): ditto
        (WebCore::GraphicsLayerCA::updateTransform): ditto
        (WebCore::GraphicsLayerCA::updateChildrenTransform): ditto
        (WebCore::GraphicsLayerCA::updateMasksToBounds): ditto
        (WebCore::GraphicsLayerCA::updateContentsOpaque): ditto
        (WebCore::GraphicsLayerCA::updateBackfaceVisibility): ditto
        (WebCore::GraphicsLayerCA::updateStructuralLayer): call ensureStructuralLayer()
        (WebCore::moveAnimation): utility to move a CAAnimation from one layer to another.
        (WebCore::GraphicsLayerCA::ensureStructuralLayer): refactored code which creates enclosing CALayers for reflection
        flattening, or CATransformLayers for preserve-3d.
        (WebCore::GraphicsLayerCA::structuralLayerPurpose): indicates why we need a structural layer.
        (WebCore::GraphicsLayerCA::updateLayerDrawsContent): update clones
        (WebCore::GraphicsLayerCA::updateContentsImage): ditto
        (WebCore::GraphicsLayerCA::updateContentsRect): ditto
        (WebCore::GraphicsLayerCA::updateMaskLayer): ditto
        (WebCore::GraphicsLayerCA::updateReplicatedLayers): This is where we ask for the tree of layers for the replica
        and its children, and attach them as sublayers.
        (WebCore::GraphicsLayerCA::ReplicaState::cloneID): Build a bitstring from the array of original/clone values; this
        string serves to identify clones in the hash map.
        (WebCore::GraphicsLayerCA::replicatedLayerRoot): Request the tree of clone layers, set its position and transform,
        and return it.
        (WebCore::GraphicsLayerCA::setAnimationOnLayer): update clones
        (WebCore::GraphicsLayerCA::removeAnimationFromLayer): ditto
        (WebCore::GraphicsLayerCA::pauseAnimationOnLayer): ditto
        (WebCore::GraphicsLayerCA::setContentsToGraphicsContext3D): udpate sublayers.
        (WebCore::GraphicsLayerCA::suspendAnimations): update clones.
        (WebCore::GraphicsLayerCA::resumeAnimations): ditto
        (WebCore::GraphicsLayerCA::animatedLayerClones): return the hash map for clones of the appropriate layer for the given property.
        (WebCore::GraphicsLayerCA::ensureCloneLayers): create and return clones for the CALayers for this layer.
        (WebCore::GraphicsLayerCA::removeCloneLayers): clear out the clone layers.
        (WebCore::GraphicsLayerCA::positionForCloneRootLayer): the root of a clonal subtree needs its position and transform to be special-cased,
        since it doesn't just copy those properties from the original.
        (WebCore::GraphicsLayerCA::propagateLayerChangeToReplicas): push the change flags onto the replica.
        (WebCore::GraphicsLayerCA::fetchCloneLayers): recurse down sublayers, creating clones of the CALayers along the way, and returning
        the root of the clone tree.
        (WebCore::copyAnimation): utility to copy an animation from one layer to another. Animations can be shared between layers.
        (WebCore::GraphicsLayerCA::cloneLayer): utility to clone a CALayer, copying those properties which GraphicsLayerCA makes use of
        (WebCore::GraphicsLayerCA::setOpacityInternal): push opacity changes to clones.
        (WebCore::GraphicsLayerCA::updateOpacityOnLayer): ditto
        (WebCore::GraphicsLayerCA::noteSublayersChanged): set the ChildrenChanged flag, and proprate changes to the replica, if any.

        * platform/graphics/mac/WebLayer.mm:
        (-[WebLayer display]): override -display so we know when to update the contents of clone layers

        * platform/graphics/mac/WebTiledLayer.mm:
        (-[WebTiledLayer display]): ditto.

        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::isReflection): New method that returns true if the renderer is a replica.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer): initialize m_isReflection
        (WebCore::RenderLayer::updateReflectionStyle): call setIsReflection

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer): Put a name on the reflection layer.
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): Hook up the GraphicsLayers for the reflection.
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Reflection overrides preserve-3d (you have to flatten to reflect).
        Also hook up updating the reflection layer geometry, and the relica position.
        
        (WebCore::RenderLayerBacking::paintIntoLayer): We no longer paint the reflection in software.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): Hook reflection layers into the compositing logic.
        (WebCore::RenderLayerCompositor::canAccelerateVideoRendering): No longer have to push video into software if it's reflected.
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): Update the bounds of the reflection layer.
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry): ditto
        (WebCore::RenderLayerCompositor::requiresCompositingWhenDescendantsAreCompositing): a compositing descendant forces
        a reflection ancestor to composite now.
        (WebCore::RenderLayerBacking::containsPaintedContent): Reflection layers don't paint anything.
        (WebCore::RenderLayerBacking::isDirectlyCompositedImage): No need to fall out of direct compositing mode
        for masks or reflections any more.
        (WebCore::RenderLayerBacking::paintIntoLayer): No need to paint the reflection manually now.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isReplica):
        * rendering/RenderReplica.h:
        (WebCore::RenderReplica::isReplica):
        New method used to determine if a render is a replica.

2010-01-15  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Darin Adler.

        CSS2.1 Counters not updated when new elements are inserted in the DOM.
        https://bugs.webkit.org/show_bug.cgi?id=32884

        Test: fast/css/counters/adding-nodes.html

        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::insertAfter):
        Modified to handle the addition of nodes with children. Needed when formerly 
        root nodes become descendants of a new node.
        * rendering/RenderCounter.cpp:
        (WebCore::makeCounterNode):
        Changed to handle the case when root counter nodes lose their root 
        status as a result of a new root counter node creation. 
        (WebCore::destroyCounterNodeWithoutMapRemoval):
        Refactored more code into destroyCounterNodeChildren and renamed the
        function according to its new action.
        (WebCore::RenderCounter::destroyCounterNodes):
        Simplified to share more code with the new destroyCounterNode.
        (WebCore::RenderCounter::destroyCounterNode):
        Added to allow for selective counterNode destruction.
        (WebCore::RenderCounter::rendererSubtreeAttached):
        Added to refresh counter values in response to DOM changes.
        For renderers with no attached counters the execution time of this
        function cannot be discerned in comparison with the time needed to
        add a node or change the style of a node.
        (WebCore::updateCounters):
        Helper function for rendererSubtreeAttached. Updates the counters
        attached to a Renderer in response to the renderer or its ancestors
        being attached to the renderer tree.
        * rendering/RenderCounter.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addChild):
        Changed to update counter values if needed.

2010-01-15  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        Original patch by David Ronis <david.ronis@mcgill.ca>

        Upgrade 1.1.17->1.1.18 fails: GTK_WIDGET_TOPLEVEL' was not declared in this scope
        https://bugs.webkit.org/show_bug.cgi?id=33486

        Deprecated symbols replaced for gtk+ versions over 2.18.

        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::getVisual):
        (WebCore::screenRect):

2010-01-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        Bad DOM performance in large SVG files
        https://bugs.webkit.org/show_bug.cgi?id=30055

        Improve the performance of the early culling check by avoiding save/restore
        of graphics state in culled case.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):

2010-01-15  Eric Seidel  <eric@webkit.org>

        No review, rolling out r53344.
        http://trac.webkit.org/changeset/53344
        https://bugs.webkit.org/show_bug.cgi?id=32920

        Broke the Chromium Mac builder.

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/SerializedScriptValue.cpp: Removed.
        * bindings/v8/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::release):
        (WebCore::SerializedScriptValue::toString):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::postMessageCallback):
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        (WebCore::V8DedicatedWorkerContext::postMessageCallback):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::pushStateCallback):
        (WebCore::V8History::replaceStateCallback):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::initMessageEventCallback):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::V8MessagePort::postMessageCallback):
        * bindings/v8/custom/V8PopStateEventCustom.cpp:
        (WebCore::V8PopStateEvent::initPopStateEventCallback):
        (WebCore::V8PopStateEvent::stateAccessorGetter):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::V8Worker::postMessageCallback):

2010-01-15  Darin Fisher  <darin@chromium.org>

        Reviewed by Brady Eidson.

        history.length does not return number of elements in history list
        https://bugs.webkit.org/show_bug.cgi?id=24472

        Test: fast/history/history-length.html

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

2010-01-15  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        Need to ensure that Document::postTask does not provide the Task with a dangling pointer to destroyed Document
        https://bugs.webkit.org/show_bug.cgi?id=31633

        Don't see a way to add test for it, we don't have a way to reproduce the issue currently.

        * dom/Document.cpp:
        (WebCore::DocumentWeakReference::DocumentWeakReference):
        (WebCore::DocumentWeakReference::document):
        (WebCore::DocumentWeakReference::clear):
        (WebCore::Document::Document): Create a weak reference to this Document.
        (WebCore::Document::~Document): Clear the weak pointer, preventing further execution of tasks.
        (WebCore::PerformTaskContext::PerformTaskContext):
        (WebCore::performTask): Check if the documentWeakReference is cleared by Document destructor - in this case do not run the task.
        (WebCore::Document::postTask):
        * dom/Document.h:
        (WebCore::DocumentWeakReference::create):

2010-01-15  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by David Levin.

        [V8] Support SerializedScriptValue.
        https://bugs.webkit.org/show_bug.cgi?id=32920
        http://crbug.com/30620

        Initial implementation of SerializedScriptValue which is used to
        to create a serialized representation of JavaScript objects.  This
        representation is needed for structured clones and worker messages.

        * WebCore.gypi: Added SerializedScriptValue.cpp.
        * bindings/scripts/CodeGeneratorV8.pm: Removed conversion to string before using SerializedScriptValue.
        * bindings/v8/SerializedScriptValue.cpp: Added.
        (WebCore::):
        (WebCore::ZigZag::encode):
        (WebCore::ZigZag::decode):
        (WebCore::Writer::Writer):
        (WebCore::Writer::writeUndefined):
        (WebCore::Writer::writeNull):
        (WebCore::Writer::writeTrue):
        (WebCore::Writer::writeFalse):
        (WebCore::Writer::writeString):
        (WebCore::Writer::writeInt32):
        (WebCore::Writer::writeNumber):
        (WebCore::Writer::endComposite):
        (WebCore::Writer::data):
        (WebCore::Writer::doWriteUint32):
        (WebCore::Writer::append):
        (WebCore::Writer::ensureSpace):
        (WebCore::Writer::fillHole):
        (WebCore::Writer::charAt):
        (WebCore::Serializer::Serializer):
        (WebCore::Serializer::serialize):
        (WebCore::Serializer::StateBase::~StateBase):
        (WebCore::Serializer::StateBase::nextState):
        (WebCore::Serializer::StateBase::setNextState):
        (WebCore::Serializer::StateBase::composite):
        (WebCore::Serializer::StateBase::StateBase):
        (WebCore::Serializer::State::composite):
        (WebCore::Serializer::State::tag):
        (WebCore::Serializer::State::State):
        (WebCore::Serializer::StackCleaner::StackCleaner):
        (WebCore::Serializer::StackCleaner::~StackCleaner):
        (WebCore::Serializer::ArrayState::ArrayState):
        (WebCore::Serializer::ArrayState::done):
        (WebCore::Serializer::ArrayState::advance):
        (WebCore::Serializer::ObjectState::ObjectState):
        (WebCore::Serializer::ObjectState::done):
        (WebCore::Serializer::ObjectState::advance):
        (WebCore::Serializer::ObjectState::nextProperty):
        (WebCore::Serializer::doSerialize):
        (WebCore::Serializer::push):
        (WebCore::Serializer::top):
        (WebCore::Serializer::pop):
        (WebCore::Serializer::checkComposite):
        (WebCore::Reader::Reader):
        (WebCore::Reader::isEof):
        (WebCore::Reader::read):
        (WebCore::Reader::readTag):
        (WebCore::Reader::readString):
        (WebCore::Reader::readInt32):
        (WebCore::Reader::readNumber):
        (WebCore::Reader::doReadUint32):
        (WebCore::Deserializer::Deserializer):
        (WebCore::Deserializer::deserialize):
        (WebCore::Deserializer::doDeserialize):
        (WebCore::Deserializer::push):
        (WebCore::Deserializer::pop):
        (WebCore::Deserializer::stackDepth):
        (WebCore::Deserializer::element):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/v8/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::createFromWire):
        (WebCore::SerializedScriptValue::release):
        (WebCore::SerializedScriptValue::toWireString):

        Updated uses of SerializedScriptValue:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::postMessageCallback):
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        (WebCore::V8DedicatedWorkerContext::postMessageCallback):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::pushStateCallback):
        (WebCore::V8History::replaceStateCallback):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::initMessageEventCallback):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::V8MessagePort::postMessageCallback):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::V8Worker::postMessageCallback):

2010-01-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Dirk Schulze.

        Bad DOM performance in large SVG files
        https://bugs.webkit.org/show_bug.cgi?id=30055

        Add an early return when we go to paint a RenderPath that
        isn't in the current clip.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):

2010-01-15  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        Make Geolocation::suspend/resume public.
        https://bugs.webkit.org/show_bug.cgi?id=33679

        These were made private in Bug 32499, but are required by Android to be public.

        No new tests, build fix only.

        * page/Geolocation.cpp: Modified
        (WebCore::Geolocation::suspend): Added back in
        (WebCore::Geolocation::resume): Added back in
        * page/Geolocation.h: Modified. Make suspend and resume public

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

        Reviewed by Pavel Feldman.

        Set pointer cursor when over a breakpoint in the BreakpointsSidebarPane

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

        * inspector/front-end/inspector.css:

2010-01-15  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Generate more of the custom behaviors that the v8 bindings attach to v8 FunctionTemplates.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Binding.cpp:
        (WebCore::getToStringName):
        (WebCore::constructorToString):
        (WebCore::getToStringTemplate):
        * bindings/v8/V8Binding.h:
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::createNewContext):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):

2010-01-15  Dimitri Glazkov  <dglazkov@chromium.org>

        No review, rolling out r53331.
        http://trac.webkit.org/changeset/53331
        https://bugs.webkit.org/show_bug.cgi?id=30055

        Broke fast/borders/svg-as-border-image-3.html. Don't give up,
        Oliver! You are really, really close.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):

2010-01-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Nikolas Zimmermann.

        Bad DOM performance in large SVG files
        https://bugs.webkit.org/show_bug.cgi?id=30055

        Add an early return when we go to paint a RenderPath that
        isn't in the current clip.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):

2010-01-15  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Antti Koivisto.

        Use OS(MAC_OS_X) instead of PLATFORM(MAC) when determining navigator.platform

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

        * page/NavigatorBase.cpp:

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

        Reviewed by Xan Lopez.

        [Gtk] Compiler warning: comparisons like 'X<=Y<=Z' do not have their mathematical meaning
        https://bugs.webkit.org/show_bug.cgi?id=33575

        Patch from Magnus Boman <captain.magnus@gmail.com>

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache): fix compiler warnings.

2010-01-14  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Add welcome screen to Profiles pane to provide some instructions for novices.

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

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileType.prototype.get welcomeMessage):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileType.prototype.get welcomeMessage):
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.show):
        (WebInspector.ProfilesPanel.prototype.registerProfileType):
        (WebInspector.ProfilesPanel.prototype._addWelcomeMessage.messageButtonClicked):
        (WebInspector.ProfilesPanel.prototype._addWelcomeMessage):
        (WebInspector.ProfilesPanel.prototype.showProfile):
        (WebInspector.ProfilesPanel.prototype.closeVisibleView):
        (WebInspector.ProfilesPanel.prototype._updateInterface):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/WelcomeView.js: Added.
        (WebInspector.WelcomeView):
        (WebInspector.WelcomeView.prototype._windowResized):
        (WebInspector.WelcomeView.prototype.addMessage):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:

2010-01-13  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt/Win] Flash in QGraphicsWebView does not process hover correctly.
        
        https://bugs.webkit.org/show_bug.cgi?id=33591
        
        Mouse hover does not work as expected with the flash in some sites.
        - http://www.bbc.co.uk/ Hover over the map
        - http://www.barbie.com/ Hover over the menu items (Games, Videos)
        The problem appears to be that Flash queries NPNVnetscapeWindow on every
        mouse hover. I do not how flash uses this value but returning 0 when flash
        is in windowless mode solves the problem (When using QGraphicsWebView we
        inject wmode opaque, thereby putting the plugin in windowless mode).

        * plugins/win/PluginViewWin.cpp:
        (windowHandleForPageClient):

2010-01-15  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for Peer class
        https://bugs.webkit.org/show_bug.cgi?id=33670

        Inherits the following class from Noncopyable because it is 
        instantiated by 'new' and no need to be copyable:

        class name - instantiated at: WebCore/'location'
        class Peer - websockets/WebSocketChannelClient.h:38

        * websockets/WorkerThreadableWebSocketChannel.h:

2010-01-15  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Oliver Hunt.

        [Qt] Allow custom memory allocation control for GraphicsContextPlatformPrivate class
        https://bugs.webkit.org/show_bug.cgi?id=33669

        Inherits the following class from Noncopyable because it is 
        instantiated by 'new' and no need to be copyable:

        class name                           - instantiated at: WebCore/'location'
        class GraphicsContextPlatformPrivate - platform/graphics/qt/GraphicsContextQt.cpp:254

        * platform/graphics/qt/GraphicsContextQt.cpp:

2010-01-14  Darin Fisher  <darin@chromium.org>

        Reviewed by Brady Eidson.

        history.pushState should clear the entire forward history
        https://bugs.webkit.org/show_bug.cgi?id=33160

        Test: fast/loader/stateobjects/pushstate-clears-forward-history.html

        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::addItem):
        (WebCore::BackForwardList::pushStateItem):
        * history/BackForwardList.h:

2010-01-14  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig.

        Make naming & behaviour of UString[Impl] methods more consistent.
        https://bugs.webkit.org/show_bug.cgi?id=33702

        WebCore change reflecting UString method name change computedHash() -> existingHash().

        * platform/text/AtomicString.cpp:
        (WebCore::AtomicString::add):
        (WebCore::AtomicString::find):

2010-01-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/6020083> -webkit-gradient slows down scrolling when page has horizontal scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=19650

        * platform/graphics/GeneratedImage.cpp:
        (WebCore::GeneratedImage::drawPattern): Added call to adjustParametersForTiledDrawing(),
        letting the generator substitute the parameters with visually-equivalent values that
        are more efficient.
        * platform/graphics/Generator.h:
        (WebCore::Generator::adjustParametersForTiledDrawing): Added a base class implementation
        that does nothing.
        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::adjustParametersForTiledDrawing): Added. If the gradient is a horizontal
        or vertical linear gradient, changes to use a 1-pixel tall (or wide) tile.
        * platform/graphics/Gradient.h:

2010-01-14  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Laszlo Gombos.

        Platform Symbian specific:
        Added time-based optimization (-Otime) and increased optimization level to -O3,
        conditionally for RVCT compiler (for ARM), for increasing performance
        (primarily affecting JavaScript execution).
        Default settings are -Ospace and -O2.

        No new tests needed because no new funtionality is introduced,
        only potential regression on existing tests needs to be evaluated.

        * WebCore.pro:

2010-01-14  Jungshik Shin  <jshin@chromium.org>

        Unreviewed, attempted build fix on chromium.

        Fix a Chromium build failure due to an unused variable in V8 binding.(part 2)

        * bindings/v8/V8Collection.h:
        (WebCore::getNamedPropertyOfCollection):

2010-01-14  Jungshik Shin  <jshin@chromium.org>

        Unreviewed, attempted build fix on chromium.

        Fix a Chromium build failure due to an unused variable in V8 binding. 

        * bindings/v8/V8Collection.h:
        (WebCore::getIndexedPropertyOfCollection):

2010-01-14  Peter Kasting  <pkasting@google.com>

        Unreviewed, attempted build fix.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::haveDecodedRow):

2010-01-14  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Simplify image decoders by making downsampling functions available at
        all times, allowing much duplicated logic to be collapsed.
        https://bugs.webkit.org/show_bug.cgi?id=28751

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::setData):
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::prepareScaleDataIfNecessary):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::ImageDecoder):
        (WebCore::ImageDecoder::scaledSize):
        (WebCore::ImageDecoder::setMaxNumPixels):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::sizeNowAvailable):
        (WebCore::GIFImageDecoder::initFrameBuffer):
        (WebCore::GIFImageDecoder::haveDecodedRow):
        (WebCore::GIFImageDecoder::frameComplete):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::setSize):
        (WebCore::JPEGImageDecoder::outputScanlines):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):

2010-01-14  Jian Li  <jianli@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] Remove obsolete CF related files from gyp build.
        https://bugs.webkit.org/show_bug.cgi?id=33002

        * WebCore.gypi:

2010-01-14  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Decoding images to scaled output buffers resulted in garbage for
        no-alpha PNGs and CMYK JPEGs.
        https://bugs.webkit.org/show_bug.cgi?id=33624
        
        No layout test since I don't have access to a platform that scales the
        output buffers.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::convertCMYKToRGBA):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable):

2010-01-14  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by Oliver Hunt.

        Fix an assertion that was causing test crashes. Filed a bug
        about the weirdness that causes this assertion (inconsistencies 
        between DragOperationMove and DragOperationGeneric).

        * dom/Clipboard.cpp:
        (WebCore::dragOpFromIEOp):
        (WebCore::Clipboard::setDestinationOperation):

2010-01-14  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=33498 REGRESSION: 
        svg/css/circle-in-mask-with-shadow.svg failing pixel tests
        -and corresponding-
        <rdar://problem/7544176>

        This change makes repaintRectInLocalCoordinates return a rect that 
        is -webkit-svg-shadow-aware.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::repaintRectInLocalCoordinates):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::repaintRectInLocalCoordinates):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::repaintRectInLocalCoordinates):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::repaintRectInLocalCoordinates):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::repaintRectInLocalCoordinates):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::inflateForShadow):
        * rendering/style/SVGRenderStyle.h:

2010-01-14  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Drag and Drop source/destination code needs cleanup.
        <https://bugs.webkit.org/show_bug.cgi?id=33691>.
        
        Cleaned up some Drag and Drop code that deals with getting
        source and destination operations, and added some ASSERTS to make
        sure we don't get in bad states.

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::sourceOperation): Make this return the operation itself.
        (WebCore::Clipboard::destinationOperation): Ditto.
        (WebCore::Clipboard::setSourceOperation): Add an assert to make sure we're valud.
        (WebCore::Clipboard::setDestinationOperation): Ditto.
        * dom/Clipboard.h:
        * page/DragController.cpp:
        (WebCore::DragController::tryDHTMLDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleDrag):

2010-01-14  Timothy Hatcher  <timothy@apple.com>

        Make the Web Inspector's JavaScript debugger work with isolated worlds.
        Console evaluation is not performed in the correct world yet, tracked
        by bug http://webkit.org/b/33692.

        http://webkit.org/b/33690

        Reviewed by Adam Roben.

        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::restore): Attach the debugger to
        any window shell, not just for the debugger world.
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::clearWindowShell): Detach the debugger, and
        reattach to all window shells, not just for the debugger world.
        (WebCore::ScriptController::initScript): Attach the debugger to
        any window shell, not just for the debugger world.
        (WebCore::ScriptController::attachDebugger): Changed to loop through
        all the window shells and call the new overloaded attachDebugger.
        (WebCore::ScriptController::attachDebugger): Added. An overload that
        takes a window shell to attach the debugger to. Has most of the
        logic from the original attachDebugger.
        * bindings/js/ScriptController.h: Added the new attachDebugger.

2010-01-14  Adam Roben  <aroben@apple.com>

        Make Cache::requestResource return 0 if the resource's load fails
        immediately

        Fixes <rdar://problem/7543406> <http://webkit.org/b/33687>
        window.onload never fires if page contains a <script src=foo> whose
        load is cancelled by resource load delegate returning null from
        willSendRequest

        Test: fast/loader/onload-willSendRequest-null-for-script.html

        Reviewed by Dave Hyatt.

        * loader/Cache.cpp:
        (WebCore::Cache::requestResource): Moved code to handle immediate load
        failure out of the "cache is disabled" block so that it will run even
        when the cache is enabled.

2010-01-14  Stephen White  <senorblanco@chromium.org>

        Reviewed by mitz@webkit.org.

        Fix for crash with gradient on table cell.  Pass the correct
        background object down to
        RenderBoxModelObject::paintFillLayerExtended().  This also allowed a
        rework of the fix to bug 18445 by passing the correct RenderObject
        from RenderBox::paintRootBoxDecorations() down to
        RenderBoxModelObject::paintFillLayerExtended().
        https://bugs.webkit.org/show_bug.cgi?id=28426

        Covered by new layout test:  LayoutTests/fast/gradients/crash-on-tr.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintFillLayers):
        (WebCore::RenderBox::paintFillLayer):
        * rendering/RenderBox.h:
        Plumb through the correct background RenderObject.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        Use the passed-in background RenderObject (if present) when painting background images.  Remove the previous fix for bug 18445.
        * rendering/RenderBoxModelObject.h:
        Plumb through the correct background RenderObject.
        * rendering/RenderTableCell.cpp:
        Pass in the correct backgroundObject to paintFillLayers().

        (WebCore::RenderTableCell::paintBackgroundsBehindCell):

2010-01-14  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Standardize the rest of the v8 bindings on toNative() wherever possible.

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

        * bindings/v8/NPV8Object.cpp:
        (v8ObjectToNPObject): Special case for converting NPObjects, since there aren't genereated bindings for them.
        * bindings/v8/NPV8Object.h:
        * bindings/v8/ScriptController.cpp:
        * bindings/v8/V8Collection.cpp:
        * bindings/v8/V8Collection.h:
        (WebCore::toNativeCollection): Special case for converting V8Collections, since there aren't genereated bindings for them.
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8NPObject.cpp:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8SVGPODTypeWrapper.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:

2010-01-14  Evan Stade  <estade@chromium.org>

        Reviewed by Eric Seidel.

        Chromium Linux: don't stretch checkboxes
        https://bugs.webkit.org/show_bug.cgi?id=28631

        Make the default size for checkboxes/radio buttons also the maximum
        size.

        Based on patch by Adam Langley.

        Test: fast/css/non-standard-checkbox-size.html

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::center):
        (WebCore::RenderThemeChromiumSkia::paintCheckbox):
        (WebCore::RenderThemeChromiumSkia::setCheckboxSize):
        (WebCore::RenderThemeChromiumSkia::paintRadio):

2010-01-14  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Follow up to <https://bugs.webkit.org/show_bug.cgi?id=33635>.
        
        Now that dropEffect and effectAllowed are guaranteed to not be
        null, change null checks into asserts to make sure we are returning
        a proper DragOperation value.

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::sourceOperation): Change null check to assert.
        (WebCore::Clipboard::destinationOperation): Ditto.

2010-01-14  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Oliver Hunt.

        [DnD] effectAllowed and dropEffect can be set to bogus values.
        Fixes <https://bugs.webkit.org/show_bug.cgi?id=33635>.
        
        Test to make aure dropEffect and effectAllowed are being set to valid values
        when they are being set (list of valid values given by HTML5 specification).
        
        Also, drive by change to initialize dropEffect to none (as described in spec).

        Test: fast/events/bogus-dropEffect-effectAllowed.html

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard): Initialize m_dropEffect to "none".
        (WebCore::Clipboard::setDropEffect): Check if dropEffect is being set to a valid value.
        (WebCore::Clipboard::setEffectAllowed): Check if effectAllowed is being set to a valid value.

2010-01-14  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Darin Adler.

        Infinite recursion in RuntimeObjectImp::getOwnPropertyNames()
        https://bugs.webkit.org/show_bug.cgi?id=33371

        RuntimeObjectImp should not reimplement getPropertyNames();
        move the implementation to getOwnPropertyNames().

        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::getOwnPropertyNames):
        * bridge/runtime_object.h:

2010-01-14  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Alexey Proskuryakov.

        Add ENABLE(XSLT) guard to TransformSourceLibxslt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=33665

        TransformSource is available only when ENABLE(XSLT) guard is true.

        * dom/TransformSourceLibxslt.cpp:

2010-01-14  Adam Roben  <aroben@apple.com>

        Treat all synchronous loads equally in FrameLoader::loadSubframe

        Only loads of the empty URL or about:blank were being treated as
        synchronous loads. But other loads can be synchronous (e.g., when we
        receive a null ResourceRequest from requestFromDelegate or when a
        policy decision of "ignore" is made). We now treat those loads the
        same way we treated empty URLs and about:blank.

        Fixes <rdar://problem/7533333> <http://webkit.org/b/33533>
        window.onload never fires if page contains an <iframe> with a bad
        scheme or whose load is cancelled by returning null from resource load
        delegate's willSendRequest

        Tests: fast/loader/onload-bad-scheme-for-frame.html
               fast/loader/onload-policy-ignore-for-frame.html
               fast/loader/onload-willSendRequest-null-for-frame.html

        Reviewed by Brady Eidson.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadSubframe):
          - Detect synchronous loads by checking the subframe's loader's
            state, rather than by checking its URL
          - Removed unnecessary call to completed(), since checkCompleted()
            will call completed() if needed (the call to completed() was added
            first and wasn't removed when the call to checkCompleted() was
            added in r8316)
          - Added more comments about the strange thing this function does
            with the subframe's loader

2010-01-14  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Christiansen.

        [Qt] Missing fileSystemPath() method in Qt KURL implementation
        https://bugs.webkit.org/show_bug.cgi?id=33614

        No new tests.

        * platform/qt/KURLQt.cpp:
        (WebCore::KURL::fileSystemPath):

2010-01-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=33652
        REGRESSION: Frames stop appearing after browsing for a while

        <rdar://problem/7308312> REGRESSION: iBench gets slower after several runs

        I do not know how not creating renderers for frames could make iBench slower, but it did.

        Test: fast/frames/cached-frame-counter.html

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame): A frame that's cached is moved away from Page,
        so decrement frame count here.
        (WebCore::CachedFrame::open): Increase frame count when a frame is restored.

        * history/CachedFrame.h: Remove unneeded forward declarations.

        * history/CachedPage.h: Ditto.

        * history/CachedPage.cpp: (WebCore::CachedPage::restore): Assert that page frame count is
        zero prior to restoring a page from b/f cache.
        
        * page/Page.cpp: (WebCore::Page::checkFrameCountConsistency): A debug-only method to
        check that frame count stored in Page matches the number of frames in frame tree.

        * page/Page.h:
        (WebCore::Page::decrementFrameCount): Assert that frame count is positive.
        (WebCore::Page::frameCount): Call checkFrameCountConsistency().

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

        Windows build fixes.
        Add forward declarations and additional includes of windows.h.

        * platform/Cursor.h: Add forward declaration of HCURSOR. Move destructor implementation into cpp.
        * platform/graphics/transforms/TransformationMatrix.h: Add forward declaration of XFORM. Remove windows.h include.
        * platform/graphics/win/TransformationMatrixWin.cpp: Add include of windows.h.
        * platform/win/CursorWin.cpp: Moved destructor of SharedCursor here.
        (WebCore::SharedCursor::~SharedCursor): Moved here.
        * platform/win/EventLoopWin.cpp: Add include of windows.h.
        * platform/win/SystemInfo.cpp: Add include of windows.h.

2010-01-14  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Switch the custom V8 bindings to use class toNative() functions.

        Refactoring, so no new tests.

        * bindings/v8/custom/V8AbstractWorkerCustom.cpp:
        * bindings/v8/custom/V8AttrCustom.cpp:
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        * bindings/v8/custom/V8CoordinatesCustom.cpp:
        * bindings/v8/custom/V8DOMApplicationCacheCustom.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8DataGridColumnListCustom.cpp:
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        * bindings/v8/custom/V8ElementCustom.cpp:
        * bindings/v8/custom/V8EventCustom.cpp:
        * bindings/v8/custom/V8GeolocationCustom.cpp:
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        * bindings/v8/custom/V8HTMLFrameElementCustom.cpp:
        * bindings/v8/custom/V8HTMLFrameSetElementCustom.cpp:
        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp:
        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        * bindings/v8/custom/V8HistoryCustom.cpp:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        * bindings/v8/custom/V8LocationCustom.cpp:
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        * bindings/v8/custom/V8NodeCustom.cpp:
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        * bindings/v8/custom/V8NodeListCustom.cpp:
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        * bindings/v8/custom/V8PopStateEventCustom.cpp:
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp:
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        * bindings/v8/custom/V8SVGElementInstanceCustom.cpp:
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        * bindings/v8/custom/V8StorageCustom.cpp:
        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        * bindings/v8/custom/V8WebGLArrayCustom.h:
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        * bindings/v8/custom/V8WorkerCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp:
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:

2010-01-14  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Xan Lopez.

        [GTK] Enable DOM clipboard and drag-and-drop access
        https://bugs.webkit.org/show_bug.cgi?id=30623

        Add DataObjectGtk, a container for pasteboard and drag-and-drop data.

        No new tests, because functionality has not changed.

        * GNUmakefile.am:
        * platform/gtk/DataObjectGtk.cpp: Added.
        (WebCore::DataObjectGtk::text):
        (WebCore::DataObjectGtk::markup):
        (WebCore::DataObjectGtk::setText):
        (WebCore::DataObjectGtk::setMarkup):
        (WebCore::DataObjectGtk::files):
        (WebCore::DataObjectGtk::url):
        (WebCore::DataObjectGtk::urlLabel):
        (WebCore::DataObjectGtk::hasURL):
        (WebCore::DataObjectGtk::clear):
        (WebCore::DataObjectGtk::forClipboard):
        * platform/gtk/DataObjectGtk.h: Added.
        (WebCore::DataObjectGtk::create):
        (WebCore::DataObjectGtk::uriList):
        (WebCore::DataObjectGtk::image):
        (WebCore::DataObjectGtk::setRange):
        (WebCore::DataObjectGtk::setURIList):
        (WebCore::DataObjectGtk::setImage):
        (WebCore::DataObjectGtk::setDragContext):
        (WebCore::DataObjectGtk::hasText):
        (WebCore::DataObjectGtk::hasMarkup):
        (WebCore::DataObjectGtk::hasURIList):
        (WebCore::DataObjectGtk::hasImage):
        (WebCore::DataObjectGtk::dragContext):

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

        Reviewed by Pavel Feldman.

        WebInspector: Scrolling of Timeline Page was broken by fix for bug 33470.
        https://bugs.webkit.org/show_bug.cgi?id=33666

        * inspector/front-end/inspector.css:

2010-01-14  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Unreviewed fix of builds with the --no-svg switch.

        * WebCore.pri:

2010-01-14  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Unreviewed build fix on Windows.

        * platform/graphics/transforms/TransformationMatrix.h:

2010-01-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Enable scrolling optimization for pages with embedded widgets

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

        Added a basic manual test for scrolling of embedded QWidgets.

        * manual-tests/qt/qtplugin-scrolling.html: Added.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::setParent):
        * platform/ScrollView.h:
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::platformInit):
        (WebCore::ScrollView::platformAddChild):
        (WebCore::ScrollView::platformRemoveChild):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::invalidateRect):

2009-12-09  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GStreamer] Check return values of gst_element_set_state()
        https://bugs.webkit.org/show_bug.cgi?id=30000

        Check for state change failure when going from READY/NULL to
        PAUSED or PLAYING. Also refactored the common code of play() and
        pause() to a new private method of the player.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::changePipelineState):
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::pause):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2010-01-14  Eric Seidel  <eric@webkit.org>

        No review, rolling out r53248.
        http://trac.webkit.org/changeset/53248
        https://bugs.webkit.org/show_bug.cgi?id=32641

        Caused 2 tests to crash on various bots:
        fast/dom/HTMLSelectElement/listbox-select-reset.html and
        fast/forms/listbox-typeahead-scroll.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::recalcStyle):
        (WebCore::SelectElement::setRecalcListItems):
        (WebCore::SelectElement::recalcListItems):
        (WebCore::SelectElement::restoreFormControlState):
        (WebCore::SelectElement::reset):
        (WebCore::SelectElement::typeAheadFind):
        * dom/SelectElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::selected):
        (WebCore::HTMLOptionElement::insertedIntoTree):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcStyle):
        * html/HTMLSelectElement.h:
        * wml/WMLSelectElement.cpp:
        (WebCore::WMLSelectElement::recalcStyle):

2010-01-14  Ben Murdoch  <benm@google.com>

        Reviewed by Darin Adler.

        [Android] [Qt] The document.createEvent API does not support touch events.
        https://bugs.webkit.org/show_bug.cgi?id=33605

        Test: fast/events/touch/create-touch-event.html

        * dom/Document.cpp:
        (WebCore::Document::createEvent): add creation of a TouchEvent when the "TouchEvent" argument is supplied.

2010-01-14  James Robinson  <jamesr@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Ensures that the 'selected' attribute of an <option> is correct
        https://bugs.webkit.org/show_bug.cgi?id=32641

        Adds a check in OptionElement::selected() that checks if list items need to be recalculated and does so if needed,
        so the attribute is up to date more often.  Also gets rid of most of the recalcStyle() side effects.

         Our behavior now matches Firefox 3.5 and IE8 after the </select> is parsed.

         Tests: fast/forms/HTMLOptionElement_selected2.html
                fast/forms/HTMLOptionElement_selected3.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::setOptionsChangedOnRenderer):
        (WebCore::SelectElement::setRecalcListItems):
        (WebCore::SelectElement::recalcListItems):
        (WebCore::SelectElement::restoreFormControlState):
        (WebCore::SelectElement::reset):
        (WebCore::SelectElement::typeAheadFind):
        * dom/SelectElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::selected):
        (WebCore::HTMLOptionElement::insertedIntoTree):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcStyle):
        (WebCore::HTMLSelectElement::recalcListItemsIfNeeded):
        * html/HTMLSelectElement.h:
        * wml/WMLSelectElement.cpp:
        (WebCore::WMLSelectElement::recalcStyle):

2010-01-14  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Oliver Hunt.

        [Qt] Allow custom memory allocation control for TransparencyLayer class
        https://bugs.webkit.org/show_bug.cgi?id=33585

        Inherits the following class from FastAllocBase because it is 
        instantiated by 'new':

        class name              - instantiated at: WebCore/'location'
        class TransparencyLayer - platform/graphics/qt/GraphicsContextQt.cpp:906

        * platform/graphics/qt/GraphicsContextQt.cpp:

2010-01-14  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Oliver Hunt.

        [Qt] Allow custom memory allocation control for FontPlatformDataPrivate class
        https://bugs.webkit.org/show_bug.cgi?id=33583

        Inherits the following class from Noncopyable because it is 
        instantiated by 'new' and no need to be copyable:

        class name                    - instantiated at: WebCore/'location'
        class FontPlatformDataPrivate - platform/graphics/qt/FontPlatformData.h:70

        * platform/graphics/qt/FontPlatformData.h:

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

        Reviewed by Xan Lopez.

        [GTK] un-needed seeks
        https://bugs.webkit.org/show_bug.cgi?id=33532

        Avoid un-needed seeks. Don't seek at current playback position and
        don't update the rate if it is already set to target value.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::setRate):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2010-01-14  Eric Seidel  <eric@webkit.org>

        No review.  Tiger build fix after http://trac.webkit.org/changeset/53238.

        Need to implement WebGLContextAttributes
        https://bugs.webkit.org/show_bug.cgi?id=31169

        Fix a build break when ENABLE(3D_CANVAS) is disabled.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext): UNUSED_PARAM(attrs) when 3D_CANVAS is disabled.

2010-01-13  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: use hidden text area for clipboard in order to
        workaround windows setData bug.

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

        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor):
        (WebInspector.TextEditor.prototype._copy):
        * inspector/front-end/inspector.css:

2010-01-13  Mads Ager  <ager@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Slow named property lookup on DOMWindow because of missing fast case
        https://bugs.webkit.org/show_bug.cgi?id=33584

        Add fast case checks to V8 named property getter on DOMWindow
        objects.  If the property is not in the DOM there is no reason to
        search the DOM for all occurrences.

        Covered by layout tests.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::namedPropertyGetter):

2010-01-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/7403736> REGRESSION (r49963,r49965): 8% Dromaeo Core DOM test regression

        Adding isolated worlds support to the JSC bindings introduced a regression due to
        additional map lookups.  Add a mechanism to quickly detect that a lookup is for the
        'normal' world, and add fast paths to a couple of methods to check the normal world
        first.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::Document::getWrapperCache):
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        (WebCore::forgetDOMObject):
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMWrapperWorld::isNormal):
        (WebCore::WebCoreJSClientData::WebCoreJSClientData):
        * bindings/js/ScriptController.cpp:
        (WebCore::IsolatedWorld::IsolatedWorld):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::createWrapperCache):
        * dom/Document.h:

2010-01-13  Kenneth Russell  <kbr@google.com>

        Reviewed by Oliver Hunt.

        Need to implement WebGLContextAttributes
        https://bugs.webkit.org/show_bug.cgi?id=31169

        Added the WebGLContextAttributes class and custom JavaScript
        bindings to accept a native object as the second argument to
        getContext("experimental-webgl") per the WebGL specification.
        Added GraphicsContext3D::Attributes struct to isolate DOM and
        graphics layers. Added getContextAttributes() to
        WebGLRenderingContext. Added test case ensuring that context
        attributes can be passed down and returned. Tested in Safari and
        Chromium. The attributes will be hooked up to the creation of the
        OpenGL context in bug 33416.

        Test: fast/canvas/webgl/context-attributes.html

        * DerivedSources.make:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/IDLParser.pm:
        * bindings/v8/DOMData.cpp:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextCallback):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * html/HTMLCanvasElement.h:
        * html/HTMLCanvasElement.idl:
        * html/canvas/CanvasContextAttributes.cpp: Added.
        (WebCore::CanvasContextAttributes::CanvasContextAttributes):
        (WebCore::CanvasContextAttributes::~CanvasContextAttributes):
        * html/canvas/CanvasContextAttributes.h: Added.
        * html/canvas/WebGLContextAttributes.cpp: Added.
        (WebCore::WebGLContextAttributes::create):
        (WebCore::WebGLContextAttributes::WebGLContextAttributes):
        (WebCore::WebGLContextAttributes::~WebGLContextAttributes):
        (WebCore::WebGLContextAttributes::alpha):
        (WebCore::WebGLContextAttributes::setAlpha):
        (WebCore::WebGLContextAttributes::depth):
        (WebCore::WebGLContextAttributes::setDepth):
        (WebCore::WebGLContextAttributes::stencil):
        (WebCore::WebGLContextAttributes::setStencil):
        (WebCore::WebGLContextAttributes::antialias):
        (WebCore::WebGLContextAttributes::setAntialias):
        (WebCore::WebGLContextAttributes::premultipliedAlpha):
        (WebCore::WebGLContextAttributes::setPremultipliedAlpha):
        (WebCore::WebGLContextAttributes::attributes):
        * html/canvas/WebGLContextAttributes.h: Added.
        * html/canvas/WebGLContextAttributes.idl: Added.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create):
        (WebCore::WebGLRenderingContext::getContextAttributes):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::getContextAttributes):

2010-01-13  Simon Fraser  <simon.fraser@apple.com>

        Fix Windows build.

        * platform/graphics/cg/GraphicsContextCG.cpp:

2010-01-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Transition followed by animation fails to run the animation sometimes
        https://bugs.webkit.org/show_bug.cgi?id=33563

        If a transition was closely followed by an animation, it was possible for the cleanup
        after the end of the transition to kill the animation.
        
        Fix this by including the keyframes name (or empty string for transitions) in the labels
        used to identify CAAnimations on layers.
        
        No test because this was a subtle timing issue that is hard to reproduce in a layout test.

        * platform/graphics/mac/GraphicsLayerCA.h: Some new methods and signature changes.
        
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::animationIdentifier): Pass the keyframes name, since this is included in the identifier string now.
        (WebCore::moveAllAnimationsForProperty): Pass the keyframes name.
        (WebCore::GraphicsLayerCA::moveAnimationsForProperty): Try to move both transition- and animation-related
        CAAnimations, using the list of running animations to get the keyframe names for the latter.

        (WebCore::GraphicsLayerCA::ensureStructuralLayer): moveAnimation renamed to moveAnimationsForProperty
        and takes the keyframes name.

        (WebCore::GraphicsLayerCA::updateLayerAnimations): Pass keyframes name down (or "" for transitions).
        (WebCore::GraphicsLayerCA::setAnimationOnLayer): Pass keyframes name down.
        (WebCore::GraphicsLayerCA::removeAnimationFromLayer): Pass keyframes name down.
        (WebCore::GraphicsLayerCA::pauseAnimationOnLayer): Pass keyframes name down.
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer): Pass keyframes name down.

2010-01-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Fix shadow drawing to do the correct computations using the base coordinate space
        https://bugs.webkit.org/show_bug.cgi?id=33629
        
        Shadows draw using the CGContext base CTM, so we need to convert the shadow offet
        and size from user CTM into into base CTM coordinates, via the matix obtained from wkGetUserToBaseCTM().

        Test: compositing/shadows/shadow-drawing.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):

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

        Reviewed by Oliver Hunt.

        SVGClipPathElement shouldn't resolve style manually
        https://bugs.webkit.org/show_bug.cgi?id=33647

        Build renderers for SVGClipPathElement, so we can query the style from the renderer
        instead of re-resolving style on every clip path resource invalidation.

        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::createRenderer):
        (WebCore::SVGClipPathElement::canvasResource):
        * svg/SVGClipPathElement.h:
        (WebCore::SVGClipPathElement::isValid):

2010-01-13  Kelly Norton  <knorton@google.com>

        Reviewed by Timothy Hatcher.

        Web Inspector does not update the DOM tree when attributes change.
        https://bugs.webkit.org/show_bug.cgi?id=20162

        * dom/Element.cpp: Moves callbacks to InspectorController directly into setAttribute
        and removeAttribute and removes the existing call sites. This makes it possible to
        see attribute modifications.
        (WebCore::Element::setAttribute):
        (WebCore::Element::dispatchAttrRemovalEvent):
        (WebCore::Element::dispatchAttrAdditionEvent):
        (WebCore::Element::removeAttribute):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype._setAttributesPayload): Clear existing attributes.
        (WebInspector.DOMAgent.prototype._didApplyDomChange): Updated call site and fixed style.
        (WebInspector.DOMAgent.prototype._attributesUpdated): Added.
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._attributesUpdated): Added.
        (WebInspector.ElementsPanel.prototype.updateModifiedNodes): Updated call site.
        * inspector/front-end/ElementsTreeOutline.js: Renamed _updateTitle to updateTitle.
        (WebInspector.ElementsTreeElement.prototype.onattach): Updated updateTitle call site.
        (WebInspector.ElementsTreeElement.prototype._textNodeEditingCommitted): Ditto.
        (WebInspector.ElementsTreeElement.prototype._editingCancelled): Ditto.

2010-01-13  Carol Szabo <carol.szabo@nokia.com>

        Reviewed by Darin Adler.

        CounterNode::nextInPreOrderAfterChildren(stayWithin) does not stay within.
        https://bugs.webkit.org/show_bug.cgi?id=33625

        No new tests because the fix should affect strictly performance.

        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::nextInPreOrderAfterChildren):

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

        Reviewed by Oliver Hunt.

        Window size changes are not propagated down the render tree
        https://bugs.webkit.org/show_bug.cgi?id=33643

        Test: svg/custom/relative-sized-content.xhtml

        * rendering/RenderSVGContainer.cpp: Fix incorrect markParents=true usage, leading to unnecessary relayouts.
        (WebCore::RenderSVGContainer::layout): Use new layoutChildren() method.
        (WebCore::RenderSVGContainer::paint): Fix indention.
        * rendering/RenderSVGHiddenContainer.cpp: Fix incorrect markParents=true usage.
        (WebCore::RenderSVGHiddenContainer::layout): Use new layoutChildren() helper.
        * rendering/RenderSVGRoot.cpp: Refactor existing code to layout children in SVGRenderSupport::layoutChildren.
        (WebCore::RenderSVGRoot::layout): Make children relayouting depend on width/height changes, if the outermost svg uses relative viewport sizes.
        * rendering/SVGRenderSupport.cpp: Add central place handling child layout, skips relayouting non-relative sized children as benefit.
        (WebCore::SVGRenderBase::layoutChildren): This methods contains the actual changes.
        * rendering/SVGRenderSupport.h:
        * svg/SVGGElement.h: Remove dead code.
        * svg/SVGSVGElement.h: Make hasRelativeValues() public to remove the need for friendship declarations.
        * svg/SVGStyledElement.h: Change default return value for hasRelativeValues() to false, as it was intended.
        (WebCore::SVGStyledElement::hasRelativeValues): Make it public, to be usable from SVGRenderSupport.
        * svg/SVGSymbolElement.h: Remove dead code.
        * svg/SVGUseElement.cpp: Implement hasRelativeValues() - it was simply missing here.
        (WebCore::SVGUseElement::hasRelativeValues):
        * svg/SVGUseElement.h:

2010-01-13  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        Fix websocket/tests/worker/worker-simple.html crash on Leopard Intel Debug (Tests) builder
        https://bugs.webkit.org/show_bug.cgi?id=33581

        unref m_workerContext when websocket is disconnected, so that avoid
        keeping reference to workerContext longer than worker thread runs.

        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::disconnect):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::waitForMethodCompletion):

2010-01-12  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: selected, selectable, extended selectable, and multiple
        selectable states are not reported

        https://bugs.webkit.org/show_bug.cgi?id=33574
        <rdar://problem/7536826>

        Reviewed by Darin Adler.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isMultiSelectable):
        Use the correct function name - the function name overriden by
        and used in AccessiblityRenderObject.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject):
        Update for function rename.
        (webkit_accessible_selection_select_all_selection):
        Ditto.

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

        Reviewed by Dan Bernstein.

        Move more of the selection and caret painting code from Frame to SelectionController.
        https://bugs.webkit.org/show_bug.cgi?id=33619

        Helpful preparation step for a bug fix I am working on.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController): Initialize new data members.
        Note that m_caretVisible starts as true for the drag caret controller to match the
        old behavior for painting.
        (WebCore::SelectionController::setSelection): Changed to call selectionLayoutChanged
        in its new name and location.
        (WebCore::SelectionController::paintCaret): Added checks that were formerly done
        at the Frame level. Tweaked formatting and changed to use early return as well.
        (WebCore::SelectionController::focusedOrActiveStateChanged): Updated for call
        moved into this class.
        (WebCore::SelectionController::updateAppearance): Moved the
        Frame::selectionLayoutChanged function here. Had to rename it because the word
        "layout" is usedfor other purposes in this function.
        (WebCore::SelectionController::setCaretVisible): Moved here from Frame.
        (WebCore::SelectionController::clearCaretRectIfNeeded): Ditto.
        (WebCore::SelectionController::caretBlinkTimerFired): Ditto.

        * editing/SelectionController.h: Added new functions. Moved conditional function
        out of class definition for clarity. Removed unneeded == and != operators.
        Removed unneeded use of bit fields.

        * page/Frame.cpp: Moved functions to SelectionController.
        (WebCore::Frame::Frame): Removed initialization of moved data members.

        * page/Frame.h: Removed things moved to SelectionController as well as unneeded
        forward declaration of Timer class template.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout): Updated for new location of function.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret): Ditto.

2010-01-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7532544>
        
        Expose new method on WebKitSystemInterface, WKGetUserToBaseCTM(), which will
        be used for a shadow drawing fix.

        * WebCore.base.exp:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2010-01-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Fix shadow drawing to do the correct computations using the base coordinate space
        https://bugs.webkit.org/show_bug.cgi?id=33629

        Step 1: do some renames in setPlatformShadow():
            size -> offset
            width -> xOffset
            height -> yOffset
        
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):

2010-01-13  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Move getSessionStorageNamespace from WebKitClient to WebViewClient
        https://bugs.webkit.org/show_bug.cgi?id=33492

        * page/Page.cpp:
        (WebCore::Page::sessionStorage):
        * storage/StorageNamespace.cpp:
        (WebCore::StorageNamespace::sessionStorageNamespace):
        * storage/StorageNamespace.h:
        (WebCore::StorageNamespace::~StorageNamespace):

2010-01-13  Dirk Schulze  <krit@webkit.org>

        Reviewed by Beth Dakin.

        Repaint bug dragging a star shape with a dash stroke
        https://bugs.webkit.org/show_bug.cgi?id=33406

        Calculation of repaint rects for RenderPath objects was wrong. We must take the
        union of strokeBoundingBox and objectBoundingBox, since the strokeBoundingBox
        must not contain the objectBoundingBox. This is mainly visible on dash-arrays for
        strokes.

        Test: svg/custom/js-repaint-rect-on-path-with-stroke.svg

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::strokeBoundingBox):

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

        [wx] Build fix. Make the XFORM operator work on wx port.

        * platform/graphics/transforms/TransformationMatrix.h:
        * wscript:

2010-01-13  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Introduce SourceFrame2 with basic breakpoint / execution line
        rendering capabilities.

        Contains a drive-by naming fix (lineNumberOffset and lineNumberToOffset were
        too close to each other, but were unrelated).

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/SourceFrame2.js: Added.
        (WebInspector.SourceFrame2):
        (WebInspector.SourceFrame2.prototype.set text):
        (WebInspector.SourceFrame2.prototype.get executionLine):
        (WebInspector.SourceFrame2.prototype.set executionLine):
        (WebInspector.SourceFrame2.prototype.revealLine):
        (WebInspector.SourceFrame2.prototype._toggleBreakpoint):
        (WebInspector.SourceFrame2.prototype.resize):
        (WebInspector.BreakpointLineNumberDecorator):
        (WebInspector.BreakpointLineNumberDecorator.prototype.decorate):
        (WebInspector.BreakpointLineNumberDecorator.prototype._paintBreakpoint):
        (WebInspector.BreakpointLineNumberDecorator.prototype._paintProgramCounter):
        (WebInspector.BreakpointLineNumberDecorator.prototype.mouseDown):
        (WebInspector.ExecutionLineDecorator):
        (WebInspector.ExecutionLineDecorator.prototype.decorate):
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor):
        (WebInspector.TextEditor.prototype.get textModel):
        (WebInspector.TextEditor.prototype.set readOnly):
        (WebInspector.TextEditor.prototype.set lineNumberDecorator):
        (WebInspector.TextEditor.prototype.set lineDecorator):
        (WebInspector.TextEditor.prototype.selectionRange):
        (WebInspector.TextEditor.prototype._offsetToLine):
        (WebInspector.TextEditor.prototype._lineToOffset):
        (WebInspector.TextEditor.prototype.reveal):
        (WebInspector.TextEditor.prototype._textChanged):
        (WebInspector.TextEditor.prototype._updateSize):
        (WebInspector.TextEditor.prototype.updateCanvasSize):
        (WebInspector.TextEditor.prototype._repaintAll):
        (WebInspector.TextEditor.prototype._paintLines):
        (WebInspector.TextEditor.prototype._paintLinesContinuation):
        (WebInspector.TextEditor.prototype.paintLineNumbers):
        (WebInspector.TextEditor.prototype._paintCurrentLine):
        (WebInspector.TextEditor.prototype._mouseDown):
        (WebInspector.TextEditor.prototype._caretForMouseEvent):
        (WebInspector.TextEditor.prototype._keyDown):
        (WebInspector.TextEditor.prototype._handleNavigationKey):
        (WebInspector.TextEditor.prototype._textInput):
        (WebInspector.TextEditor.prototype._updateCursor):
        (WebInspector.TextEditor.prototype._paintSelection):
        (WebInspector.TextEditor.prototype._initFont):

2010-01-13  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Generate a function in the V8 bindings to convert v8 objects
        to native WebCore objects.

        * bindings/scripts/CodeGeneratorV8.pm: Generate and use toNative().
        * bindings/v8/V8Binding.cpp: Remove manually defined conversion helprs.
        (WebCore::getElementStringAttr):
        (WebCore::setElementStringAttr):
        * bindings/v8/V8Binding.h: Remove manually defined conversion helprs.
        * bindings/v8/V8SVGPODTypeWrapper.h: Still need a manually defined coversion helper for SVGPODTypes.
        (WebCore::V8SVGPODTypeWrapper::toNative):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::V8WebGLRenderingContext::getProgramParameterCallback):
        (WebCore::V8WebGLRenderingContext::getShaderParameterCallback):
        (WebCore::V8WebGLRenderingContext::getUniformCallback):

2010-01-13  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        REGRESSION (r49268): DHTML drag not allowed unless event.dataTransfer.effectAllowed
        is set (differs from HTML5).
        Fixes <https://bugs.webkit.org/show_bug.cgi?id=33607> and <rdar://7507114>.

        If no effectAllowed is set in the dragStart operation, we should default to
        uninitialized instead of none, so the user doesn't have to manually set the
        effectAllowed to enable drag and drop.

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard):

2010-01-13  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        font-size:small with background-color causes text to get clipped.  Make sure to only paint within the lineTop/lineBottom of
        a line for quirky inline flow boxes that didn't contribute to the overall height of the line. 
        
        Added fast/backgrounds/quirks-mode-line-boxes-backgrounds.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeVerticalOverflow):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):

2010-01-13  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Darin Adler.

        Refactoring DatabaseAuthorizer to use a CaseFoldingHash function
        for the set of whitelisted sqlite functions, and fixing some
        indenting issues.

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

        * storage/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::allowFunction):
        * storage/DatabaseAuthorizer.h:

2010-01-13  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Darin Adler.

        RenderObject::nextInPreOrderAfterChildren(RenderObject* stayWithin) does not stay within
        https://bugs.webkit.org/show_bug.cgi?id=33600

        No new tests as this fix affects mainly performance.
        No test has been found yet that could evidence the bug in the layout
        of a page, but the fix to bug 32884 exposes this bug on some pages
        such as http://www.w3.org/Style/CSS/Test/CSS2.1/current/html4/counters-scope-implied-001.htm

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::nextInPreOrderAfterChildren):

2010-01-13  Jeremy Orlow  <jorlow@chromium.org>

        No reviewer.  More or less a build fix.  My 53180 broke some 
        stuff on the Chromium port so I'm reverting.

        * page/Page.cpp:
        (WebCore::Page::sessionStorage):
        * storage/StorageNamespace.cpp:
        (WebCore::StorageNamespace::sessionStorageNamespace):
        * storage/StorageNamespace.h:
        (WebCore::StorageNamespace::~StorageNamespace):

2010-01-13  Steve Block  <steveblock@google.com>

        Update appendClassName in jni_runtime.cpp to use WebCore::StringBuilder, rather than JSC::StringBuilder.
        https://bugs.webkit.org/show_bug.cgi?id=33586

        Avoiding the JSC version of StringBuilder allows this file to be used with both JSC and V8 on Android.

        No new tests, refactoring only.

        * bridge/jni/jni_runtime.cpp: Modified.
        (JavaMethod::signature): Modified. Use WebCore::StringBuilder.

2010-01-13  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Timothy Hatcher.

        Some objects in the global scope are not completed
        https://bugs.webkit.org/show_bug.cgi?id=19119

        Use Object.getOwnPropertyNames instead of for-in to provide completions, since
        Object.getOwnPropertyNames reports both enumerable and non-enumerable properties.

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

2010-01-13  Ben Murdoch  <benm@google.com>

        Reviewed by Simon Hausmann.

        [Android] [Qt] The JSC ScriptController does not consider Touch Events user gestures.
        https://bugs.webkit.org/show_bug.cgi?id=33597

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGestureEvent): Add the touch event types (touchstart, touchmove and touchend) to the set of events that are considered user gestures.

2010-01-13  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        [Qt] REGRESSION(53187) Touchevent related tests fail

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

        Pass the ENABLE_TOUCH_EVENTS to the IDL generators.

        * WebCore.pri:

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

        Reviewed by Pavel Feldman.

        WebInspector: Timeline panel scrolling speed can be increased.
        https://bugs.webkit.org/show_bug.cgi?id=33579

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._scheduleRefresh):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype._refreshRecords):

2010-01-13  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Split the build process in two different .pro files.
        This allows qmake to be run once all source files are available.

        * DerivedSources.pro: Added.
        * WebCore.pri: Added. Contains common logic between source generation and compilation.
        * WebCore.pro: Moved source generation to DerivedSources.pro.

2010-01-13  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Scrolling editor to the 20Kth line is not smooth.

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

        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor):
        (WebInspector.TextEditor.prototype._textChanged):
        (WebInspector.TextEditor.prototype._highlightChanged):
        (WebInspector.TextEditor.prototype._paintLinesContinuation):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype.highlight):
        (WebInspector.TextEditorHighlighter.prototype._highlightInChunks):
        (WebInspector.TextEditorHighlighter.prototype.updateHighlight):
        (WebInspector.TextEditorHighlighter.prototype._highlightLines):
        (WebInspector.TextEditorHighlighter.prototype._lex):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel.prototype._setLine):
        (WebInspector.TextEditorModel.prototype.setAttribute):
        (WebInspector.TextEditorModel.prototype.getAttribute):
        (WebInspector.TextEditorModel.prototype.removeAttribute):

2010-01-13  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix the build on Windows.

        PluginViewWin.cpp requires the conversion operator from TransformationMatrix to XFORM.

        * WebCore.pro: Build TransformationMatrixWin.cpp.
        * platform/graphics/transforms/TransformationMatrix.h: Enable the conversion operator to XFORM.

2010-01-13  Miikka Heikkinen <miikka.heikkinen@digia.com>

        Reviewed by Simon Hausmann.

        [Qt/Symbian] Added missing vendor information to qtwebkit.sis

        This information is necessary to Symbian sign the package.

        http://bugreports.qt.nokia.com/browse/QTBUG-7290

        * WebCore.pro:

2010-01-11  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Move getSessionStorageNamespace from WebKitClient to WebViewClient
        https://bugs.webkit.org/show_bug.cgi?id=33492

        * page/Page.cpp:
        (WebCore::Page::sessionStorage):
        * storage/StorageNamespace.cpp:
        (WebCore::StorageNamespace::sessionStorageNamespace):
        * storage/StorageNamespace.h:
        (WebCore::StorageNamespace::~StorageNamespace):

2010-01-12  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Adding a list of whitelisted sqlite functions that users are
        allowed to use.

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

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::authorizerFunction):
        * storage/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::DatabaseAuthorizer):
        (WebCore::DatabaseAuthorizer::addWhitelistedFunctions):
        (WebCore::DatabaseAuthorizer::allowFunction):
        * storage/DatabaseAuthorizer.h:

2010-01-12  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Simon Hausmann.

        [Qt][WebSocket] SocketStreamHandleSoup.cpp is misnamed
        https://bugs.webkit.org/show_bug.cgi?id=33077

        * WebCore.pro:
        * platform/network/qt/SocketStreamHandleQt.cpp: Copied from WebCore/platform/network/qt/SocketStreamHandleSoup.cpp.
        * platform/network/qt/SocketStreamHandleSoup.cpp: Removed.

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

        Reviewed by Dan Bernstein.

        position:fixed and transform on same element breaks fixed behavior
        https://bugs.webkit.org/show_bug.cgi?id=31283

        Fix interactions of transforms and fixed positioning, namely that fixed position
        elements with a transformed ancestor are positioned relative to that ancestor,
        and an element with both a transform and fixed position respects that positioning.
        
        Test: transforms/2d/transform-fixed-container.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer):
        (WebCore::RenderBox::mapAbsoluteToLocalPoint):
        Transforms should not unconditionally stop the propagation of the 'fixed' flag to ancestors,
        but only if the transformed element is not itself fixed.
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::convertToLayerCoords):
        Fix this method to behave correctly for fixed position layers whose container is not
        the root, but some other (probably transformed) ancestor. In that case, we can fall into
        the "position: absolute" code path.

2010-01-12  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        Fix an assert being triggered by how the Chromium port sets the
        replacing flag for error pages.  This was caused by r53143.

        Covered by existing Chromium UI tests.

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

2010-01-12  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Geoffrey Garen.

        [ES5] Implement Object.getOwnPropertyNames
        https://bugs.webkit.org/show_bug.cgi?id=32242

        Add new argument to reimplementations of getPropertyNames()
        and getOwnPropertyNames(), and update the JS bindings generator.

        Test: fast/js/Object-getOwnPropertyNames.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getPropertyNames):
        (WebCore::JSDOMWindow::getOwnPropertyNames):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::getPropertyNames):
        (WebCore::JSDOMWindowShell::getOwnPropertyNames):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::getOwnPropertyNames):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertyNames):
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::getPropertyNames):
        (WebCore::JSQuarantinedObjectWrapper::getOwnPropertyNames):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::getOwnPropertyNames):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertyNames):
        * bridge/runtime_array.h:
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::getPropertyNames):
        (JSC::RuntimeObjectImp::getOwnPropertyNames):
        * bridge/runtime_object.h:

2010-01-12  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Dave Hyatt.

        Safari shows an unneeded horizontal scrollbar on many websites.
        Fixes <rdar://6321041> and <http://webkit.org/b/33555>.
        
        If a div has no children, and its height or width are 0, we can ignore
        it in our calculation of lowest, rightmost, and leftmost positions. This
        calculation was causing horizontal scrollbars to be drawn when they weren't needed.

        Test: fast/block/positioning/absolute-positioning-no-scrollbar.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lowestPosition): Added check for no children and width or height 0.
        (WebCore::RenderBlock::rightmostPosition): Ditto.
        (WebCore::RenderBlock::leftmostPosition): Ditto.

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

        Reviewed by Timothy Hatcher.

        Optimize WebInspector.TimelineGrid.prototype.updateDividers()

        DOM element property access and modification are slow and should be done as lazily as possible.
        https://bugs.webkit.org/show_bug.cgi?id=33536

        * inspector/front-end/TimelineGrid.js:
        (WebInspector.TimelineGrid.prototype.updateDividers):
        (WebInspector.TimelineGrid.prototype._setDividerAndBarLeft):

2010-01-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=33550 REGRESSION: -
        webkit-svg-shadow with opacity still over-clipped

        We need to call inflateForShadow() on the repaintRect before we 
        clip for opacity or we will over-clip.
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):

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

        Reviewed by Sam Weinig.

        Update all-in-one derived sources for Geolocation.

        * DerivedSources.cpp: Add JSCoordinates.cpp, JSGeolocation.cpp, JSGeoposition.cpp, JSPositionError.cpp

2010-01-12  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Remove static const ints from V8CustomBinding.h

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

        * bindings/scripts/CodeGeneratorV8.pm: Generate and use custom 
            internal field indices from lists of custom internal fields.
        * bindings/v8/NPV8Object.cpp:
        * bindings/v8/NPV8Object.h:
        * bindings/v8/V8Binding.cpp:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8DOMWrapper.cpp: Remove a bunch of now unnecessary
            manually calls to setInternalFieldCount().
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8Index.h:
        * bindings/v8/V8IsolatedContext.cpp:
        * bindings/v8/V8IsolatedContext.h:
        * bindings/v8/V8NPObject.cpp:
        * bindings/v8/custom/V8AbstractWorkerCustom.cpp:
        * bindings/v8/custom/V8CustomBinding.h: Remove the static const ints.
        * bindings/v8/custom/V8DOMApplicationCacheCustom.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        * bindings/v8/custom/V8NodeCustom.cpp:
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        * bindings/v8/custom/V8SVGElementInstanceCustom.cpp:
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp:

2010-01-12  Darin Fisher  <darin@chromium.org>

        Fixing chromium build bustage.

        * bindings/v8/custom/V8PopStateEventCustom.cpp: Add V8Proxy.h include.

2010-01-12  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add V8 bindings for PopStateEvent.
        https://bugs.webkit.org/show_bug.cgi?id=33546
        
        This is covered by existing tests for PopStateEvent.

        * WebCore.gypi:
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventToV8Object):
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8PopStateEventCustom.cpp: Added.
        (WebCore::V8PopStateEvent::initPopStateEventCallback):
        (WebCore::V8PopStateEvent::stateAccessorGetter):

2010-01-12  Kelly Norton  <knorton@google.com>

        Reviewed by Timothy Hatcher.

        Adds source length to ParseHTMLRecords in the inspector timeline.
        https://bugs.webkit.org/show_bug.cgi?id=33548

        Test: inspector/timeline-parse-html.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::write):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willWriteHTML):
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createParseHTMLRecord):
        * inspector/TimelineRecordFactory.h:

2010-01-12  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Darin Adler

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

        Make ICU's text breakiterator and string search use Chrome's UI
        language instead of 'en-US' or the OS UI language.

        As long as the webkit layout tests are run in en-US locale, there'd be 
        no visible change.

        * platform/text/chromium/TextBreakIteratorInternalICUChromium.cpp:
        (UILanguage):
        (WebCore::currentSearchLocaleID):
        (WebCore::currentTextBreakLocaleID):

2010-01-12  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Dave Hyatt.

        This patch changes the name of -webkit-shadow to -webkit-svg-shadow 
        to avoid giving a custom property an overly-general name.
        <rdar://problem/7534590>

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShadow):
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * css/SVGCSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):

2010-01-12  Peter Kasting  <pkasting@google.com>

        Not reviewed, build fix.

        * WebCore.vcproj/WebCore.vcproj:

2010-01-12  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add a null check in case of an event handler with invalid syntax.

        Should make fast/js/invalid-syntax--for-function.html not crash in
        Chromium's test shell.

        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::callListenerFunction): Check the listener object before using it.

2010-01-12  Peter Kasting  <pkasting@google.com>

        Reviewed by Dimitri Glazkov.

        Remove XBM support from the open-source image decoders.
        https://bugs.webkit.org/show_bug.cgi?id=27823

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create):
        * platform/image-decoders/xbm: Removed.
        * platform/image-decoders/xbm/XBMImageDecoder.cpp: Removed.
        * platform/image-decoders/xbm/XBMImageDecoder.h: Removed.

2010-01-12  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=33540
        Make it possible to build in debug mode with assertions disabled

        * dom/Element.cpp: (WebCore::Element::getURLAttribute):
        * dom/SelectElement.cpp: (WebCore::SelectElementData::checkListItems):
        * editing/TextIterator.cpp:
        * loader/Cache.cpp: (WebCore::Cache::removeFromLRUList):
        * rendering/RenderArena.cpp: (WebCore::RenderArena::free):

2010-01-12  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler and Simon Fraser.

        rdar://problem/5684062
        https://bugs.webkit.org/show_bug.cgi?id=23094
        Flash of white when switching from poster image to video playback
        
        https://bugs.webkit.org/show_bug.cgi?id=23140
        <video> poster should scale like a video frame

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState): Only call updatePosterImage from one place

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::HTMLVideoElement): m_shouldShowPosterImage -> m_shouldDisplayPoster.
        (WebCore::HTMLVideoElement::createRenderer): Always create a RenderVideo.
        (WebCore::HTMLVideoElement::attach): Call updatePosterImage before checking to see if we
            should display the poster image. renderer() is never a RenderImage, don't need to check.
            m_shouldShowPosterImage -> m_shouldDisplayPoster.
        (WebCore::HTMLVideoElement::detach): m_shouldShowPosterImage -> m_shouldDisplayPoster.
        (WebCore::HTMLVideoElement::parseMappedAttribute): Cache poster attribute when it is set since
            it is checked frequently. m_shouldShowPosterImage -> m_shouldDisplayPoster.
        (WebCore::HTMLVideoElement::updatePosterImage): Don't bother looking at the network state, 
            display the poster as long as the attribute is valid and the media engine says it hasn't
            rendered a video frame. m_shouldShowPosterImage -> m_shouldDisplayPoster.
        (WebCore::HTMLVideoElement::hasAvailableVideoFrame): New, ask the media engine if a video frame
            is available to render.
        * html/HTMLVideoElement.h:
        (WebCore::HTMLVideoElement::poster):
        (WebCore::HTMLVideoElement::shouldDisplayPoster):

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateRenderer): Call setCachedImage for render video too.

        * manual-tests/video-player.html: Remove bit-rot from manual test so it works again.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::hasAvailableVideoFrame): New, ask the media engine if a video frame
            is available to render.

        * platform/graphics/MediaPlayer.h: Prototype for hasAvailableVideoFrame.
        * platform/graphics/MediaPlayerPrivate.h: Ditto.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h: Declare hasAvailableVideoFrame, declare
            all bool variables to aid packing.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm: 
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): Initialize m_videoFrameHasDrawn. Cleanup
            floating point initializers to match coding guidelines.
        (WebCore::MediaPlayerPrivate::load): Initialize m_videoFrameHasDrawn.
        (WebCore::MediaPlayerPrivate::hasAvailableVideoFrame): New.
        (WebCore::MediaPlayerPrivate::repaint): Set m_videoFrameHasDrawn.

        (WebCore::RenderImage::paintReplaced): Split part out into paint method.
        (WebCore::RenderImage::paint): New.
        * rendering/RenderImage.h: Declare paint. Make isWidthSpecified and isHeightSpecified protected
            instead of private so RenderVideo can use them.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::RenderMedia): Inherit from RenderImage, not RenderReplaced
        (WebCore::RenderMedia::destroy): Ditto.
        (WebCore::RenderMedia::styleDidChange): Ditto.
        (WebCore::RenderMedia::layout): Ditto.
        (WebCore::RenderMedia::lowestPosition): Ditto.
        (WebCore::RenderMedia::rightmostPosition): Ditto.
        (WebCore::RenderMedia::leftmostPosition): Ditto.
        * rendering/RenderMedia.h: Declare isImage and isRenderImage.

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::intrinsicSizeChanged): New, call RenderVideo::intrinsicSizeChanged
            when displaying a poster so it is sized correctly.
        (WebCore::RenderVideo::imageChanged): Override so we can cache the image's intrisic size and
        use it when we also know the movie's intrinsic size but still need to draw the poster.
        (WebCore::RenderVideo::videoBox): Use the poster's intrinsic size when drawing the poster,
        use the movie's intrinsic size when drawing frames.
        (WebCore::RenderVideo::paintReplaced): Call RenderImage::paint when drawing the poster.
        (WebCore::RenderVideo::videoElement): New.
        (WebCore::RenderVideo::updatePlayer):
        * rendering/RenderVideo.h:
        (WebCore::RenderVideo::minimumReplacedHeight): Added.

2010-01-12  Tony Chang  <tony@chromium.org>

        Reviewed by Maciej Stachowiak.

        Fix a crash in Chromium when receiving multipart/x-mixed-replace data.
        If we stop a multipart load after ResourceLoader::didReceiveResponse
        but before ResourceLoader::didReceiveData, we have a NULL document
        loader because it has been moved back to the provisional state.  New
        loads that happen after this will dereference the NULL document
        loader.

        Work around this by moving the provisional document loader back as
        the document loader when the request is stopped.

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

        Test: http/tests/multipart/multipart-wait-before-boundary.html

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

2010-01-12  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        WebKit returns incorrect match count when first string match is on an element with user-select-none style
        https://bugs.webkit.org/show_bug.cgi?id=33508
        <rdar://problem/7482143>

        If we use VisiblePosition to calculate the start of the new search range,
        we skip all the nodes with user-select-none style, producing an incorrect
        match count.
        
        No new tests: there are no API's available to Javascript to verify the
        number of matches found.

        * page/Frame.cpp:
        (WebCore::Frame::markAllMatchesForText): Changed to use the end of the previous
        result range as the start of the new search range.

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

        Reviewed by Timothy Hatcher.

        Changed ".sidebar" style to allow v-scroll to appear in
        "Profiles" panel sidebar.

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

        No new tests -- no code changed.

        * inspector/front-end/inspector.css:

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

        Windows accelerated compositing build fix after r53110

        * plugins/PluginWidget.h:
        (WebCore::PluginWidget::platformLayer): Define platformLayer() for
        non-Mac platforms that have accelerated compositing turned on. It
        would probably be better to make PluginWidget not be used at all on
        non-Mac platforms, but this fix is much simpler.

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

        Reviewed by Pavel Feldman.

        Support injection of inspector scripts into the inspected context.

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

        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::WeakReferenceCallback):
        (WebCore::createInjectedScriptHostV8Wrapper):
        (WebCore::createInjectedScript):
        (WebCore::InjectedScriptHost::injectedScriptFor):

2010-01-12  Ben Murdoch  <benm@google.com>

        Reviewed by Darin Adler.

        Form Reset : Press Back Button and Reset , TextareaElemnt is not set to Default Value
        https://bugs.webkit.org/show_bug.cgi?id=31539

        Added manual test: manual-tests/textarea-reset-default-value.html.

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::restoreFormControlState): set the value, rather than default value of a text area when restoring its state. This allows resetting a form with a textarea to work correctly after its state has been restored.
        * manual-tests/resources/textarea-form-back-on-submit.html: Added.
        * manual-tests/textarea-reset-default-value.html: Added.

2010-01-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        [Qt] WebCore::Path allocates QPainterPath unnecessarily on the heap
        https://bugs.webkit.org/show_bug.cgi?id=33466

        WebCore::Path is a pointer to a PlatformPath. In case of Qt that's a
        QPainterPath, which itself is a pointer to the elements (QVector).
        That creates unecessary allocations in PathQt.cpp.

        Replaced the "PlatformPath* m_path;" with a PlatformPathPtr, which
        is a plain QPainterPath.

        * platform/graphics/Path.h:
        (WebCore::Path::platformPath):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::drawFilledShadowPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::addPath):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipOut):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::~Path):
        (WebCore::Path::operator=):
        (WebCore::Path::contains):
        (WebCore::Path::strokeContains):
        (WebCore::Path::translate):
        (WebCore::Path::boundingRect):
        (WebCore::Path::strokeBoundingRect):
        (WebCore::Path::moveTo):
        (WebCore::Path::addLineTo):
        (WebCore::Path::addQuadCurveTo):
        (WebCore::Path::addBezierCurveTo):
        (WebCore::Path::addArcTo):
        (WebCore::Path::closeSubpath):
        (WebCore::Path::addArc):
        (WebCore::Path::addRect):
        (WebCore::Path::addEllipse):
        (WebCore::Path::clear):
        (WebCore::Path::isEmpty):
        (WebCore::Path::debugString):
        (WebCore::Path::apply):
        (WebCore::Path::transform):

2010-01-12  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Adam Barth.

        [Qt] XSL stylesheets can load documents from a different origin

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

        * xml/XSLTProcessorQt.cpp:
        (WebCore::XSLTUriResolver::XSLTUriResolver):
        (WebCore::XSLTUriResolver::resolve):
        (WebCore::XSLTProcessor::transformToString):

2010-01-12  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Gustavo Noronha Silva.

        https://bugs.webkit.org/show_bug.cgi?id=30883
        [Gtk] Implement AtkText for HTML elements which contain text

        Tweak/correction: Eliminate a needless variable.

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

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

        Reviewed by Geoffrey Garen.

        Allow creating injected script for the inspected script state. The InjectedScript is
        cached on the inspected ExecState global object and will be garbage collected when the
        object is collected. Each InjectedScript object is assigned unique id.

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

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::markChildren):
        (WebCore::JSDOMGlobalObject::setInjectedScript):
        (WebCore::JSDOMGlobalObject::injectedScript):
        * bindings/js/JSDOMGlobalObject.h: InjectedScript is cached on the global object as a
        field that is not visible from the inspected code. This InjectedScript should be alive as long as
        the global object is alive and should be accessible from Web Inspector's native code.
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObjectData::JSDOMGlobalObjectData):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::createInjectedScript): Creates injected script using the lexical global object of the
        inspected ScriptState. Reference to the object is stored on the global DOM object.
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        (WebCore::InjectedScriptHost::injectedScriptForId):
        (WebCore::InjectedScriptHost::discardInjectedScripts): This method is expected to be called when the
        the InjectedScript are no longer needed. In particular, this should be called before frame navigation. 
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::setInjectedScriptSource): This allows to provide injected script source.
        The source may be loaded in a platform specific way.

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

        Reviewed by Dan Bernstein.

        Fix handling of unusual kana sequences in search
        https://bugs.webkit.org/show_bug.cgi?id=33506

        * editing/TextIterator.cpp:
        (WebCore::composedVoicedSoundMark): Removed unnnecessary case for a
        non-kana-letter character. This function only works for kana letters.
        (WebCore::SearchBuffer::isBadMatch): Fixed voiced sound mark code to
        properly handle cases where one character has a shorter list of
        combining voiced sound marks than the other.

2010-01-11  Victor Wang  <victorw@chromium.org>

        Reviewed by Dimitri Glazkov.

        Clear m_acceptedIndexOnAbandon flag when user accepts the selected index.

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

        TEST: manual-tests/chromium/onchange-reload-popup.html
        It should be covered by the above test. The current
        test shell does not support sending keyboard events to popup
        list so use manual test for it.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::acceptIndex):

2010-01-11  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Eric Seidel.

        [GTK] Debug bots crashing in plugins/iframe-shims.html
        https://bugs.webkit.org/show_bug.cgi?id=33472

        Call computeOffsetInContainerNode() instead of
        offsetInContainerNode(), since we are not sure this is always
        parent-anchored.

        plugins/iframe-shims.html no longer ASSERTS

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

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

        Reviewed by Kevin Decker.

        https://bugs.webkit.org/show_bug.cgi?id=33455
        Allows plugins to participate in accelerated compositing

        For plugins using the CoreAnimation rendering mode, host their CALayers in the
        accelerated compositing layer tree.
        
        This requires making normal flow RenderLayers for RenderEmbeddedObjects when they represent
        a plugin using this mode.
        
        * WebCore.base.exp: Export Node::setNeedsStyleRecalc() for use by WebKit.
        * WebCore.xcodeproj/project.pbxproj: Re-order files for sorting.

        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::requiresLayer): Make a layer if the plugin is using
        accelerated compositing mode.
        (WebCore::RenderEmbeddedObject::allowsAcceleratedCompositing): Asks whether the plugin has
        a layer, via PluginWidget.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldBeNormalFlowOnly):
        (WebCore::RenderLayer::isSelfPaintingLayer):
        RenderEmbeddedObjects should be normal flow layers, and self-painting layers.
        
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        Parent the plugin's layer in the GraphicsLayer when updating the layer configuration.
        
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::requiresCompositingForPlugin):
        RenderEmbeddedObjects that allow accelerated compositing trip accelerated compositing mode
        for the page.

2010-01-11  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        Fixed an uninitialized PluginView member (m_mode) which wasn't
        set when constructed with a null PluginPackage*

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

        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):

2010-01-11  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG radialGradient example radial-gradient-with-outstanding-focalPoint.svg fails
        https://bugs.webkit.org/show_bug.cgi?id=32201

        This patch moves every focalPoint that lies outside the circle defined by the radial
        gradients central point and its radius to stay inside this circle, as demanded by the
        SVG 1.1 specification.
        We use r * 0.99 as maximum radius for the aforementioned circle, when determining where
        the focalPoint is lying, to achieve compatibility with Firefox.

        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):

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

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=33493
        Log redirect details to Network channel

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):
        Log response code and Location header field value. Also, removed a redundant null check.

2010-01-11  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver Hunt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=33491 REGRESSION: 
        Many SVG -webkit-shadow tests are currently failing (in the pixel 
        tests)
        -and-
        <rdar://problem/7501200>

        The real fix here is to call inflateForShadow() on the repaintRect 
        in prepareToRenderSVGContent(). But in order to do that, I had to 
        move inflateForShadow() to a different class since functions in 
        SVGRenderBase cannot call each other. inflateForShadow() now exists 
        in SVGRenderStyle which I think makes some sense because a similar 
        function that returns a box shadow's extent exists on RenderStyle.

        Now call inflateForShadow() through the SVGRenderStyle.
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::computeRectForRepaint):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::computeRectForRepaint):
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::computeRectForRepaint):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeRectForRepaint):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::computeRectForRepaint):

        No longer implement inflateForShadow() here.
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent): Call new 
        inflateForShadow() through the SVGRenderStyle
        * rendering/SVGRenderSupport.h:

        Implementation of inflateForShadow() now lives here.
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::getSVGShadowExtent):
        (WebCore::SVGRenderStyle::inflateForShadow):
        * rendering/style/SVGRenderStyle.h:

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

        Reviewed by Pavel Feldman.

        Rewrite relative URLs in the ElementsTreeOutline to make them navigable

        Targets for "src" and "href" attribute values in the Elements outline tree
        are rewritten to full URLs whenever possible.
        https://bugs.webkit.org/show_bug.cgi?id=33024

        Test: inspector/elements-panel-rewrite-href.html

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._rewriteAttrHref):
        (WebInspector.ElementsTreeElement.prototype._nodeTitleInfo):
        * inspector/front-end/inspector.js:

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

        Not reviewed. Attempt to fix windows builds, by removing the no-longer existant JSSVGPointListCustom.cpp from JSBindingsAllInOne.cpp.

        * bindings/js/JSBindingsAllInOne.cpp:

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

        Reviewed by Adam Roben & Dirk Schulze.

        svg <text> fails to update when setting x/y
        https://bugs.webkit.org/show_bug.cgi?id=22384

        Introduce JSSVGPODListCustom, refactoring the existing custom code for SVG POD type lists.
        (Currently SVGTransformList/SVGPointList was handled correctly, and SVGLengthList/SVGNumberList not)

        Remove the need for custom JSSVG*List.cpp implementations, but instead tweak CodeGeneratorJS.pm,
        to call into the new JSSVGPODListCustom methods. Fixes dynamic updates of the SVGTextElement
        'rotate' & 'x'/'y' SVG DOM properties.

        Tests: svg/custom/text-xy-updates-SVGList.xhtml
               svg/dynamic-updates/SVGTextElement-svgdom-rotate-prop.html
  
        * Android.jscbindings.mk: Remove old files from build, add the new header.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSSVGPODListCustom.h: Copied from bindings/js/JSSVGTransformListCustom.cpp. Refactored code to be sharable between all JSSVG*List classes.
        (WebCore::JSSVGPODListCustom::finishGetter):
        (WebCore::JSSVGPODListCustom::finishSetter):
        (WebCore::JSSVGPODListCustom::finishSetterReadOnlyResult):
        (WebCore::JSSVGPODListCustom::clear):
        (WebCore::JSSVGPODListCustom::initialize):
        (WebCore::JSSVGPODListCustom::getItem):
        (WebCore::JSSVGPODListCustom::insertItemBefore):
        (WebCore::JSSVGPODListCustom::replaceItem):
        (WebCore::JSSVGPODListCustom::removeItem):
        (WebCore::JSSVGPODListCustom::appendItem):
        * bindings/js/JSSVGPointListCustom.cpp: Removed.
        * bindings/js/JSSVGTransformListCustom.cpp: Removed.
        * bindings/scripts/CodeGeneratorJS.pm: Forward any SVGList call on POD list types to the new JSSVGPODListCustom.
        * svg/SVGNumberList.cpp: Make SVGNumberList a SVGPODList, instead of a SVGList, to make dynamic updates work.
        (WebCore::SVGNumberList::SVGNumberList):
        * svg/SVGNumberList.h:
        * svg/SVGPointList.idl: Remove JSCCustom markers everywhere.
        * svg/SVGTransformList.idl: Ditto.

2010-01-08  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Cannot focus on an empty editable span in a non editable div.
        https://bugs.webkit.org/show_bug.cgi?id=33411
        <rdar://problem/5982901>

        We now allow to set the focus inside an empty inline element if it is the only
        editable element inside non-editable content.

        * dom/Position.cpp:
        (WebCore::Position::isCandidate): Extended to allow positions in inline elements when
        at the border between editable and non editable content.
        (WebCore::Position::getInlineBoxAndOffset): Modified to be able to calculate the caret
        position inside an empty inline.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs): When merging, we don't always find a break
        element, since now an editable inline is a VisiblePosition if it is at editability boundary.
        * editing/VisibleSelection.h: Updated comment on the use of Position member variables
        instead of VisiblePosition.
        * page/Frame.cpp:
        (WebCore::Frame::selectionLayoutChanged): Changed to avoid multiple calls to upstream and
        downstream on the same position.

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

        Reviewed by Nikolas Zimmermann.

        [V8] IsRefPtrType() in CodeGeneratorV8.pm increases maintenance burden.
        https://bugs.webkit.org/show_bug.cgi?id=32994

        Refactoring, covered by existings tests.

        * bindings/scripts/CodeGeneratorV8.pm: Reversed testing for ref-counted objects,
            since there's a much smaller (and more stable) set of non-ref-counted ones.

2010-01-06  Kelly Norton  <knorton@google.com>

        Reviewed by Pavel Feldman.

        Fixes the fact that timeline panel results are skewed by the use of DOM mutation events.
        https://bugs.webkit.org/show_bug.cgi?id=32846

        Instead of using DOM mutation events in InspectorDOMAgent, InspectorController is now called
        directly when the DOM is mutated.

        * dom/ContainerNode.cpp: Calls InspectorController directly when child nodes are added/removed.
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):
        * dom/Element.cpp: Calls InspectorController directly when attributes are added/removed.
        (WebCore::Element::dispatchAttrRemovalEvent):
        (WebCore::Element::dispatchAttrAdditionEvent):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didInsertDOMNode):
        (WebCore::InspectorController::didRemoveDOMNode):
        (WebCore::InspectorController::didModifyDOMAttr):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::startListening):
        (WebCore::InspectorDOMAgent::stopListening):
        (WebCore::InspectorDOMAgent::handleEvent):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMAgent::didModifyDOMAttr):
        * inspector/InspectorDOMAgent.h:

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

        Reviewed by Alexey Proskuryakov.

        REGRESSION: Japanese text search ignores small vs. large and voicing mark differences
        https://bugs.webkit.org/show_bug.cgi?id=30437
        rdar://problem/7214058

        Test: fast/text/find-kana.html

        * editing/TextIterator.cpp:
        (WebCore::isKanaLetter): Added.
        (WebCore::isSmallKanaLetter): Added.
        (WebCore::composedVoicedSoundMark): Added.
        (WebCore::isCombiningVoicedSoundMark): Added.
        (WebCore::containsKanaLetters): Added.
        (WebCore::normalizeCharacters): Added.
        (WebCore::SearchBuffer::SearchBuffer): Initialize the data members
        m_targetRequiresKanaWorkaround and m_normalizedTarget.
        (WebCore::SearchBuffer::isBadMatch): Added. Checks for matches that
        ICU's default collation considers correct, but we consider incorrect.
        (WebCore::SearchBuffer::search): Added code to call isBadMatch and
        move to the next match with usearch_next if the result is true.

2010-01-11  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=30883
        [Gtk] Implement AtkText for HTML elements which contain text

        * accessibility/gtk/AccessibilityObjectWrapperAtk.h
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (objectAndOffsetUnignored):
        (webkit_accessible_text_get_caret_offset):
        * editing/gtk/SelectionControllerGtk.cpp:
        (SelectionController::notifyAccessibilityForSelectionChange)

        Adjust the caret offset and object with focus to reflect the
        unignored parent of the static text object which contains the
        caret. This is necessary because the static text objects are
        no longer being exposed to ATs.

2010-01-11  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Antti Koivisto.

        Touchevent coordinates are incorrect after page zoom and page scroll
        https://bugs.webkit.org/show_bug.cgi?id=32899

        Test: fast/events/touch-coords-in-zoom-and-scroll.html

        * dom/Touch.cpp:
        (WebCore::contentsX):
        (WebCore::contentsY):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent):

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

        Reviewed by Eric Seidel.

        Have "Paste and Match Style" fire the dom paste event.
        https://bugs.webkit.org/show_bug.cgi?id=30639

        Test: editing/execCommand/paste-and-match-style-event.html

        * editing/Editor.cpp:
        (WebCore::Editor::pasteAsPlainText):

2010-01-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Rollout renderpath culling as it once again breaks pixel tests.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        (WebCore::RenderPath::nodeAtFloatPoint):

2010-01-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Allows plugins to participate in accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=33455

        Part 1: rename setContentsToVideo() on GraphicsLayer to setContentsToMedia()
        to make it more general. Rename associated enums and methods similarly.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setContentsToMedia):
        * platform/graphics/mac/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::):
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setContentsToMedia):
        (WebCore::GraphicsLayerCA::commitLayerChanges):
        (WebCore::GraphicsLayerCA::updateContentsMediaLayer):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovieLayer):
        (WebCore::MediaPlayerPrivate::acceleratedRenderingStateChanged):

2010-01-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Nikolas Zimmerman.

        Bad DOM performance in large SVG files
        https://bugs.webkit.org/show_bug.cgi?id=30055

        Cull RenderPaths before passing on to the underlying graphics system.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        (WebCore::RenderPath::nodeAtFloatPoint):

2010-01-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Add defensive initialization of iframe sandbox flags
        https://bugs.webkit.org/show_bug.cgi?id=32368

        We now initialize the SecurityOrigin's sandbox state directly duing
        construction.  This lets us properly set the isUnique bit.

        Tests: http/tests/security/sandboxed-iframe-origin-add.html
               http/tests/security/sandboxed-iframe-origin-remove.html

        * WebCore.base.exp:
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::create):
        (WebCore::SecurityOrigin::setSandboxFlags):
        * page/SecurityOrigin.h:

2010-01-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Inspect Element selects the wrong element.
        Drive-by fix that focuses dom tree upon settting focuesDOMNode.

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

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.setDocument.selectLastSelectedNode):
        (WebInspector.ElementsPanel.prototype.setDocument):
        * inspector/front-end/treeoutline.js:
        (TreeElement.prototype.select):

2010-01-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Introduce support for flexible line height in the text editor.

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

        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor):
        (WebInspector.TextEditor.prototype._offsetToLineNumber):
        (WebInspector.TextEditor.prototype._lineNumberToOffset):
        (WebInspector.TextEditor.prototype._lineHeight):
        (WebInspector.TextEditor.prototype.reveal):
        (WebInspector.TextEditor.prototype._textChanged):
        (WebInspector.TextEditor.prototype._selectionChanged):
        (WebInspector.TextEditor.prototype._updateSize):
        (WebInspector.TextEditor.prototype._paintLines):
        (WebInspector.TextEditor.prototype._paintLinesContinuation):
        (WebInspector.TextEditor.prototype._paintLineNumbers):
        (WebInspector.TextEditor.prototype._paintCurrentLine):
        (WebInspector.TextEditor.prototype._scroll):
        (WebInspector.TextEditor.prototype._repaintOnScroll):
        (WebInspector.TextEditor.prototype._caretForMouseEvent):
        (WebInspector.TextEditor.prototype._handleNavigationKey):
        (WebInspector.TextEditor.prototype._updateCursor):
        (WebInspector.TextEditor.prototype._invalidateHighlight):
        (WebInspector.TextEditor.prototype._paintSelection):
        (WebInspector.TextEditor.prototype._initFont):
        (WebInspector.TextCursor.prototype.setTextLineHeight):

2010-01-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Do not repaint line numbers while editing within line.

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

        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor.prototype._textChanged):
        (WebInspector.TextEditor.prototype._selectionChanged):
        (WebInspector.TextEditor.prototype._repaintAll):
        (WebInspector.TextEditor.prototype._paintLines):
        (WebInspector.TextEditor.prototype._paintLinesContinuation):
        (WebInspector.TextEditor.prototype._paintLineNumbers):
        (WebInspector.TextEditor.prototype._updateCursor):
        (WebInspector.TextEditor.prototype._copy):

2010-01-10  Adam Barth  <abarth@webkit.org>

        Unreviewed whitespace fixes.

        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::setSandboxFlags):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::updateSandboxFlags):
        * loader/FrameLoader.h:

2010-01-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Unify origin sandbox flag with m_noAccess in SecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=32372

        It turns out the SandboxOrigin bit is slightly different than the
        unique origin concept because the sandbox bit is inherited by iframes.
        These concepts are separate in the spec, so I think it's ok to keep
        them separate in the implementation as well.

        No new tests because there is no behavior change.

        * dom/Document.cpp:
        (WebCore::Document::cookie):
        (WebCore::Document::setCookie):
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::passesAccessControlCheck):
        * page/SecurityOrigin.cpp:
        (WebCore::schemesWithUniqueOrigins):
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::canAccess):
        (WebCore::SecurityOrigin::canRequest):
        (WebCore::SecurityOrigin::taintsCanvas):
        (WebCore::SecurityOrigin::setSandboxFlags):
        (WebCore::SecurityOrigin::toString):
        (WebCore::SecurityOrigin::registerURLSchemeAsNoAccess):
        (WebCore::SecurityOrigin::shouldTreatURLSchemeAsNoAccess):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::canAccessDatabase):
        (WebCore::SecurityOrigin::canAccessStorage):
        (WebCore::SecurityOrigin::canAccessCookies):
        (WebCore::SecurityOrigin::isUnique):

2010-01-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        ScriptController::isEnabled needs to be renamed
        https://bugs.webkit.org/show_bug.cgi?id=32063

        Rename ScriptController::isEnabled to
        ScriptController::canExecuteScripts to reflect what the method actually
        means.  This is a trivial change, but it involved touching a lot of
        call sites.

        * WebCore.PluginHostProcess.exp:
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::canExecuteScripts):
        (WebCore::ScriptController::executeScript):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::bindingRootObject):
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::jsObjectForPluginElement):
        (WebCore::ScriptController::executeScriptInWorld):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::windowScriptObject):
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/js/ScriptState.cpp:
        (WebCore::scriptStateFromNode):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        * bindings/v8/ScriptController.h:
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::retrieve):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::evaluateScript):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::startElementNs):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::controls):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::processToken):
        * inspector/InspectorController.cpp:
        (WebCore::canPassNodeToJavaScript):
        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::setJavaScriptPaused):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isProcessingUserGesture):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::dispatchDidClearWindowObjectsInAllWorlds):
        (WebCore::FrameLoader::dispatchDidClearWindowObjectInWorld):

2010-01-09  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel.

        Inspector font for errors is ugly on non-OSX platforms
        https://bugs.webkit.org/show_bug.cgi?id=33340

        * css/view-source.css: Add a fallback to sans-serif on a CSS
        selector that previously only listed Lucida Grande.

2010-01-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Nikolas Zimmermann.

        <rdar://problem/7525778> Font fallback kills SVG kerning
        https://bugs.webkit.org/show_bug.cgi?id=33400

        Test: platform/mac/fast/text/sticky-typesetting-features.html

        Cache font attributes separately for different typesetting features.

        * platform/graphics/SimpleFontData.h: Replaced single-element caches
        with maps.
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        (WebCore::disableLigatures): Added an ATSUStyle parameter.
        (WebCore::initializeATSUStyle): Look up the ATSUStyle in the map and
        initialize if necessary. Return the ATSUStyle.
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersATSUI):
        Use the ATSUStyle returned from initializeATSUStyle().
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformDestroy): Destroy the ATSUStyles in the
        map.
        (WebCore::SimpleFontData::getCFStringAttributes): Look up the attributes
        dictionary in the map and initialize if necessary.

2010-01-08  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Fix namespace indent for SecurityOrigin.h.

        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::domainWasSetInDOM):
        (WebCore::SecurityOrigin::protocol):
        (WebCore::SecurityOrigin::host):
        (WebCore::SecurityOrigin::domain):
        (WebCore::SecurityOrigin::port):
        (WebCore::SecurityOrigin::canLoadLocalResources):
        (WebCore::SecurityOrigin::setSandboxFlags):
        (WebCore::SecurityOrigin::isSandboxed):
        (WebCore::SecurityOrigin::canAccessDatabase):
        (WebCore::SecurityOrigin::canAccessStorage):
        (WebCore::SecurityOrigin::):

2010-01-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Dmitry Titov.

        bindings/v8/DOMData is missing a virtual destructor
        https://bugs.webkit.org/show_bug.cgi?id=33390

        DOMData is the base class for ChildThreadDOMData and MainThreadDOMData classes
        but it does not have a virtual destructor. While this isn't currently causing
        any leaks, since there are no instances of ChildThreadDOMData or
        MainThreadDOMData that are manipulated via a DOMData pointer, the ARM GCC
        compiler generates the following compilation error:

        "/WebCore/bindings/v8/DOMData.h:45: error: 'class WebCore::DOMData' has virtual
        functions and accessible non-virtual destructor"

        We therefore need to add a virtual destructor to DOMData.

        * bindings/v8/DOMData.cpp:
        (WebCore::DOMData::~DOMData):
        * bindings/v8/DOMData.h:

2010-01-08  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

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

        Cleans up style errors exposed by the patch for bug #33198.

        No functionality was changed. So, no new tests.

        * platform/graphics/SimpleFontData.h:
        * plugins/PluginPackage.cpp:

2010-01-08  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        WebGL canvas paints background color twice
        https://bugs.webkit.org/show_bug.cgi?id=33361

        Clean up some logic around "directly composited" content: some images, video, and WebGL.

        We previously set the GraphicsLayer background color to the CSS background color
        in some cases where the box has no other decorations. However, the content 
        layer's bounds do not correspond with the background box in many cases,
        and we could end up both painting the background color, and setting it on the layer.
        
        Simplify this logic to never use layer background colors, and thus skip allocating
        backing store only when the element has no visible box decorations.

        Tests: compositing/images/direct-image-background-color.html
               compositing/reflections/simple-composited-reflections.html
               compositing/video/video-background-color.html
               compositing/webgl/webgl-background-color.html
               compositing/webgl/webgl-blending.html

        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::is3DCanvas): Utility to determine if a RenderObject is a canvas with WebGL
        (WebCore::RenderLayerBacking::RenderLayerBacking): Remove m_hasDirectlyCompositedContent.
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): canUseDirectCompositing()
        is renamed to isDirectlyCompositedImage() and only applies to images now. 
        No longer set layer background color.
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Just use hasPaintedContent()
        as the argument to setDrawsContent().
        (WebCore::hasBoxDecorationsOrBackground): Renamed.
        (WebCore::RenderLayerBacking::hasNonCompositingContent):
        (WebCore::hasBoxDecorationsOrBackgroundImage): Renamed from hasBoxDecorations().
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer): Moved test for
        hasOverflowControls() into hasNonCompositingContent() and removed the FIXME comment.
        (WebCore::RenderLayerBacking::containsPaintedContent): New method that decides
        if the layer (and its non-composited children) has any content that must be painted into backing store.
        (WebCore::RenderLayerBacking::isDirectlyCompositedImage): Renamed from canUseDirectCompositing()
        and reduced to only apply to images.
        (WebCore::RenderLayerBacking::rendererContentChanged): 3D canvas no longer falls under the
        canUseDirectCompositing() scope.

2010-01-08  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Use member initialization syntax instead of assignment for member variables of Document used
        for determining minimum layout delay.
        https://bugs.webkit.org/show_bug.cgi?id=33316

        No new tests, style change only.

        * dom/Document.cpp: Modified.
        (WebCore::Document::Document): Modified. Use initializer list for m_startTime, m_overMinimumLayoutThreshold and m_extraLayoutDelay.

2010-01-08  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Passing array that is too large to set method of WebGLArrays does not throw an exception
        https://bugs.webkit.org/show_bug.cgi?id=33352

        Added needed range checks to JSC and V8 custom bindings. Expanded
        preexisting test suite for WebGLArrays and updated its expected
        results. Tested in WebKit and Chromium.

        Test: fast/canvas/webgl/array-set-out-of-bounds.html

        * bindings/js/JSWebGLArrayHelper.h:
        (WebCore::setWebGLArrayFromArray):
        * bindings/v8/custom/V8WebGLArrayCustom.h:
        (WebCore::setWebGLArrayFromArray):

2010-01-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=32962
        HTML tags are wrongfully parsed when setting innerHTML of a SCRIPT element

        Also fixed the same for STYLE elements.

        Tests: fast/dom/css-innerHTML.html
               fast/dom/script-innerHTML-x.xhtml
               fast/dom/script-innerHTML.html

        * html/HTMLElement.cpp: (WebCore::HTMLElement::setInnerHTML): Don't parse JS or CSS as HTML,
        matching Firefox.

2010-01-08  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver Hunt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=32757 Repaint bug 
        with -webkit-shadow on svg shapes
        -and-
        <rdar://problem/7389149>

        Inflate the repaintRect for the shadow using its extent.
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::computeRectForRepaint):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::computeRectForRepaint):
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::computeRectForRepaint):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::repaintRectInLocalCoordinates):
        (WebCore::RenderSVGRoot::computeRectForRepaint):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::computeRectForRepaint):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::getSVGShadowExtent):
        (WebCore::SVGRenderBase::inflateForShadow):
        * rendering/SVGRenderSupport.h:

2010-01-08  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        WebGLArray subclasses do the wrong conversion in indexSetter
        https://bugs.webkit.org/show_bug.cgi?id=33350

        Test: fast/canvas/webgl/array-setters.html

        * bindings/js/JSWebGLFloatArrayCustom.cpp:
        (WebCore::JSWebGLFloatArray::indexSetter):
        * bindings/js/JSWebGLUnsignedIntArrayCustom.cpp:
        (WebCore::JSWebGLUnsignedIntArray::indexSetter):

2010-01-08  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Delegation client
        https://bugs.webkit.org/show_bug.cgi?id=32826

        Factory related code removed from QtAbstractWebPopup. Popups are now created
        by ChromeClientQt.
        Popup content information struct added to class QtAbstractWebPopup.
        PopupMenuClient is now hidden from higher layers.
        QtAbstractWebPopup now receives content information and font as parameters
        of method populate.
        QtFallbackWebPopup moved to WebKit/qt/WebCoreSupport.

        * WebCore.pro:
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::getItems):
        (WebCore::PopupMenu::show):
        * platform/qt/QtAbstractWebPopup.cpp:
        (WebCore::QtAbstractWebPopup::QtAbstractWebPopup):
        (WebCore::QtAbstractWebPopup::popupDidHide):
        (WebCore::QtAbstractWebPopup::valueChanged):
        * platform/qt/QtAbstractWebPopup.h:
        (WebCore::QtAbstractWebPopup::Item::):
        * platform/qt/QtFallbackWebPopup.cpp: Removed.
        * platform/qt/QtFallbackWebPopup.h: Removed.

2010-01-08  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Darin Adler.

        Skip invalid blocks in CSS property declarations.
        https://bugs.webkit.org/show_bug.cgi?id=31231
        https://bugs.webkit.org/show_bug.cgi?id=26619

        This patch makes the CSS parser skip property declarations containing invalid blocks.

        Test: fast/css/parsing-error-recovery.html

        * css/CSSGrammar.y:

2010-01-08  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: CSS content not returned correctly in AX
        https://bugs.webkit.org/show_bug.cgi?id=33308

        Test: platform/mac/accessibility/css-content-attribute.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement):

2010-01-08  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        Implement full-screen video for Windows
        https://bugs.webkit.org/show_bug.cgi?id=31318
        
        This is mostly support logic for taking video
        into and out of full-screen. It also contains the
        QTMovieWin piece which adds support for the actual
        full-screen window itself. Events from the window
        are sent to the FullscreenVideosController for handling.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addData):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
        (WebCore::MediaPlayerPrivate::supportsFullscreen):
        (WebCore::MediaPlayerPrivate::platformMedia):
        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWinPrivate::QTMovieWinPrivate):
        (QTMovieWin::initializeQuickTime):
        (QTMovieWin::_handleMessages):
        (QTMovieWin::enterFullscreen):
        (QTMovieWin::exitFullscreen):
        * platform/graphics/win/QTMovieWin.h:

2010-01-08  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Adam Barth.

        Fix a regression that removed a call to
        FrameLoaderClient::didDestroyScriptContextForFrame.
        https://bugs.webkit.org/show_bug.cgi?id=33347

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::disposeContextHandles):

2010-01-08  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        WebKit plugins are not rendered during printing.
        https://bugs.webkit.org/show_bug.cgi?id=33022.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::paintWindowedPluginIntoContext): Tell
          cairo printing surface to flush so that blank regions do
          not write over the plugin's paint operations.
        * rendering/RenderLayer.cpp: Build fix.
        (WebCore::RenderLayer::beginTransparencyLayers): Correct
          method signature missing for ColorSpace.

2010-01-08  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Eric Seidel.

        REGRESSION(52819?): AXLoadComplete and AXLayoutComplete causes 4 tests fail on Snow Leopard Debug bot
        https://bugs.webkit.org/show_bug.cgi?id=33300

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilitySetPostedNotificationCallback:withContext:]):
        (-[AccessibilityObjectWrapper accessibilityPostedNotification:]):

2010-01-08  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Regex-based syntax highlighting is slow.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/JavaScriptHighlighterScheme.js: Removed.
        * inspector/front-end/JavaScriptTokenizer.js: Added.
        (WebInspector.JavaScriptTokenizer):
        (WebInspector.JavaScriptTokenizer.prototype.set line):
        (WebInspector.JavaScriptTokenizer.prototype.getCondition):
        (WebInspector.JavaScriptTokenizer.prototype.setCondition):
        (WebInspector.JavaScriptTokenizer.prototype._charAt):
        (WebInspector.JavaScriptTokenizer.prototype.nextToken):
        * inspector/front-end/JavaScriptTokenizer.re2js: Added.
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype.highlight):
        (WebInspector.TextEditorHighlighter.prototype._lex):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2010-01-07  Mike Belshe  <mbelshe@chromium.org>

        Reviewed by Darin Adler.

        Fix Spdy casing to match style guide.

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

        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::wasFetchedViaSPDY):
        (WebCore::ResourceResponse::setWasFetchedViaSPDY):

2010-01-07  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel.

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

        Added ENABLE_XHTMLMP flag. Disabled by default.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * config.h:

2010-01-07  Stephanie Lewis  <slewis@apple.com>

        Rolled out http://trac.webkit.org/changeset/52778 due to rolling
        out http://trac.webkit.org/changeset/52756

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::layout):
        (WebCore::SelectionController::recomputeCaretRect):
        (WebCore::SelectionController::invalidateCaretRect):
        (WebCore::SelectionController::paintCaret):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::attach):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::attach):
        * page/Frame.cpp:
        (WebCore::Frame::revealSelection):

2010-01-07  Stephanie Lewis  <slewis@apple.com>

        Rollout http://trac.webkit.org/changeset/52756 due to a large performance regression.

        * dom/Document.cpp:
        (WebCore::Document::updateLayout):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController):
        (WebCore::SelectionController::setSelection):
        * editing/SelectionController.h:
        * page/Frame.cpp:
        (WebCore::Frame::setCaretVisible):
        (WebCore::Frame::selectionLayoutChanged):
        (WebCore::Frame::caretBlinkTimerFired):
        (WebCore::Frame::selectionBounds):
        * page/FrameView.cpp:
        (WebCore::FrameView::needsLayout):

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

        Reviewed by Sam Weinig.

        Fix a crash seen on the buildbots.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase): Don't disable specific
        function tracking here; it's too late, as some specific functions
        may already have been tracked in the base class constructor.

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

        Reviewed by Dirk Schulze.

        SVGTextElement & friends need to implement svgAttributeChanged
        https://bugs.webkit.org/show_bug.cgi?id=33284

        Implement svgAttributeChanged() for SVGTextElement & SVGTRefElement. As <text> element contain children,
        childrenChanged() has to be implemented as well for SVGTextElement.

        Simplify SVGTransformable::parseTransformAttribute() code, clearing lists in the beginning
        and on error case, after parsing - previously the calling site had to take care of that.

        Tests: svg/dynamic-updates/SVGTRefElement-dom-href-attr.html
               svg/dynamic-updates/SVGTextElement-dom-transform-attr.html
               svg/dynamic-updates/SVGTextElement-svgdom-transform-prop.html

        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::parseMappedAttribute):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::parseMappedAttribute):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::parseMappedAttribute):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::svgAttributeChanged):
        * svg/SVGTRefElement.h:
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::parseMappedAttribute):
        (WebCore::SVGTextElement::svgAttributeChanged):
        (WebCore::SVGTextElement::childrenChanged):
        * svg/SVGTextElement.h:
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::svgAttributeChanged):
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformAttribute):
        * svg/SVGTransformable.h:

2010-01-07  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adele Peterson.

        Padding in popup menu gets lost with styled <select> in Windows.
        Fixes <rdar://7285538>, and <http://webkit.org/b/33235>.

        [Win] Support padding-right on selects when webkit-appearance is off. Added a test
        case for narrow selects with -webkit-appearance: none, and padding left and right to
        show that both types of padding are honored.

        * manual-tests/select-webkit-appearance-off-narrow-select.html: Added.
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::calculatePositionAndSize): Use clientPaddingRight instead of a hardcoded constant.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::clientPaddingRight): If webkit-appearance is off, use padding-right instead of
        the hardcoded constant.

2010-01-07  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=33057
        REGRESSION(r49365): typeof(xhr.responseText) != "string" in Windows

        <rdar://problem/7296920> REGRESSION: WebKit fails to start PeaceKeeper benchmark

        * config.h: Define JS_EXPORTCLASS. I'm not sure why this isn't done in JSC globally for all
        possible clients, but keeping the current design for now.

2010-01-07  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Jon Honeycutt.

        Account for scale and current context position (as well as page
        position) in the device context world transform passed to
        plugins.  This is especially important for print surface DPI.
        http://bugs.webkit.org/show_bug.cgi?id=32909.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::paintWindowedPluginIntoContext): Revise
          world context handling to include scaling and translation
          already set for the CTM.

2010-01-07  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Generate V8 bindings header declarations for named and indexed accessors.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        * bindings/v8/custom/V8HTMLFrameSetElementCustom.cpp:
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        * bindings/v8/custom/V8NodeListCustom.cpp:
        * bindings/v8/custom/V8StorageCustom.cpp:
        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp:

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

        Better build fix: use 'this->structure()', since 'structure' is a
        PassRefPtr, and therefore null.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):

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

        Build fix: avoid a name conflict by using the local 'structure' instead
        of the member 'structure()'.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):

2010-01-07  Simon Fraser  <simon.fraser@apple.com>

        Build fix.

        Add RenderEmbeddedObject.h/cpp to all the build systems.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:

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

        Reviewed by Sam Weinig.

        Safari memory usage skyrockets using new Google AdWords interface
        https://bugs.webkit.org/show_bug.cgi?id=33343

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase): Disabled specific function
        tracking for the window object, since there's no way to do direct
        method calls on the window object; they all go through the window shell.

2010-01-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Kevin Decker, Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=33338
        Create a renderer for <object> and <embed>
        
        Add RenderEmbeddedObject, which derives from RenderPartObject, and is created for <object> and <embed>.
        Instances of RenderPartObject are now only allocated for iframes.
        
        Move object/embed-related code from RenderPartObject to RenderEmbeddedObject.

        * WebCore.xcodeproj/project.pbxproj:
        Add RenderEmbeddedObject.h/cpp
        
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::createRenderer): Create a RenderEmbeddedObject.
        (WebCore::HTMLEmbedElement::updateWidget): Use toRenderEmbeddedObject()

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::createRenderer): Make a RenderEmbeddedObject for the plugin-proxy case.
        (WebCore::HTMLMediaElement::finishParsingChildren): Use toRenderEmbeddedObject() in the plugin-proxy code.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::createRenderer): Make a RenderEmbeddedObject
        (WebCore::HTMLObjectElement::updateWidget): Use toRenderEmbeddedObject()

        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::addWidgetToUpdate):
        (WebCore::FrameView::removeWidgetToUpdate):
        (WebCore::FrameView::updateWidgets):
        Objects in the m_widgetUpdateSet are only ever RenderEmbeddedObjects.
        
        * rendering/RenderEmbeddedObject.cpp: Added.
        * rendering/RenderEmbeddedObject.h: Added.
        Most of the code moved from RenderPartObject.
        
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isEmbeddedObject): New method.

        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::RenderPart): Initialize m_hasFallbackContent here, rather than in the derived classes.
        * rendering/RenderPart.h: Comments.
        
        * rendering/RenderPartObject.h:
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::RenderPartObject): Clean up, code moved to base class, and removed object/embed-specific code.
        (WebCore::RenderPartObject::layout): Removed object/embed-specific code.

2010-01-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=33338
        Create a renderer for <object> and <embed>

        First part of this change: renderPartObject->updateWidget() is a no-op for iframe elements,
        so we don't need to call it here, and can thus remove the attach() override entirely.

        * html/HTMLIFrameElement.cpp:
        * html/HTMLIFrameElement.h:

2009-01-07  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Migrate to canvas-based text viewer / editor that scales.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/JavaScriptHighlighterScheme.js: Added.
        (WebInspector.JavaScriptHighlighterScheme):
        * inspector/front-end/KeyboardShortcut.js:
        * inspector/front-end/TextEditor.js: Added.
        (WebInspector.TextEditor):
        (WebInspector.TextSelectionModel):
        (WebInspector.TextCursor):
        * inspector/front-end/TextEditorHighlighter.js: Added.
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype.highlight):
        (WebInspector.TextEditorHighlighter.prototype._lex):
        * inspector/front-end/TextEditorModel.js: Added.
        (WebInspector.TextRange):
        (WebInspector.TextRange.prototype.clone):
        (WebInspector.TextEditorModel):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:

2010-01-07  Christian Sejersen  <christian.webkit@gmail.com>

        Reviewed by Darin Adler.

        document.title does not replace or remove space characters
        https://bugs.webkit.org/show_bug.cgi?id=27032

        Test: fast/dom/Document/document-title-get.html

        * dom/Document.cpp: 
        (WebCore::Document::Document): 
        Initialization of m_rawTitle
        (WebCore::canonicalizedTitle): 
        Moved from DocumentLoader.cpp with minor edits
        (WebCore::Document::updateTitle): 
        Ensures the title is canonicalized
        (WebCore::Document::setTitle): 
        Uses m_rawTitle instaed of m_title 
        (WebCore::Document::removeTitle): 
        Uses m_rawTitle instead of m_title
        
        * dom/Document.h: 
        Added m_rawTitle that stores the passed in title, m_title now stores the 
        canonicalized title
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setTitle): 
        The title passed in is now canonicalized in Document.cpp

2010-01-07  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Darin Adler.

        Allow leading/trailing space for CSS nth-*() and lang().
        https://bugs.webkit.org/show_bug.cgi?id=17248

        For pseudo-classes :nth-*() and :lang(), space must be allowed after '(' and before ')'.
        See the bug comments for why we don't allow space at other places.

        * css/CSSGrammar.y:

2010-01-07  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: contentEditable DIVs are not AX accessible
        https://bugs.webkit.org/show_bug.cgi?id=33325

        Test: accessibility/contenteditable-hidden-div.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::canSetValueAttribute):

2010-01-07  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Resolve merge conflict.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setContextDebugId):

2010-01-07  Adam Barth  <abarth@webkit.org>

        No review, rolling out r52847.
        http://trac.webkit.org/changeset/52847
        https://bugs.webkit.org/show_bug.cgi?id=33232

        Might have caused a perf regression.  I'm rolling this out to see if it
        heals the perf bot.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::~ScriptController):
        (WebCore::ScriptController::updateSecurityOrigin):
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        (WebCore::ScriptController::haveInterpreter):
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::updateDocument):
        * bindings/v8/ScriptController.h:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        (WebCore::V8DOMWrapper::convertDocumentToV8Object):
        (WebCore::V8DOMWrapper::convertNewNodeToV8Object):
        * bindings/v8/V8IsolatedContext.cpp:
        (WebCore::V8IsolatedContext::V8IsolatedContext):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::V8Proxy):
        (WebCore::V8Proxy::~V8Proxy):
        (WebCore::V8Proxy::handleOutOfMemory):
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        (WebCore::V8Proxy::setInjectedScriptContextDebugId):
        (WebCore::V8Proxy::clearForClose):
        (WebCore::V8Proxy::clearForNavigation):
        (WebCore::V8Proxy::context):
        (WebCore::V8Proxy::mainWorldContext):
        (WebCore::V8Proxy::currentContext):
        (WebCore::V8Proxy::setContextDebugId):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::windowShell):
        * bindings/v8/WorldContextHandle.cpp:
        (WebCore::WorldContextHandle::adjustedContext):

2010-01-07  Dan Bernstein  <mitz@apple.com>

        Build fix

        * WebCore.xcodeproj/project.pbxproj: Made TypesettingFeatures.h private.

2010-01-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Added Font::typesettingFeatures() and deployed it

        No change in funcitonality

        * WebCore.xcodeproj/project.pbxproj: Added TypesettingFeatures.h.
        * platform/graphics/Font.h:
        (WebCore::Font::typesettingFeatures): Added. Determines the typesetting
            features from the text redndering mode.
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::canUseGlyphCache): Use typesettingFeatures().
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/TypesettingFeatures.h: Added.
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        (WebCore::disableLigatures): Take TypesettingFeatures instead of
            TextRenderingMode.
        (WebCore::initializeATSUStyle): Ditto.
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersATSUI):
            Use typesettingFeatures().
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText):
            Ditto.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::getCFStringAttributes): Take
            TypesettingFeatures instead of TextRenderingMode.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Use TypesettingFeatures().

2010-01-07  Dimitri Glazkov  <dglazkov@chromium.org>

        No review, rolling out r52900.
        http://trac.webkit.org/changeset/52900
        https://bugs.webkit.org/show_bug.cgi?id=30055

        Broke over 30 SVG pixel tests.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):

2010-01-07  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Kenneth Rohde Christiansen.

        [Qt] The library version number of the first package release is 4.7.0.

        * WebCore.pro:

2010-01-07  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Allow the application to override online/offline network status
        https://bugs.webkit.org/show_bug.cgi?id=32684

        Added API to NetworkStateNotifier for forcing network status.

        * platform/network/NetworkStateNotifier.h:
        * platform/network/qt/NetworkStateNotifierPrivate.h:
        * platform/network/qt/NetworkStateNotifierQt.cpp:
        (WebCore::NetworkStateNotifierPrivate::NetworkStateNotifierPrivate):
        (WebCore::NetworkStateNotifierPrivate::onlineStateChanged):
        (WebCore::NetworkStateNotifierPrivate::networkAccessPermissionChanged):
        (WebCore::NetworkStateNotifier::updateState):
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):
        (WebCore::NetworkStateNotifier::setNetworkAccessAllowed):

2010-01-07  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Fix linkage against Qt mobility API bearer management module

        Use the documented .pro file syntax to link against the correct
        library and (more importantly) get the include paths correct.

        * WebCore.pro:

2010-01-07  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=33272
        'abort' event still fired as a progress event

        rdar://6710625
        Test media/video-error-abort.html doesn't work

        Test: http/tests/media/video-error-abort.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::scheduleEvent): Incorporate code from enqueueEvent.
        (WebCore::HTMLMediaElement::loadInternal): Fix 'abort' event firing logic missed
        in https://bugs.webkit.org/show_bug.cgi?id=30513. Change order of initialization 
        to match spec wording.
        * html/HTMLMediaElement.h: Remove enqueueEvent prototype.

2010-01-07  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Antti Koivisto.

        Wrong state and TouchLists in TouchEvents
        https://bugs.webkit.org/show_bug.cgi?id=32878

        Touch events changed to match the API and semantics of iPhone and
        Android. Each new touch point press dispatches a touchstart event with
        the pressed touch point(s) in the changedTouches list, and a release
        dispatches a touchend event with the released touch point(s) in
        changedTouches. Moved points dispatch a touchmove event, with the moved
        points in changedTouches. Old behaviour emitted only one touchstart when
        the first point was pressed and one touchend when the last point was
        released, and any events in between were touchmoves. New presses or
        releases could only be detected by comparing the lists touches and
        changedTouches.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent):
        * page/EventHandler.h:

2010-01-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Maciej Stachowiak.

        Remove COM code generation stuff.
        https://bugs.webkit.org/show_bug.cgi?id=32854

        Remove the followings:
        - CodeGeenratorCOM.pm, COM code generator,
        - "#if !defined(LANGUAGE_COM) || !LANGUAGE_COM" in IDL files, and
        - UUID attributes in IDL files.

        * bindings/scripts/CodeGeneratorCOM.pm: Removed.
        * css/CSSCharsetRule.idl:
        * css/CSSFontFaceRule.idl:
        * css/CSSImportRule.idl:
        * css/CSSMediaRule.idl:
        * css/CSSPageRule.idl:
        * css/CSSPrimitiveValue.idl:
        * css/CSSRule.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleRule.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSUnknownRule.idl:
        * css/CSSValue.idl:
        * css/CSSValueList.idl:
        * css/Counter.idl:
        * css/MediaList.idl:
        * css/RGBColor.idl:
        * css/Rect.idl:
        * css/StyleSheet.idl:
        * css/StyleSheetList.idl:
        * css/WebKitCSSKeyframeRule.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * css/WebKitCSSTransformValue.idl:
        * dom/Attr.idl:
        * dom/CDATASection.idl:
        * dom/CharacterData.idl:
        * dom/Comment.idl:
        * dom/DOMImplementation.idl:
        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/DocumentType.idl:
        * dom/Element.idl:
        * dom/Entity.idl:
        * dom/EntityReference.idl:
        * dom/Event.idl:
        * dom/EventListener.idl:
        * dom/EventTarget.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeList.idl:
        * dom/Notation.idl:
        * dom/ProcessingInstruction.idl:
        * dom/Text.idl:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLBRElement.idl:
        * html/HTMLBaseElement.idl:
        * html/HTMLBaseFontElement.idl:
        * html/HTMLBlockquoteElement.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLCollection.idl:
        * html/HTMLDListElement.idl:
        * html/HTMLDirectoryElement.idl:
        * html/HTMLDivElement.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFieldSetElement.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/HTMLMarqueeElement.idl:
        * html/HTMLMenuElement.idl:
        * html/HTMLMetaElement.idl:
        * html/HTMLModElement.idl:
        * html/HTMLOListElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptGroupElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLParagraphElement.idl:
        * html/HTMLParamElement.idl:
        * html/HTMLPreElement.idl:
        * html/HTMLQuoteElement.idl:
        * html/HTMLScriptElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLStyleElement.idl:
        * html/HTMLTableCaptionElement.idl:
        * html/HTMLTableCellElement.idl:
        * html/HTMLTableColElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLTitleElement.idl:
        * html/HTMLUListElement.idl:

2010-01-07  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Adds the ability to increase the delay used when scheduling layout.
        https://bugs.webkit.org/show_bug.cgi?id=32875

        No new tests possible.

        * dom/Document.cpp: Modified.
        (WebCore::Document::Document): Modified. Initializes extra layout delay to zero.
        (WebCore::Document::minimumLayoutDelay): Modified. Adds extra layout delay when calculating minimum layout delay.
        * dom/Document.h: Modified.
        (WebCore::Document::setExtraLayoutDelay): Added. Sets the extra layout delay.

2010-01-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Some IDL files lack "," separators for extended attributes.
        https://bugs.webkit.org/show_bug.cgi?id=33190

        To find such mistakes, IDLParser.pm rejects whitespace characters in
        extended attribute names.

        * bindings/scripts/IDLParser.pm:
          parseExtendedAttributes rejects whitespace in a name.
        * css/WebKitCSSTransformValue.idl: Add missing ",".
        * dom/EventTarget.idl: ditto.

2010-01-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Barth.

        Fix an issue that CodeGeneratorV8.pm doesnt handle HasIndexGetter of
        WebKitCSSTransformValue.idl correctly.
        https://bugs.webkit.org/show_bug.cgi?id=33193

        CodeGeneratorV8.pm doesn't handle inheritance very well and it
        tried to refer v8WebKitCSSTransformValueIndexedPropertyGetter(),
        which does not exist. Because WebKitCSSTransformValue inherits
        CSSValueList and CSSValueList already has HadIndexGetter, we don't
        need to do anything for WebKitCSSTransformValue about HasIndexGetter.

        * bindings/scripts/CodeGeneratorV8.pm:
          Reset $hasGetter for WebKitCSSTransformValue.

2010-01-07  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Do not return strings whose handles are in near death state (that means
        they might be GCed) or just empty.
        https://bugs.webkit.org/show_bug.cgi?id=31180

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8ExternalString):

2010-01-06  MORITA Hajime  <morrita@gmail.com>

        Reviewed by Nikolas Zimmermann.

        SVG background color on selected text goes wrong when text has
        gradient stroke.
        https://bugs.webkit.org/show_bug.cgi?id=33069

        Introduced SVGTextPaintSubphase like as PaintPhase on html painting,
        and paint background and foreground in separate subphase.
        
        Test: svg/text/selection-background-color.xhtml
        
        * rendering/SVGCharacterLayoutInfo.h:
        (WebCore::SVGTextChunkWalker::SVGTextChunkWalker):
        Added m_setupBackgroundCallback, m_setupForegroundCallback
        (WebCore::SVGTextChunkWalker::setupBackground):
        (WebCore::SVGTextChunkWalker::setupForeground):
        Added.
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintCharacters):
        pass SVGTextPaintInfo instead of SVGPaintServer
        * rendering/SVGInlineTextBox.h:
        (WebCore::SVGTextPaintSubphase):
        (WebCore::SVGTextPaintInfo::SVGTextPaintInfo):
        Added.
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::walkTextChunks):
        Invoke setupBackground() and setupForeground()
        (WebCore::SVGRootInlineBoxPaintWalker::chunkSetupBackgroundCallback):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkSetupForegroundCallback):
        (WebCore::SVGRootInlineBoxPaintWalker::activePaintServer):        
        Added.
        (WebCore::SVGRootInlineBoxPaintWalker::chunkSetupFillCallback):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkSetupStrokeCallback):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkPortionCallback):
        (WebCore::SVGRootInlineBox::paint):
        
2010-01-06  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Eric Seidel.

        Make windowsKeyCodeForKeyEvent() return correct key code for
        numeric-pad arrow keys.
        https://bugs.webkit.org/show_bug.cgi?id=33250

        Test: fast/events/keydown-numpad-keys.html

        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2009-10-18 Patrick Gansterer <paroga@paroga.com>

        Reviewed by Dirk Schulze.

        Improve DOM performance in large SVG files.
        Check the dirty area before painting a path, which prevents unnecessary
        clipping and changes to the GraphicsContext.
        https://bugs.webkit.org/show_bug.cgi?id=30055

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):

2010-01-06  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Use a static HashMap for HTMLElement::tagPriority().
        https://bugs.webkit.org/show_bug.cgi?id=33269

        The prior code compares AtomicStringImpl pointers 18 times at
        worst. This change avoids it.

        No new tests because this is just a refactoring.

        * html/HTMLElement.cpp:
        (WebCore::Empty1IntHashTraits): A HashTraits to return 1 as the empty value.
        (WebCore::initializeTagPriorityMap): Initialization of a static HashMap.
        (WebCore::HTMLElement::tagPriority): Use the static HashMap created by initializeTagPriorityMap().
        * html/HTMLElement.h:
        (WebCore::HTMLElement::HTMLElement): Add an assertion about non-null localName().

2010-01-06  Mike Belshe  <mike@belshe.com>

        Add a flag to the ResourceResponse for tracking if a request was
        fetched via SPDY.  This is plumbed through so that we can inform
        a webpage via JavaScript if it was fecthed via the experimental
        SPDY protocol.

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

        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::wasFetchedViaSpdy):
        (WebCore::ResourceResponse::setWasFetchedViaSpdy):

2010-01-06  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Adam Treat.

        [Qt] RenderTheme: Missing support for native sliders

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

        Implement painting of native slider controls in RenderTheme
        and unskip a couple of layout tests that are passing after
        this change.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintSliderTrack):
        (WebCore::RenderThemeQt::adjustSliderTrackStyle):
        (WebCore::RenderThemeQt::paintSliderThumb):
        (WebCore::RenderThemeQt::adjustSliderThumbStyle):
        (WebCore::RenderThemeQt::supportsFocus):
        (WebCore::RenderThemeQt::adjustSliderThumbSize):
        * platform/qt/RenderThemeQt.h:

2010-01-06  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Darin Adler.

        Adjust incorrect comments after r40534.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::markActiveObjectsForContext):

2010-01-06  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed build fix for chromium.
        Add "bool V8WorkerContext::WebSocketEnabled()"

        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::V8WorkerContext::WebSocketEnabled):

2010-01-06  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed build fix.
        remove wrong assertion

        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::Bridge):

2010-01-06  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        Add WebSocket feature in Worker
        https://bugs.webkit.org/show_bug.cgi?id=32214

        Introduce ThreadableWebSocketChannel interface and add
        WorkerThreadableWebSocketChannel for Worker.
        WorkerThreadableWebSocketChannel uses WebSocketChannel in the
        main thread, which is managed by Peer and communicated via Bridge.

        Test: websocket/tests/workers/worker-simple.html

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebSocketConstructor.h:
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::webSocket):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::convertEventTargetToV8Object):
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        (WebCore::V8Custom::v8WebSocketConstructorCallback):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        * platform/CrossThreadCopier.cpp:
        (WebCore::::copy):
        * platform/CrossThreadCopier.h:
        (WebCore::):
        * websockets/ThreadableWebSocketChannel.cpp: Added.
        * websockets/ThreadableWebSocketChannel.h: Added.
        * websockets/ThreadableWebSocketChannelClientWrapper.h: Added.
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        (WebCore::WebSocket::didReceiveMessage):
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.h:
        (WebCore::WebSocketChannel::refThreadableWebSocketChannel):
        (WebCore::WebSocketChannel::derefThreadableWebSocketChannel):
        * websockets/WebSocketChannelClient.h:
        * websockets/WebSocketHandshake.h:
        * websockets/WorkerThreadableWebSocketChannel.cpp: Added.
        * websockets/WorkerThreadableWebSocketChannel.h: Added.
        * workers/WorkerContext.idl:

2010-01-06  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Reviewed by Darin Adler.

        Modified EventSource event-stream parser to support a single CR as line ending.
        https://bugs.webkit.org/show_bug.cgi?id=33207

        * page/EventSource.cpp:
        (WebCore::EventSource::EventSource):
        (WebCore::EventSource::parseEventStream):
        * page/EventSource.h:

2010-01-06  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=30883
        [Gtk] Implement AtkText for HTML elements which contain text

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getInterfaceMaskFromObject):
        (getPangoLayoutForAtk):
        (webkit_accessible_text_get_text):
        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (AccessibilityObject::accessibilityPlatformIncludesObject):

2010-01-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7488126> With text-rendering: optimizelegibility, sometimes lines run too long
        https://bugs.webkit.org/show_bug.cgi?id=32794

        Test: platform/mac/fast/text/line-breaking-with-kerning.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak): When kerning is enabled, include
        the trailing space when measuring a word, then subtract its width. This
        accounts for kerning between the last glyph of the word and the following space.

2010-01-06  Kevin Decker  <kdecker@apple.com>

        Reviewed by Simon Fraser

        Second step of:
        <rdar://problem/6398111> Integrate hardware layers with out-of-process plug-ins layer hosting mechanism

        * Plugins/Hosted/WebHostedNetscapePluginView.h: Expose the CALayer of the plugin by adding -pluginLayer method.
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView pluginLayer]): Added.
        * Plugins/WebNetscapePluginView.h: Expose the CALayer of the plugin by adding -pluginLayer method.
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView pluginLayer]): Added.

2010-01-06  Adam Barth  <abarth@webkit.org>

        No review, rolling out r52877.
        http://trac.webkit.org/changeset/52877
        https://bugs.webkit.org/show_bug.cgi?id=33243

        I screwed up landing this patch and only partially applied the patch I
        was trying to land.

        * bindings/ScriptControllerBase.cpp:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeScriptInWorld):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::~ScriptController):
        (WebCore::ScriptController::updateSecurityOrigin):
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        (WebCore::ScriptController::haveInterpreter):
        (WebCore::ScriptController::mainWorldWindowShell):
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::clearForClose):
        (WebCore::ScriptController::destroyWindowShell):
        (WebCore::ScriptController::updateDocument):
        * bindings/v8/ScriptController.h:
        (WebCore::ScriptController::proxy):
        (WebCore::ScriptController::windowShell):
        (WebCore::ScriptController::existingWindowShell):
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::create):
        (WebCore::V8DOMWindowShell::V8DOMWindowShell):
        (WebCore::V8DOMWindowShell::initContextIfNeeded):

2010-01-06  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Rolling back in a change I should not have rolled out.

        The original commit http://trac.webkit.org/changeset/52862
        was rolled out again in http://trac.webkit.org/changeset/52871
        but I now believe that rollout to be in error.
        My sincerest apologies for the churn.

        Fix the bug in previous commit: we shouldn't finish
        decoding if "sizeOnly" is true.
        https://bugs.webkit.org/show_bug.cgi?id=33258

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::decode):

2010-01-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [v8] Let ScriptController have more than one windowShell
        https://bugs.webkit.org/show_bug.cgi?id=33243

        This patch lets ScriptController have more than one windowShell.  We're
        currently only using one of them (for the main world), but this patch
        lets us use other ones for isolated worlds soon.

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeScriptInWorld):
        * bindings/js/ScriptController.cpp:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::createWorld):
        (WebCore::ScriptController::initScript):
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::~ScriptController):
        (WebCore::ScriptController::updateSecurityOrigin):
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::mainWorldWindowShell):
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::clearForClose):
        (WebCore::ScriptController::destroyWindowShell):
        (WebCore::ScriptController::updateDocument):
        * bindings/v8/ScriptController.h:
        (WebCore::ScriptController::windowShell):
        (WebCore::ScriptController::existingWindowShell):
        (WebCore::ScriptController::globalObject):
        (WebCore::ScriptController::proxy):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::create):
        (WebCore::V8DOMWindowShell::V8DOMWindowShell):
        (WebCore::V8DOMWindowShell::initContextIfNeeded):
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        (WebCore::V8DOMWrapper::convertNewNodeToV8Object):

2010-01-06  Mark Rowe  <mrowe@apple.com>

        Fix the Mac build.

        * WebCore.base.exp: Export symbols WebKit would like to use.
        * plugins/PluginWidget.h:
        (WebCore::PluginWidget::PluginWidget): Redeclare a constructor.

2010-01-06  Kevin Decker  <kdecker@apple.com>

        Reviewed by Eric Carlson.
        
        First step toward:
        <rdar://problem/6398111> Integrate hardware layers with out-of-process plug-ins layer hosting mechanism
        
        Small refactoring moving the PluginWidget class from WebKit to WebCore.          
        * WebCore.xcodeproj/project.pbxproj: Added new source files and a "mac" group; exposes PluginWidget.h as a "Private" role
        * platform/Widget.h: Added isPluginWidget(). 
        (WebCore::Widget::isPluginWidget):
        * plugins/PluginWidget.h: Added.
        (WebCore::PluginWidget::isPluginWidget): Added as an interim solution until Mac plug-ins inheirt from PluginView.
        * plugins/mac/PluginWidgetMac.mm: Added.
        (WebCore::PluginWidget::invalidateRect): Added. Extracted from the old WebKit/FrameLoaderClientMac version of PluginWidget
        
2010-01-06  Eric Seidel  <eric@webkit.org>

        No review, rolling out r52862.
        http://trac.webkit.org/changeset/52862
        https://bugs.webkit.org/show_bug.cgi?id=33258

        Caused svg/W3C-SVG-1.1/linking-a-01-b.svg to crash on the
        Leopard Release builder.

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::decode):

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

        Not reviewed. Revert the part of my last commit touching Base.xcconfig, was not meant to be commited.

        * Configurations/Base.xcconfig:

2010-01-05  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Generate header declarations for V8 binding security checks
        and delete V8CustomBinding.cpp

        * Android.v8bindings.mk: Removed V8CustomBinding.cpp.
        * WebCore.gypi: Removed V8CustomBinding.cpp.
        * bindings/scripts/CodeGeneratorV8.pm: Generate security check declarations.
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::getTargetFrame): Moved from V8CustomBinding.cpp.
        (WebCore::reportUnsafeJavaScriptAccess):
        (WebCore::V8DOMWindowShell::createNewContext):
        (WebCore::V8DOMWindowShell::setLocation): Moved from V8CustomBinding.cpp.
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::downcastSVGPathSeg): Moved from V8CustomBinding.cpp.
        (WebCore::V8DOMWrapper::convertSVGObjectWithContextToV8Object):
        (WebCore::V8DOMWrapper::getTemplate):
        * bindings/v8/custom/V8CustomBinding.cpp: Removed.
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::locationAccessorSetter):
        (WebCore::V8DOMWindow::namedSecurityCheck):
        (WebCore::V8DOMWindow::indexedSecurityCheck):
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        (WebCore::V8Document::locationAccessorSetter):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::indexedSecurityCheck):
        (WebCore::V8History::namedSecurityCheck):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::indexedSecurityCheck):
        (WebCore::V8Location::namedSecurityCheck):

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

        Reviewed by Dirk Schulze.

        Marker code is buggy: referencePoint translation is off
        https://bugs.webkit.org/show_bug.cgi?id=33012

        Rewrite marker code, as it had many issues:
        - Correct refX/refY handling (covered by new marker-referencePoint.svg test)
        - Calculate marker bounds on layout time, instead of paint time, to deliver correct repaint rects
        - Cleanup RenderPath code, which was cluttered by marker stuff (outlay in SVGMarkerLayoutInfo)
        - Fix SVGResource assuming that there is only one resource per resource type per element. Markers
          can have three different resources of the same type (three markers, start/mid/end markers)

        Filed bug 33115 (PathElementAddQuadCurveToPoint not handled for <marker>), which was just a TODO in the code before.

        Fixes all svg/custom/marker*.svg tests, that use dynamic updates (propagation failed before).
        Test: svg/custom/marker-referencePoint.svg
              svg/custom/marker-opacity.svg
              svg/custom/marker-strokeWidth-changes.svg

        * Android.mk: Add SVGMarkerData.h / SVGMarkerLayoutInfo.(cpp,h) to build.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * page/FrameView.cpp: Notify RenderSVGRoot children about viewport size changes, just like it's handled for <body> in HTML.
        (WebCore::FrameView::layout): This is important, as marker bounding boxes may depend on the current viewport size through relative coordinates used in <svg>.
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::markerBoundingBox): Calculates and caches marker boundaries in the layout() phase.
        (WebCore::RenderPath::repaintRectInLocalCoordinates): Use the cached marker bounding box during paint() time.
        (WebCore::RenderPath::setPath): Clear marker boundaries upon path changes.
        (WebCore::RenderPath::paint): Use SVGMarkerLayoutInfo::drawMarkers() instead of the local drawMarkersIfNeeded() function, which is gone now.
        (WebCore::RenderPath::calculateMarkerBoundsIfNeeded): Utilized by markerBoundingBox() to request SVGResourceMarker objects and calculate their boundaries.
        * rendering/RenderPath.h: Store SVGMarkerLayoutInfo objects, and rename m_markerBounds to m_cachedLocalMarkerBBox for consistency.
        (WebCore::RenderPath::path): Inline this accessor.
        * rendering/RenderSVGContainer.h: Make paint() public (to be used from SVGResourceMarker), all other methods protected (to be used from RenderSVGViewportContainer).
        * rendering/RenderSVGViewportContainer.cpp: Remove useless paint() override, as the comment in the code indicated.
        (WebCore::RenderSVGViewportContainer::markerBoundaries): Maps the marker contents repaintRectInLocalCoordinates() into the final coordinate system (see code).
        (WebCore::RenderSVGViewportContainer::markerContentTransformation): Add marker-specific helper method, allowing to make viewportTransform() private again.
        * rendering/RenderSVGViewportContainer.h: Marking viewportTransform() private, it's never meant to be used outside this renderer.
        * rendering/SVGMarkerData.h: Added. Refactored from existing RenderPath code, preserving original copyrights.
        (WebCore::SVGMarkerData::): Helper struct for SVGMarkerLayoutInfo.
        (WebCore::SVGMarkerData::origin): Holds the final computed destination of a marker.
        (WebCore::SVGMarkerData::marker): Holds a pointer to the associated SVGResourceMarker object, which we're aiming to layout.
        (WebCore::SVGMarkerData::currentAngle): Calculates the current angle for a certain marker type (start/mid/end) based upon the computed inslope/outslope values.
        (WebCore::SVGMarkerData::updateTypeAndMarker): Helper method.
        (WebCore::SVGMarkerData::updateOutslope): Ditto.
        (WebCore::SVGMarkerData::updateMarkerDataForPathElement): Does the actual inslope/outslope calculation.
        (WebCore::SVGMarkerData::updateInslope): Helper method.
        * rendering/SVGMarkerLayoutInfo.cpp: Added. New approach to build marker layout info, this time correct during layout() time instead of paint() time.
        (WebCore::SVGMarkerLayoutInfo::SVGMarkerLayoutInfo):
        (WebCore::SVGMarkerLayoutInfo::~SVGMarkerLayoutInfo):
        (WebCore::processStartAndMidMarkers): Static helper method used to visit each path element in order to calculate inslopes/outslopes (-> orientation angles)
        (WebCore::SVGMarkerLayoutInfo::calculateBoundaries): Build list of MarkerLayout objects, used to query boundaries, and to paint markers during drawMarkers().
        (WebCore::SVGMarkerLayoutInfo::drawMarkers): Cheap method walking existing MarkerLayout vector, drawing the individual RenderSVGViewportContainer of the markers.
        (WebCore::SVGMarkerLayoutInfo::addLayoutedMarker): Helper method.
        * rendering/SVGMarkerLayoutInfo.h: Added.
        (WebCore::MarkerLayout::MarkerLayout): Helper struct storing a pair of SVGResourceMarker* and a TranformationMatrix.
        (WebCore::SVGMarkerLayoutInfo::markerData): Public helper methods returning references to private member variables, used from processStartAndMidMarkers.
        (WebCore::SVGMarkerLayoutInfo::midMarker): Ditto.
        (WebCore::SVGMarkerLayoutInfo::elementIndex): Ditto.
        * svg/SVGMarkerElement.cpp: Adopt to name change: setRef() -> setReferencePoint(). setMarker() -> setRenderer()
        (WebCore::SVGMarkerElement::~SVGMarkerElement): Remove obsolete detach() hack, fixed by SVGUseElement changes.
        (WebCore::SVGMarkerElement::canvasResource): Add ASSERT(renderer()) to clarify that canvasResource() is only meant to used after renderer creation.
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::~SVGSVGElement): Remove obsolete detach() hack, fixed by SVGUseElement changes.
        * svg/SVGUseElement.cpp: Rework buildPendingResource() to remove SVGSVGElement/SVGMarkerElement detach() hacks (called manually from destructors), see below.
        (WebCore::SVGUseElement::buildPendingResource): Always detach() the shadow tree root element, before destructing it - this caused the regression with this patch before.
        * svg/graphics/SVGResource.cpp: Instead of maintaining a global hashmap between SVGStyledElements and an array of possible SVGResources, use a HashSet of SVGResources
                                        and directly scan the already existing list of clients for a certain SVGResource. This wrong approach has been introduced over two years
                                        ago, making the assumption that there's only one resource type per element. Though markers can provide three resources of the same type
                                        per element (all SVGResourceMarker objects, but in different rules: start/mid/end marker). That information is only available while painting.
        (WebCore::resourceSet): Add global static HashSet<SVGResource*>.
        (WebCore::SVGResource::SVGResource): Add us to the resourceSet.
        (WebCore::SVGResource::~SVGResource): Remove us from resourceSet.
        (WebCore::SVGResource::removeClient): Traverse all SVGResource clients and remove the passed SVGStyledElement from the client list (invoked by SVGStyledElement destructor).
        (WebCore::SVGResource::addClient): Remove the offending part of the old approach, making the wrong assumption regarding resource types.
        * svg/graphics/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::SVGResourceMarker):
        (WebCore::SVGResourceMarker::markerTransformation): Create TransformationMatrix in the local marker content (RenderSVGViewportContainer) coordinate system, to position a marker.
        (WebCore::SVGResourceMarker::draw): Simplify marker drawing a lot: used the passing TransformationMatrix (cached in SVGMarkerLayoutInfo) to draw the marker content renderer.
        (WebCore::SVGResourceMarker::externalRepresentation): Adopt to refX/refY -> referencePoint changes.
        * svg/graphics/SVGResourceMarker.h: Store a FloatPoint m_referecePoint instead of two refX/refY float values.
        (WebCore::SVGResourceMarker::setRenderer): Renamed from setMarker().
        (WebCore::SVGResourceMarker::setReferencePoint): Renamed from setRef().
        (WebCore::SVGResourceMarker::referencePoint): New accessor replacing refX() / refY().

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

        Reviewed by Nikolas Zimmermann.

        SVG feImage support
        https://bugs.webkit.org/show_bug.cgi?id=31905

        This implements the SVG Filter effect feImage with support of fragment urls.
        It also includes a bug fix for feComposite. feComposite didn't cover values
        bigger than 255 correctly on composite oeprator arithmetic.

        Tests: There are already many feImage tests in trunk. They just needed updated
               pixel test results.
               The feComposite bug is covered by svg/W3C-SVG-1.1/filters-composite-02-b.svg
               and depends on feImage.

        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::arithmetic):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/RenderSVGImage.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::requestImageResource):
        (WebCore::SVGFEImageElement::parseMappedAttribute):
        (WebCore::SVGFEImageElement::notifyFinished):
        (WebCore::SVGFEImageElement::build):
        * svg/SVGFEImageElement.h:
        * svg/SVGFEImageElement.idl:
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::transformRect):
        * svg/SVGPreserveAspectRatio.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::FEImage):
        (WebCore::FEImage::create):
        (WebCore::FEImage::apply):
        * svg/graphics/filters/SVGFEImage.h:

2010-01-06  Yong Li  <yoli@rim.com>

        Reviewed by Darin Adler.

        Fix the bug in previous commit: we shouldn't finish
        decoding if "sizeOnly" is true.
        https://bugs.webkit.org/show_bug.cgi?id=33258

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::decode):

2010-01-06  Eric Seidel  <eric@webkit.org>

        No review, rolling out r52855.
        http://trac.webkit.org/changeset/52855
        https://bugs.webkit.org/show_bug.cgi?id=33222

        Caused 6 layout tests to fail on Mac

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::substituteResourceDeliveryTimerFired):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        * loader/ResourceLoader.cpp:
        * loader/ResourceLoader.h:

2010-01-06  Yong Li  <yoli@rim.com>

        Reviewed by Darin Adler.

        Let ReourceLoader deliver segmented data
        when loading resource from a SharedBuffer object.
        https://bugs.webkit.org/show_bug.cgi?id=33222

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::substituteResourceDeliveryTimerFired):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveData):
        * loader/ResourceLoader.h:

2010-01-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed trivial Qt build fix.

        Prefix the phonon includes with phonon/ to avoid conflicts with the S60
        audio routing API ( http://wiki.forum.nokia.com/index.php/Audio_Routing_API ).

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:

2010-01-05  Darin Fisher  <darin@chromium.org>

        Reviewed by Adam Barth.

        Moving v8::HandleScope up above declaration of v8::Local to fix a
        Chromium startup crash.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setContextDebugId):

2010-01-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [v8] Move V8DOMWindowShell to ScriptController
        https://bugs.webkit.org/show_bug.cgi?id=33232

        This patch moves V8DOMWindow shell to ScriptController, where the
        window shells live in JSC land.  The next step will be to allow for
        more than one window shell per script controller.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::~ScriptController):
        (WebCore::ScriptController::updateSecurityOrigin):
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        (WebCore::ScriptController::haveInterpreter):
        (WebCore::ScriptController::mainWorldWindowShell):
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::clearForClose):
        (WebCore::ScriptController::destroyWindowShell):
        (WebCore::ScriptController::updateDocument):
        * bindings/v8/ScriptController.h:
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::~V8DOMWindowShell):
        * bindings/v8/V8DOMWindowShell.h:
        (WebCore::V8DOMWindowShell::localHandleForContext):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        (WebCore::V8DOMWrapper::convertDocumentToV8Object):
        (WebCore::V8DOMWrapper::convertNewNodeToV8Object):
        * bindings/v8/V8IsolatedContext.cpp:
        (WebCore::V8IsolatedContext::V8IsolatedContext):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::V8Proxy):
        (WebCore::V8Proxy::~V8Proxy):
        (WebCore::V8Proxy::handleOutOfMemory):
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        (WebCore::V8Proxy::setInjectedScriptContextDebugId):
        (WebCore::V8Proxy::context):
        (WebCore::V8Proxy::mainWorldContext):
        (WebCore::V8Proxy::currentContext):
        (WebCore::V8Proxy::setContextDebugId):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/WorldContextHandle.cpp:
        (WebCore::WorldContextHandle::adjustedContext):

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

        Reviewed by Maciej Stachowiak.

        Implement HTML5 <header> and <footer> elements.
        https://bugs.webkit.org/show_bug.cgi?id=32943

        <header> and <footer> should behave the same as <nav>, <section>,
        <article>, and <aside>. The HTML parser doesn't need to restrict
        the nesting of header/footer elements.

        Tests: fast/html/footer-element.html
               fast/html/header-element.html

        * css/html.css: Add header/footer as block elements.
        * editing/htmlediting.cpp:
        (WebCore::validBlockTag): Add headerTag and footerTag.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::tagPriority): Returns 5 for headerTag and footerTag.
        (WebCore::blockTagList): Add headerTag and footerTag.
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError): Rename isHeaderTag() to isHeadingTag()
        (WebCore::HTMLParser::getNode): Add headerTag and footerTag.
        (WebCore::HTMLParser::isHeadingTag): Renamed from isHeaderTag().
        * html/HTMLParser.h:
          - Rename isHeaderTag() to isHeadingTag()
          - Remove non-existing popNestedHeaderTag().
        * html/HTMLTagNames.in: Add header and footer.

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

        Reviewed by Dan Bernstein.

        CDATA sections are merged into Text nodes when normalize() is used
        https://bugs.webkit.org/show_bug.cgi?id=33191

        Test: fast/dom/Node/normalize-with-cdata.html

        * dom/Node.cpp:
        (WebCore::Node::normalize): Use nodeType instead of isTextNode.

2010-01-05  James Robinson  <jamesr@google.com>

        Reviewed by Eric Seidel.

        Typing in Google Wave repaints the whole screen
        https://bugs.webkit.org/show_bug.cgi?id=32295

        Marks a RenderBlock without block children for layout and painting when it has no line boxes only if it has inline immediate children.
        The existing logic uses the existence of line boxes as a dirty flag to indicate that line boxes need to be regenerated.  This heuristic
        fails when the RenderBlock does not have any in-flow children at all, causing the RenderBlock to get unnecessarily marked for layout and
        painting.  This is particularly bad for common scrollbar manipulation tricks like putting one positioned div inside another - this
        structure caused the entire outer div's bounds to get scheduled for a paint whenever there was any mutation of any descendant.

        Test: LayoutTests/fast/repaint/block-no-inline-children.html (only shows up in pixel tests)

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

2010-01-05  James Robinson  <jamesr@chromium.org>

        Reviewed by David Hyatt.

        Cleans up line box clearing when a RenderBlock loses its last child.
        https://bugs.webkit.org/show_bug.cgi?id=33228

        The 'fullLayout' flag in RenderBlock::layoutInlineChildren() is pretty vague, hopefully this will be easier for the next person to figure out.


        No new tests.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

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

        Reviewed by Pavel Feldman.

        Provide the "documentURL" property for documents and frame owner elements

        This is necessary to determine owner document URLs for nodes (all nodes have
        the top-level document set as ownerDocument).
        https://bugs.webkit.org/show_bug.cgi?id=33025

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):

2010-01-05  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Public GIF decoder should stop decoding when allocation fails
        https://bugs.webkit.org/show_bug.cgi?id=33231

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::haveDecodedRow):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::output_row):
        (GIFImageReader::do_lzw):
        (GIFImageReader::read):
        * platform/image-decoders/gif/GIFImageReader.h:

2010-01-05  Yong Li  <yoli@rim.com>

        Reviewed by Darin Adler.

        Make PNG image decoder work with segmented SharedBuffer
        https://bugs.webkit.org/show_bug.cgi?id=33213

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::ImageDecoder):
        (WebCore::ImageDecoder::isAllDataReceived):
        (WebCore::ImageDecoder::setData):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::PNGImageReader):
        (WebCore::PNGImageReader::close):
        (WebCore::PNGImageReader::currentBufferSize):
        (WebCore::PNGImageReader::setComplete):
        (WebCore::PNGImageReader::decode):
        (WebCore::PNGImageDecoder::decode):
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::pngComplete):

2010-01-05  Adam Barth  <abarth@webkit.org>

        Rubber stamped by Dimitri Glazkov.

        Fix namespace indent for ScriptController.

        * bindings/v8/ScriptController.h:
        (WebCore::ScriptController::proxy):
        (WebCore::ScriptController::windowShell):
        (WebCore::ScriptController::existingWindowShell):
        (WebCore::ScriptController::xssAuditor):
        (WebCore::ScriptController::setProcessingTimerCallback):
        (WebCore::ScriptController::setPaused):
        (WebCore::ScriptController::isPaused):
        (WebCore::ScriptController::sourceURL):
        (WebCore::ScriptController::evaluateInWorld):

2010-01-05  Rachel Petterson  <rlp@google.com>

        Reviewed by Simon Fraser.

        Implement most cases of texImage2D and texSubImage2D
        https://bugs.webkit.org/show_bug.cgi?id=31562
        
        This fix is with Chris Marrin  <cmarrin@apple.com>.
        Also bug: https://bugs.webkit.org/show_bug.cgi?id=31493

        From Chris:
        This implements all cases except HTMLVideoElement. It changes
        the bindings to accept all parameter forms of the call. Then
        it plumbs the calls through WebGLRenderingContext down to
        GraphicsContext3D for the actual implementation.

        From Rachel:
        This implements texImage2D for chromium. It also implements the V8
        bindings for texSubImage2D and updates the V8 bindings for texImage2D.

        Tests: fast/canvas/webgl/texImage2DImageDataTest.html
                  fast/canvas/webgl/texImageTest.html

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::texImage2D):
        (WebCore::JSWebGLRenderingContext::texSubImage2D):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::imageToTexture):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::texSubImage2D):

2010-01-04  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Tim Hatcher.

        Part of <https://bugs.webkit.org/show_bug.cgi?id=32568>.
        Web Inspector: Context Menus should be used in more places.
        
        Add context menus to handle the interaction with breakpoints in the Source Frame. Currently
        we use left click to add/disable/remove breakpoints, and left click to edit (for conditional
        breakpoints), but this is hard to discover and behaves differently than Xcode.
        
        Change the behavior to be more like Xcode, left click adds a breakpoint if there isn't one, and
        removes it if there is one.
        
        On the context menu, if there is no breakpoint there, we have Add Breakpoint, and Add Conditional
        Breakpoint. If there is a breakpoint there, we add entries for Edit Breakpoint (edit
        the condition), Remove Breakpoint, and Enable/Disable Breakpoint (based on the current state).

        * English.lproj/localizedStrings.js: Added localized context menu entries.
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._documentContextMenu.addAndEditBreakpoint):
        (WebInspector.SourceFrame.prototype._documentContextMenu): Added context menu entries and handlers.
        (WebInspector.SourceFrame.prototype._documentMouseDown): Changed left click behavior (Add -> Remove).

2010-01-05  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Eric Seidel.

        AX: need a way to get the progress of a webpage load
        https://bugs.webkit.org/show_bug.cgi?id=33221

        Test: platform/mac/accessibility/estimated-progress.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::estimatedLoadingProgress):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::estimatedLoadingProgress):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2010-01-05  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Drag & drop layout tests fail even when run manually
        https://bugs.webkit.org/show_bug.cgi?id=33055

        No new tests. Fix 3 layout tests when run manually.
        fast/events/drag-and-drop.html
        fast/events/drag-and-drop-dataTransfer-types-nocrash.html
        fast/events/drag-and-drop-fire-drag-dragover.html
        Running these tests in DRT will be fixed in 31332.

        * page/qt/DragControllerQt.cpp:
        (WebCore::DragController::cleanupAfterSystemDrag):
        Cleanup the drag operation if it failed to complete,
        Otherwise, new drag operations will not be possible.

2010-01-05  Gustavo Noronha Silva <gns@gnome.org>

        Reviewed by Xan Lopez.

        Based on idea and original patch by Evan Martin.

        Remove libWebCore intermediate library, to improve link time.

        [GTK] Build time must be reduced
        https://bugs.webkit.org/show_bug.cgi?id=32921

        * GNUmakefile.am:

2010-01-05  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Move allowSetting{Frame}SrcToJavascriptUrl from V8Custom to BindingSecurity and
        remove the v8-specific pieces.

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

        * bindings/BindingSecurity.h:
        (WebCore::::allowSettingFrameSrcToJavascriptUrl): Moved from V8CustomBinding.cpp.
        (WebCore::::allowSettingSrcToJavascriptURL): Moved from V8CustomBinding.cpp.
        * bindings/v8/custom/V8AttrCustom.cpp:
        (WebCore::V8Attr::valueAccessorSetter):
        * bindings/v8/custom/V8CustomBinding.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::V8Element::setAttributeCallback):
        (WebCore::V8Element::setAttributeNodeCallback):
        (WebCore::V8Element::setAttributeNSCallback):
        (WebCore::V8Element::setAttributeNodeNSCallback):
        * bindings/v8/custom/V8HTMLFrameElementCustom.cpp:
        (WebCore::V8HTMLFrameElement::srcAccessorSetter):
        (WebCore::V8HTMLFrameElement::locationAccessorSetter):
        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp:
        (WebCore::V8HTMLIFrameElement::srcAccessorSetter):

2010-01-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Separate DOMWrapperWorld from V8IsolatedWorld
        https://bugs.webkit.org/show_bug.cgi?id=33087

        This change separate DOMWrapperWorld and IsolatedWorld from
        V8IsolatedWorld.  I've also renamed V8IsolatedWorld to
        V8IsolatedContext in preparation for having more than one context in a
        single isolated world.

        This patch moves us closer to two goals:
        1) Matching the structure of the JSC implementation of isolated worlds.
        2) Letting scripts running in isolated contexts see into other iframes
           (which requires having more than one context in an isolated world.)

        * WebCore.gypi:
        * bindings/v8/DOMWrapperWorld.cpp: Added.
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        (WebCore::mainThreadNormalWorld):
        * bindings/v8/DOMWrapperWorld.h: Added.
        (WebCore::DOMWrapperWorld::create):
        * bindings/v8/IsolatedWorld.cpp: Added.
        (WebCore::IsolatedWorld::IsolatedWorld):
        (WebCore::IsolatedWorld::~IsolatedWorld):
        * bindings/v8/IsolatedWorld.h: Added.
        (WebCore::IsolatedWorld::create):
        (WebCore::IsolatedWorld::count):
        (WebCore::IsolatedWorld::domDataStore):
        * bindings/v8/MainThreadDOMData.cpp:
        (WebCore::MainThreadDOMData::getMainThreadStore):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::currentScriptState):
        * bindings/v8/ScriptState.cpp:
        * bindings/v8/ScriptState.h:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8IsolatedContext.cpp: Copied from WebCore/bindings/v8/V8IsolatedWorld.cpp.
        (WebCore::V8IsolatedContext::contextWeakReferenceCallback):
        (WebCore::V8IsolatedContext::V8IsolatedContext):
        (WebCore::V8IsolatedContext::destroy):
        (WebCore::V8IsolatedContext::~V8IsolatedContext):
        (WebCore::V8IsolatedContext::scriptState):
        * bindings/v8/V8IsolatedContext.h: Copied from WebCore/bindings/v8/V8IsolatedWorld.h.
        (WebCore::V8IsolatedContext::getEntered):
        (WebCore::V8IsolatedContext::world):
        * bindings/v8/V8IsolatedWorld.cpp: Removed.
        * bindings/v8/V8IsolatedWorld.h: Removed.
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        (WebCore::V8Proxy::context):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/WorldContextHandle.cpp:
        (WebCore::WorldContextHandle::WorldContextHandle):

2010-01-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Move createWindow into generic bindings so it can be shared with JSC
        https://bugs.webkit.org/show_bug.cgi?id=33201

        This patch moves createWindow from V8-specific code into the generic
        bindings so that is can be re-used by the JavaScriptCore bindings.  I
        haven't actually moved the JSC bindings over to using this yet.

        Also, I organized the generic bindings a bit more as it's becoming
        clearer how things are going to shape up.  There are still some
        question marks, but hopefully the answers will become clear as we
        progress.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * bindings/generic/BindingDOMWindow.h: Added.
        (WebCore::::createWindow):
        * bindings/generic/BindingSecurity.h: Renamed from WebCore/bindings/BindingSecurity.h.
        (WebCore::BindingSecurity::BindingSecurity):
        (WebCore::::canAccessWindow):
        (WebCore::::canAccessFrame):
        (WebCore::::checkNodeSecurity):
        * bindings/generic/BindingSecurityBase.cpp: Renamed from WebCore/bindings/BindingSecurityBase.cpp.
        (WebCore::BindingSecurityBase::getDOMWindow):
        (WebCore::BindingSecurityBase::getFrame):
        (WebCore::BindingSecurityBase::canAccess):
        * bindings/generic/BindingSecurityBase.h: Renamed from WebCore/bindings/BindingSecurityBase.h.
        * bindings/generic/GenericBinding.h: Renamed from WebCore/bindings/GenericBinding.h.
        (WebCore::):
        * bindings/v8/V8Binding.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::showModalDialogCallback):
        (WebCore::V8DOMWindow::openCallback):
        * bindings/v8/specialization/V8BindingDOMWindow.h: Added.
        (WebCore::V8BindingDOMWindow::storeDialogArgs):
        * bindings/v8/specialization/V8BindingState.cpp: Renamed from WebCore/bindings/v8/V8BindingState.cpp.
        (WebCore::::Only):
        (WebCore::::getActiveWindow):
        (WebCore::::immediatelyReportUnsafeAccessTo):
        * bindings/v8/specialization/V8BindingState.h: Renamed from WebCore/bindings/v8/V8BindingState.h.
        (WebCore::):

2010-01-05  Dominic Mazzoni  <dmazzoni@google.com>

        Reviewed by Darin Adler.

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

        For an object with an aria role of "checkbox" or "radiobutton",
        Use the "aria-checked" attribute to determine if it's checked.

        Test: accessibility/aria-checkbox-checked.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isChecked):

2010-01-05  Yong Li  <yoli@rim.com>

        Reviewed by Adam Roben.

        Fix build warnings blindly
        https://bugs.webkit.org/show_bug.cgi?id=33178

        * platform/SharedBuffer.cpp:
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::append):

2010-01-05  Dan Bernstein  <mitz@apple.com>

        Build fix

        * platform/SharedBuffer.cpp:

2010-01-05  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Darin Adler.

        Fix an obvious bug and build errors in previous commit (r52795)
        https://bugs.webkit.org/show_bug.cgi?id=33178

        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::isEmpty):
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::maybeTransferPlatformData):

2010-01-04  Yong Li  <yoli@rim.com>

        Reviewed by Darin Adler.

        Let SharedBuffer use a group of memory segments internally.
        It will merge the segments into a flat consecutive buffer only when
        necessary.
        https://bugs.webkit.org/show_bug.cgi?id=33178

        * platform/SharedBuffer.cpp:
        (WebCore::allocateSegment):
        (WebCore::freeSegment):
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::~SharedBuffer):
        (WebCore::SharedBuffer::adoptVector):
        (WebCore::SharedBuffer::size):
        (WebCore::SharedBuffer::data):
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::clear):
        (WebCore::SharedBuffer::copy):
        (WebCore::SharedBuffer::buffer):
        (WebCore::SharedBuffer::getSomeData):
        * platform/SharedBuffer.h:
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::maybeTransferPlatformData):
        * platform/haiku/SharedBufferHaiku.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):
        * platform/qt/SharedBufferQt.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):
        * platform/win/SharedBufferWin.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):

2010-01-05  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed trivial Symbian build fix

        * plugins/symbian/PluginViewSymbian.cpp: Add missing HostWindow.h inclusion

2010-01-05  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Fix broken export macros in package builds.

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

        Always define QT_MAKEDLL unless we're doing a static
        build or we're building inside of Qt. When building
        inside of Qt the correct define is pulled from qbase.pri.

        * WebCore.pro:

2010-01-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Fisher.

        Reorganize, document and rename OS() platform macros.
        https://bugs.webkit.org/show_bug.cgi?id=33198

        Adapt to name changes. Also fixed a few incorrect OS checks.

        * accessibility/AccessibilityObject.h:
        * config.h:
        * dom/SelectElement.cpp:
        (WebCore::SelectElement::listBoxDefaultEventHandler):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::platform):
        * loader/CachedFont.cpp:
        * loader/FTPDirectoryDocument.cpp:
        * loader/FTPDirectoryParser.cpp:
        * page/EventHandler.cpp:
        * page/Frame.cpp:
        (WebCore::Frame::setUseSecureKeyboardEntry):
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::platform):
        * page/Page.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        * page/chromium/DragControllerChromium.cpp:
        (WebCore::DragController::isCopyKeyDown):
        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::accessKeyModifiers):
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/FileSystem.h:
        * platform/KeyboardCodes.h:
        * platform/PurgeableBuffer.h:
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::writeRange):
        * platform/chromium/ClipboardUtilitiesChromium.cpp:
        * platform/chromium/ClipboardUtilitiesChromium.h:
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::documentFragment):
        * platform/chromium/PlatformKeyboardEventChromium.cpp:
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        (WebCore::PlatformKeyboardEvent::currentCapsLockState):
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::layout):
        (WebCore::PopupMenu::show):
        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::mayFillWithSolidColor):
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.h:
        * platform/graphics/FontCache.cpp:
        (WebCore::alternateFamilyName):
        * platform/graphics/FontCache.h:
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataForCharacter):
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::advanceAt):
        (WebCore::GlyphBuffer::add):
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.h:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/cg/ColorCG.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/chromium/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/chromium/FontCustomPlatformData.h:
        * platform/graphics/chromium/FontPlatformData.h:
        * platform/graphics/opentype/OpenTypeUtilities.cpp:
        * platform/graphics/opentype/OpenTypeUtilities.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::getWindowsContext):
        * platform/graphics/qt/ImageQt.cpp:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clipToImageBuffer):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::State::State):
        (PlatformContextSkia::PlatformContextSkia):
        (PlatformContextSkia::save):
        (PlatformContextSkia::restore):
        * platform/graphics/skia/PlatformContextSkia.h:
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::createIconForFiles):
        (WebCore::Icon::paint):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::filenameToString):
        (WebCore::filenameFromString):
        (WebCore::filenameForDisplay):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        * platform/network/curl/ResourceHandleManager.cpp:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::):
        * platform/text/String.cpp:
        (WebCore::String::format):
        (WebCore::String::number):
        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::encode):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):
        (WebCore::extendTextCodecMaps):
        * platform/text/TextStream.cpp:
        * platform/text/TextStream.h:
        * platform/text/qt/TextCodecQt.cpp:
        (WebCore::TextCodecQt::decode):
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::messageToEventType):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/win/PlatformScreenWin.cpp:
        (WebCore::deviceInfoForWidget):
        (WebCore::screenIsMonochrome):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::paint):
        (WebCore::PopupMenu::registerClass):
        (WebCore::PopupMenu::PopupMenuWndProc):
        (WebCore::PopupMenu::wndProc):
        * platform/win/SystemTimeWin.cpp:
        (WebCore::userIdleTime):
        * platform/wx/FileSystemWx.cpp:
        (WebCore::unloadModule):
        * plugins/PluginDatabase.cpp:
        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::compareFileVersion):
        * plugins/PluginPackage.h:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::setFrameRect):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::addWindowsMediaPlayerPluginDirectory):
        (WebCore::addMacromediaPluginDirectories):
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::load):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::registerPluginView):
        (WebCore::PluginView::wndProc):
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paintIntoTransformedContext):
        (WebCore::PluginView::paintWindowedPluginIntoContext):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::platformStart):

2010-01-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Add ARIA "Live Region" support
        https://bugs.webkit.org/show_bug.cgi?id=33117

        Tests: platform/mac/accessibility/aria-liveregions-attributes.html
               platform/mac/accessibility/aria-liveregions-notifications.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::contentChanged):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isChildOfARIALiveRegion):
        (WebCore::AccessibilityObject::supportsARIALiveRegion):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::contentChanged):
        (WebCore::AccessibilityObject::ariaLiveRegionStatus):
        (WebCore::AccessibilityObject::ariaLiveRegionRelevant):
        (WebCore::AccessibilityObject::ariaLiveRegionAtomic):
        (WebCore::AccessibilityObject::ariaLiveRegionBusy):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::elementAttributeValue):
        (WebCore::AccessibilityRenderObject::contentChanged):
        (WebCore::AccessibilityRenderObject::childrenChanged):
        (WebCore::AccessibilityRenderObject::ariaLiveRegionStatus):
        (WebCore::AccessibilityRenderObject::ariaLiveRegionRelevant):
        (WebCore::AccessibilityRenderObject::ariaLiveRegionAtomic):
        (WebCore::AccessibilityRenderObject::ariaLiveRegionBusy):
        * accessibility/AccessibilityRenderObject.h:
        (WebCore::AccessibilityRenderObject::areChildrenDirty):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/mac/AccessibilityObjectWrapper.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilitySetPostedNotificationCallback:]):
        (-[AccessibilityObjectWrapper accessibilityPostedNotification:]):
        * dom/Element.cpp:
        (WebCore::Element::updateAfterAttributeChanged):
        * html/HTMLAttributeNames.in:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setText):

2010-01-04  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Adopt a more conservative approach for loading CSS cross-origin. When
        loading CSS cross-origin, it must be start with valid CSS if the MIME
        type is broken.

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

        Test: http/tests/security/cross-origin-css.html
        Test: http/tests/security/cross-origin-css-in-xml.xml

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet): Enforce stricter load
        requirements for cross-origin loads.
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::setCSSStyleSheet): Enforce stricter load
        requirements for cross-origin loads.
        * css/CSSStyleSheet.h:
        * css/CSSStyleSheet.cpp:
        * css/CSSParser.cpp:
        * css/CSSGrammar.y:
        * css/CSSParser.h:
        Add ability to tell whether the CSS parse started with a syntactically
        valid CSS rule.
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::sheetText): Add ability to return
        whether the MIME type was acceptable for CSS.
        (WebCore::CachedCSSStyleSheet::canUseSheet): If requested, return
        whether the MIME type was valid or not.
        * dom/ProcessingInstruction.cpp
        (WebCore::ProcessingInstruction::setCSSStyleSheet): Make use of strict
        mode explicit and add comment.

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

        Reviewed by Simon Fraser.

        <rdar://problem/6655695> REGRESSION: VoiceOver is not highlighting some web elements correctly
        <rdar://problem/7397558> REGRESSION: AXImages inside of AXLink cause AXLink to have wrong bounds

        Test: accessibility/dimensions-include-descendants.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::boundingBoxRect): Use absoluteFocusRingQuads()
        for non-text renderers. The focus ring encompasses descendants, which is
        what we want for the accessibility indicator.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absoluteFocusRingQuads): Added.
        * rendering/RenderObject.h:

2010-01-04  Ojan Vafai  <ojan@ojanmacpro.sfo.corp.google.com>

        Reviewed by Dan Bernstein.

        Remove unnecessary division by a constant in SimpleFontDataMac.mm.
        https://bugs.webkit.org/show_bug.cgi?id=33189

        This was added in http://trac.webkit.org/changeset/8104 and seems like
        it was just there to match the previously private function which we no
        longer use.

        No new tests. No change in behavior.

        * platform/graphics/mac/SimpleFontDataMac.mm:

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

        Reviewed by Maciej Stachowiak.

        Selection-related code needs stricter rules about how it relates to layout
        https://bugs.webkit.org/show_bug.cgi?id=32882

        Covered by existing tests along with the new assertions.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle): Make sure that m_inStyleRecalc is
        already false by the time post-attach callbacks are done so that
        layout triggered inside those callbacks can work properly.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::layout): Added code to trigger a
        layout when it's needed.
        (WebCore::SelectionController::recomputeCaretRect): Removed unneeded
        code to do nothing when FrameView is 0. Added an assertion that layout
        is not needed at the time the function is called.
        (WebCore::SelectionController::invalidateCaretRect): Added code to
        trigger a layout when it's needed.
        (WebCore::SelectionController::paintCaret): Added an assertion that
        layout is not needed at the time the function is called.

        * html/HTMLFormControlElement.cpp:
        (WebCore::shouldAutofocus): Added. Helper function that expresses
        the rule for which form control elements should auto-focus.
        (WebCore::focusPostAttach): Added. Called post-attach to focus an
        element if we discover it should be focused during attach.
        (WebCore::HTMLFormControlElement::attach): Refactored code for
        which elements need auto-focus into a separate function. Instead
        of focusing right away, use the focusPostAttach function to focus
        after attach is done. Also added calls to suspendPostAttachCallbacks
        and resumePostAttachCallbacks so post-attach callbacks happen late
        enough. Before, they could run inside the base attach function.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::attach): Added calls to
        suspendPostAttachCallbacks and resumePostAttachCallbacks so
        post-attach callbacks happen late enough

        * page/Frame.cpp:
        (WebCore::Frame::revealSelection): Added code to trigger a layout
        when it's needed.

2010-01-04  Gavin Barraclough <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=33163
        Use WTF's string hashing functions from StringImpl.

        * ForwardingHeaders/wtf/StringHashFunctions.h: Added.
        * platform/text/StringHash.h:
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::computeHash):

2010-01-04  Jon Honeycutt  <jhoneycutt@apple.com>

        Qt build fix. Unreviewed.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::postNotification):

2010-01-04  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: <select> elements should broadcast value change events

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

        <rdar://problem/7332364>

        Reviewed by Darin Adler.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::postNotification):
        If the post type is async, follow the old code path; otherwise, call
        postPlatformNotification().

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::):
        Added a new accessibility notification, AXMenuListValueChanged. Added
        a new parameter to postNotification() to specify whether the post should
        be synchronous or asynchronous.

        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        If the WebCore notification is AXMenuListValueChanged, broadcast an
        EVENT_OBJECT_VALUECHANGE event.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::setSelectedIndex):
        When the selected index of a RenderMenuList is changed, call
        RenderMenuList::didSetSelectedIndex().

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::RenderMenuList):
        Initialize new member
        (WebCore::RenderMenuList::didSetSelectedIndex):
        If the selected index has changed, post AXMenuListValueChanged to the
        object synchronously.

        * rendering/RenderMenuList.h:
        Declare didSetSelectedIndex(), and add a member to hold the last
        selected index.

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

        Reviewed by Sam Weinig.

        Added missing null check in BarInfo code.

        Test: fast/dom/Window/BarInfo-after-frame-removed.html

        * page/BarInfo.cpp:
        (WebCore::BarInfo::visible): Added null check. A few other
        cleanups.

2010-01-04  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Jon Honeycutt.

        Delete an empty and unused JavaScript file.

        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/InspectorControllerStub.js: Removed.

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

        [wx] Build fix, add a couple include dirs to the build.

        * wscript:

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

        Windows build fix

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

2010-01-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Repaint issues in text input under a scale transform
        https://bugs.webkit.org/show_bug.cgi?id=32086
        
        When doing a subtree layout we have to look up the container chain to see if there
        are any properties, such as transforms or reflections, that mean that we are unable
        to use layoutState.

        Test: fast/repaint/subtree-layoutstate-transform.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layout): Call canUseLayoutStateForSubtree() to determine
        whether it's OK to use layoutState.
        
        * rendering/RenderView.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::canUseLayoutStateForSubtree): New method that reports whether it's
        OK to use layoutState when doing a subtree layout from the given root.

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

        Reviewed by Dan Bernstein.

        Reentrancy problem with selection in some edge cases.
        https://bugs.webkit.org/show_bug.cgi?id=32842
        rdar://problem/7449974

        Test: fast/forms/selection-layout-reentry-strange-case.html

        Move the selection display update process done in the
        selectionLayoutChanged function into the layout timer
        instead of doing it immediately when selection changes occur.

        * dom/Document.cpp:
        (WebCore::Document::updateLayout): Changed this to use the
        definition of needsLayout from FrameView rather than rolling
        its own.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController):
        Initialize m_needsDisplayUpdate to false.
        (WebCore::SelectionController::setSelection): Call
        the new setNeedsDisplayUpdate function instead of the old
        badly named Frame::selectionLayoutChanged function.
        (WebCore::SelectionController::setNeedsDisplayUpdate):
        Set m_needsDisplayUpdate. If it is just becoming true, then
        call FrameView::scheduleRelayout.

        * editing/SelectionController.h: Added setNeedsDisplayUpdate,
        needsDisplayUpdate, and m_needsDisplayUpdate.

        * page/Frame.cpp:
        (WebCore::Frame::setCaretVisible): Call setNeedsDisplayUpdate.
        (WebCore::Frame::selectionLayoutChanged): Call
        setNeedsDisplayUpdate to set it to false, since this is the
        function that performs "selection display update". Later I want
        to rename this function. Also added a global reentrancy check
        since that's the easiest way I could think of to prevent infinite
        recursion in the case where recomputeCaretRect ends up triggering
        a layout. As a side effect, fixed theoretical problems in
        TEXT_CARET builds by improving the ifdef.
        (WebCore::Frame::caretBlinkTimerFired): Loosen assertions a
        bit. Later we might want to decouple caret rect from caret state
        a bit more and add these assertions back.
        (WebCore::Frame::selectionBounds): Call Document::updateLayout.
        This function is for external clients and they do not currently
        do anything to make sure layout is up to date.

        * page/FrameView.cpp:
        (WebCore::FrameView::needsLayout): Add a new clause, since
        we need a call to layout if needsDisplayUpdate is true.

2010-01-04  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Correct debug assertion (and possible runtime errors) by
        checking validity of bitmap settings used to create
        the Windows Cairo contexts.
        https://bugs.webkit.org/show_bug.cgi?id=33164.

        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::createCairoContextWithHDC): Check validity of selected
          OBJ_BITMAP retrieved, and only create 32-bit context when
          a valid bitmap is provided.

2010-01-04  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, revert r52745 and r52746 on behalf of Nikolas Zimmermann, as discussed on IRC.
        Patch produced by 'git revert' and then reverting back ChangeLog files.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::repaintRectInLocalCoordinates):
        (WebCore::RenderPath::setPath):
        (WebCore::RenderPath::path):
        (WebCore::RenderPath::paint):
        (WebCore::):
        (WebCore::DrawMarkersData::DrawMarkersData):
        (WebCore::drawMarkerWithData):
        (WebCore::updateMarkerDataForElement):
        (WebCore::drawStartAndMidMarkers):
        (WebCore::RenderPath::drawMarkersIfNeeded):
        * rendering/RenderPath.h:
        (WebCore::RenderPath::markerBoundingBox):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::paint):
        * rendering/RenderSVGViewportContainer.h:
        * rendering/SVGMarkerData.h: Removed.
        * rendering/SVGMarkerLayoutInfo.cpp: Removed.
        * rendering/SVGMarkerLayoutInfo.h: Removed.
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::canvasResource):
        * svg/graphics/SVGResource.cpp:
        (WebCore::SVGResource::SVGResource):
        (WebCore::ResourceSet::ResourceSet):
        (WebCore::clientMap):
        (WebCore::SVGResource::~SVGResource):
        (WebCore::SVGResource::removeClient):
        (WebCore::SVGResource::addClient):
        * svg/graphics/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::SVGResourceMarker):
        (WebCore::SVGResourceMarker::setMarker):
        (WebCore::SVGResourceMarker::setRef):
        (WebCore::SVGResourceMarker::draw):
        (WebCore::SVGResourceMarker::cachedBounds):
        (WebCore::SVGResourceMarker::externalRepresentation):
        * svg/graphics/SVGResourceMarker.h:
        (WebCore::SVGResourceMarker::refX):
        (WebCore::SVGResourceMarker::refY):

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

        Reviewed by Ada Chan and Mark Rowe.

        Updated copyright string

        * Info.plist:
        * WebCore.vcproj/QTMovieWin.rc:

2010-01-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: any DIV with an aria role should not be ignored
        https://bugs.webkit.org/show_bug.cgi?id=33090

        Test: platform/mac/accessibility/aria-divs-not-ignored.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):

2010-01-04  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Generate declarations for V8 runtime enablers.

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

        * bindings/scripts/CodeGeneratorV8.pm: Generate runtime enabler declarations.
        * bindings/v8/custom/V8CustomBinding.h: Remove manual declarations of runtime enablers.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8WebSocketCustom.cpp: Remove closeCallback(), which isn't actually being used.
        * bindings/v8/custom/V8WorkerContextCustom.cpp:

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

        Not reviewed. Forgot to add SVGMarkerData.h / SVGMarkerLayoutInfo.(cpp,h) to Chromium build.

        * WebCore.gypi:

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

        Reviewed by Dirk Schulze.

        Marker code is buggy: referencePoint translation is off
        https://bugs.webkit.org/show_bug.cgi?id=33012

        Rewrite marker code, as it had many issues:
        - Correct refX/refY handling (covered by new marker-referencePoint.svg test)
        - Calculate marker bounds on layout time, instead of paint time, to deliver correct repaint rects
        - Cleanup RenderPath code, which was cluttered by marker stuff (outlay in SVGMarkerLayoutInfo)
        - Fix SVGResource assuming that there is only one resource per resource type per element. Markers
          can have three different resources of the same type (three markers, start/mid/end markers)

        Filed bug 33115 (PathElementAddQuadCurveToPoint not handled for <marker>), which was just a TODO in the code before.

        Fixes all svg/custom/marker*.svg tests, that use dynamic updates (propagation failed before).
        Test: svg/custom/marker-referencePoint.svg
              svg/custom/marker-opacity.svg

        * Android.mk: Add SVGMarkerData.h / SVGMarkerLayoutInfo.(cpp,h) to build.
        * GNUmakefile.am: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * page/FrameView.cpp: Notify RenderSVGRoot children about viewport size changes, just like it's handled for <body> in HTML.
        (WebCore::FrameView::layout): This is important, as marker bounding boxes may depend on the current viewport size through relative coordinates used in <svg>.
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::markerBoundingBox): Calculates and caches marker boundaries in the layout() phase.
        (WebCore::RenderPath::repaintRectInLocalCoordinates): Use the cached marker bounding box during paint() time.
        (WebCore::RenderPath::setPath): Clear marker boundaries upon path changes.
        (WebCore::RenderPath::paint): Use SVGMarkerLayoutInfo::drawMarkers() instead of the local drawMarkersIfNeeded() function, which is gone now.
        (WebCore::RenderPath::calculateMarkerBoundsIfNeeded): Utilized by markerBoundingBox() to request SVGResourceMarker objects and calculate their boundaries.
        * rendering/RenderPath.h: Store SVGMarkerLayoutInfo objects, and rename m_markerBounds to m_cachedLocalMarkerBBox for consistency.
        (WebCore::RenderPath::path): Inline this accessor.
        * rendering/RenderSVGContainer.h: Make paint() public (to be used from SVGResourceMarker), all other methods protected (to be used from RenderSVGViewportContainer).
        * rendering/RenderSVGViewportContainer.cpp: Remove useless paint() override, as the comment in the code indicated.
        (WebCore::RenderSVGViewportContainer::markerBoundaries): Maps the marker contents repaintRectInLocalCoordinates() into the final coordinate system (see code).
        (WebCore::RenderSVGViewportContainer::markerContentTransformation): Add marker-specific helper method, allowing to make viewportTransform() private again.
        * rendering/RenderSVGViewportContainer.h: Marking viewportTransform() private, it's never meant to be used outside this renderer.
        * rendering/SVGMarkerData.h: Added. Refactored from existing RenderPath code, preserving original copyrights.
        (WebCore::SVGMarkerData::): Helper struct for SVGMarkerLayoutInfo.
        (WebCore::SVGMarkerData::origin): Holds the final computed destination of a marker.
        (WebCore::SVGMarkerData::marker): Holds a pointer to the associated SVGResourceMarker object, which we're aiming to layout.
        (WebCore::SVGMarkerData::currentAngle): Calculates the current angle for a certain marker type (start/mid/end) based upon the computed inslope/outslope values.
        (WebCore::SVGMarkerData::updateTypeAndMarker): Helper method.
        (WebCore::SVGMarkerData::updateOutslope): Ditto.
        (WebCore::SVGMarkerData::updateMarkerDataForPathElement): Does the actual inslope/outslope calculation.
        (WebCore::SVGMarkerData::updateInslope): Helper method.
        * rendering/SVGMarkerLayoutInfo.cpp: Added. New approach to build marker layout info, this time correct during layout() time instead of paint() time.
        (WebCore::SVGMarkerLayoutInfo::SVGMarkerLayoutInfo):
        (WebCore::SVGMarkerLayoutInfo::~SVGMarkerLayoutInfo):
        (WebCore::processStartAndMidMarkers): Static helper method used to visit each path element in order to calculate inslopes/outslopes (-> orientation angles)
        (WebCore::SVGMarkerLayoutInfo::calculateBoundaries): Build list of MarkerLayout objects, used to query boundaries, and to paint markers during drawMarkers().
        (WebCore::SVGMarkerLayoutInfo::drawMarkers): Cheap method walking existing MarkerLayout vector, drawing the individual RenderSVGViewportContainer of the markers.
        (WebCore::SVGMarkerLayoutInfo::addLayoutedMarker): Helper method.
        * rendering/SVGMarkerLayoutInfo.h: Added.
        (WebCore::MarkerLayout::MarkerLayout): Helper struct storing a pair of SVGResourceMarker* and a TranformationMatrix.
        (WebCore::SVGMarkerLayoutInfo::markerData): Public helper methods returning references to private member variables, used from processStartAndMidMarkers.
        (WebCore::SVGMarkerLayoutInfo::midMarker): Ditto.
        (WebCore::SVGMarkerLayoutInfo::elementIndex): Ditto.
        * svg/SVGMarkerElement.cpp: Adopt to name change: setRef() -> setReferencePoint(). setMarker() -> setRenderer()
        (WebCore::SVGMarkerElement::canvasResource): Add ASSERT(renderer()) to clarify that canvasResource() is only meant to used after renderer creation.
        * svg/graphics/SVGResource.cpp: Instead of maintaining a global hashmap between SVGStyledElements and an array of possible SVGResources, use a HashSet of SVGResources
                                        and directly scan the already existing list of clients for a certain SVGResource. This wrong approach has been introduced over two years
                                        ago, making the assumption that there's only one resource type per element. Though markers can provide three resources of the same type
                                        per element (all SVGResourceMarker objects, but in different rules: start/mid/end marker). That information is only available while painting.
        (WebCore::resourceSet): Add global static HashSet<SVGResource*>.
        (WebCore::SVGResource::SVGResource): Add us to the resourceSet.
        (WebCore::SVGResource::~SVGResource): Remove us from resourceSet.
        (WebCore::SVGResource::removeClient): Traverse all SVGResource clients and remove the passed SVGStyledElement from the client list (invoked by SVGStyledElement destructor).
        (WebCore::SVGResource::addClient): Remove the offending part of the old approach, making the wrong assumption regarding resource types.
        * svg/graphics/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::SVGResourceMarker):
        (WebCore::SVGResourceMarker::markerTransformation): Create TransformationMatrix in the local marker content (RenderSVGViewportContainer) coordinate system, to position a marker.
        (WebCore::SVGResourceMarker::draw): Simplify marker drawing a lot: used the passing TransformationMatrix (cached in SVGMarkerLayoutInfo) to draw the marker content renderer.
        (WebCore::SVGResourceMarker::externalRepresentation): Adopt to refX/refY -> referencePoint changes.
        * svg/graphics/SVGResourceMarker.h: Store a FloatPoint m_referecePoint instead of two refX/refY float values.
        (WebCore::SVGResourceMarker::setRenderer): Renamed from setMarker().
        (WebCore::SVGResourceMarker::setReferencePoint): Renamed from setRef().
        (WebCore::SVGResourceMarker::referencePoint): New accessor replacing refX() / refY().

2010-01-04  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Fix standalone package builds.

        * WebCore.pro: Moved logic for detecting standalone builds to WebKit.pri. Set DESTDIR for package builds.

2010-01-04  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        https://bugs.webkit.org/show_bug.cgi?id=29048
        [Qt] make RenderStyle.h compile in winscw compiler.

        Change compareEqual to a macro in Winscw compiler to get around "illegal operand" 
        error when compareEqual is defined as template.

        The compiler bug is reported at:
        https://xdabug001.ext.nokia.com/bugzilla/show_bug.cgi?id=10447

        * rendering/style/RenderStyle.h:

2010-01-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Simon Hausmann.

        Fix some PLATFORM(*_ENDIAN) uses to CPU()
        https://bugs.webkit.org/show_bug.cgi?id=33148

        * platform/image-decoders/bmp/BMPImageReader.h:
        (WebCore::BMPImageReader::readUint16):
        (WebCore::BMPImageReader::readUint32):
        (WebCore::BMPImageReader::readCurrentPixel):

2010-01-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        Reorganize, document and rename CPU() platform macros.
        https://bugs.webkit.org/show_bug.cgi?id=33145

        * page/NavigatorBase.cpp:
        * platform/text/AtomicString.cpp:
        (WebCore::equal):
        * platform/text/StringHash.h:
        (WebCore::StringHash::equal):

2009-12-22  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] G_OBJECT() cast is not necessary for signals connection and properties access
        https://bugs.webkit.org/show_bug.cgi?id=32661

        Reverted the SENTINEL / NULL crap :) Hopefully the style-bot won't
        complain about NULL usage in g_object_{get,set} anymore.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::hasVideo):
        (WebCore::MediaPlayerPrivate::hasAudio):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::setRate):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):

2010-01-04  Alex Milowski  <alex@milowski.com>

        Reviewed by Eric Seidel.

        Updated license to match recommended header license.

        * mathml/MathMLElement.cpp:
        * mathml/MathMLElement.h:
        * mathml/MathMLInlineContainerElement.cpp:
        * mathml/MathMLInlineContainerElement.h:
        * mathml/MathMLMathElement.cpp:
        * mathml/MathMLMathElement.h:

2010-01-04  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGResources don't invalidate if target object changes attributes
        https://bugs.webkit.org/show_bug.cgi?id=33091

        It's neccessary to invalidate all resources of an object, if the attributes of this
        target change. Otherwise the saved resource data (like ImageBuffers) don't match
        to the new object properties. 

        Test: svg/custom/resource-invalidate-on-target-update.svg

        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::svgAttributeChanged):
        (WebCore::SVGStyledElement::invalidateResources):
        * svg/SVGStyledElement.h:

2010-01-03  Kenneth Russell  <kbr@google.com>

        Reviewed by Maciej Stachowiak.

        Index validation code must always copy client data
        https://bugs.webkit.org/show_bug.cgi?id=32748

        Client data must always be copied during bufferData and
        bufferSubData calls, because otherwise the data the GL uses to
        draw may differ from that checked by the index validation code.

        Test: fast/canvas/webgl/index-validation-copies-indices.html

        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::WebGLBuffer):
        (WebCore::WebGLBuffer::associateBufferData):
        (WebCore::WebGLBuffer::associateBufferSubData):
        * html/canvas/WebGLBuffer.h:

2010-01-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [Chromium] Implement CookieJarChromium::cookiesEnabled
        https://bugs.webkit.org/show_bug.cgi?id=33123

        Call out to ChromiumBridge to find out if cookies are enabled.

        * platform/chromium/ChromiumBridge.h:
        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::cookiesEnabled):

2010-01-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [Chromium] Remove evaluateInNewContext (it's useless)
        https://bugs.webkit.org/show_bug.cgi?id=33068

        This function has no clients and makes life complicated.  Isolated
        worlds won out over NewContext and there's not really any going back
        now.

        No new tests because this is all minus lines.

        * bindings/v8/ScriptController.cpp:
        * bindings/v8/ScriptController.h:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertWindowToV8Object):
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8Proxy.h:

2010-01-03  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Dan Bernstein.

        Remove out of date commented out attributes in IDLs. We have implemented onpopstate.

        * html/HTMLBodyElement.idl:
        * html/HTMLFrameSetElement.idl:
        * page/DOMWindow.idl:

2010-01-03  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Mark more filter effect as alphaImage if possible
        https://bugs.webkit.org/show_bug.cgi?id=33111

        Mark more effects as alphaImage if the previous effect is a
        alphaImage. This can reduce the calculation on the next effect
        like feGaussianBlur.
        
        Test: This changes don't affect any LayoutTests and can't be tested
              somehow, since the changes are 'invisible'.

        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::apply):
        * svg/graphics/filters/SVGFEMorphology.cpp:
        (WebCore::FEMorphology::apply):
        * svg/graphics/filters/SVGFEOffset.cpp:
        (WebCore::FEOffset::apply):
        * svg/graphics/filters/SVGFETile.cpp:
        (WebCore::FETile::apply):

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

        Reviewed by Dan Bernstein.

        Scrollbar of overflow:scroll div in compositing layer fails to render
        https://bugs.webkit.org/show_bug.cgi?id=32439
        
        When deciding whether a RenderLayer needs backing store, check whether it has
        overflow controls that need painting.

        Test: compositing/overflow/scrollbar-painting.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hasOverflowControls):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):

2009-12-31  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Gustavo Noronha Silva.

        [GTK] context menu overriding API is very limited
        https://bugs.webkit.org/show_bug.cgi?id=27546

        Only show font menu items in rich text areas in the GTK+ port.

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):

2009-12-31  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Gustavo Noronha Silva.

        [GTK] context menu overriding API is very limited
        https://bugs.webkit.org/show_bug.cgi?id=27546

        Don't show spell checking menu items in text areas in the GTK+ port.

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):

2009-12-31  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7503279> REGRESSION (r47440): Incomplete repaint at macworldexpo.com
        https://bugs.webkit.org/show_bug.cgi?id=33067

        Test: fast/repaint/table-cell-overflow.html

        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::hasVisibleOverflow): Added.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows): Set m_hasOverflowingCell if
        any cell has visible overflow, like it was before r47440.

2009-12-31  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Do not include Frame.h under WebCore/html/canvas
        https://bugs.webkit.org/show_bug.cgi?id=33082

        No new tests, as there is no new functionality.

        * html/canvas/CanvasRenderingContext2D.cpp:

2009-12-30  Darin Fisher  <darin@chromium.org>

        Reviewed by David Levin.

        [Chromium] Delete ResourceRequest::securityInfo
        https://bugs.webkit.org/show_bug.cgi?id=26847

        * platform/network/chromium/ResourceRequest.h:

2009-12-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        Remove unused code from V8DOMWrapper.

        * bindings/v8/V8DOMWrapper.cpp: Removed code that I added but it's no longer used.
        * bindings/v8/V8DOMWrapper.h: Ditto.

2009-12-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        [V8] Generate configuring undetectable collection.
        https://bugs.webkit.org/show_bug.cgi?id=33063

        Refactoring, covered by existing tests.

        * bindings/scripts/CodeGeneratorV8.pm: Added GenerateImplementationMasqueradeAsUndefined.
        * bindings/v8/DerivedSourcesAllInOne.cpp: Touched to keep IB-based builds happy.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate): Removed hand-configuring.

2009-12-30  Zelidrag Hornung  <zelidrag@chromium.org>

        Reviewed by Dimitri Glazkov.

        Added ability for PopupMenuClient to signal when
        a) selection changed, and
        b) weather suggested value should be accepted when popup menu closes

        No new tests since this new functionality (autocomplete suggestions)
        is intentionally hidden from everything else than renderer.

        * platform/PopupMenuClient.h:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::hidePopup):
        (WebCore::PopupListBox::handleKeyEvent):
        (WebCore::PopupListBox::abandon):
        (WebCore::PopupListBox::acceptIndex):
        (WebCore::PopupListBox::selectIndex):
        (WebCore::PopupListBox::clearSelection):
        (WebCore::PopupListBox::hidePopup):
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::menuUnmapped):
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::show):
        * platform/qt/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopup::hidePopup):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::hide):
        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenu::OnMenuItemSelected):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::popupDidHide):
        * rendering/RenderMenuList.h:
        (WebCore::RenderMenuList::selectionChanged):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::popupDidHide):
        * rendering/RenderTextControlSingleLine.h:
        (WebCore::RenderTextControlSingleLine::selectionChanged):

2009-12-30  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Auto-generate V8 bindings header declarations for
        property accessor getter/setters, and remove a couple of
        unnecessarily custom bindings that weren't properly declared
        custom anyway.

        * Android.v8bindings.mk: Remove V8NavigatorCustom.cpp.
        * WebCore.gypi: Remove V8NavigatorCustom.cpp.
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/custom/V8AttrCustom.cpp:
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        * bindings/v8/custom/V8CoordinatesCustom.cpp:
        * bindings/v8/custom/V8CustomBinding.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        * bindings/v8/custom/V8EventCustom.cpp:
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        * bindings/v8/custom/V8HTMLFrameElementCustom.cpp:
        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp:
        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        * bindings/v8/custom/V8LocationCustom.cpp:
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        * bindings/v8/custom/V8NavigatorCustom.cpp: Removed.
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:

2009-12-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Touch DerivedSourcesAllInOne to avoid clobbering IB-based builds.

        * bindings/v8/DerivedSourcesAllInOne.cpp: Added a line-break.

2009-12-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        [V8] Generate configuring of call-as-function callbacks.
        https://bugs.webkit.org/show_bug.cgi?id=33061

        Refactoring, covered by existing tests.

        * bindings/scripts/CodeGeneratorV8.pm: Added GenerateHeaderCustomCall and
            GenerateImplementationCustomCall.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate): Removed all hand-configuring of call-as-function
            callbacks.
        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        (WebCore::V8HTMLAppletElement::callAsFunctionCallback): Added.
        (WebCore::V8HTMLEmbedElement::callAsFunctionCallback): Added.
        (WebCore::V8HTMLObjectElement::callAsFunctionCallback): Added.
        * bindings/v8/custom/V8HTMLPlugInElementCustom.h: Removed.

2009-12-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [v8] Move world-specific state out of V8Proxy
        https://bugs.webkit.org/show_bug.cgi?id=33034

        This is the first step towards unifying the V8 implementation of
        isolated worlds with the JSC implementation.  We need an object to
        encapulate all the world-specific bindings state.  Previoulsy, we used
        V8Proxy for this purpose (along with a million other things), but
        there's a one-to-one mapping between V8Proxy objects and Frame objects.

        This patch takes the world-specific state and moves it to a new object,
        affectionately called V8DOMWindowShell.  This object is the moral
        equivalent of JSDOMWindowShell but with more data members because life
        is more complicated in V8-land.

        This patch is almost entirely code motion.  Future patches will clean
        up this class as we use it to represent window shells in isolated
        worlds as well as the main world.

        * WebCore.gypi:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::updateSecurityOrigin):
        (WebCore::ScriptController::haveInterpreter):
        (WebCore::ScriptController::updateDocument):
        * bindings/v8/V8DOMWindowShell.cpp: Added.
        (WebCore::handleFatalErrorInV8):
        (WebCore::reportFatalErrorInV8):
        (WebCore::reportUnsafeJavaScriptAccess):
        (WebCore::V8DOMWindowShell::create):
        (WebCore::V8DOMWindowShell::V8DOMWindowShell):
        (WebCore::V8DOMWindowShell::isContextInitialized):
        (WebCore::V8DOMWindowShell::disposeContextHandles):
        (WebCore::V8DOMWindowShell::destroyGlobal):
        (WebCore::V8DOMWindowShell::clearForClose):
        (WebCore::V8DOMWindowShell::clearForNavigation):
        (WebCore::V8DOMWindowShell::initContextIfNeeded):
        (WebCore::V8DOMWindowShell::createNewContext):
        (WebCore::V8DOMWindowShell::installDOMWindow):
        (WebCore::V8DOMWindowShell::updateDocumentWrapper):
        (WebCore::V8DOMWindowShell::clearDocumentWrapper):
        (WebCore::V8DOMWindowShell::updateDocumentWrapperCache):
        (WebCore::V8DOMWindowShell::clearDocumentWrapperCache):
        (WebCore::V8DOMWindowShell::setSecurityToken):
        (WebCore::V8DOMWindowShell::updateDocument):
        (WebCore::V8DOMWindowShell::updateSecurityOrigin):
        (WebCore::V8DOMWindowShell::getHiddenObjectPrototype):
        (WebCore::V8DOMWindowShell::installHiddenObjectPrototype):
        (WebCore::V8DOMWindowShell::createWrapperFromCacheSlowCase):
        * bindings/v8/V8DOMWindowShell.h: Added.
        (WebCore::V8DOMWindowShell::context):
        (WebCore::V8DOMWindowShell::createWrapperFromCache):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getConstructorForContext):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        (WebCore::V8DOMWrapper::convertDocumentToV8Object):
        (WebCore::V8DOMWrapper::convertNewNodeToV8Object):
        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::V8IsolatedWorld):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::V8Proxy):
        (WebCore::V8Proxy::~V8Proxy):
        (WebCore::V8Proxy::handleOutOfMemory):
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        (WebCore::V8Proxy::evaluateInNewContext):
        (WebCore::V8Proxy::setInjectedScriptContextDebugId):
        (WebCore::V8Proxy::clearForClose):
        (WebCore::V8Proxy::clearForNavigation):
        (WebCore::V8Proxy::mainWorldContext):
        (WebCore::V8Proxy::setContextDebugId):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::windowShell):
        (WebCore::V8Proxy::extensions):

2009-12-30  Dirk Schulze  <krit@webkit.org>

        Reviewed by Eric Seidel.

        SVGResourceClipper needs to invalidate content
        https://bugs.webkit.org/show_bug.cgi?id=33054

        Added invalidate() to SVGResourceClipper to reset clipData
        and drawing area after attribute changes.

        This fixes two LayoutTests.

        * svg/graphics/SVGResourceClipper.cpp:
        (WebCore::SVGResourceClipper::resetClipData):
        (WebCore::SVGResourceClipper::invalidate):
        * svg/graphics/SVGResourceClipper.h:

2009-12-30  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Laszlo Gombos.

         [Qt] RenderThemeQt::applyTheme is a misnomer and is suboptimally coded.
        https://bugs.webkit.org/show_bug.cgi?id=33035

        This patch:
        - renames RenderThemeQt::applyTheme to initializeCommonQStyleOptions,
        - extracts the palette initialization code to a separate function in order to
        provide for readable pointer checking and moves this code up in the function to
        allow for future changes to the palette brushes needed for bug 30173,
        - optimizes some of the code in the function for readability, speed and size.
        - fixes some minor style issues

        No new tests because code behavior is not changed.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintButton):
        (WebCore::RenderThemeQt::paintTextField):
        (WebCore::RenderThemeQt::paintMenuList):
        (WebCore::RenderThemeQt::paintMenuListButton):
        (WebCore::initPaletteFromPageClientIfExists):
        (WebCore::RenderThemeQt::initializeCommonQStyleOptions):
        * platform/qt/RenderThemeQt.h:

2009-12-30  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] It should be possible to disable inspector
        https://bugs.webkit.org/show_bug.cgi?id=32724

        This makes the r48430 available for other ports as well.
        No new tests, as there is no new functionality.

        * inspector/InjectedScriptHost.idl: Guard the interface with
        INSPECTOR guard.

        * inspector/InspectorBackend.idl: Ditto.

        * inspector/InspectorFrontendHost.idl: Ditto.

2009-12-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        [V8] Generate configuring of all indexers.
        https://bugs.webkit.org/show_bug.cgi?id=33031

        Refactorig, covered by existing tests.

        * bindings/scripts/CodeGeneratorV8.pm: Added generation of indexers for
            special cases.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate): Removed custom tempalte configuration of
            indexers.
        * bindings/v8/custom/V8CustomBinding.h: Added decls for Applet, Embed, and Object
            elements (these will be generated, too -- later.)
        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        (WebCore::npObjectIndexedGetter): Moved common code to a separate method.
        (WebCore::npObjectIndexedSetter): Ditto.
        (WebCore::INDEXED_PROPERTY_GETTER): Added custom handlers for Applet, Embed, and Object
          all calling the common method.
        (WebCore::INDEXED_PROPERTY_SETTER): Ditto.

2009-12-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        [V8] Generate configuring of all named property getters/setters/enumerators.
        https://bugs.webkit.org/show_bug.cgi?id=32996

        Refactoring, covered by existing tests.

        * bindings/scripts/CodeGeneratorV8.pm: Added generation of named property handlers
            for special cases (See bug for more info).
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate): Removed custom template configuration of named
            property handlers.
        * bindings/v8/custom/V8CustomBinding.h: Added decls for Applet, Embed, and Object
            elements (these will be generated, too -- later.)
        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        (WebCore::npObjectNamedGetter): Moved common code to a separate method.
        (WebCore::npObjectNamedSetter): Ditto.
        (WebCore::NAMED_PROPERTY_GETTER): Added custom handlers for Applet, Embed, and Object
          all calling the common method.
        (WebCore::NAMED_PROPERTY_SETTER): Ditto.

2009-12-30  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix PluginView::handlePostReadFile().
        https://bugs.webkit.org/show_bug.cgi?id=33052

        The function should actually rewrite the given file to the buffer.

        This change fixes http/tests/plugins/post-url-file.html, which can be unskipped
        now along with other passing http/plugins tests.

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

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

        Rubber stamped by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=32121
        [Qt] Revert "Implement ImageDecoderQt::clearFrameBufferCache()" from r52516.

        The implementation appears to either run into an ASSERT
        or leak memory at runtime as the m_buffer, m_reader may
        already exist. The bug was reopened and we do have a plan now.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::setData):
        (WebCore::ImageDecoderQt::clearFrameBufferCache):
        * platform/graphics/qt/ImageDecoderQt.h:

2009-12-30  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        [Qt] Add support for Symbian def files

        * WebCore.pro:

2009-12-30  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Qt/Symbian build fix.

        Don't build network state notifier support when building inside of Qt.
        Otherwise the Qt build depends on an external module that itself depends
        on Qt again.

        * WebCore.pro:

2009-12-30  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Dimitri Glazkov.

        [v8] Use current isolated world's context for ScriptCallStack.

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

        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::ScriptCallStack):
        * bindings/v8/ScriptCallStack.h:
        (WebCore::ScriptCallStack::state):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::mainWorldScriptState):
        (WebCore::ScriptController::currentScriptState):
        (WebCore::ScriptController::clearWindowShell):
        * bindings/v8/ScriptController.h:
        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::scriptState):
        * bindings/v8/V8IsolatedWorld.h:

2009-12-30  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        Turn off DataGrid support by default.

        No new tests, as there is no new functionality.

        * WebCore.pro:

2009-12-29  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Detailed boundingBoxes in SVG Renderer
        https://bugs.webkit.org/show_bug.cgi?id=32815

        Add new bounding boxes for strokes, filters, masker and clipper in SVG.
        These new bounding boxes help to fix repaintRectInLocalCoordinates.
        We calculate the smallest repaint rect considering the new bounding boxes
        now, filters get the correct paint area, masker clip the mask image size
        to the visible area of the target.

        Tests: Many tests need an update. The changes in repaintRectInLocalCoordinates
               affect the LayoutTests.     

        * rendering/RenderForeignObject.h:
        (WebCore::RenderForeignObject::strokeBoundingBox):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::toSVGRenderBase):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::strokeBoundingBox):
        (WebCore::RenderPath::repaintRectInLocalCoordinates):
        (WebCore::RenderPath::setPath):
        * rendering/RenderPath.h:
        (WebCore::RenderPath::markerBoundingBox):
        * rendering/RenderSVGBlock.h:
        (WebCore::RenderSVGBlock::toSVGRenderBase):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::strokeBoundingBox):
        (WebCore::RenderSVGContainer::repaintRectInLocalCoordinates):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout):
        (WebCore::RenderSVGImage::repaintRectInLocalCoordinates):
        * rendering/RenderSVGImage.h:
        (WebCore::RenderSVGImage::toSVGRenderBase):
        (WebCore::RenderSVGImage::strokeBoundingBox):
        * rendering/RenderSVGInline.h:
        (WebCore::RenderSVGInline::objectBoundingBox):
        (WebCore::RenderSVGInline::repaintRectInLocalCoordinates):
        * rendering/RenderSVGModelObject.h:
        (WebCore::RenderSVGModelObject::toSVGRenderBase):
        * rendering/RenderSVGRoot.h:
        (WebCore::RenderSVGRoot::strokeBoundingBox):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::strokeBoundingBox):
        (WebCore::RenderSVGText::repaintRectInLocalCoordinates):
        * rendering/RenderSVGText.h:
        (WebCore::RenderSVGText::toSVGRenderBase):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::~SVGRenderBase):
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::filterBoundingBoxForRenderer):
        (WebCore::SVGRenderBase::clipperBoundingBoxForRenderer):
        (WebCore::SVGRenderBase::maskerBoundingBoxForRenderer):
        * rendering/SVGRenderSupport.h:
        (WebCore::SVGRenderBase::toSVGRenderBase):
        (WebCore::SVGRenderBase::strokeBoundingBox):
        (WebCore::SVGRenderBase::markerBoundingBox):
        * rendering/SVGRootInlineBox.h:
        (WebCore::SVGRootInlineBox::toSVGRenderBase):
        (WebCore::SVGRootInlineBox::objectBoundingBox):
        (WebCore::SVGRootInlineBox::repaintRectInLocalCoordinates):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::filterBoundingBox):
        * svg/SVGFilterElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::maskBoundingBox):
        (WebCore::SVGMaskElement::drawMaskerContent):
        * svg/SVGMaskElement.h:
        * svg/graphics/SVGResourceClipper.cpp:
        (WebCore::SVGResourceClipper::clipperBoundingBox):
        * svg/graphics/SVGResourceClipper.h:
        * svg/graphics/SVGResourceFilter.cpp:
        (WebCore::SVGResourceFilter::filterBoundingBox):
        (WebCore::shouldProcessFilter):
        (WebCore::SVGResourceFilter::prepareFilter):
        * svg/graphics/SVGResourceFilter.h:
        * svg/graphics/SVGResourceMasker.cpp:
        (WebCore::SVGResourceMasker::maskerBoundingBox):
        (WebCore::SVGResourceMasker::applyMask):
        * svg/graphics/SVGResourceMasker.h:

2009-12-29  Andrei Popescu  <andreip@google.com>

        Reviewed by Adam Barth.

        Add Android hook to NetworkStateNotifier class
        so that the Java side can notify WebCore when the
        network state changes.
        https://bugs.webkit.org/show_bug.cgi?id=32871

        No new tests required, this is platform code.

        * platform/network/NetworkStateNotifier.h:
        * platform/network/android/NetworkStateNotifierAndroid.cpp: Added.
        (WebCore::NetworkStateNotifier::networkStateChange):

2009-12-29  Eric Seidel  <eric@webkit.org>

        No review, rolling out r52630.
        http://trac.webkit.org/changeset/52630

        Change caused layout tests failures and crashes.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::repaintRectInLocalCoordinates):
        (WebCore::RenderPath::setPath):
        (WebCore::RenderPath::path):
        (WebCore::RenderPath::paint):
        (WebCore::):
        (WebCore::DrawMarkersData::DrawMarkersData):
        (WebCore::drawMarkerWithData):
        (WebCore::updateMarkerDataForElement):
        (WebCore::drawStartAndMidMarkers):
        (WebCore::RenderPath::drawMarkersIfNeeded):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::paint):
        * rendering/RenderSVGViewportContainer.h:
        * rendering/SVGMarkerLayoutInfo.cpp: Removed.
        * rendering/SVGMarkerLayoutInfo.h: Removed.
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::canvasResource):
        * svg/graphics/SVGResource.cpp:
        (WebCore::SVGResource::SVGResource):
        (WebCore::ResourceSet::ResourceSet):
        (WebCore::clientMap):
        (WebCore::SVGResource::~SVGResource):
        (WebCore::SVGResource::removeClient):
        (WebCore::SVGResource::addClient):
        * svg/graphics/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::SVGResourceMarker):
        (WebCore::SVGResourceMarker::setMarker):
        (WebCore::SVGResourceMarker::setRef):
        (WebCore::SVGResourceMarker::draw):
        (WebCore::SVGResourceMarker::cachedBounds):
        (WebCore::SVGResourceMarker::externalRepresentation):
        * svg/graphics/SVGResourceMarker.h:
        (WebCore::SVGResourceMarker::refX):
        (WebCore::SVGResourceMarker::refY):

2009-12-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Move the focus ring rect array, width and offset out of GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=33028

        * platform/graphics/GraphicsContext.cpp: Removed initFocusRing(),
        clearFocusRing(), focusRingBoundingRect(), addFocusRingRect(),
        focusRingWidth(), focusRingOffset(), and focusRingRects().
        * platform/graphics/GraphicsContext.h: Ditto. Added the focus ring rect
        vector, width and offset as parameters to drawFocusRing().
        * platform/graphics/GraphicsContextPrivate.h:
        (WebCore::GraphicsContextState::GraphicsContextState): Cleaned up style.
        (WebCore::GraphicsContextPrivate::GraphicsContextPrivate): Removed
        m_focusRingRects, m_focusRingWidth and m_focusRingOffset.
        * platform/graphics/IntRect.cpp:
        (WebCore::unionRect): Added this helper function.
        * platform/graphics/IntRect.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawFocusRing): 
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::drawFocusRing): Ditto.
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawFocusRing): Ditto.
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawFocusRing): Ditto.
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawFocusRing): Ditto.
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawFocusRing): Ditto.
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::drawFocusRing): Ditto.
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::drawFocusRing): Ditto.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addFocusRingRects): Updated for new prototype.
        Added empty rect checks that were previously done in
        GraphicsContext::addFocusRingRect().
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::addFocusRingRects): Ditto.
        * rendering/RenderBox.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addFocusRingRects): Ditto.
        (WebCore::RenderInline::paintOutline): Collect focus ring rects into a
        vector and pass it to drawFocusRing(). Use unionRect() instead of
        focusRingBoundingRect().
        * rendering/RenderInline.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintOutline): Ditto.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::addFocusRingRects): Changed to take a
        Vector<IntRect> to which the rects are added.
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::addFocusRingRects): Updated for new prototype.
        Added empty rect check that was previously done in
        GraphicsContext::addFocusRingRect().
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::addFocusRingRects): Updated for new prototype.
        Added empty rect check that was previously done in
        GraphicsContext::addFocusRingRect().
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::addFocusRingRects): Updated for new prototype.
        Added empty rect check that was previously done in
        GraphicsContext::addFocusRingRect().
        * rendering/RenderSVGImage.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::addFocusRingRects): Updated for new prototype.
        Added empty rect check that was previously done in
        GraphicsContext::addFocusRingRect().
        * rendering/RenderTextControl.h:

2009-12-28  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Maciej Stachowiak.

        1. Changes the order in which some functions are called to match
        the pre-r52536 order. Namely, when a new Database object is
        created, DatabaseTracker::addOpenDatabase() is called in the
        constructor, before doing anything else related to that database
        (like trying to get a file handle to the database
        file). Chromium's implementation depends on this ordering.
        2. Changes Database::performOpenAndVerify() to close the open
        handle to the database file immediately if the database version
        does not match the expected one. The current behavior is to add
        the Database object to a DatabaseThread collection and let the
        database thread close the handle when it's destroyed.

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

        All LayoutTests/storage tests pass in clean WebKit and Chromium
        clients.

        * storage/Database.cpp:
        (WebCore::Database::openDatabase): Notify DatabaseTracker and
        Document that a Database object is about to be destroyed (when a
        database file cannot be opened, or its version doesn't match the
        expected one).
        (WebCore::Database::Database): Notify DatabaseTracker and Document
        that a new Database object was created.
        (WebCore::Database::performOpenAndVerify): If a database version
        does not match the expected one, immediately close the open file
        handle to the database file.

2009-12-29  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Marker code is buggy: referencePoint translation is off
        https://bugs.webkit.org/show_bug.cgi?id=33012

        Rewrite marker code, as it was buggy:
        - Correct refX/refY handling (covered by new marker-referencePoint.svg test)
        - Calculate marker bounds on layout time, instead of paint time, to deliver correct repaint rects
        - Cleanup RenderPath code, which was cluttered by marker stuff (outlay in SVGMarkerLayoutInfo)
        - Fix SVGResource assuming that there is only one resource per resource type per element. Markers
          can have three different resources of the same type (three markers, start/mid/end markers)

        Fixes all svg/custom/marker*.svg tests, that use dynamic updates (propagation failed before).
        Test: svg/custom/marker-referencePoint.svg

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::repaintRectInLocalCoordinates):
        (WebCore::RenderPath::setPath):
        (WebCore::RenderPath::paint):
        (WebCore::RenderPath::calculateMarkerBoundsIfNeeded):
        * rendering/RenderPath.h:
        (WebCore::RenderPath::path):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::markerContentTransformation):
        * rendering/RenderSVGViewportContainer.h:
        * rendering/SVGMarkerLayoutInfo.cpp: Added.
        (WebCore::SVGMarkerLayoutInfo::SVGMarkerLayoutInfo):
        (WebCore::SVGMarkerLayoutInfo::~SVGMarkerLayoutInfo):
        (WebCore::SVGMarkerLayoutInfo::initialize):
        (WebCore::updateMarkerDataForElement):
        (WebCore::recordMarkerData):
        (WebCore::processStartAndMidMarkers):
        (WebCore::SVGMarkerLayoutInfo::calculateBoundaries):
        (WebCore::SVGMarkerLayoutInfo::drawMarkers):
        * rendering/SVGMarkerLayoutInfo.h: Added.
        (WebCore::MarkerData::):
        (WebCore::MarkerData::MarkerData):
        (WebCore::MarkerLayout::MarkerLayout):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::canvasResource):
        * svg/graphics/SVGResource.cpp:
        (WebCore::resourceSet):
        (WebCore::SVGResource::SVGResource):
        (WebCore::SVGResource::~SVGResource):
        (WebCore::SVGResource::removeClient):
        (WebCore::SVGResource::addClient):
        * svg/graphics/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::SVGResourceMarker):
        (WebCore::SVGResourceMarker::markerBoundaries):
        (WebCore::SVGResourceMarker::markerTransformation):
        (WebCore::SVGResourceMarker::draw):
        (WebCore::SVGResourceMarker::externalRepresentation):
        * svg/graphics/SVGResourceMarker.h:
        (WebCore::SVGResourceMarker::setRenderer):
        (WebCore::SVGResourceMarker::setReferencePoint):
        (WebCore::SVGResourceMarker::referencePoint):

2009-12-29  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Fix UI nits in the Audits panel.
        https://bugs.webkit.org/show_bug.cgi?id=32932

        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView.prototype._selectAllClicked):
        (WebInspector.AuditLauncherView.prototype._createCategoryElement):
        (WebInspector.AuditLauncherView.prototype._createLauncherUI.handleSelectAllClick):
        (WebInspector.AuditLauncherView.prototype._createLauncherUI):
        * inspector/front-end/AuditResultView.js:
        (WebInspector.AuditResultView):
        (WebInspector.AuditRuleResultPane):
        * inspector/front-end/audits.css:

2009-12-29  Johnny Ding  <jnd@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=32863
        Make NodeList support call-as-function

        Test: fast/dom/NodeList/nodelist-item-call-as-function.html

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::V8NodeList::callAsFunctionCallback):

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

        Reviewed by Dan Bernstein.

        Typed text in table not correctly redrawn on page with compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=32874
        
        Use the same test in RenderTableCell::computeRectForRepaint() that we use elsewhere
        to decide when to use layoutState, which is to test for layoutStateEnabled()
        and no repaint container.

        Not possible to make a repaint test that exercises the problem, so no test.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeRectForRepaint):

2009-12-29  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Discard port from cookie domain when matching cookies.

        WebKit cookies do not hold the port information, so we should match only hostnames.
        https://bugs.webkit.org/show_bug.cgi?id=31787

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

2009-12-29  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix warnings in MediaPlayerPrivatePhonon.cpp
        https://bugs.webkit.org/show_bug.cgi?id=33019

        No new tests as there is no new functionality.

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::totalTimeChanged):

2009-12-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Maciej Stachowiak.

        Implement HTML5 <aside> element.
        https://bugs.webkit.org/show_bug.cgi?id=32943

        <aside> should behave the same as <nav>, <section>, and <article>.

        Test: fast/html/aside-element.html

        * css/html.css: Add aside as a block element.
        * editing/htmlediting.cpp:
        (WebCore::validBlockTag): Add asideTag.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::tagPriority): Returns 5 for asideTag.
        (WebCore::blockTagList): Add asideTag.
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::getNode): Add asideTag.
        * html/HTMLTagNames.in: Add aside.

2009-12-29  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Use explicit parentheses to silence gcc 4.4 -Wparentheses warnings
        https://bugs.webkit.org/show_bug.cgi?id=33003

        No new tests as there is no new functionality.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::sendTransitionEvent):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::sendAnimationEvent):
        * rendering/RenderSVGContainer.h:
        (WebCore::toRenderSVGContainer):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setTextShadow):
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::setup):
        * svg/graphics/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::setup):

2009-12-28  Andrei Popescu  <andreip@google.com>

        Reviewed by Dmitry Titov.

        On Android, ResourceHandle instances make use of a pointer to a
        ResourceLoaderAndroid pointer. This needs to be stored in order to later cancel
        the load, if necessary. Since this pointer is an internal implementation
        details of ResourceHandle on Android, it needs to be stored in the
        ResourceHandleInternal class. This patch adds this pointer.
        https://bugs.webkit.org/show_bug.cgi?id=32873

        No new tests needed, this is platform-specific code.

        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):

2009-12-28  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by Maciej Stachowiak.

        Remove the macro ENABLE(XHTMLMP) for noscriptAreateErrorCheck in HTMLParser,
        since with XHTMLMP enabled, it's not checking create Errors,  and then contents inside 
        <noscript> are always parsed and rendered.
        https://bugs.webkit.org/show_bug.cgi?id=32706

        Tests: fast/parser/noscript-with-javascript-disabled.html
               fast/parser/noscript-with-javascript-enabled.html

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

2009-12-28  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Maciej Stachowiak.

        Fixed isKeypadEvent behavior for Mac to correctly report keyLocation
        as DOM_KEY_LOCATION_NUMPAD for numeric pad key events.
        https://bugs.webkit.org/show_bug.cgi?id=28247

        Test: fast/events/keydown-numpad-keys.html

        * platform/mac/KeyEventMac.mm:
        (WebCore::isKeypadEvent):

2009-12-28  Mike Moretti  <webkit9@mordent.com>

        Reviewed by Darin Adler.

        Fix bug 28245 - problem with inserting a span into a long text block causing a crash because of a null string

        Test: fast/dom/insert-span-into-long-text-bug-28245.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2009-12-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Xan Lopez.

        Follow Apple's decision to disable HTML DataGrid by default.

        * GNUmakefile.am:

2009-12-28  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Ariya Hidayat.

        Fix warnings when generating files using gperf. The warnings are
        currently harmless, but some changes in the build system may make
        them fatal.

        [GTK] Build time must be reduced
        https://bugs.webkit.org/show_bug.cgi?id=32921

        * GNUmakefile.am:

2009-12-28  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Adam Barth.

        [Qt] Fix build break for Qt 4.4
        https://bugs.webkit.org/show_bug.cgi?id=30327

        No new tests, as there is no new functionality.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::clipOut): Use intersected() instead of
        operator &, which was only introduced in Qt version 4.5.

        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarThemeQt::paintScrollCorner): Pass ColorSpace
        argument to fillColor() introduced in r50760

2009-12-28  Kent Tamura  <tkent@chromium.org>

        Reviewed by Maciej Stachowiak.

        Implement HTML5 <article> element.
        https://bugs.webkit.org/show_bug.cgi?id=32936

        <article> should behave the same as <nav> and <section>.

        Test: fast/html/article-element.html

        * css/html.css: Add article as a block element.
        * editing/htmlediting.cpp:
        (WebCore::validBlockTag): Add articleTag.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::tagPriority): Returns 5 for articleTag.
        (WebCore::blockTagList): Add articleTag.
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::getNode): Add articleTag.
        * html/HTMLTagNames.in: Add article.

2009-12-27  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] Support upload progress events in XMLHttpRequest
        https://bugs.webkit.org/show_bug.cgi?id=32969

        Make QNetworkReplyHandler report the upload progress to the client.

        Already covered by tests:
        http/tests/xmlhttprequest/upload-onload-event.html
        http/tests/xmlhttprequest/upload-onloadstart-event.html
        http/tests/xmlhttprequest/upload-progress-events.html
        http/tests/xmlhttprequest/upload-onprogress-event.html

        which have been unskipped.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::uploadProgress):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:

2009-12-27  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG: Stop rendering of objects with empty mask and filter content
        https://bugs.webkit.org/show_bug.cgi?id=32968

        It's not neccessary to continue rendering of an object and its' childs
        if the mask clips the complete content away.
        The same for filters, if the filter rendering is discontinued or either
        width or height are zero.
        We might also stop rendering if repaintRectInLocalCoordinates is empty.
        But it needs to be fixed first.

        Test: svg/custom/empty-mask.svg

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paint):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):
        * svg/SVGMaskElement.h:
        * svg/graphics/SVGResourceFilter.cpp:
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):
        * svg/graphics/SVGResourceFilter.h:
        * svg/graphics/SVGResourceMasker.cpp:
        (WebCore::SVGResourceMasker::SVGResourceMasker):
        (WebCore::SVGResourceMasker::applyMask):
        * svg/graphics/SVGResourceMasker.h:

2009-12-27  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Eric Seidel.

        [GTK] Spell Check Suggestions (Do not work)
        https://bugs.webkit.org/show_bug.cgi?id=30908

        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::title):
        (WebCore::ContextMenuItem::setTitle): Implement the 'title' member
        and set the title from the native menu item.

2009-12-27  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG Mask result wrong, if two different objects call the same mask id
        https://bugs.webkit.org/show_bug.cgi?id=32787

        At the moment we create one resource per maskId. Some resources (like mask)
        create ImageBuffers and depends on the properties of the RenderObject,
        thus we can't use it for a second object.
        This patch stores multiple mask resources for one maskId and different
        RenderObject can use the same maskId.
        Clipper, Filter and Patterns also need to store multiple resources later.

        Test: svg/custom/mask-on-multiple-objects.svg

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::drawMarkersIfNeeded):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::selfWillPaint):
        * rendering/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::styleDidChange):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::selfWillPaint):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::filterBoundingBoxForRenderer):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeRenderResources):
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::canvasResource):
        * svg/SVGClipPathElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::canvasResource):
        * svg/SVGFilterElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::canvasResource):
        * svg/SVGGradientElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::canvasResource):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::svgAttributeChanged):
        (WebCore::SVGMaskElement::childrenChanged):
        (WebCore::SVGMaskElement::canvasResource):
        * svg/SVGMaskElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::canvasResource):
        * svg/SVGPatternElement.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::invalidateResourcesInAncestorChain):
        * svg/SVGStyledElement.h:
        (WebCore::SVGStyledElement::canvasResource):
        * svg/graphics/SVGPaintServer.cpp:
        (WebCore::getPaintServerById):
        (WebCore::SVGPaintServer::fillPaintServer):
        (WebCore::SVGPaintServer::strokePaintServer):
        * svg/graphics/SVGPaintServer.h:
        * svg/graphics/SVGResource.cpp:
        (WebCore::getResourceById):
        * svg/graphics/SVGResource.h:
        * svg/graphics/SVGResourceClipper.cpp:
        (WebCore::getClipperById):
        * svg/graphics/SVGResourceClipper.h:
        * svg/graphics/SVGResourceFilter.cpp:
        (WebCore::getFilterById):
        * svg/graphics/SVGResourceFilter.h:
        * svg/graphics/SVGResourceMarker.cpp:
        (WebCore::getMarkerById):
        * svg/graphics/SVGResourceMarker.h:
        * svg/graphics/SVGResourceMasker.cpp:
        (WebCore::getMaskerById):
        * svg/graphics/SVGResourceMasker.h:

2009-12-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Cleanup RenderPath code, related to markers. Pass around
        PaintInfo objects instead of GraphicsContext directly, to
        avoid having to recreate a new PaintInfo object in
        SVGResourceMarker::draw().

        No layout test changes.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        (WebCore::DrawMarkersData::DrawMarkersData):
        (WebCore::drawMarkerWithData):
        (WebCore::drawStartAndMidMarkers):
        (WebCore::RenderPath::drawMarkersIfNeeded):
        * rendering/RenderPath.h:
        * svg/graphics/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::draw):
        * svg/graphics/SVGResourceMarker.h:

2009-12-27  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Eric Seidel.

        WinCE buildfix (added missing header)

        * platform/text/wince/TextBreakIteratorWince.cpp:

2009-12-27  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Eric Seidel.

        Buildfix after r50760 and some style fixes.

        * rendering/RenderThemeWince.cpp:
        (WebCore::RenderThemeWince::paintSearchFieldCancelButton):
        (WebCore::RenderThemeWince::paintSliderTrack):
        (WebCore::RenderThemeWince::paintSliderThumb):
        (WebCore::RenderThemeWince::paintMediaMuteButton):
        (WebCore::RenderThemeWince::paintMediaPlayButton):

2009-12-27  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Barth.

        WinCE buildfixes (missing headers and unsupported HWND_MESSAGE)

        * platform/wince/MIMETypeRegistryWince.cpp:
        * platform/wince/SearchPopupMenuWince.cpp:
        * platform/wince/SharedTimerWince.cpp:
        (WebCore::initializeOffScreenTimerWindow):

2009-12-26  Eric Seidel  <eric@webkit.org>

        No review, rolling out r52554.
        http://trac.webkit.org/changeset/52554

        https://bugs.webkit.org/show_bug.cgi?id=32955
        The original change was covered under
        https://bugs.webkit.org/show_bug.cgi?id=32913

        r52554 was itself a rollout of r52536.
        However it caused two layout tests to fail on Leopard:
        storage/open-database-while-transaction-in-progress.html
        svg/W3C-SVG-1.1/filters-conv-01-f.svg (no clue why?)

        So I'm rolling out the rollout in an attempt to get the bots green.
        r52554 did not explain why it was rolled out, so I do not know
        what might fail for Chromium after this change.  I warned the folks
        in #chromium that it was coming.

        * storage/Database.cpp:
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::performOpenAndVerify):

2009-12-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7483622> REGRESSION (r47255): Extra Large Amount of Empty Space
        https://bugs.webkit.org/show_bug.cgi?id=32690

        Test: fast/block/float/clear-to-fit.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::getClearDelta): Only clear floats as needed to
        fit the child on the line.

2009-12-25  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Implement HTML5 section element.
        https://bugs.webkit.org/show_bug.cgi?id=32936

        <section> should behave the same as <nav>.

        Test: fast/html/section-element.html

        * css/html.css: Add section as a block element.
        * editing/htmlediting.cpp:
        (WebCore::validBlockTag): Add sectionTag.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::tagPriority): Returns 5 for sectionTag.
        (WebCore::blockTagList): Add sectionTag.
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::getNode): Add sectionTag.
        * html/HTMLTagNames.in: Add section.

2009-12-25  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

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

        Cleans up XSSAuditor.

        Currently, we pass various parameters through to XSSAuditor::findInRequest
        that are used to determine how to decode the HTTP input parameters so that
        we can perform a match against the script source. Instead, we have defined
        a structure XSSAuditor::FindTask that can hold all of these parameters.

        No functionality was changed. So, no new tests.

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canEvaluate): Modified to use struct
        XSSAuditor::FindTask.
        (WebCore::XSSAuditor::canEvaluateJavaScriptURL): Ditto.
        (WebCore::XSSAuditor::canCreateInlineEventListener): Ditto.
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc): Ditto.
        (WebCore::XSSAuditor::canLoadObject): Ditto.
        (WebCore::XSSAuditor::canSetBaseElementURL): Ditto.
        (WebCore::XSSAuditor::findInRequest): Ditto.
        * page/XSSAuditor.h:
        (WebCore::XSSAuditor::FindTask::FindTask): Added.

2009-12-25  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        DOMWindow is missing lots of SVG* constructor objects
        https://bugs.webkit.org/show_bug.cgi?id=20430

        Expose all implemented SVG 1.1 constructors.

        Test: svg/custom/global-constructors.js

        * bindings/v8/V8Index.cpp: Add missing includes for SVGFontFaceElement & SVGMissingGlyphElement
        * bindings/v8/V8Index.h: Add misisng SVGFontFaceElement & SVGMissingGlyphElement declarations.
        * page/DOMWindow.idl: Add a bunch of new SVG object ctors.
        * svg/SVGAnimatedPathData.idl: Add OmitConstructor flag, as this is a SVG MI class, which is not exposable at the moment.
        * svg/SVGAnimatedPoints.idl: Ditto.

2009-12-25  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        AuditsPanel for Web Inspector (hidden, no preset audits).

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

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/AuditLauncherView.js: Added.
        (WebInspector.AuditLauncherView.categorySortFunction):
        (WebInspector.AuditLauncherView):
        (WebInspector.AuditLauncherView.prototype.updateResourceTrackingState):
        (WebInspector.AuditLauncherView.prototype._setAuditRunning):
        (WebInspector.AuditLauncherView.prototype._launchButtonClicked.profilingFinishedCallback):
        (WebInspector.AuditLauncherView.prototype._launchButtonClicked):
        (WebInspector.AuditLauncherView.prototype._selectAllClicked):
        (WebInspector.AuditLauncherView.prototype._categoryClicked):
        (WebInspector.AuditLauncherView.prototype._createCategoryElement):
        (WebInspector.AuditLauncherView.prototype._createLauncherUI):
        (WebInspector.AuditLauncherView.prototype._updateButton):
        (WebInspector.AuditLauncherView.prototype.resize):
        * inspector/front-end/AuditResultView.js: Added.
        (WebInspector.AuditResultView.entrySortFunction):
        (WebInspector.AuditResultView):
        (WebInspector.AuditCategoryResultPane):
        (WebInspector.AuditRuleResultPane):
        (WebInspector.AuditRuleResultPane.prototype._decorateRuleResult):
        (WebInspector.AuditRuleResultChildSection):
        (WebInspector.AuditRuleResultChildSection.prototype.set title):
        (WebInspector.AuditRuleResultChildSection.prototype.expand):
        * inspector/front-end/AuditsPanel.js: Added.
        (WebInspector.AuditsPanel):
        (WebInspector.AuditsPanel.prototype.toolbarItemClass.get toolbarItemLabel):
        (WebInspector.AuditsPanel.prototype.get statusBarItems):
        (WebInspector.AuditsPanel.prototype.get mainResourceLoadTime):
        (WebInspector.AuditsPanel.prototype.set mainResourceLoadTime):
        (WebInspector.AuditsPanel.prototype.get mainResourceDOMContentTime):
        (WebInspector.AuditsPanel.prototype.set mainResourceDOMContentTime):
        (WebInspector.AuditsPanel.prototype.get categoriesById):
        (WebInspector.AuditsPanel.prototype.get visibleView):
        (WebInspector.AuditsPanel.prototype._constructCategories):
        (WebInspector.AuditsPanel.prototype._executeAudit.ruleResultReadyCallback):
        (WebInspector.AuditsPanel.prototype._executeAudit):
        (WebInspector.AuditsPanel.prototype._auditFinishedCallback):
        (WebInspector.AuditsPanel.prototype.initiateAudit.initiateAuditCallback):
        (WebInspector.AuditsPanel.prototype.initiateAudit):
        (WebInspector.AuditsPanel.prototype._reloadResources):
        (WebInspector.AuditsPanel.prototype._didMainResourceLoad):
        (WebInspector.AuditsPanel.prototype.showResults):
        (WebInspector.AuditsPanel.prototype.showLauncherView):
        (WebInspector.AuditsPanel.prototype.showView):
        (WebInspector.AuditsPanel.prototype.show):
        (WebInspector.AuditsPanel.prototype.attach):
        (WebInspector.AuditsPanel.prototype.resize):
        (WebInspector.AuditsPanel.prototype.updateMainViewWidth):
        (WebInspector.AuditsPanel.prototype._updateLauncherViewControls):
        (WebInspector.AuditsPanel.prototype._clearButtonClicked):
        (WebInspector.AuditsPanel.prototype._closeVisibleView):
        (WebInspector.AuditCategory):
        (WebInspector.AuditCategory.prototype.get id):
        (WebInspector.AuditCategory.prototype.get displayName):
        (WebInspector.AuditCategory.prototype.get ruleCount):
        (WebInspector.AuditCategory.prototype.addRule):
        (WebInspector.AuditCategory.prototype.runRules):
        (WebInspector.AuditRule):
        (WebInspector.AuditRule.prototype.get id):
        (WebInspector.AuditRule.prototype.get displayName):
        (WebInspector.AuditRule.prototype.run):
        (WebInspector.AuditRule.prototype.doRun):
        (WebInspector.AuditRule.prototype.getValue):
        (WebInspector.AuditCategoryResult):
        (WebInspector.AuditCategoryResult.prototype.addEntry):
        (WebInspector.AuditRuleResult):
        (WebInspector.AuditRuleResult.prototype.appendChild):
        (WebInspector.AuditRuleResult.prototype.set type):
        (WebInspector.AuditRuleResult.prototype.get type):
        (WebInspector.AuditsSidebarTreeElement):
        (WebInspector.AuditsSidebarTreeElement.prototype.onattach):
        (WebInspector.AuditsSidebarTreeElement.prototype.onselect):
        (WebInspector.AuditsSidebarTreeElement.prototype.get selectable):
        (WebInspector.AuditsSidebarTreeElement.prototype.refresh):
        (WebInspector.AuditResultSidebarTreeElement):
        (WebInspector.AuditResultSidebarTreeElement.prototype.onselect):
        (WebInspector.AuditResultSidebarTreeElement.prototype.get selectable):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/audits.css: Added.
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):
        (WebInspector.updateResource):

2009-12-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Implement Edit Inner HTML action.

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

        * English.lproj/localizedStrings.js:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::pushNodePathToFrontend):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::pushNodePathToFrontendCallback):
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::pushNodePathToFrontend):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.show):
        (WebInspector.ElementsPanel.prototype._updateModifiedNodesSoon):
        (WebInspector.ElementsPanel.prototype.updateModifiedNodes):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        (WebInspector.ElementsTreeElement.prototype._startEditingAsHTML.commit):
        (WebInspector.ElementsTreeElement.prototype._startEditingAsHTML.dispose):
        (WebInspector.ElementsTreeElement.prototype._startEditingAsHTML):
        ():
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.getNodePropertyValue):
        (InjectedScript.setOuterHTML):
        (InjectedScript.performSearch.addNodesToResults):
        (InjectedScript._inspectObject):
        (InjectedScript._copy):
        (InjectedScript.pushNodeToFrontend):
        * inspector/front-end/InjectedScriptAccess.js:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.hiddenPanels):
        (.WebInspector.InspectorFrontendHostStub.prototype.windowUnloading):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector.startEditing.keyDownEventListener):
        (WebInspector.startEditing):

2009-12-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Console should force long URLs to wrap
        https://bugs.webkit.org/show_bug.cgi?id=32927

        * inspector/front-end/inspector.css: Added "word-wrap: break-word;" to
        the #console-messages rule.

2009-12-24  Shinichiro Hamaji  <hamaji@chromium.org>

        Unreviewed Chromium test fix by reverting r52536.

        Do not a new Database pointer to any structure until its version has been verified
        https://bugs.webkit.org/show_bug.cgi?id=32913

        * storage/Database.cpp:
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::performOpenAndVerify):

2009-12-24  Jessie Berlin  <jberlin@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for WebKit bug 29968 - Selecting text with text-overflow ellipsis
        should not show cut off text
        https://bugs.webkit.org/show_bug.cgi?id=29968

        Also fixes the issue on both Mac OS X and Windows where the highlight
        would extend only partway into the ellipsis based on the size of the
        characters being truncated.

        Test: editing/selection/select-text-overflow-ellipsis.html

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        When the ellipsis have been selected, paints them with the color for
        selected text.
        (WebCore::EllipsisBox::selectionRect):
        Returns the selection rect for the ellipsis text.
        (WebCore::EllipsisBox::paintSelection):
        Paints the selection highlight around the ellipsis text.

        * rendering/EllipsisBox.h:
        (WebCore::EllipsisBox::EllipsisBox):
        Default the selection state of the EllipsisBox to SelectionNone.
        (WebCore::EllipsisBox::setSelectionState):
        Allow the selection state to be explicitly set by the InlineTextBox
        that it is associated with, since the selection state depends on the
        position of the selection within the truncated text.
        (WebCore::EllipsisBox::selectionState):
        Return the cached selection state.
        
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionState):
        If the text is truncated and the selection extends into the truncation
        where there are ellipsis, set the selection state on the EllipsisBox.
        (WebCore::paintTextWithShadows):
        Allow for an upper bound to be specified on the maximum length of the
        text to be painted.
        (WebCore::InlineTextBox::paint):
        Make sure the text that is drawn gets appropriately truncated. This was
        not an issue before on Mac OS X because it wasn't necessary to draw the
        selected text separately (the selected text had the same color as the
        non-selected text).
        (WebCore::InlineTextBox::paintSelection):
        If the text is being truncated, let whatever is being painted in the
        space after the truncated text paint its own highlight. 
        
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::truncation):
        Allow RenderText to access the truncation status.
        
        * rendering/RenderText.cpp:
        (WebCore::RenderText::selectionRectForRepaint):
        Make sure that any ellipsis box that falls within the selection also
        gets repainted.

2009-12-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: add Settings.js class that would manage
        frontend settings.

        This change:
        - Splits preferences and settings
        - Pushes settings to the frontend on load
        - Stores settings on each change
        - Stores showInheritedStyles as setting.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::saveFrontendSettings):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::populateFrontendSettings):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/EventListenersSidebarPane.js:
        (WebInspector.EventListenersSidebarPane.prototype._settingsLoaded):
        (WebInspector.EventListenersSidebarPane.prototype):
        ():
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub):
        (.WebInspector.InspectorBackendStub.prototype.saveFrontendSettings):
        (.WebInspector.InspectorBackendStub.prototype.releaseWrapperObjectGroup):
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub):
        (.WebInspector.InspectorFrontendHostStub.prototype.hiddenPanels):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._createStatusbarButtons):
        (WebInspector.ResourcesPanel.prototype._settingsLoaded):
        (WebInspector.ResourcesPanel.prototype._toggleLargerResources):
        (WebInspector.ResourcesPanel.prototype._setLargerResources):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu):
        * inspector/front-end/Settings.js: Added.
        (WebInspector.populateFrontendSettings):
        (WebInspector.Settings):
        (WebInspector.Settings.prototype._load):
        (WebInspector.Settings.prototype._installSetting):
        (WebInspector.Settings.prototype._get):
        (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.StylePropertiesSection.showInheritedToggleFunction):
        (WebInspector.StylePropertiesSection):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSidebarPane):
        (WebInspector.WatchExpressionsSidebarPane.prototype._settingsLoaded):
        (WebInspector.WatchExpressionsSidebarPane.prototype.refreshExpressions):
        (WebInspector.WatchExpressionsSection):
        (WebInspector.WatchExpressionsSection.prototype.saveExpressions):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):

2009-12-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: [REGRESSION] console's clear command does not work.

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

        Test: inspector/console-clear.html

        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::clearConsoleMessages):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorBackend.cpp:
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::clearConsoleMessages):
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorController.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView):
        (WebInspector.ConsoleView.prototype.requestClearConsoleMessages):
        (WebInspector.ConsoleView.prototype.clearConsoleMessages):
        (WebInspector.ConsoleView.prototype._clearButtonClicked):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.clearConsoleMessages):
        (InjectedScript._ensureCommandLineAPIInstalled):
        * inspector/front-end/InjectedScriptAccess.js:
        * inspector/front-end/inspector.js:
        (WebInspector.clearConsoleMessages):
        (WebInspector.reset):

2009-12-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Console dumps strings in escaped form.

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype._formatIndividualValue):

2009-12-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=32905
        With Pinyin Simplified IM, a wrong character is deleted from google.com suggestion

        Test: platform/mac/editing/input/selection-change-closes-typing.html

        * editing/Editor.cpp: (WebCore::Editor::confirmComposition): If this function wasn't allowed
        to change selection, it needs to close the current typing command - otherwise, its idea of
        selection would be used for future typing.

2009-12-23  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Eric Seidel.

        PlatformContextSkia::beginLayerClippedToImage() needs to clip outside of the image.
        
        This method should limit the current painting window to the bounds of the given
        image, but it did not. Due to this bug, unnecessary contents were rendered in
        some (limited) situations.

        [Skia] PlatformContextSkia::beginLayerClippedToImage does not clip outside of the image
        https://bugs.webkit.org/show_bug.cgi?id=32817
        
        No new tests, because this is a fix of an existing test which is currently failing in
        Chromium.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::beginLayerClippedToImage): Add clipRect() call.

2009-12-23  Nikolas Zimmermann  <nzimmermann@rim.com>

        Rubber-stamped by Eric Seidel.

        Remove all references to "GenerateConstructor", as this is the default behaviour now.

        * css/CSSCharsetRule.idl:
        * css/CSSFontFaceRule.idl:
        * css/CSSImportRule.idl:
        * css/CSSMediaRule.idl:
        * css/CSSPageRule.idl:
        * css/CSSPrimitiveValue.idl:
        * css/CSSRule.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleRule.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSValue.idl:
        * css/CSSValueList.idl:
        * css/CSSVariablesDeclaration.idl:
        * css/CSSVariablesRule.idl:
        * css/Counter.idl:
        * css/Media.idl:
        * css/MediaList.idl:
        * css/RGBColor.idl:
        * css/Rect.idl:
        * css/StyleSheet.idl:
        * css/StyleSheetList.idl:
        * css/WebKitCSSKeyframeRule.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * css/WebKitCSSTransformValue.idl:
        * dom/Attr.idl:
        * dom/BeforeLoadEvent.idl:
        * dom/CDATASection.idl:
        * dom/CharacterData.idl:
        * dom/ClientRect.idl:
        * dom/ClientRectList.idl:
        * dom/Clipboard.idl:
        * dom/Comment.idl:
        * dom/CompositionEvent.idl:
        * dom/DOMCoreException.idl:
        * dom/DOMImplementation.idl:
        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/DocumentType.idl:
        * dom/Element.idl:
        * dom/Entity.idl:
        * dom/EntityReference.idl:
        * dom/ErrorEvent.idl:
        * dom/Event.idl:
        * dom/EventException.idl:
        * dom/KeyboardEvent.idl:
        * dom/MessageEvent.idl:
        * dom/MessagePort.idl:
        * dom/MouseEvent.idl:
        * dom/MutationEvent.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeFilter.idl:
        * dom/NodeIterator.idl:
        * dom/NodeList.idl:
        * dom/Notation.idl:
        * dom/OverflowEvent.idl:
        * dom/PageTransitionEvent.idl:
        * dom/PopStateEvent.idl:
        * dom/ProcessingInstruction.idl:
        * dom/ProgressEvent.idl:
        * dom/Range.idl:
        * dom/RangeException.idl:
        * dom/Text.idl:
        * dom/TextEvent.idl:
        * dom/Touch.idl:
        * dom/TouchEvent.idl:
        * dom/TouchList.idl:
        * dom/TreeWalker.idl:
        * dom/UIEvent.idl:
        * dom/WebKitAnimationEvent.idl:
        * dom/WebKitTransitionEvent.idl:
        * dom/WheelEvent.idl:
        * html/DataGridColumn.idl:
        * html/DataGridColumnList.idl:
        * html/File.idl:
        * html/FileList.idl:
        * html/HTMLAllCollection.idl:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLAudioElement.idl:
        * html/HTMLBRElement.idl:
        * html/HTMLBaseElement.idl:
        * html/HTMLBaseFontElement.idl:
        * html/HTMLBlockquoteElement.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLCollection.idl:
        * html/HTMLDListElement.idl:
        * html/HTMLDataGridCellElement.idl:
        * html/HTMLDataGridColElement.idl:
        * html/HTMLDataGridElement.idl:
        * html/HTMLDataGridRowElement.idl:
        * html/HTMLDataListElement.idl:
        * html/HTMLDirectoryElement.idl:
        * html/HTMLDivElement.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFieldSetElement.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/HTMLMarqueeElement.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/HTMLSelectElement.idl:
        * html/HTMLSourceElement.idl:
        * html/HTMLStyleElement.idl:
        * html/HTMLTableCaptionElement.idl:
        * html/HTMLTableCellElement.idl:
        * html/HTMLTableColElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLTitleElement.idl:
        * html/HTMLUListElement.idl:
        * html/HTMLVideoElement.idl:
        * html/ImageData.idl:
        * html/MediaError.idl:
        * html/TextMetrics.idl:
        * html/canvas/CanvasNumberArray.idl:
        * html/canvas/CanvasRenderingContext.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorFrontendHost.idl:
        * page/PositionError.idl:
        * plugins/MimeType.idl:
        * plugins/MimeTypeArray.idl:
        * plugins/Plugin.idl:
        * plugins/PluginArray.idl:
        * storage/Storage.idl:
        * storage/StorageEvent.idl:
        * svg/SVGAngle.idl:
        * svg/SVGColor.idl:
        * svg/SVGComponentTransferFunctionElement.idl:
        * svg/SVGException.idl:
        * svg/SVGFEBlendElement.idl:
        * svg/SVGFEColorMatrixElement.idl:
        * svg/SVGFECompositeElement.idl:
        * svg/SVGFEDisplacementMapElement.idl:
        * svg/SVGFEFloodElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFETurbulenceElement.idl:
        * svg/SVGGradientElement.idl:
        * svg/SVGLength.idl:
        * svg/SVGMarkerElement.idl:
        * svg/SVGPaint.idl:
        * svg/SVGPathSeg.idl:
        * svg/SVGPreserveAspectRatio.idl:
        * svg/SVGRenderingIntent.idl:
        * svg/SVGTextContentElement.idl:
        * svg/SVGTextPathElement.idl:
        * svg/SVGTransform.idl:
        * svg/SVGUnitTypes.idl:
        * svg/SVGZoomAndPan.idl:
        * workers/AbstractWorker.idl:
        * workers/WorkerLocation.idl:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequestException.idl:
        * xml/XMLHttpRequestProgressEvent.idl:
        * xml/XMLHttpRequestUpload.idl:
        * xml/XMLSerializer.idl:
        * xml/XPathEvaluator.idl:
        * xml/XPathException.idl:
        * xml/XPathExpression.idl:
        * xml/XPathResult.idl:

2009-12-23  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Eric Seidel.

        A new database should be registered with the Document,
        DatabaseTracker and DatabaseThread only after it was successfully
        opened and its version was successfully verified.

        Fixes a regression introduced by
        http://trac.webkit.org/changeset/52530.

        LayoutTests/storage/open-database-while-transaction-in-progress.html
        should pass again (or rather, it should pass again when run after
        open-database-set-empty-version.html).

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

        * storage/Database.cpp:
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::performOpenAndVerify):

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

        REGRESSION (r52494): Assertion failure in Frame::caretBlinkTimerFired() (selection()->isCaret())
        https://bugs.webkit.org/show_bug.cgi?id=32903

        No review but ok'ed by Darin Adler. Rolling out r52494 due to above regression.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController):
        (WebCore::SelectionController::setSelection):
        * editing/SelectionController.h:
        * page/Frame.cpp:
        (WebCore::Frame::setCaretVisible):
        (WebCore::Frame::selectionLayoutChanged):
        * page/FrameView.cpp:
        (WebCore::FrameView::needsLayout):

2009-12-23  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Eric Seidel.

        Reverse JS GenerateConstructor logic
        https://bugs.webkit.org/show_bug.cgi?id=32910

        Make 'GenerateConstructor' the default setting for all classes, defined in IDL files. The flag is now obsolete and
        can be removed from all IDL files in a follow-up patch. Add new 'OmitConstructor' flag, that allows to restore the
        old default behaviour: do not generate JSFoobarConstructor class.

        No change in functionality, despite the fact that we're generating a lot more constructors now, as they have to
        be exposed through DOMWindow.idl -- this can be done per affected class in follow-up patches. Especially the SVG
        classes have to be exposed, most of them are missing JS constructors so far.

        As side effect HTMLOptionsCollection is now correctly exposing its constructor, thus fixing a test in fast/dom/wrapper-classes.html

        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSUnknownRule.idl:
        * css/WebKitCSSMatrix.idl:
        * dom/EventListener.idl:
        * dom/EventTarget.idl:
        * dom/MessageChannel.idl:
        * html/TimeRanges.idl:
        * html/ValidityState.idl:
        * html/VoidCallback.idl:
        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasPattern.idl:
        * html/canvas/CanvasPixelArray.idl:
        * html/canvas/WebGLActiveInfo.idl:
        * html/canvas/WebGLArray.idl:
        * html/canvas/WebGLArrayBuffer.idl:
        * html/canvas/WebGLBuffer.idl:
        * html/canvas/WebGLByteArray.idl:
        * html/canvas/WebGLFloatArray.idl:
        * html/canvas/WebGLFramebuffer.idl:
        * html/canvas/WebGLIntArray.idl:
        * html/canvas/WebGLProgram.idl:
        * html/canvas/WebGLRenderbuffer.idl:
        * html/canvas/WebGLShader.idl:
        * html/canvas/WebGLShortArray.idl:
        * html/canvas/WebGLTexture.idl:
        * html/canvas/WebGLUniformLocation.idl:
        * html/canvas/WebGLUnsignedByteArray.idl:
        * html/canvas/WebGLUnsignedIntArray.idl:
        * html/canvas/WebGLUnsignedShortArray.idl:
        * inspector/JavaScriptCallFrame.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * notifications/Notification.idl:
        * notifications/NotificationCenter.idl:
        * page/AbstractView.idl:
        * page/BarInfo.idl:
        * page/Console.idl:
        * page/Coordinates.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.idl:
        * page/EventSource.idl:
        * page/Geolocation.idl:
        * page/Geoposition.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/Navigator.idl:
        * page/Screen.idl:
        * page/WebKitPoint.idl:
        * page/WorkerNavigator.idl:
        * storage/Database.idl:
        * storage/SQLError.idl:
        * storage/SQLResultSet.idl:
        * storage/SQLResultSetRowList.idl:
        * storage/SQLTransaction.idl:
        * websockets/WebSocket.idl:
        * workers/DedicatedWorkerContext.idl:
        * workers/SharedWorker.idl:
        * workers/SharedWorkerContext.idl:
        * workers/Worker.idl:
        * workers/WorkerContext.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XPathNSResolver.idl:
        * xml/XSLTProcessor.idl:

2009-12-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        "Refused to execute a JavaScript script" error when embedding SWF with
        a URL that is also a query parameter
        https://bugs.webkit.org/show_bug.cgi?id=32908

        Don't block direct injections into the object src attribute unless
        there's an illegal character (like < or ") in the URL.  This change
        lets some very unusual vulnerabilities through the filter but removes a
        false positive that we've seen several times.

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canLoadObject):

2009-12-23  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dmitry Titov.

        Remove pointers to a database that failed to open from the
        DatabaseTracker and Document.

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

        * storage/Database.cpp:
        (WebCore::Database::openDatabase):

2009-12-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7487164> First line of text cannot be selected
        https://bugs.webkit.org/show_bug.cgi?id=32749

        Test: fast/text/remove-zero-length-run.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionLineBox): Changed code that assumed that if a box was being
            removed, it was the only box in the RenderText. Instead, correctly preserve the list of
            text boxes.
        (WebCore::RenderText::checkConsistency): Updated for earlier rename.

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

        Reviewed by Darin Adler.

        Fix for newlines turning into missing-gyphs when using SVG fonts

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

        Font::drawText() has three code paths:

          - drawTextUsingSVGFont()
          - drawSimpleText()
          - drawComplexText()

        The latter two both have logic to replace newlines and tabs, as well
        as a few other control characters that are considered spaces, with
        spaces, before actually drawing the text. Previously the SVG font
        path did not have this kind of logic.

        This change introduces two helper functions in Font to do this space
        replacement, which are then used for the simple path, the SVG path,
        and the Qt implementation of the complex path.

        Test: svg/custom/svg-fonts-in-html-linebreaks.html

        * platform/graphics/Font.cpp:
        (WebCore::Font::normalizeSpaces): Helper function
        * platform/graphics/Font.h:
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataForCharacter): Use helper
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::fromRawDataWithoutRef): Rename from "qstring"
        (WebCore::Font::drawComplexText): Use helper
        (WebCore::Font::floatWidthForComplexText): Use helper
        (WebCore::Font::offsetForPositionForComplexText): Use helper
        (WebCore::Font::selectionRectForComplexText): Use helper
        * platform/text/CharacterNames.h: Add enum for 0x0020
        * svg/SVGFont.cpp: Use helper to fix bug
        (WebCore::SVGTextRunWalker::walk):

2009-12-23  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        HTMLInputElement::valueAsDate getter support.
        https://bugs.webkit.org/show_bug.cgi?id=32876

        To implement the valueAsDate getter,
        - Add a method to calculate milliseconds from 1970-01-01 to ISODateTime.
        - Introduce m_type field to ISODateTime.

        Tests: fast/forms/input-valueasdate-date.html
               fast/forms/input-valueasdate-datetime.html
               fast/forms/input-valueasdate-datetimelocal.html
               fast/forms/input-valueasdate-month.html
               fast/forms/input-valueasdate-time.html
               fast/forms/input-valueasdate-week.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::valueAsDate):
          Implement it with ISODateTime::millisecondsSinceEpoch().
        (WebCore::HTMLInputElement::formStringToISODateTime):
          Early exit for a null String. This avoids assertion failures in ISODateTime::parse*().
        * html/ISODateTime.cpp:
        (WebCore::ISODateTime::parseMonth): Sets m_type.
        (WebCore::ISODateTime::parseDate): ditto.
        (WebCore::ISODateTime::parseWeek): ditto.
        (WebCore::ISODateTime::parseTime): ditto.
        (WebCore::ISODateTime::parseDateTimeLocal): ditto.
        (WebCore::ISODateTime::parseDateTime): ditto.
        (WebCore::ISODateTime::millisecondsSinceEpochForTime): Added.
        (WebCore::ISODateTime::millisecondsSinceEpoch): Added.
        * html/ISODateTime.h:
        (WebCore::ISODateTime::ISODateTime):
        (WebCore::ISODateTime::invalidMilliseconds):

2009-12-22  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel.

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

        Renames enums in RenderStyleConstants::EListStyleType to conform to
        the WebKit Code Style Guidelines.

        No functionality was changed. So, no new tests.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EListStyleType):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::styleDidChange):
        * rendering/RenderListMarker.cpp:
        (WebCore::listMarkerText):
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::calcPrefWidths):
        (WebCore::RenderListMarker::updateMargins):
        (WebCore::RenderListMarker::getRelativeMarkerRect):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::initialListStyleType):
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-12-22  James Su  <suzhe@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Keyboard shortcut in dropdown not working.
        https://bugs.webkit.org/show_bug.cgi?id=32008

        Consider PlatformKeyboardEvent::Char type event as character type
        event on all platforms. It fixes the "type ahead find" feature
        of the popup listbox on Linux and Mac platforms.

        Merge the case-sensitive type ahead find fix from
        WebCore/dom/SelectElement.cpp. See
        https://bugs.webkit.org/show_bug.cgi?id=29103

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::isCharacterTypeEvent):

2009-12-22  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] The "Search" input type is not rendered correctly when styled.
        https://bugs.webkit.org/show_bug.cgi?id=32417

        There are no new tests because only pixel tests may be affected by
        this change and those changes can only be done on the build bot.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintSearchField):
        Since currently we paint the Search control as a QLineEdit, I have
        deferred painting to WebCore, as in the case of the text input so 
        that the painting is consistent.

2009-12-22  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=32121
        [Qt] implement ImageDecoderQt::clearFrameBufferCache().
       
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::initializeDecoder):
        (WebCore::ImageDecoderQt::setData):
        (WebCore::ImageDecoderQt::clearFrameBufferCache):
        * platform/graphics/qt/ImageDecoderQt.h:

2009-12-22  Nayan Kumar K  <nayankk@gmail.com>

        Reviewed by Eric Seidel.

        Fix assert failure with WML pages having 'Refresh' task in
        'onenterforward' event.

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

        Writing Layout test is not possible. Please refer to the discussion
        in bug id #30989. A sample test case is attached in BugZilla.

        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::handleIntrinsicEventIfNeeded):

2009-12-22  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        ASSERTION FAILED: m_numNodeListCaches
        https://bugs.webkit.org/show_bug.cgi?id=19526
        <rdar://problem/7431572>

        Test: fast/dom/NodeList/adoptNode-node-list-cache.html

        * dom/Node.cpp:
        (WebCore::Node::setDocument): Call removeNodeListCache on the old
        document and addNodeListCache on the new one if moving a node that
        has node lists.

2009-12-22  Darin Adler  <darin@apple.com>

        First cut at fixing Windows build.

        * WebCorePrefix.cpp: Touch it.

2009-12-22  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        Turn off datagrid by default, at least for all platforms Apple ships.
        The datagrid implementation isn't ready for general web use yet.

        * Configurations/FeatureDefines.xcconfig: Turn off datagrid by default.
        * WebCore.vcproj/WebCoreCommon.vsprops: Ditto.
        * WebCore.vcproj/build-generated-files.sh: Ditto.
        * page/DOMWindow.idl: Sorted things here to touch the file to give
        the Windows build a slightly better chance of success.

2009-12-22  Darin Adler  <darin@apple.com>

        Rubber stamped by Dan Bernstein.

        * page/FrameView.h: Removed incorrect comment.

2009-12-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: simplify highlighter definition.

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

        * inspector/front-end/CSSSourceSyntaxHighlighter.js:
        (WebInspector.CSSSourceSyntaxHighlighter):
        * inspector/front-end/JavaScriptSourceSyntaxHighlighter.js:
        (WebInspector.JavaScriptSourceSyntaxHighlighter.):
        (WebInspector.JavaScriptSourceSyntaxHighlighter):
        * inspector/front-end/SourceSyntaxHighlighter.js:
        (WebInspector.SourceSyntaxHighlighter.prototype.lex):
        * inspector/front-end/utilities.js:
        ():

2009-12-21  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Reentrancy problem with selection in some edge cases.
        https://bugs.webkit.org/show_bug.cgi?id=32842
        rdar://problem/7449974

        Test: fast/forms/selection-layout-reentry-strange-case.html

        Move the selection display update process done in the
        selectionLayoutChanged function into the layout timer
        instead of doing it immediately when selection changes occur.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController):
        Initialize m_needsDisplayUpdate to false.
        (WebCore::SelectionController::setSelection): Call
        the new setNeedsDisplayUpdate function instead of the old
        badly named Frame::selectionLayoutChanged function.
        (WebCore::SelectionController::setNeedsDisplayUpdate):
        Set m_needsDisplayUpdate. If it is just becoming true, then
        call FrameView::scheduleRelayout.

        * editing/SelectionController.h: Added setNeedsDisplayUpdate,
        needsDisplayUpdate, and m_needsDisplayUpdate.

        * page/Frame.cpp:
        (WebCore::Frame::setCaretVisible): Call setNeedsDisplayUpdate.
        (WebCore::Frame::selectionLayoutChanged): Call
        setNeedsDisplayUpdate to set it to false, since this is the
        function that performs "selection display update". Later I want
        to rename this function.

        * page/FrameView.cpp:
        (WebCore::FrameView::needsLayout): Add a new clause, since
        we need a call to layout if needsDisplayUpdate is true.

2009-12-22  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        Allocate RemoteFontStream on the heap
        https://bugs.webkit.org/show_bug.cgi?id=32850

        RemoteFontStream is allocated on the stack, so its memory is freed
        immediately when FontCustomPlatformData::createFontCustomPlatformData
        returns. 

        SkTypeface::CreateFromStream increments the reference count, but it keeps
        the pointer to the memory allocated on the stack which is not valid
        anymore.

        RemoteFontStream is a descendant of SkRefCount and SkRefCount::unref
        invokes SkDELETE(this) internally once the reference count reaches zero.
        This means that SkRefCount-ed instances must be allocated on the heap.

        * platform/graphics/chromium/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):

2009-12-22  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        when condition COMPILER(RVCT) is fulfilled, we are trying to free a pointer to array allocated on the stack
        https://bugs.webkit.org/show_bug.cgi?id=32861

        Don't free the pointer for COMPILER(RVCT).

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::error):

2009-12-22  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Dan Bernstein.

        Remove no longer necessary experimental single view #ifdefs from Widget and
        ScrollView.

        * page/Chrome.h:
        * page/mac/ChromeMac.mm:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/Widget.cpp:
        * platform/Widget.h:
        * platform/mac/ScrollViewMac.mm:
        * platform/mac/WidgetMac.mm:

2009-12-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Do not lose original request for non-main resource redirects.

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

        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::appendRedirect):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):

2009-12-21  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        Use ASSERT instead of assert in image-decoders
        https://bugs.webkit.org/show_bug.cgi?id=32852

        Other decoders use WTF's ASSERT macro.
        Follow this convention.

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

2009-12-21  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        Use vsnprintf instead of vasprintf for RVCT.
        https://bugs.webkit.org/show_bug.cgi?id=32851

        RVCT does not support vasprint, so use vsnprintf instead.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::error):

2009-12-21  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Invalid url should raise SYNTAX_ERR exception.
        https://bugs.webkit.org/show_bug.cgi?id=32700

        Check url is valid in WebSocket::connect.
        Also log the detailed reason of websocket failures to console.

        * websockets/WebSocket.cpp:
        (WebCore::encodeProtocolString):
        (WebCore::WebSocket::connect):

2009-12-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make sure that we check for the right thread.

        * platform/mac/WebCoreObjCExtras.mm:
        (WebCoreObjCScheduleDeallocateOnMainThread):

2009-12-21  Enrica Casucci  <enrica@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION(4.0.4-ToT): Indent deletes non highlighted text in gmail.
        <rdar://problem/7489326>
        https://bugs.webkit.org/show_bug.cgi?id=32843
        
        The fix for 7442387 did not handle the case where the end of paragraph
        is not a descendant of the computed outer block.
        Updated editing/execCommand/indent-with-style2.html to cover this case too.

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

2009-12-21  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=32831
        Replace UString::Rep implementation, following introduction of ropes to JSC.

        * ForwardingHeaders/runtime/UStringImpl.h: Added.
            - add forwarding header.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::ustring):
            - order of arguments to UString::Rep constructor for shared strings changed.

2009-12-18  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam barth.

        Generate V8 bindings non-constructor callback declarations 
        in CodeGeneratorV8.pm instead of manually declaring them in
        V8CustomBinding.h.

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

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/custom/V8AbstractWorkerCustom.cpp:
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMApplicationCacheCustom.cpp:
        * bindings/v8/custom/V8DOMParserConstructor.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        * bindings/v8/custom/V8GeolocationCustom.cpp:
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        * bindings/v8/custom/V8HTMLPlugInElementCustom.h: Added.
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        * bindings/v8/custom/V8HistoryCustom.cpp:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        * bindings/v8/custom/V8LocationCustom.cpp:
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        * bindings/v8/custom/V8NodeCustom.cpp:
        * bindings/v8/custom/V8NodeFilterCustom.cpp:
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp:
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        * bindings/v8/custom/V8SVGElementInstanceCustom.cpp:
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        * bindings/v8/custom/V8SharedWorkerCustom.cpp:
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        * bindings/v8/custom/V8WebGLArrayBufferCustom.cpp:
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebKitCSSMatrixConstructor.cpp:
        * bindings/v8/custom/V8WebKitPointConstructor.cpp:
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        * bindings/v8/custom/V8WorkerCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp:
        * bindings/v8/custom/V8XMLSerializerConstructor.cpp:
        * bindings/v8/custom/V8XPathEvaluatorConstructor.cpp:
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:

2009-12-21  Nate Chapin  <japhet@chromium.org>

        Rubber-stamped by Darin Adler.

        Revert r52446 due to crashiness.

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

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::pageHidden):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::suppressOpenerInNewFrame):
        * loader/Request.cpp:
        (WebCore::Request::Request):
        (WebCore::Request::~Request):
        * loader/Request.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * loader/SubresourceLoader.h:
        * loader/loader.cpp:
        (WebCore::Loader::load):
        (WebCore::Loader::cancelRequests):
        (WebCore::Loader::Host::servePendingRequests):
        (WebCore::Loader::Host::cancelPendingRequests):
        (WebCore::Loader::Host::cancelRequests):

2009-12-19  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Barth.

        Add support for V8 Date binding.
        https://bugs.webkit.org/show_bug.cgi?id=32699

        This implements the same behavior as the recent change of
        CodeGeneratorJS.pm and JSDOMBinding.cpp.

        * bindings/scripts/CodeGeneratorV8.pm:
          Produce toWebCoreDate() or v8DateOrNull() for Date type.
        * bindings/v8/V8Binding.cpp:
        (WebCore::toWebCoreDate):
          Converts a JavaScript object to a double representing Date.
        (WebCore::v8DateOrNull):
          Converts a double representing Date to a JavaScript Date object or null.
        * bindings/v8/V8Binding.h: Declare toWebCoreDate() and v8DateOrNull().
        * html/HTMLInputElement.idl: Delete V8_BINGIN exclusion for valueAsDate.

2009-12-21  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        Renamed m_sel to m_selection. Used do-webcore-rename.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::nodeWillBeRemoved):
        (WebCore::SelectionController::willBeModified):
        (WebCore::SelectionController::directionOfEnclosingBlock):
        (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::expandUsingGranularity):
        (WebCore::SelectionController::xPosForVerticalArrowNavigation):
        (WebCore::SelectionController::setBase):
        (WebCore::SelectionController::setExtent):
        (WebCore::SelectionController::layout):
        (WebCore::SelectionController::caretRenderer):
        (WebCore::SelectionController::invalidateCaretRect):
        (WebCore::SelectionController::paintCaret):
        (WebCore::SelectionController::debugRenderer):
        (WebCore::SelectionController::contains):
        (WebCore::SelectionController::selectAll):
        (WebCore::SelectionController::formatForDebugger):
        (WebCore::SelectionController::showTreeForThis):
        * editing/SelectionController.h:
        * editing/gtk/SelectionControllerGtk.cpp:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):
        * editing/mac/SelectionControllerMac.mm:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):
        Let the script do its thing. Made sure no tests broke.

2009-12-21  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Darin Adler.

        Inconsistent use of counterName and identifier in CSS counter code and loss of information about the counter type.
        https://bugs.webkit.org/show_bug.cgi?id=31814

        No new tests because there are no functional changes in this patch.

        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::CounterNode):
        (WebCore::CounterNode::computeCountInParent):
        (WebCore::showTreeAndMark):
        * rendering/RenderCounter.cpp:
        (WebCore::planCounter):
        (WebCore::findPlaceForCounter):
        (WebCore::makeCounterNode):
        (WebCore::RenderCounter::originalText):
        Changed to use identifier instead of counterName and actsAsReset or hasResetType, as appropriate instead of isReset.
        * rendering/CounterNode.h:
        (WebCore::CounterNode::actsAsReset):
        (WebCore::CounterNode::hasResetType):

2009-12-21  Dirk Schulze  <krit@webkit.org>

        Reviewed by Darin Adler and Nikolas Zimmermann.

        Speed-up SVG Masking
        https://bugs.webkit.org/show_bug.cgi?id=32738

        This patch makes SVG Masking faster. The luminance calculaton of the ImageBuffer,
        that is created by pixel manipulation, got optimized. The ImageBuffer and it's
        luminance is created once now, not on every call of applyMask.
        The size of the intermediate ImageBuffer depends on the visible area now and is
        clipped by the mask rect.
        
        The patch doesn't change functionality so no new tests needed.
        The new ImageBuffer handling in Mask causes two updates of test results. The pixel
        tests and LayoutTests pass, but the checksum doesn't match.

        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):
        * svg/graphics/SVGResourceMasker.cpp:
        (WebCore::SVGResourceMasker::applyMask):

2009-12-21  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        Fix assertion failure when dragging an SVG image.
        https://bugs.webkit.org/show_bug.cgi?id=32511

        Test: fast/images/drag-svg-as-image.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::filenameExtension): Return "svg"
        * svg/graphics/SVGImage.h:

2009-12-17  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] G_OBJECT() cast is not necessary for signals connection and properties access
        https://bugs.webkit.org/show_bug.cgi?id=32661

        Removed useless calls to the G_OBJECT() macro and replaced NULL
        occurences with a SENTINEL macro.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::hasVideo):
        (WebCore::MediaPlayerPrivate::hasAudio):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):

2009-12-21  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Adler.

        If an image load is started during an unload or beforeunload event, run it
        asynchronously (and allow it to outlive its page) so navigation can continue 
        while the load completes.

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

        Tests: http/tests/navigation/image-load-in-beforeunload-handler.html
               http/tests/navigation/image-load-in-unload-handler.html

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest): 
        * loader/FrameLoader.cpp: Rename m_unloadEventBeingDispatched to m_isDispatchingUnloadEvent.
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): Set m_isDispatchingBeforeUnloadEvent.
        (WebCore::FrameLoader::pageHidden):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::isDispatchingUnloadFamilyEvent): Added.
        * loader/Request.cpp:
        (WebCore::Request::Request): Add OutlivePagePolicy to constructor parameters
        * loader/Request.h:
        (WebCore::): Add OutlivePagePolicy enum.
        (WebCore::Request::shouldOutlivePage): Added.
        (WebCore::Request::frame): Added.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create): Change one of the security checks to an outlive page check.
        * loader/SubresourceLoader.h:
        * loader/loader.cpp:
        (WebCore::Loader::load): Add OutlivePagePolicy to Request constructor call,
             ensure requests that should outlive page are done asynchronously.
        (WebCore::Loader::cancelRequests): Remove ending ASSERT since it will now be hard to predict how
             many requests might possibly outlive a cancel in every case.
        (WebCore::Loader::Host::servePendingRequests): Use the correct frame in the case of a request outliving its page.
        (WebCore::Loader::Host::cancelPendingRequests): Ensure we don't cancel request that should outlive their page.
        (WebCore::Loader::Host::cancelRequests): Ensure we don't cancel request that should outlive their page.

2009-12-18  Adam Roben  <aroben@apple.com>

        Fix Windows build warnings

        * WebCore.vcproj/WebCore.vcproj: Exclude SVG files from the build that
        are compiled via SVGAllInOne.cpp.

2009-12-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Can’t copy outer html of selected node.
        Also adds "Copy as HTML" context menu item.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        * inspector/front-end/inspector.js:
        (WebInspector.documentCanCopy):

2009-12-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Eric Seidel.

        Web Inspector: extract syntax highlighters into separate files.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/CSSSourceSyntaxHighlighter.js: Added.
        (WebInspector.CSSSourceSyntaxHighlighter):
        * inspector/front-end/JavaScriptSourceSyntaxHighlighter.js: Added.
        (WebInspector.JavaScriptSourceSyntaxHighlighter):
        (WebInspector.JavaScriptSourceSyntaxHighlighter.):
        * inspector/front-end/SourceFrame.js:
        * inspector/front-end/SourceSyntaxHighlighter.js: Added.
        (WebInspector.SourceSyntaxHighlighter):
        (WebInspector.SourceSyntaxHighlighter.prototype.createSpan):
        (WebInspector.SourceSyntaxHighlighter.prototype.process.processChunk):
        (WebInspector.SourceSyntaxHighlighter.prototype.process.moveToNextLine):
        (WebInspector.SourceSyntaxHighlighter.prototype.process):
        (WebInspector.SourceSyntaxHighlighter.prototype.lex):
        (WebInspector.SourceSyntaxHighlighter.prototype.appendNonToken):
        (WebInspector.SourceSyntaxHighlighter.prototype.syntaxHighlightNode):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2009-12-18  Julien Chaffraix  <jchaffraix@pleyo.com>

        Reviewed by Darin Adler.

        defersLoading is disabled in current libcURL.
        https://bugs.webkit.org/show_bug.cgi?id=32707

        Basically this change reverts r49577 that was totally wrong.
        According to curlver.h, LIBCURL_VERSION_NUM is a
        "6-digit (24 bits) hexadecimal number".

        The check should be against 0x071200 (7.18) as it was originally the case.

       * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::initializeHandle): Use the right check.
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setDefersLoading): Ditto. Also removed a print
        to use a LOG_ERROR instead.
 
2009-12-20  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Add support for JavaScriptCore Date binding.
        https://bugs.webkit.org/show_bug.cgi?id=32698

        This is needed for HTMLInputElement::valueAsDate and
        HTMLTimeElement::valueAsDate.

        A Date instance is mapped to a double value in C++.
        - If null or undefined is set to a JavaScript property, C++ setter
          function receives NaN.
        - If a getter C++ function returns NaN or infinity, a JavaScript
          property returns null.

        Test: fast/forms/input-valueasdate.html

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsDateOrNull): Implement the above.
        (WebCore::valueToDate): ditto.
        * bindings/js/JSDOMBinding.h: Declare them.
        * bindings/scripts/CodeGeneratorJS.pm: Produce jsDateOrNull() or
          valueToDate() for Date type.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::valueAsDate): Temporal implementation.
        (WebCore::HTMLInputElement::setValueAsDate): ditto.
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl: Declare valueAsDate.

2009-12-20  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Introduce the followings:
          - ::-webkit-inner-spin-button pseudo CSS selector
          - ::-webkit-outer-spin-button pseudo CSS selector
          - new appearance type: inner-spin-button
          - new appearance type: outer-spin-button
        They're going to be used for <input type=number> UI.
        https://bugs.webkit.org/show_bug.cgi?id=31821

        Inner-spin-button will be used for Windows, and outer-spin-button
        will be used for Mac. A spin-button will represent a pair of an
        increasing button part and a decreasing button part. SpinUpState,
        which is defined in ThemeTypes.h, will be used to distinguish
        these two parts.

        The outer-spin-button implementation will use NSStepperCell.
        NSStepperCell represents the pair of the parts and we can't draw them
        independently. So a spin-button also represents the pair of the parts.

        This change has no tests.  The following changes with tests will cover.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * css/CSSValueKeywords.in:
        * css/html.css:
        * platform/ThemeTypes.h:
        (WebCore::ControlState): Add SpinUpState.
        (WebCore::ControlPart): Add InnerSpinButtonPart and OuterSpinButtonPart.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::adjustInnerSpinButtonStyle): Add an empty implementation.
        (WebCore::RenderTheme::adjustOuterSpinButtonStyle): Add an empty implementation.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintInnerSpinButton): Add an empty implementation.
        (WebCore::RenderTheme::paintOuterSpinButton): Add an empty implementation.
        * rendering/style/RenderStyleConstants.h:
        (WebCore::PseudoId): Add INNER_SPIN_BUTTON and OUTER_SPIN_BUTTON.

2009-12-20  Nayan Kumar K  <nayankk@gmail.com>

        Reviewed by Darin Adler.

        Fix for compilation errors in WML module, due to the changeset #52314.
        https://bugs.webkit.org/show_bug.cgi?id=32786

        No new tests, this is compilation error fix.

        * wml/WMLDocument.cpp:
        * wml/WMLPageState.cpp:
        * wml/WMLPageState.h:

2009-12-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/7487689> REGRESSION (r52203): Inspector console uses
        Monaco on Snow Leopard
        https://bugs.webkit.org/show_bug.cgi?id=32775

        * inspector/front-end/inspector.css: Use the default monospace family
        and size.

2009-12-20  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Xan Lopez.

        [GTK] Remove more GTK+ and GLib headers from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=32795

        Remove most GTK+ and GLib includes from WebCore headers.

        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        * platform/gtk/PasteboardHelper.h:
        * platform/gtk/RenderThemeGtk.cpp:
        * platform/gtk/RenderThemeGtk.h:
        * platform/gtk/ScrollbarGtk.cpp:
        * platform/gtk/ScrollbarThemeGtk.h:
        * platform/gtk/gtk2drawing.c:
        * platform/gtk/gtkdrawing.h:

2009-12-20  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] build fixes after recent changes.

        * bindings/BindingSecurityBase.cpp: Removed V8 header in common code.
        * platform/wx/ContextMenuWx.cpp: Added missing header.
        * plugins/mac/PluginViewMac.cpp: Added missing header.

2009-12-20  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Hopefully fix the assertion we are hitting by not forcing updating
        the state of scrollbars when setting the adjustments. This was
        leading to a premature layout.

        fast/dom/open-and-close-by-DOM.html
        fast/dom/Window/closure-access-after-navigation-window.html
        fast/harness/use-page-cache.html

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setGtkAdjustments):

2009-12-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Darin Adler.

        Web Inspector: Constrain the number of messages the inspector shows.

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

        * English.lproj/localizedStrings.js:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::addConsoleMessage):
        (WebCore::InspectorController::clearConsoleMessages):
        (WebCore::InspectorController::populateScriptObjects):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::updateConsoleMessageExpiredCount):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/inspector.js:
        (WebInspector.updateConsoleMessageExpiredCount):

2009-12-20  Andrei Popescu  <andreip@google.com>

        Reviewed by Adam Barth.

        [Android] Android needs implementation of setCookies, cookies and cookiesEnabled functions.
        https://bugs.webkit.org/show_bug.cgi?id=32559

        Add implementation of the cookie functions.
        Fix a crash caused by dereferencing a 0 MainResourceLoader pointer
        in ResourceHandle::start().

        No new tests, this is platform code.

        * platform/android/PlatformBridge.h:
        * platform/network/android/AuthenticationChallenge.h: Added.
        * platform/network/android/CookieJarAndroid.cpp: Added.
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):
        * platform/network/android/ResourceHandleAndroid.cpp:
        (WebCore::ResourceHandle::start):

2009-12-19  Eric Seidel  <eric@webkit.org>

        No review, rolling out r52395.
        http://trac.webkit.org/changeset/52395

        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):
        * svg/SVGMaskElement.h:
        * svg/graphics/SVGResourceMasker.cpp:
        (WebCore::SVGResourceMasker::applyMask):
        * svg/graphics/SVGResourceMasker.h:

2009-12-19  Adam Barth  <abarth@webkit.org>

        No review, rolling out r52399.
        http://trac.webkit.org/changeset/52399

        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):

2009-12-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Added a missing "not".

        Test: http/tests/security/xss-DENIED-window-open-javascript-url.html

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::createWindow):

2009-12-19  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Invalid url should raise SYNTAX_ERR exception.
        https://bugs.webkit.org/show_bug.cgi?id=32700

        Check url is valid in WebSocket::connect.
        Also log the detailed reason of websocket failures to console.

        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):

2009-12-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: Up/down arrow keys do not step numeric CSS property values
        https://bugs.webkit.org/show_bug.cgi?id=32776

        * inspector/front-end/inspector.js:
        (WebInspector.documentKeyDown): Call the focused element’s
        handleKeyEvent method.

2009-12-19  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Speed-up SVG Masking
        https://bugs.webkit.org/show_bug.cgi?id=32738

        This patch makes SVG Masking faster. At the moment we create a new ImageBuffer
        and copy the complete pixel array. That is rather inefficient. This patch
        uses the mask image directly.
        It also bounds the direct pixel manipultation to the viewable area to minimize
        the calculation of the mask.

        No change in functionality. So no new test.

        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):
        * svg/SVGMaskElement.h:
        * svg/graphics/SVGResourceMasker.cpp:
        (WebCore::SVGResourceMasker::applyMask):
        * svg/graphics/SVGResourceMasker.h:

2009-12-19  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Add tests to check filter, mask, clip, opacity and marker ordering
        https://bugs.webkit.org/show_bug.cgi?id=14010

        The right ordering for applying effects on objects in SVG is filters,
        clipper/masker and opacity. This patch fixes the order of filter and
        clipper/masker. Opacity and marker need another test.
        This change is according to the SVG Specification:
        http://www.w3.org/TR/SVG11/render.html#Elements

        Test: svg/filters/filter-clip.svg

        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):

2009-12-19  Evan Martin  <evan@chromium.org>

        Reviewed by Gustavo Noronha Silva.

        Revert my attempt at making --disable-geolocation work; it is
        more complicated than I anticipated.  (It passed on the build bots
        because they build with --enable-geolocation.)

        * GNUmakefile.am:

2009-12-19  MORITA Hajime  <morrita@gmail.com>

        Reviewed by Darin Adler.

        WebCore::Range::surroundContents NULL pointer crash.

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

        Test: fast/dom/Range/31684.html

        * dom/Range.cpp:
        (WebCore::Range::surroundContents):
        throw exception when parentOfNewParent->parentNode() is NULL.

2009-12-19  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Gustavo Noronha Silva.

        Don't use an icon for all spelling guess menu items.

        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::gtkStockIDFromContextMenuAction):

2009-12-19  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed build fix. Missing \.

        * GNUmakefile.am:

2009-12-19  Evan Martin  <evan@chromium.org>

        Reviewed by Gustavo Noronha Silva.

        Make --disable-geolocation and --disable-svg work, by conditionally
        building the relevant files.

        * GNUmakefile.am:

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

        Reviewed by Simon Fraser.

        Add a comment about some confusing code that otherwise would look like
        it might be a bug.
        https://bugs.webkit.org/show_bug.cgi?id=32534

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):

2009-12-18  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Messed up the XCode file, trying to fix.

        * WebCore.xcodeproj/project.pbxproj:

2009-12-18  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed, fix typos in WebCore.xcodeproj.

        * WebCore.xcodeproj/project.pbxproj:

2009-12-18  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Eric Seidel.

        SVGAngle / SVGPreserveAspectRatio should be POD types
        https://bugs.webkit.org/show_bug.cgi?id=32758

        Convert SVGAngle / SVGPreserveAspectRatio to be non-refcounted types, just
        like it has been done for SVGMatrix / SVGLength before.

        This patch prepares removing the special DOMObjectWithSVGContext hack.
        No change in functionality, thus no new tests.

        * WebCore.xcodeproj/project.pbxproj: Add SVGNames.h to the 'Copy Generated Headers' phase, and set SVGAngle/SVGPreserveAspectRatio role to 'Private', so WebKit can access it.
        * bindings/scripts/CodeGenerator.pm: Recognize SVGAngle / SVGPreserveAspectRatio as new POD-types (similar to SVGLength)
        * bindings/scripts/CodeGeneratorJS.pm: Ditto. 
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * bindings/v8/V8Index.h: Ditto.
        * rendering/RenderSVGImage.cpp: All following changes, modify SVGAngle/SVGPreserveAspectRatio access, as they are non-refcounted now.
        (WebCore::RenderSVGImage::adjustRectsForAspectRatio):
        (WebCore::RenderSVGImage::paint):
        * rendering/RenderSVGImage.h:
        * svg/SVGAngle.h:
        * svg/SVGAngle.idl:
        * svg/SVGAnimatedTemplate.h:
        (WebCore::):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::SVGFEImageElement):
        (WebCore::SVGFEImageElement::parseMappedAttribute):
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::viewBoxToViewTransform):
        (WebCore::SVGFitToViewBox::parseMappedAttribute):
        * svg/SVGFitToViewBox.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        (WebCore::SVGImageElement::parseMappedAttribute):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::parseMappedAttribute):
        (WebCore::SVGMarkerElement::setOrientToAuto):
        (WebCore::SVGMarkerElement::setOrientToAngle):
        (WebCore::SVGMarkerElement::canvasResource):
        * svg/SVGMarkerElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::parsePreserveAspectRatio):
        (WebCore::SVGPreserveAspectRatio::getCTM):
        * svg/SVGPreserveAspectRatio.h:
        (WebCore::SVGPreserveAspectRatio::parsePreserveAspectRatio):
        * svg/SVGPreserveAspectRatio.idl:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::createSVGAngle):
        (WebCore::SVGSVGElement::inheritViewAttributes):
        * svg/SVGSVGElement.h:
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::SVGSymbolElement):
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::SVGViewElement):
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::SVGViewSpec):
        (WebCore::SVGViewSpec::setPreserveAspectRatioString):
        (WebCore::SVGViewSpec::parseViewSpec):

2009-12-18  Dumitru Daniliuc  <dumi@chromium.org>

        Chromium build fix, no review.

        * storage/chromium/DatabaseTrackerChromium.cpp:

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

        Build fix, no review.

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::createFontPlatformData): Correct my typo
          on the CG build.

2009-12-18  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Eric Seidel.

        Make DatabaseTrackerChromium::removeOpenDatabase() send and IPC on
        the main thread when a database is being closed.

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

        * storage/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::removeOpenDatabaseOnMainThread):
        (WebCore::DatabaseTracker::removeOpenDatabase):

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

        Build fix, no review.

        * page/win/FrameCairoWin.cpp: Add missing include.
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::createFontPlatformData): Conditionalize
          Safari-only call.

2009-12-18  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dmitry Titov.

        Move some code related to database closing from the destructor to
        the close() method. This would allow us to do things such as post
        tasks to other threads when a database closes, which cannot be
        done now, because we cannot increment the ref count to a database
        object when we're in its destructor.

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

        * storage/Database.cpp:
        (WebCore::Database::~Database):
        (WebCore::Database::close):

2009-12-18  Jon Honeycutt  <jhoneycutt@apple.com>

        REGRESSION(r52233): MSAA: Accessibility role of lists is wrong

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

        Reviewed by Adam Roben.

        Test: platform/win/accessibility/list-role.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::roleValueForMSAA):
        Return roleValue(), rather than m_role, as subclasses may override it.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::roleValueForMSAA):
        Fallback to roleValue(), rather than m_role, as it may be overriden.

2009-12-17  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Accessibility role of list items is wrong

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

        Reviewed by Adam Roben.

        Test: platform/win/accessibility/list-item-role.html

        * accessibility/AccessibilityObject.h:
        (WebCore::):
        Add a ListItemRole to the enum.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::msaaRoleForRenderer):
        Return the role for the RenderObject, or UnknownRole if unknown.
        (WebCore::AccessibilityRenderObject::roleValueForMSAA):
        Call msaaRoleForRenderer() to get the role. If it is UnknownRole, fall
        back to m_role.

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

        Reviewed by Darin Adler.

        Crash when accessing webkitTransition property after setting webkitTransitionProperty with invalid value.
        https://bugs.webkit.org/show_bug.cgi?id=31559
        
        Fix an array bounds error when accessing the CSS value for a shorthand property that takes
        a comma-separated list, after the list for one of the component properties has been set to a different length.

        Test: fast/css/shorthand-mismatched-list-crash.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getLayeredShorthandValue):

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

        Reviewed by Mark Rowe.

        Remove WebCore.ClientBasedGeolocation.exp from Sources, and remove two IDL files from Resources.

        * WebCore.xcodeproj/project.pbxproj:

2009-12-18  Sam Weinig  <sam@webkit.org>

        Fix mac Geolocation build.

        * DerivedSources.make:
        * WebCore.ClientBasedGeolocation.exp: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * page/Geolocation.h:
        * page/GeolocationError.h:
        (WebCore::GeolocationError::GeolocationError):
        * page/GeolocationPosition.h:

2009-12-18  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Fixes <http://webkit.org/b/32613>.
        REGRESSION (r52008): Middle-clicking on a linked image starts a pan scroll,
        but should follow the link instead.

        The node itself isn't the only possible node that can be a link (that was the
        original check), any of its ancestors could be links as well, we need to climb
        up the tree to see. Created a new function (enclosingAnchorNode), that finds a
        node's enclosing anchor element (if it exists), that we can share between RenderLayer
        and Node, and also added tests that test pan scrolling behavior in image maps.

        Tests: platform/win/fast/events/panScroll-image-no-scroll.html
               platform/win/fast/events/panScroll-imageMap-href-no-scroll.html
               platform/win/fast/events/panScroll-imageMap-noHref-scroll.html

        * dom/Node.cpp:
        (WebCore::Node::enclosingAnchorNode):
        (WebCore::Node::defaultEventHandler):
        * dom/Node.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest):

2009-12-18  Benjamin Otte  <otte@gnome.org>

        Reviewed by Xan Lopez.

        [GTK] RemoveDashboard support. It's useless.

        * GNUmakefile.am:

2009-12-18  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Xan Lopez.

        [GTK] context menu overriding API is very limited
        https://bugs.webkit.org/show_bug.cgi?id=27546

        Omit SearchWeb from the context menu in the GTK+ port.

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):

2009-12-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add export the new symbol in WebCoreSystemInterface.

        * WebCore.base.exp:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2009-12-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Forward declare NSMutableArray when not compiling for Objective-C.

        * platform/mac/WebCoreSystemInterface.h:

2009-12-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=32720
        Replace UString addition/append with use of JSC::StringBuilder.

        * ForwardingHeaders/runtime/StringBuilder.h: Added.
        * bindings/js/ScriptString.h:
        (WebCore::ScriptString::operator+=):
        * bridge/jni/jni_runtime.cpp:
        (appendClassName):
        (JavaMethod::signature):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addProfileFinishedMessageToConsole):
        (WebCore::InspectorController::addStartProfilingMessageToConsole):
        (WebCore::InspectorController::getCurrentUserInitiatedProfileName):

2009-12-18  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Index validation for drawElements examines too many indices
        https://bugs.webkit.org/show_bug.cgi?id=32692

        Test: fast/canvas/webgl/bug-32692.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateIndexArrayPrecise):

2009-12-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Update WebKitSystemInterface for <rdar://problem/7237059>.        

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2009-12-18  Adam Roben  <aroben@apple.com>

        GTK build fix

        * plugins/gtk/PluginViewGtk.cpp: Added #include.

2009-12-18  Adam Roben  <aroben@apple.com>

        Chromium build fix

        * platform/chromium/PopupMenuChromium.cpp: Added #include.

2009-12-18  Adam Roben  <aroben@apple.com>

        Chromium build fix

        * html/HTMLLinkElement.cpp: Added #include.

2009-12-18  Adam Roben  <aroben@apple.com>

        Qt build fix

        * platform/qt/RenderThemeQt.cpp:
        * plugins/qt/PluginDataQt.cpp:
        * plugins/qt/PluginViewQt.cpp:
        Added #includes.

2009-12-18  Adam Roben  <aroben@apple.com>

        V8 build fix

        * bindings/v8/custom/V8DOMWindowCustom.cpp: Added #include.

2009-12-18  Adam Roben  <aroben@apple.com>

        GTK (and others?) build fix

        * platform/text/StringImpl.h: Added #include.

2009-12-18  Adam Roben  <aroben@apple.com>

        Reduce #includes in a few high-use headers

        Removed unnecessary #includes in these headers:
          - Frame.h
          - FrameWin.h
          - Node.h
          - Page.h
          - StringImpl.h

        The rest of the patch is all adding #includes to source files that now
        require them.

        Fixes <http://webkit.org/b/32718>.

        Rubber-stamped by Anders Carlsson.

        * dom/Node.h:
        * page/Frame.h:
        * page/Page.h:
        * page/win/FrameWin.h:
        * platform/text/StringImpl.h:
        Removed unnecessary #includes.

        * accessibility/win/AXObjectCacheWin.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * dom/Document.cpp:
        * dom/InputElement.cpp:
        * dom/Node.cpp:
        * dom/SelectElement.cpp:
        * editing/EditorCommand.cpp:
        * html/HTMLFormControlElement.cpp:
        * html/HTMLFormElement.cpp:
        * html/HTMLMediaElement.cpp:
        * html/HTMLParser.cpp:
        * html/HTMLTextAreaElement.cpp:
        * html/HTMLVideoElement.cpp:
        * inspector/InspectorController.cpp:
        * loader/FrameLoader.cpp:
        * loader/HistoryController.cpp:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * page/Console.cpp:
        * page/EventHandler.cpp:
        * page/Frame.cpp:
        * page/FrameView.cpp:
        * page/Navigator.cpp:
        * page/PageGroup.cpp:
        * page/Settings.cpp:
        * page/mac/EventHandlerMac.mm:
        * platform/KURL.h:
        * platform/ScrollbarThemeComposite.cpp:
        * platform/cf/BinaryPropertyList.cpp:
        * platform/graphics/mac/GraphicsLayerCA.h:
        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        * platform/mac/PopupMenuMac.mm:
        * platform/mac/WidgetMac.mm:
        * platform/network/cf/DNSCFNet.cpp:
        * platform/text/StringImpl.cpp:
        * platform/win/FileSystemWin.cpp:
        * platform/win/PlatformScreenWin.cpp:
        * platform/win/PopupMenuWin.cpp:
        * platform/win/WidgetWin.cpp:
        * plugins/PluginView.cpp:
        * plugins/win/PluginViewWin.cpp:
        * rendering/InlineTextBox.cpp:
        * rendering/RenderBox.cpp:
        * rendering/RenderFileUploadControl.cpp:
        * rendering/RenderInline.cpp:
        * rendering/RenderLayerCompositor.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RootInlineBox.cpp:
        * storage/DatabaseTracker.cpp:
        * storage/DatabaseTracker.h:
        * storage/SQLTransactionClient.cpp:
        * svg/graphics/SVGImage.cpp:
        Added now-needed #includes.

2009-12-18  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Darin Adler.

        Implemented isId as specified by DOM Level 3. See detailed description below.
        https://bugs.webkit.org/show_bug.cgi?id=5578

        Added isId property and implementation:
        Tests: dom/xhtml/level3/core/attrisid01-07.xhtml
               fast/dom/Element/attrisid-extra01.html
        * dom/Attr.cpp:
        (WebCore::Attr::isId):
        * dom/Attr.h:
        * dom/Attr.idl:

        Replaced instances of HTMLNames::idAttr with Element::idAttributeName()
        for the reason that id attribute name could be customized to a different
        string other than "id". A test case is associated to each code change.
        * dom/Document.cpp:
        (WebCore::Document::getElementById): Test: fast/dom/Element/id-in-getelement01.html
        * dom/Element.cpp: Tests: dom/xhtml/level3/core/attrisid01-07.xhtml
        (WebCore::Element::setAttribute):
        (WebCore::Element::setAttributeMap):
        (WebCore::Element::insertedIntoDocument):
        (WebCore::Element::removedFromDocument):
        (WebCore::Element::formatForDebugger):
        (WebCore::Element::rareIDAttributeName):
        * dom/Element.h: Added function idAttributeName().
        (WebCore::Element::idAttributeName):
        * dom/ElementRareData.h: Added member variable to store customized id name in ElementRareData.
        (WebCore::ElementRareData::ElementRareData):
        * dom/NamedAttrMap.cpp: Tests: dom/xhtml/level3/core/attrisid01-07.xhtml
        (WebCore::NamedNodeMap::setNamedItem):
        (WebCore::NamedNodeMap::removeNamedItem):
        (WebCore::NamedNodeMap::setAttributes):
        * dom/Node.cpp: Removed ASSERT as it may not hold any more.
        (WebCore::Node::querySelector):
        * dom/SelectorNodeList.cpp: Removed ASSERT as it may not hold any more.
        (WebCore::createSelectorNodeList):
        * dom/StyledElement.cpp: Tests: dom/xhtml/level3/core/attrisid01-07.xhtml
        (WebCore::StyledElement::parseMappedAttribute):
        * editing/DeleteButtonController.cpp: Test: fast/dom/Element/id-in-deletebutton.html
        (WebCore::DeleteButtonController::createDeletionUI):
        * editing/EditorCommand.cpp: Test: fast/dom/Element/id-in-insert-hr.html
        (WebCore::executeInsertHorizontalRule):
        * html/HTMLAppletElement.cpp: Test: fast/dom/Element/id-in-applet.html
        (WebCore::HTMLAppletElement::parseMappedAttribute):
        (WebCore::HTMLAppletElement::createRenderer):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::checkForNameMatch): Test: fast/forms/select-namedItem.html
        (WebCore::HTMLCollection::updateNameCache): Test: fast/dom/collection-namedItem-via-item.html
        * html/HTMLDataGridColElement.cpp:
        (WebCore::HTMLDataGridColElement::ensureColumn): Test: fast/dom/HTMLDataGridElement/DataGridColumns-dom.html
        (WebCore::HTMLDataGridColElement::parseMappedAttribute): Test: fast/dom/HTMLDataGridElement/DataGridColumns-dom-attributes.html
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * html/HTMLFormCollection.cpp: Test: fast/dom/Element/id-in-formcollection.html
        (WebCore::HTMLFormCollection::getNamedFormItem):
        (WebCore::HTMLFormCollection::nextNamedItem):
        (WebCore::HTMLFormCollection::updateNameCache):
        * html/HTMLFrameElementBase.cpp: Test: fast/dom/Element/id-in-frame.html
        (WebCore::HTMLFrameElementBase::parseMappedAttribute):
        (WebCore::HTMLFrameElementBase::setNameAndOpenURL):
        * html/HTMLImageElement.cpp: Test: fast/dom/Element/id-in-deletebutton.html
        (WebCore::HTMLImageElement::parseMappedAttribute):
        * html/HTMLMapElement.cpp: Test: fast/dom/Element/id-in-map.html
        (WebCore::HTMLMapElement::parseMappedAttribute):
        * html/HTMLNameCollection.cpp: Test: fast/dom/Element/id-in-frameset.html
        (WebCore::HTMLNameCollection::itemAfter):
        * html/HTMLObjectElement.cpp: Test: fast/dom/HTMLDocument/object-by-name-or-id.html
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        * html/HTMLParamElement.cpp: Test: fast/dom/Element/id-in-param.html
        (WebCore::HTMLParamElement::parseMappedAttribute):
        * loader/CachedFont.cpp: Test: svg/custom/acid3-test-77.html
        (WebCore::CachedFont::getSVGFontById):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer): Debug-only code
        * rendering/SVGRenderTreeAsText.cpp: Test: svg/text/text-gradient-positioning.svg
        (WebCore::writeRenderResources):
        * svg/SVGElement.cpp: Test: svg/custom/acid3-test-77.html
        (WebCore::SVGElement::insertedIntoDocument):
        * svg/SVGStyledElement.cpp: Test: svg/custom/js-update-image-and-display.svg
        (WebCore::SVGStyledElement::isKnownAttribute):
        * wml/WMLElement.cpp:
        (WebCore::WMLElement::parseMappedAttribute):

2009-12-18  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Clean up the qmake build system to distinguish between trunk builds and package builds

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

        Introduce standalone_package as config that is set when QTDIR_build is set or when
        the directory for the generated files is present.

        Renamed uses of QTDIR_build that apply to generic package builds to use standalone_package.
        Others remain as they are specific to building inside Qt.

        * WebCore.pro:

2009-12-18  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Fix the build on Symbian.

        Use QFont::lastRestortFamily() instead of QFont::lastRestortFont(),
        which is a missing symbol in Qt 4.6.0 on Symbian.

        Functionally they should be equivalent, according to the source.

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

2009-12-18  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] segfault during controls initialization if not GTK theme is present.
        https://bugs.webkit.org/show_bug.cgi?id=32705

        Create empty images for the controls if no GTK theme is set.

        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::getThemeIconFileName):
        (WebCore::loadImageFromFile):

2009-12-18  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Darin Adler.

        REGRESSION (r38898): Using the up arrow in a textarea gets "stuck"
        at the beginning.
        https://bugs.webkit.org/show_bug.cgi?id=31920

        Moving up from a position after the end of the previous lines
        should use UPSTREAM affinity to render the caret in the previous
        line.

        Test: editing/selection/wrapped-line-caret-3.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForPoint):

2009-12-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        HTMLInputElement::stepMismatch() uses ambiguous overload of pow()
        https://bugs.webkit.org/show_bug.cgi?id=32675

        Use the double constant 2.0 instead of static_cast<double>(2).

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

2009-12-17  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Dan Bernstein.

        Bug 32357: SVG test case crashes WebKit (invalid font URL)
        https://bugs.webkit.org/show_bug.cgi?id=32357

        Added check for NULL return value from DocLoader::requestFont()

        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::loadFont):

2009-12-17  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Dan Bernstein.

        marquee with display:inline causes crash
        https://bugs.webkit.org/show_bug.cgi?id=32374

        Test: fast/inline/inline-marquee-crash.html

        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::start):
        (WebCore::HTMLMarqueeElement::stop):
        (WebCore::HTMLMarqueeElement::suspend):
        (WebCore::HTMLMarqueeElement::resume):
        (WebCore::HTMLMarqueeElement::renderMarquee):
        * html/HTMLMarqueeElement.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::styleChanged):

2009-12-17  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for inspector's classes
        https://bugs.webkit.org/show_bug.cgi?id=32660                               

        Inherits the following classes from Noncopyable because these are
        instantiated by 'new' and no need to be copyable:                                           

        class name                  - instantiated at:  WebCore/'location'

        class JavaScriptDebugServer - inspector/JavaScriptDebugServer.cpp:72
        class ConsoleMessage        - inspector/InspectorController.cpp:329 
        class InspectorController   - page/Page.cpp:119

        * inspector/ConsoleMessage.h:
        * inspector/InspectorController.h:
        * inspector/JavaScriptDebugServer.h:

2009-12-17  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        Fixes HTMLInputElement::stepMismatch() to avoid ambiguous overload of pow().
        https://bugs.webkit.org/show_bug.cgi?id=32675

        Build fix only, no new tests.

        * html/HTMLInputElement.cpp: Modified.
        (WebCore::HTMLInputElement::stepMismatch): Cast first argument of pow to double to force 'double pow(double, int)'

2009-12-17  Marc-Antoine Ruel  <maruel@chromium.org>

        Reviewed by Eric Seidel.

        Fix link failure on LTCG builds on Windows for chromium port.

        Reenable SVGAllInOne.cpp. This required some fixups.

        Namely, there was conflicts in constants between HTMLNames and
        SVGNames, and conflicts between static functions names.

        No new tests as functionality has not changed.

        * WebCore.gyp/WebCore.gyp:
        * svg/SVGAllInOne.cpp:
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::invalidateGlyphCache):
        (WebCore::SVGGlyphElement::buildGlyphIdentifier):
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::insertedIntoDocument):
        (WebCore::SVGHKernElement::removedFromDocument):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::type):
        (WebCore::SVGStyleElement::setType):
        (WebCore::SVGStyleElement::media):
        (WebCore::SVGStyleElement::setMedia):
        (WebCore::SVGStyleElement::title):
        (WebCore::SVGStyleElement::setTitle):
        (WebCore::SVGStyleElement::parseMappedAttribute):
        * svg/SVGStyledElement.cpp:
        (WebCore::mapAttributeToCSSProperty):
        (WebCore::SVGStyledElement::cssPropertyIdForSVGAttributeName):
        * svg/SVGStyledElement.h:

2009-12-17  Adam Roben  <aroben@apple.com>

        Chromium build fix VI

        * svg/animation/SMILTimeContainer.h: Added now-needed #include.

2009-12-17  Adam Roben  <aroben@apple.com>

        Chromium build fix V

        * platform/KURLGoogle.cpp: Added now-needed #include.

2009-12-17  Adam Roben  <aroben@apple.com>

        Chromium build fix IV

        * loader/CrossOriginPreflightResultCache.h: Added now-needed
        #includes.

2009-12-17  Adam Roben  <aroben@apple.com>

        Chromium build fix III

        * platform/graphics/Font.h: Added now-needed #include.

2009-12-17  Adam Roben  <aroben@apple.com>

        Chromium build fix II

        * dom/EventTarget.h: Added now-needed #include.

2009-12-17  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Eric Seidel.

        Allow custom memory allocation control for js bindings
        https://bugs.webkit.org/show_bug.cgi?id=32655

        Inherits the following classes from Noncopyable because these are instantiated 
        by 'new' and no need to be copyable:

        class name                  - instantiated at:  WebCore/'location'

        class ScriptCachedFrameData - history/CachedFrame.cpp:117
        class WebCoreJSClientData   - bindings/js/JSDOMWindowBase.cpp:162
        class ScheduledAction       - bindings/js/ScheduledAction.cpp:58

        * bindings/js/JSDOMBinding.h:
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptCachedFrameData.h:

2009-12-17  Adam Roben  <aroben@apple.com>

        Chromium build fix

        * dom/QualifiedName.h: Added now-needed #include of HashTraits.h
        (which itself #includes HashFunctions.h).

2009-12-17  Pavel Feldman  <pfeldman@dhcp-172-28-174-220.spb.corp.google.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Incorrect Doctype.

        REGRESSION(4.0.4-TOT):Web Inspector: Incorrect Doctype
        https://bugs.webkit.org/show_bug.cgi?id=32671

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):

2009-12-17  Benjamin Otte  <otte@gnome.org>

        Reviewed by Adam Roben.

        Don't include all JSC headers everywhere
        https://bugs.webkit.org/show_bug.cgi?id=32663

        Remove HashMap HashSet and OwnPtr includes from PlatformString.h.
        Reduces code size of Gtk build by another 5%.

        * platform/text/PlatformString.h:

2009-12-17  Adam Roben  <aroben@apple.com>

        Mac/Qt build fixes

        * platform/graphics/mac/Canvas3DLayer.mm:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        * platform/qt/Localizations.cpp:
        Added missing #includes.

2009-12-17  Benjamin Otte  <otte@gnome.org>

        Reviewed by Adam Roben.

        Don't include all JSC headers everywhere
        https://bugs.webkit.org/show_bug.cgi?id=32663

        PlatformString.h included almost all of JSC via runtime/Identifier.h.
        This patch gets rid of this include by forward-declaring the required
        classes instead.
        This reduces the build size of the object files on a Gtk debug build
        by 10%. The resulting libwebkit.so gets 5% smaller.

        No new tests as it's just a build improvement.

        * platform/gtk/LocalizedStringsGtk.cpp:
        include math.h here (it used to be pulled by JSC)
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:

2009-12-17  Evan Martin  <evan@chromium.org>

        Reviewed by Xan Lopez.

        Always use all WebCore include paths in GtkWebKit.

        With this patch, I can disable all optional features and still build.

        * GNUmakefile.am:

2009-12-17  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Darin Fisher.

        Added WebPageSerializer to WebKit API.

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

        * platform/text/StringBuilder.cpp: Added methods to make StringBuilder even more useful for large scale string concatenation.
        (WebCore::StringBuilder::clear):
        (WebCore::StringBuilder::length):
        * platform/text/StringBuilder.h:

2009-12-10  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Add controls for playing html5 video.
        https://bugs.webkit.org/show_bug.cgi?id=26304

        Media controls UI, first step. This patch was written by Zan
        Dobersek. In addition I fixed the compilation errors and
        re-enabled some of the media tests involving the controls UI.

        * GNUmakefile.am:
        * css/mediaControlsGtk.css: Added.
        * platform/graphics/Image.h:
        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::getThemeIconFileName):
        (WebCore::loadResourceSharedBuffer):
        (WebCore::loadImageFromFile):
        (WebCore::Image::loadPlatformResource):
        (WebCore::Image::loadPlatformThemeIcon):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::getMediaElementFromRenderObject):
        (WebCore::getIconNameForTextDirection):
        (WebCore::RenderThemeGtk::initMediaStyling):
        (WebCore::RenderThemeGtk::RenderThemeGtk):
        (WebCore::RenderThemeGtk::~RenderThemeGtk):
        (WebCore::supportsFocus):
        (WebCore::RenderThemeGtk::baselinePosition):
        (WebCore::paintMozWidget):
        (WebCore::setToggleSize):
        (WebCore::RenderThemeGtk::adjustSliderThumbSize):
        (WebCore::RenderThemeGtk::gtkContainer):
        (WebCore::RenderThemeGtk::platformColorsDidChange):
        (WebCore::RenderThemeGtk::extraMediaControlsStyleSheet):
        (WebCore::paintMediaButton):
        (WebCore::RenderThemeGtk::paintMediaFullscreenButton):
        (WebCore::RenderThemeGtk::paintMediaMuteButton):
        (WebCore::RenderThemeGtk::paintMediaPlayButton):
        (WebCore::RenderThemeGtk::paintMediaSeekBackButton):
        (WebCore::RenderThemeGtk::paintMediaSeekForwardButton):
        (WebCore::RenderThemeGtk::paintMediaSliderTrack):
        (WebCore::RenderThemeGtk::paintMediaSliderThumb):
        * platform/gtk/RenderThemeGtk.h:

2009-12-17  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] support navigator.onLine and ononline/onoffline events.
        https://bugs.webkit.org/show_bug.cgi?id=32555

        Hooked up Bearer Management to NetworkStateNotifier. This solution is available 
        only if QtMobility's Bearer Management is installed.

        * WebCore.pro:
        * platform/network/NetworkStateNotifier.h:
        * platform/network/qt/NetworkStateNotifierPrivate.h: Added.
        * platform/network/qt/NetworkStateNotifierQt.cpp: Added.
        (WebCore::NetworkStateNotifierPrivate::NetworkStateNotifierPrivate):
        (WebCore::NetworkStateNotifierPrivate::onlineStateChanged):
        (WebCore::NetworkStateNotifierPrivate::~NetworkStateNotifierPrivate):
        (WebCore::NetworkStateNotifier::updateState):
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):

2009-12-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Switch to 11px as default for source-code in WebKit.

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

        * inspector/front-end/inspector.css:

2009-12-17  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Symbian build fix: Don't include QtXml/qxmlstream.h but omit the prefix, to
        make sure we pick up the header file from QtCore. That is where the implementation
        is compiled.

        * dom/XMLTokenizer.h:

2009-12-17  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] WebKit GTK needs a wrapper for ref counted glib/gobject structs
        https://bugs.webkit.org/show_bug.cgi?id=21599

        Add GRefPtr support for GTK types to WebCore, as JSC does not link against
        GTK+. Also convert PopupMenu::m_poup from a raw pointer to a GRefPtr.

        No new tests as functionality has not changed.

        * GNUmakefile.am:
        * platform/PopupMenu.h:
        * platform/gtk/GRefPtrGtk.cpp: Added.
        (WTF::refGPtr):
        (WTF::derefGPtr):
        * platform/gtk/GRefPtrGtk.h: Added.
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::menuRemoveItem):

2009-12-17  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Advice links to source code in CPU profiler to open in debugger,
        not in resources tab.

        Also work around the case when resources are disabled, but scripts are present.

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

        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.updateMainViewWidth):
        (WebInspector.Panel.prototype.canShowSourceLineForURL):
        (WebInspector.Panel.prototype.showSourceLineForURL):
        * inspector/front-end/ProfileDataGridTree.js:
        (WebInspector.ProfileDataGridNode.prototype.createCell):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.canShowSourceLineForURL):
        (WebInspector.ResourcesPanel.prototype.showSourceLineForURL):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.scriptForURL):
        (WebInspector.ScriptsPanel.prototype.canShowSourceLineForURL):
        (WebInspector.ScriptsPanel.prototype.showSourceLineForURL):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        * inspector/front-end/inspector.js:
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):
        (WebInspector._choosePanelToShowSourceLineForURL):
        (WebInspector.canShowSourceLineForURL):
        (WebInspector.showSourceLineForURL):

2009-12-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] display FPS stats for video element
        https://bugs.webkit.org/show_bug.cgi?id=32560

        Display FPS statistics if WEBKIT_DEBUG environment variable
        contains the Media log category. This feature requires a very
        recent (>= 0.10.18) version of gst-plugins-bad.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2009-11-11  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] Should emit {networkState,readyState,volume,time,size,rate,duration}Changed signals
        https://bugs.webkit.org/show_bug.cgi?id=30377

        Emit volumeChanged and durationChanged upon notification from
        GStreamer.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateMessageCallback):
        (WebCore::mediaPlayerPrivateVolumeCallback):
        (WebCore::notify_volume_idle_cb):
        (WebCore::MediaPlayerPrivate::didEnd):
        (WebCore::MediaPlayerPrivate::durationChanged):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2009-12-16  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] segfault during volume notification
        https://bugs.webkit.org/show_bug.cgi?id=32603

        Emit volumeChanged and durationChanged upon notification from
        GStreamer. Also don't reset the volume property on playbin, it is
        not needed as it is 1.0 by default both on playbin and in the
        MediaPlayer.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateMessageCallback):
        (WebCore::mediaPlayerPrivateVolumeChangedCallback):
        (WebCore::notifyVolumeIdleCallback):
        (WebCore::doGstInit):
        (WebCore::MediaPlayerPrivate::isAvailable):
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::volumeChanged):
        (WebCore::MediaPlayerPrivate::didEnd):
        (WebCore::MediaPlayerPrivate::durationChanged):
        (WebCore::mimeTypeCache):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2009-12-17  Evan Martin  <evan@chromium.org>

        Reviewed by Xan Lopez.

        gtk: always use standard include paths, regardless of settings.
        WebKit style is to wrap the body of a header in #if ENABLE(FOO),
        so they're always safe to include whether the features are enabled or
        not.

        This fixes building with --disable-database and other flags.

        * GNUmakefile.am:

2009-12-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Build fixes for make distcheck.

        * GNUmakefile.am:

2009-12-17  Philippe Normand  <pnormand@igalia.com>

        Rubber-stamped by Gustavo Noronha Silva.

        Trivial WebKit coding style fix.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::paint):

2009-12-15 MORITA Hajime <morrita@gmail.com>

        Reviewed by Eric Seidel.

        Bug 28306: double-clicking a word inside <b> beside newline select two words
        https://bugs.webkit.org/show_bug.cgi?id=28306
        
        SimplifiedBackwardsTextIterator missed trailing whitespaces just
        before folding line-break, which is used to detect word
        boundaries. This fix checks strings on RenderText and expand text
        range on SimplifiedBackwardsTextIterator to include trailing
        whitespaces if availble.

        Test: editing/selection/doubleclick-beside-cr-span.html

        * editing/TextIterator.cpp:
        (WebCore::collapsedSpaceLength):
        (WebCore::maxOffsetIncludingCollapsedSpaces):
        (WebCore::SimplifiedBackwardsTextIterator::advance):

2009-12-16  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix flakiness in WebSocket handshake console message.
        https://bugs.webkit.org/show_bug.cgi?id=32598

        In chromium, LayoutTests/websocket/tests/handshake-error.html is
        flaky, because it outputs the following console message several times:
          CONSOLE MESSAGE: line 0: Unexpected response code:101
        Update m_mode in WebSocketHandshake correctly: Once it finds
        error in handshake message, set m_mode to Failed and don't try
        reading handshake message again.  If handshake message is not yet
        fully received, set m_mode to Incomplete, so next didReceiveData()
        will try to check handshake message again.

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didReceiveData):
        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readServerHandshake):

2009-12-16  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Accessibility role of text nodes is wrong

        https://bugs.webkit.org/show_bug.cgi?id=32631
        <rdar://problem/7369084>

        Reviewed by Alice Liu.

        Test: platform/win/accessibility/text-role.html

        * accessibility/AccessibilityObject.h:
        (WebCore::):
        Add a new role to the enum.
        (WebCore::AccessibilityObject::roleValueForMSAA):
        Declare a function to return the accessibility role for MSAA; the base
        implementation returns the old role value.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
        Initialize m_roleForMSAA.
        (WebCore::AccessibilityRenderObject::roleValueForMSAA):
        If m_roleForMSAA has been set, return it. If the renderer is a
        RenderText, set the role to EditableTextRole to match IE and Firefox.
        Otherwise, set the role for MSAA to the old role value.

        * accessibility/AccessibilityRenderObject.h:
        Add a member to hold the role for MSAA, and declare an override of
        roleValueForMSAA().

2009-12-16  Eric Seidel  <eric@webkit.org>

        No review, rolling out r52206.
        http://trac.webkit.org/changeset/52206
        https://bugs.webkit.org/show_bug.cgi?id=31187

        This broke pixel tests on Mac.  Presumably the code in
        ImageCG is wrong here.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/GeneratedImage.cpp:
        (WebCore::GeneratedImage::drawPattern):
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/haiku/ImageHaiku.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::drawBitmapPattern):
        * platform/graphics/wince/ImageBufferWince.cpp:
        (WebCore::):
        (WebCore::BufferedImage::drawPattern):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::drawPattern):
        (WebCore::Image::drawPattern):

2009-12-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=32637
        [V8] Generate most named property getters.

        Covered by existing tests.

        * bindings/scripts/CodeGeneratorV8.pm: Added generation of SetNamedPropertyHandler call.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate): Removed now-generated SetNamedPropertyHandler callsites.

2009-12-16  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement combobox delegate for Qt
        https://bugs.webkit.org/show_bug.cgi?id=32550

        Abstract popup menu factory.

        A static method from QtAbstractPopupMenu is used to create its instances. If a factory
        has been suplied to class QtAbstractPopupMenu the factory will be used to create the
        objects. If not an instance of QtFallbackPopupMenu will be created.

        The objective is to make it easy to replace the combobox popup at WebCore layer providing
        support to the combobox popup delegation API. Future patches will make it possible to
        replace the combobox popup at WebKit layer.

        No behavior changes.

        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::PopupMenu):
        * platform/qt/QtAbstractWebPopup.cpp:
        (WebCore::QtAbstractWebPopup::setFactory):
        (WebCore::QtAbstractWebPopup::create):
        * platform/qt/QtAbstractWebPopup.h:
        * platform/qt/QtFallbackWebPopup.cpp:

2009-12-16  Mark Rowe  <mrowe@apple.com>

        Build fix.  Disable debug variants of WebKit frameworks.

        * WebCore.xcodeproj/project.pbxproj:

2009-12-16  Enrica Casucci  <enrica@apple.com>

        Reviewed by Eric Seidel.

        Right clicking in a table cell creates a selection that extends into the next cell.
        <rdar://problem/5565465>
        https://bugs.webkit.org/show_bug.cgi?id=32622
        
        Avoid extending the selection to the next cell if we start from an empty cell.

        Test: editing/selection/empty-cell-right-click.html

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed): Replaced the code that check for empty table cell
        with a call to the new function.
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity): Extends the
        selection only if we are not starting from an empty table cell.
        * editing/htmlediting.cpp:
        (WebCore::isEmptyTableCell): Added a function since this check is performed now in two places.
        * editing/htmlediting.h: Added isEmptyTableCell declaration.

2009-12-16  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        feMerge crahses if feMergeNodes attribute in is empty
        https://bugs.webkit.org/show_bug.cgi?id=32489

        SVGFEMergeElement only stored pointers to all effects of it's nodes
        in a list. But it should store the RefPtr otherwise the effects get
        dereferenced and WebKit crashes.
        I also made a short clean-up in SVGFilterBuilder. No change in
        functionality.

        Test: I updated svg/custom/empty-merge.svg to cover this problem.

        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::build):
        * svg/graphics/filters/SVGFEMerge.cpp:
        (WebCore::FEMerge::FEMerge):
        (WebCore::FEMerge::create):
        (WebCore::FEMerge::mergeInputs):
        (WebCore::FEMerge::setMergeInputs):
        * svg/graphics/filters/SVGFEMerge.h:
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::add):

2009-12-16  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Part of <http://webkit.org/b/32568>.
        Web Inspector: Context Menus should be used in more places.
        
        Add a context menu entry in the console to clear the console. This
        is only shown when there is no user selection of text, because if
        there is selection of the text, then we want to give the user the Copy +
        Spell Check context menu that they are used to.

        * English.lproj/localizedStrings.js: Added "Clear Console".
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent):

2009-12-16  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Pavel Feldman.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=32621>.
        Web Inspector: [REGRESSION (52095-52100)] Resources filter disappears when switching 
        from / to resources panel.

        Changed style in sidebar-resizer-vertical, because if the min-height was 100%, we start
        to cover the scope bar.

        * inspector/front-end/inspector.css:

2009-12-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        [V8] Switch all indexers to be generated.
        https://bugs.webkit.org/show_bug.cgi?id=32569

        Covered by existing tests.

        * WebCore.gypi: Remove V8FileListCustom.cpp and V8ClientRecListCustom.cpp,
            as they are now generated.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate): Remove customization of ClientRectList,
            FileList, and DataGridColumnList templates.
        * bindings/v8/custom/V8ClientRectListCustom.cpp: Removed.
        * bindings/v8/custom/V8CustomBinding.h: Remove custom indexer getter decls.
        * bindings/v8/custom/V8DataGridColumnListCustom.cpp: Remove indexer getter definition.
        * bindings/v8/custom/V8FileListCustom.cpp: Removed.

2009-12-16  anton muhin  <antonm@chromium.org>

        Reviewed by Darin Adler.

        [dom] make dom/Node.cpp compile if DUMP_NODE_STATISTICS is on
        https://bugs.webkit.org/show_bug.cgi?id=32617

        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):

2009-12-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        [V8] There is no such thing as HTMLSelectElementCollection.
        https://bugs.webkit.org/show_bug.cgi?id=32616

        Refactoring, covered by existing tests.

        * WebCore.gypi: Removed V8HTMLSelectElementCollectionCustom.cpp
        * bindings/v8/V8Collection.h: Removed one-off template.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate): Renamed all references to HTMLSelectElementCollection
            to HTMLSelectElement.
        * bindings/v8/custom/V8CustomBinding.h: Renamed custom indexer decls.
        * bindings/v8/custom/V8HTMLSelectElementCollectionCustom.cpp: Removed.
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp: Moved code as-is from
            V8HTMLSelectElementCollectionCustom.cpp

2009-12-16  Dan Winship  <danw@gnome.org>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] Content-Encoding support

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

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startHttp): Don't force "Accept-Encoding: identity" any
        more

2009-12-16  Benjamin Otte  <otte@gnome.org>

        Reviewed by Darin Adler.

        Get rid of the phase argument to Image::drawPattern.
        https://bugs.webkit.org/show_bug.cgi?id=31187

        The argument can be expressed equally well as part of the
        patternTransform. All backends but the Qt one did exactly that
        manually anyway.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/GeneratedImage.cpp:
        (WebCore::GeneratedImage::drawPattern):
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/haiku/ImageHaiku.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::drawBitmapPattern):
        * platform/graphics/wince/ImageBufferWince.cpp:
        (WebCore::):
        (WebCore::BufferedImage::drawPattern):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::drawPattern):
        (WebCore::Image::drawPattern):

2009-12-16  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Performance problems with index validation code for drawElements
        https://bugs.webkit.org/show_bug.cgi?id=32466

        Added a cache of the maximum index for each element type to
        WebGLBuffer, querying it before iterating through the indices in
        the client-side copy of the buffer's data. Hoisted checks of the
        size of the element array itself into validateElementArraySize to
        avoid duplicating code.

        The performance improvement has been measured with manual tests.
        Existing layout tests cover the index validation functionality
        and continue to pass as before.

        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::WebGLBuffer):
        (WebCore::WebGLBuffer::associateBufferData):
        (WebCore::WebGLBuffer::associateBufferSubData):
        (WebCore::WebGLBuffer::getCachedMaxIndex):
        (WebCore::WebGLBuffer::setCachedMaxIndex):
        (WebCore::WebGLBuffer::clearCachedMaxIndices):
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateElementArraySize):
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative):
        (WebCore::WebGLRenderingContext::validateIndexArrayPrecise):
        (WebCore::WebGLRenderingContext::validateRenderingState):
        (WebCore::WebGLRenderingContext::drawElements):
        * html/canvas/WebGLRenderingContext.h:

2009-12-16  Zelidrag Hornung  <zelidrag@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=32261
        Added ability to separate the autocomplete suggestion previewing from
        the actual accepting of the suggested value in HTMLInputElement.
        This element (it's single line text incarnation) can now
        be put in suggestion mode where renderer might display the suggested
        value without making it automatically exposed to JavaScript.

        No new tests. This new methods are not exposed yet. It's use will be
        platform specific. PopupMenu and Chromium specific changes will be
        separated based on Darin Adler's comments.

        * dom/InputElement.h:
        (WebCore::InputElementData::suggestedValue):
        (WebCore::InputElementData::setSuggestedValue):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::suggestedValue):
        (WebCore::HTMLInputElement::setSuggestedValue):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        * html/HTMLInputElement.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::suggestedValue):
        * wml/WMLInputElement.h:

2009-12-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Make Elements tree, properties section and resources
        view monospace.

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

        * inspector/front-end/ElementsPanel.js:
        * inspector/front-end/PropertiesSection.js:
        (WebInspector.PropertiesSection):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):
        * inspector/front-end/inspector.css:

2009-12-16  Dirk Schulze  <krit@webkit.org>

        Reviewed by Darin Adler.

        sourceGraphic wrong if positive x,y is >0 and objectBB is selected on Filter
        https://bugs.webkit.org/show_bug.cgi?id=32575

        On SVG Filters, the rest of the source graphic gets clipped to the filter
        rest. This helps us to minimize the size of intermediate ImageBuffers. If
        the position moves to the right or to the bottom, we have to adjust the
        GraphicContext of this intermediate ImageBuffer.
        This patch fixes the adjustment of the context, according to the clipping.

        Test: svg/filters/filter-source-position.svg

        * svg/graphics/SVGResourceFilter.cpp:
        (WebCore::SVGResourceFilter::prepareFilter):

2009-12-16  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        CrashTracer: [USER] 1 crash in Safari at com.apple.WebCore: WebCore::endsOfNodeAreVisuallyDistinctPositions + 115
        <rdar://problem/7467108>
        https://bugs.webkit.org/show_bug.cgi?id=32590

        If the element is a button there is no need to look at the children to calculate the caret position.
        
        Test: editing/selection/button-right-click.html

        * dom/Position.cpp:
        (WebCore::Position::getInlineBoxAndOffset): Avoid calling recursively this method,
        when starting from a button element.

2009-12-16  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement combobox delegate for Qt
        https://bugs.webkit.org/show_bug.cgi?id=32550

        Refactoring of class QWebPopup.

        Class QWebPopup has been split in QtAbstractWebPopup and QtFallbackWebPopup.
        Both new classes are now in corresponding files and files QWebPopup.* have been removed.

        Custom combo popup classes will inherit from QtAbstractWebPopup. It is not the public API as it is
        in WebCore and will not be visible by users of QtWebKit. It will be used in implementation of
        public QtWebKit combobox popup delegation API.

        Class QtFallbackWebPopup inherits from QtAbstractWebPopup and implements the currently used combobox popup.
        It needs to be improved to provide standard features that are missing like style or indentation.

        No behavior changes.

        * WebCore.pro:
        * platform/PopupMenu.h:
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::PopupMenu):
        * platform/qt/QWebPopup.cpp: Removed.
        * platform/qt/QWebPopup.h: Removed.
        * platform/qt/QtAbstractWebPopup.cpp: Added.
        (WebCore::QtAbstractWebPopup::QtAbstractWebPopup):
        (WebCore::QtAbstractWebPopup::~QtAbstractWebPopup):
        (WebCore::QtAbstractWebPopup::client):
        * platform/qt/QtAbstractWebPopup.h: Added.
        * platform/qt/QtFallbackWebPopup.cpp: Added.
        (WebCore::QtFallbackWebPopup::QtFallbackWebPopup):
        (WebCore::QtFallbackWebPopup::show):
        (WebCore::QtFallbackWebPopup::populate):
        (WebCore::QtFallbackWebPopup::showPopup):
        (WebCore::QtFallbackWebPopup::hidePopup):
        (WebCore::QtFallbackWebPopup::activeChanged):
        * platform/qt/QtFallbackWebPopup.h: Added.
        (WebCore::QtFallbackWebPopup::hide):

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

        Reviewed by Timothy Hatcher.

        Web Inspector: beautify HTTP info section.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):
        (WebInspector.ResourceView.prototype._refreshURL):
        (WebInspector.ResourceView.prototype._refreshHTTPInformation):
        * inspector/front-end/inspector.css:

2009-12-13  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Adam Barth.

        Fix crash when encountering illegal HTML within a continuation inside <ruby>.
        (https://bugs.webkit.org/show_bug.cgi?id=32316)

        Avoid having the anonymous blocks utilized in the ruby renderers being
        re-used as continuation blocks.
        Avoid having ruby runs collected as "leftover blocks".

        Test: fast/ruby/ruby-illegal.html

        * rendering/RenderRuby.h:
        (WebCore::RenderRubyAsInline::removeLeftoverAnonymousBlock): mustn't be called
        (WebCore::RenderRubyAsInline::isRuby): made private
        (WebCore::RenderRubyAsInline::renderName): made private
        (WebCore::RenderRubyAsInline::createsAnonymousWrapper): return true
        (WebCore::RenderRubyAsBlock::removeLeftoverAnonymousBlock): mustn't be called
        (WebCore::RenderRubyAsBlock::isRuby): made private
        (WebCore::RenderRubyAsBlock::renderName): made private
        (WebCore::RenderRubyAsBlock::createsAnonymousWrapper): return true
        * rendering/RenderRubyRun.h:
        (WebCore::RenderRubyRun::removeLeftoverAnonymousBlock): avoid
        (WebCore::RenderRubyRun::isRubyRun): made private
        (WebCore::RenderRubyRun::renderName): made private
        (WebCore::RenderRubyRun::createsAnonymousWrapper): return true

2009-12-15  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Adler.

        Rename skipCanLoadCheck to skipSecurityCheck in a bunch of places in WebCore/loader.

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

        * loader/Cache.cpp:
        (WebCore::Cache::requestUserCSSStyleSheet):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::load):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/CachedResource.h:
        (WebCore::CachedResource::load):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest):
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequestWithPreflight):
        (WebCore::DocumentThreadableLoader::preflightSuccess):
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/DocumentThreadableLoader.h:
        * loader/FrameLoaderTypes.h:
        (WebCore::):
        * loader/Request.cpp:
        (WebCore::Request::Request):
        * loader/Request.h:
        (WebCore::Request::shouldDoSecurityCheck):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * loader/SubresourceLoader.h:
        * loader/loader.cpp:
        (WebCore::Loader::load):
        (WebCore::Loader::Host::servePendingRequests):
        * loader/loader.h:

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

        Reviewed by Darin Adler.

        <rdar://problem/7470452> Safari/Chromium crashes on complicated @font-face rule
        https://bugs.webkit.org/show_bug.cgi?id=32257

        Test: fast/css/font-face-unused-source-loaded.html

        The loading of a font resource caused a CSSFontFace that had the resource in one of its
        sources, but wasn’t using it (due to using an earlier source) to invalidate its
        CSSSegmentedFontFaces. This caused FontData for the active source (the one that did not just
        finish loading) to be deleted, but that went unnoticed by Font::operator==(), since the
        corresponding FontFallbackLists were not in the loading state. The fix is for CSSFontFace to
        ignore loads from unused sources.

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::fontLoaded): Bail out if the loaded source is not the active source.
        (WebCore::CSSFontFace::getFontData): Set m_activeSource to the source that supplied the
            FontData.
        * css/CSSFontFace.h:
        (WebCore::CSSFontFace::CSSFontFace): Initialize m_activeSource.

2009-12-15  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Cannot load flash files from a local file.
        https://bugs.webkit.org/show_bug.cgi?id=32572

        When loading the main resource and its mime type is application/octet-stream,
        use the file extenstion to check if it is a supported plugin.

        No new tests were added since any existing swf file can be used as a manual test.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
        * loader/MainResourceLoader.h:
        * plugins/PluginDatabase.h:

2009-12-15  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=18498>.
        REGRESSION: Tips are not shown for resources anymore.
        
        As discussed in the bug, Tips are not coming back, and the feature
        will be moved to the audits panel. This patch is to remove the Tips
        code and the resources that it needed.

        * WebCore.gypi: Removed tips files.
        * inspector/front-end/Images/tipBalloon.png: Removed.
        * inspector/front-end/Images/tipBalloonBottom.png: Removed.
        * inspector/front-end/Images/tipIcon.png: Removed.
        * inspector/front-end/Images/tipIconPressed.png: Removed.
        * inspector/front-end/Resource.js: Removed tips code.
        (WebInspector.Resource.prototype.set finished): 
        * inspector/front-end/WebKit.qrc: Removed tips files.
        * inspector/front-end/inspector.css: Removes tips style rules.
        
2009-12-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Display request headers for main resource
        having redirects.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::willSendRequest):
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::InspectorResource::appendRedirect):
        (WebCore::InspectorResource::createCached):
        (WebCore::InspectorResource::updateRequest):
        * inspector/InspectorResource.h:
        (WebCore::InspectorResource::create):

2009-12-15  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=32578>.
        Web Inspector: No Need for ?="" now that we have context menus.
        
        Remove the toggleNewAttributeButton function and callers to it, as
        we don't need this behavior anymore, now that we have context menus.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.set hovered):
        (WebInspector.ElementsTreeElement.prototype.toggleNewAttributeButton):
        (WebInspector.ElementsTreeElement.prototype._startEditing):

2009-12-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        [V8] Generate trivial named property getters.
        https://bugs.webkit.org/show_bug.cgi?id=32562

        Covered by existing tests.

        * bindings/scripts/CodeGeneratorV8.pm: Added GenerateImplementationNamedPropertyGetter.
        * bindings/v8/V8Collection.h:
        (WebCore::getNamedPropertyOfCollection): Fixed a booboo by using AtomicString like we're supposed to.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate): Removed code that's now generated.

2009-12-15  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Part of <http://webkit.org/b/32568>.
        New Web Inspector: The Context Menu should be used in more places.
        
        Add support for context menu entries for editing and deleting elements
        in the datagrid. This gives support to deleting cookies, and editing and
        deleting session storage and local storage.

        * English.lproj/localizedStrings.js: Added "Edit" and "Add New" entries (delete was already there)
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid): Added context menu listener.
        (WebInspector.DataGrid.prototype._contextMenuInDataTable):

2009-12-15  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Don't allow default framebuffer to be mutated
        https://bugs.webkit.org/show_bug.cgi?id=32391

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer):
        (WebCore::WebGLRenderingContext::framebufferTexture2D):
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::bindFramebuffer):

2009-12-15  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for FontPlatformDataCacheKey class
        https://bugs.webkit.org/show_bug.cgi?id=32552

        Inherits the following struct from FastAllocBase because it is instantiated by 'new':

        struct name                     - instantiated at: WebCore/'location'
        struct FontPlatformDataCacheKey - platform/graphics/FontCache.cpp:118

        * platform/graphics/FontCache.cpp:

2009-12-15  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Bug 31090 - [Chromium] Add DownloadURL format to Chromium clipboard.
        https://bugs.webkit.org/show_bug.cgi?id=31090

        The proposal to whatwg can be found here:
        http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-August/022118.html

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::clear):
        (WebCore::ChromiumDataObject::hasData):
        (WebCore::ChromiumDataObject::ChromiumDataObject):
        * platform/chromium/ChromiumDataObject.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::):
        (WebCore::clipboardTypeFromMIMEType):
        (WebCore::ClipboardChromium::setData):

2009-12-15  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        WAI-ARIA: implement treegrid
        https://bugs.webkit.org/show_bug.cgi?id=31299

        Test: platform/mac/accessibility/aria-treegrid.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        * accessibility/AccessibilityARIAGrid.h:
        (WebCore::AccessibilityARIAGrid::supportsSelectedRows):
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::isARIATreeGridRow):
        (WebCore::AccessibilityARIAGridRow::disclosedRows):
        (WebCore::AccessibilityARIAGridRow::disclosedByRow):
        * accessibility/AccessibilityARIAGridRow.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::createARIARoleMap):
        * accessibility/AccessibilityObject.h:
        (WebCore::):
        (WebCore::AccessibilityObject::isARIATreeGridRow):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isMultiSelectable):
        (WebCore::AccessibilityRenderObject::setIsExpanded):
        (WebCore::AccessibilityRenderObject::setSelectedRows):
        (WebCore::AccessibilityRenderObject::ariaSelectedRows):
        (WebCore::AccessibilityRenderObject::ariaListboxSelectedChildren):
        (WebCore::AccessibilityRenderObject::selectedChildren):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityTable.h:
        (WebCore::AccessibilityTable::supportsSelectedRows):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):

2009-12-15  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for EmptyEditorClient and EmptyInspectorClient
        https://bugs.webkit.org/show_bug.cgi?id=32557

        Inherits the following classes from Noncopyable because these are instantiated
        by 'new' and no need to be copyable:

        class name                 - instantiated at: WebCore/'location'
        class EmptyEditorClient    - svg/graphics/SVGImage.cpp:230
        class EmptyInspectorClient - svg/graphics/SVGImage.cpp:241

        * loader/EmptyClients.h:

2009-12-15  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore/inspector directory's classes
        https://bugs.webkit.org/show_bug.cgi?id=32556

        Inherits the following class from Noncopyable because these are instantiated
        by 'new' and no need to be copyable:

        class name                   - instantiated at: WebCore/'location'
        class InspectorFrontend      - inspector/InspectorController.cpp:538
        class InspectorTimelineAgent - inspector/InspectorController.cpp:1097

        * inspector/InspectorFrontend.h:
        * inspector/InspectorTimelineAgent.h:

2009-12-15  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore/platform/network directory's classes
        https://bugs.webkit.org/show_bug.cgi?id=32553

        Inherits the following class from Noncopyable because it is instantiated
        by 'new' and no need to be copyable:

        class/struct name                      - instantiated at: WebCore/'location'

        struct CrossThreadResourceResponseData - platform/network/ResourceResponseBase.cpp:109

        Inherits the following classes from FastAllocBase because these are
        instantiated by 'new':

        class ResourceResponseBase - (its child class) platform/network/ResourceResponseBase.cpp:90
        class ResourceRequestBase  - (its child class) loader/DocumentThreadableLoader.cpp:88

        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.h:

2009-12-15  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for AnimationControllerPrivate and FillLayerPropertyWrapperGetter
        https://bugs.webkit.org/show_bug.cgi?id=32549

        Inherits AnimationControllerPrivate and FillLayerPropertyWrapperGetter
        classes from Noncopyable because these are instantiated by 'new' and no need to be copyable:

        class/struct name              - instantiated at: WebCore/'location'

        AnimationControllerPrivate     - page/animation/AnimationController.cpp:439
        FillLayerPropertyWrapperGetter - (its child class) page/animation/AnimationBase.cpp:464

        * page/animation/AnimationBase.cpp:
        * page/animation/AnimationControllerPrivate.h:

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

        Reviewed by Timothy Hatcher.

        Web Inspector: Do not lose HTTP redirect information, display it
        in the Resources Panel.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didReceiveContentLength):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::InspectorResource::appendRedirect):
        (WebCore::InspectorResource::updateScriptObject):
        (WebCore::InspectorResource::releaseScriptObject):
        (WebCore::InspectorResource::type):
        * inspector/InspectorResource.h:
        (WebCore::InspectorResource::):
        (WebCore::InspectorResource::Changes::setAll):
        * inspector/front-end/inspector.js:
        (WebInspector._addResource):
        (WebInspector.updateResource):

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

        Reviewed by Simon Hausmann.

        [Qt] Followup for direct signals and slots connections in QNetworkReplyHandler
        https://bugs.webkit.org/show_bug.cgi?id=32113

        For Qt versions prior to 4.6.1 we will need to use QueuedConnection
        for the signal and slot connection to avoid running into a bug in.

        Add a comment that we want to remove one signal to forward
        queued items when moving our minimum requirements.

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

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

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add manual test for JavaScript prompt corner case
        https://bugs.webkit.org/show_bug.cgi?id=30914

        The patch is based on the work done by Gupta Manish.

        Verify behavior of the JavaScript prompt function. Currently
        Qt is not behaving like other WebKit ports and Firefox in
        regards to accepting the prompt but not entering a text.

        * manual-tests/qt/java-script-prompt.html: Added.

2009-12-15  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Moving list populate methods from PopupMenuQt to QWebPopup.
        
        In preparation to future implementation of a delegation API for the combobox.

        * platform/PopupMenu.h:
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        * platform/qt/QWebPopup.cpp:
        (WebCore::QWebPopup::show):
        (WebCore::QWebPopup::populate):
        * platform/qt/QWebPopup.h:
        (WebCore::QWebPopup::hide):

2009-12-15  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Extract WebInspector.Section from WebInspector.PropertiesSection.
        https://bugs.webkit.org/show_bug.cgi?id=32523

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/PropertiesSection.js:
        (WebInspector.PropertiesSection):
        * inspector/front-end/Section.js: Added.
        (WebInspector.Section):
        (WebInspector.Section.prototype.get title):
        (WebInspector.Section.prototype.set title):
        (WebInspector.Section.prototype.get subtitle):
        (WebInspector.Section.prototype.set subtitle):
        (WebInspector.Section.prototype.get expanded):
        (WebInspector.Section.prototype.set expanded):
        (WebInspector.Section.prototype.get populated):
        (WebInspector.Section.prototype.set populated):
        (WebInspector.Section.prototype.expand):
        (WebInspector.Section.prototype.collapse):
        (WebInspector.Section.prototype.toggleExpanded):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2009-12-15  Eric Seidel  <eric@webkit.org>

        No review, rolling out r52140.
        http://trac.webkit.org/changeset/52140
        https://bugs.webkit.org/show_bug.cgi?id=31299

        The commit broke the Leopard bots and unfortunately
        Chris wasn't around to fix them, so I'm rolling the change
        out after 3 hours so that the bots can roll green again. :)

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        * accessibility/AccessibilityARIAGrid.h:
        * accessibility/AccessibilityARIAGridRow.cpp:
        * accessibility/AccessibilityARIAGridRow.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::createARIARoleMap):
        * accessibility/AccessibilityObject.h:
        (WebCore::):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isMultiSelect):
        (WebCore::AccessibilityRenderObject::setIsExpanded):
        (WebCore::AccessibilityRenderObject::setSelectedRows):
        (WebCore::AccessibilityRenderObject::ariaTreeSelectedRows):
        (WebCore::AccessibilityRenderObject::ariaListboxSelectedChildren):
        (WebCore::AccessibilityRenderObject::selectedChildren):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityTable.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):

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

        Reviewed by Eric Seidel.

        [Qt] Remove dead code from FontPlatformDataQt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=32540

        In r51758 the code that used familyNames was removed
        and we should remove the creation of the familyNames
        as well.

        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

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

        Reviewed by Adam Roben.

        WebCore part of <rdar://problem/7173515> Use LOGFONT support in Core
        Graphics when available

        When using a version of Core Graphics with LOGFONT support, this fixes
        <rdar://problem/5764844> First-time launch is painfully slow due to font
        plist creation
        and <rdar://problem/6576281> 12px synthetic-italics Tahoma text is less
        readable in Safari than in Firefox/IE due to poorly-spaced letters

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs): No longer call drawGDIGlyphs for stroked
        text.
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::createGDIFont): Added a synthesizeItalic parameter. When set
        to true, if italics are desired but the best match lacks italics,
        creates and returns a synthetic italics font.
        (WebCore::FontCache::createFontPlatformData): Ask to synthesize italics
        if needed.
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Updated an
        assertion, and changed to create the CGFont from the LOGFONT.
        (WebCore::createFontCustomPlatformData): Changed cgFont to be a
        RetainPtr. Do not create a CGFont from the font data if it can be
        created from the LOGFONT in fontPlatformData().
        * platform/graphics/win/FontDatabase.cpp:
        (WebCore::populateFontDatabase): Avoid font database work if fonts are
        not going to be looked up by name.
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::platformDataInit): Create the CGFont from
        a LOGFONT based on the HFONT.

2009-12-14  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        WAI-ARIA: implement treegrid
        https://bugs.webkit.org/show_bug.cgi?id=31299

        Test: platform/mac/accessibility/aria-treegrid.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        * accessibility/AccessibilityARIAGrid.h:
        (WebCore::AccessibilityARIAGrid::supportsSelectedRows):
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::isARIATreeGridRow):
        (WebCore::AccessibilityARIAGridRow::disclosedRows):
        (WebCore::AccessibilityARIAGridRow::disclosedByRow):
        * accessibility/AccessibilityARIAGridRow.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::createARIARoleMap):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isARIATreeGridRow):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isMultiSelectable):
        (WebCore::AccessibilityRenderObject::setIsExpanded):
        (WebCore::AccessibilityRenderObject::setSelectedRows):
        (WebCore::AccessibilityRenderObject::ariaSelectedRows):
        (WebCore::AccessibilityRenderObject::ariaListboxSelectedChildren):
        (WebCore::AccessibilityRenderObject::selectedChildren):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityTable.h:
        (WebCore::AccessibilityTable::supportsSelectedRows):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):

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

        Reviewed by Darin Adler.

        <rdar://problem/7460655> REGRESSION (r47255): Content shifted down at software.opensuse.org
        https://bugs.webkit.org/show_bug.cgi?id=32382

        Test: fast/block/float/in-margin.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::getClearDelta): Floats that do not intrude into the line (because
        they are in the margin) do not need to be cleared.

2009-12-14  Enrica Casucci  <enrica@apple.com>

        Reviewed by John Sullivan.

        Pressing backspace inside a table cell erases all empty rows below it.
        <rdar://problem/5565461>
        https://bugs.webkit.org/show_bug.cgi?id=32526

        No deletion is performed when the caret selection is on an empty table cell.
        
        Test: editing/deleting/delete-empty-table.html

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed): Added check for empty table cells in
        case of caret selection.

2009-12-14  Andrei Popescu  <andreip@google.com>

        Reviewed by Darin Adler.

        [Android] Android needs ResourceHandle implementation
        https://bugs.webkit.org/show_bug.cgi?id=32515

        Adds implementation of ResourceHandle on Android.

        No new tests needed, this is platform-specific code, so existing
        tests are sufficient.

        * platform/network/android/ResourceHandleAndroid.cpp: Added.
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandle::bufferedData):
        (WebCore::ResourceHandle::supportsBufferedData):
        (WebCore::ResourceHandle::setDefersLoading):
        (WebCore::ResourceHandle::willLoadFromCache):
        (WebCore::ResourceHandle::loadsBlocked):
        (WebCore::SyncLoader::SyncLoader):
        (WebCore::SyncLoader::~SyncLoader):
        (WebCore::SyncLoader::didReceiveResponse):
        (WebCore::SyncLoader::didReceiveData):
        (WebCore::SyncLoader::didFail):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/network/android/ResourceLoaderAndroid.h: Added.
        (WebCore::ResourceLoaderAndroid::~ResourceLoaderAndroid):
        (WebCore::ResourceLoaderAndroid::ResourceLoaderAndroid):

2009-12-14  Marco Martin  <notmart@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        In the Scrollbar painting of the Qt theme integration,
        intersects any previous clip rects with the one needed to paint the scrollbar.
        This fixes the painting in QGraphicsview, when the parent of the widget that 
        paints the QWebPage has the QGraphicsItem::ItemClipsChildrenToShape set and
        a piece of the scrollbar should be cipped away
        https://bugs.webkit.org/show_bug.cgi?id=30366

        No new tests.

        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarThemeQt::paint):

2009-12-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        [V8] Generate bindings for trivial indexers.
        https://bugs.webkit.org/show_bug.cgi?id=32455

        Covered by existing tests.

        * bindings/scripts/CodeGeneratorV8.pm:
            Added detecting indexers and generating code for them.
        * bindings/v8/V8Collection.h: Removed code that's now generated.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate): Ditto.

2009-12-14  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=31660
        REGRESSION (r49394): Image load event fires before the document fragment is attached.

        Test: fast/images/image-load-event-in-fragment.html

        We cannot fire load events immediately after parsing a fragment - an element inserted via
        innerHTML or equivalent should be reachable via getElementById() by the time its load event
        fires.

        * dom/Document.cpp: (WebCore::Document::implicitClose): Call dispatchPendingBeforeLoadEvents()
        and dispatchPendingLoadEvents() individually. I'm not sure why these calls are here, just
        preserving existing behavior.

        * dom/XMLTokenizer.cpp: (WebCore::XMLTokenizer::write):
        * html/HTMLTokenizer.cpp: (WebCore::HTMLTokenizer::write):
        Load events for elements that have just been parsed cannot be dispatched yet, we should give
        the elements a chance to be inserted into a document first. There is no compatibility baggage
        for beforeload, so it seems OK to dispatch it right away.

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvents):
        (WebCore::ImageLoader::dispatchPendingLoadEvents):
        * loader/ImageLoader.h:
        Separated dispatchPendingEvents() into individual functions for each event kind.

2009-12-14  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Simon Fraser.

        Add FloatQuad::isRectilinear() to check whether it can be represented as FloatRect.
        https://bugs.webkit.org/show_bug.cgi?id=30442

        This enables optimizations for distinguishing between
        arbitrary FloatQuads and rectilinear ones.

        * platform/graphics/FloatQuad.cpp:
        (WebCore::FloatQuad::isRectilinear):
        * platform/graphics/FloatQuad.h:

2009-12-14  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger Freyther.

        [Qt] Add support for keyboard modifiers to TouchEvent

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

        Similar to other ui events with keyboard state, get the alt, shift,
        meta and ctrl modifiers straight from the platform event.

        * dom/TouchEvent.cpp:
        (WebCore::TouchEvent::TouchEvent):
        (WebCore::TouchEvent::initTouchEvent):
        * dom/TouchEvent.h:
        (WebCore::TouchEvent::create):
        * dom/TouchEvent.idl:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent):
        * platform/PlatformTouchEvent.h:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        (WebCore::PlatformTouchEvent::shiftKey):
        (WebCore::PlatformTouchEvent::ctrlKey):
        (WebCore::PlatformTouchEvent::altKey):
        (WebCore::PlatformTouchEvent::metaKey):
        * platform/qt/PlatformTouchEventQt.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):

2009-12-14  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] crash when clicking "Sign out" in GMail
        https://bugs.webkit.org/show_bug.cgi?id=32300

        When the ResourceLoader cancels the handle we have to make sure not to access
        the resource handle afterwards again.
        This complete r29515

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

2009-12-14  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Implement InjectedScript.evaluateOnSelf() that evaluates functions in the InjectedScript context.
        https://bugs.webkit.org/show_bug.cgi?id=32517

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

2009-12-14  Nayan Kumar K  <nayankk@gmail.com>

        Reviewed by Darin Adler.

        Fix for compilation errors in WML enabled builds.

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

        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::setValue):
        (WebCore::WMLInputElement::setValueForUser):
        * wml/WMLInputElement.h:

2009-12-14  Andrei Popescu  <andreip@google.com>

        Reviewed by Darin Adler.

        [Android] Android needs ResourceError, ResourceResponse and
        ResourceRequest implementation.
        https://bugs.webkit.org/show_bug.cgi?id=32522

        Add implementation of ResourceError, ResourceResponse and ResourceRequest.
        No new tests needed, the existing tests should be sufficient.

        * platform/network/android/ResourceError.h: Added.
        (WebCore::ResourceError::ResourceError):
        * platform/network/android/ResourceRequest.h: Added.
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::setUserGesture):
        (WebCore::ResourceRequest::getUserGesture):
        * platform/network/android/ResourceResponse.h: Added.
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::doUpdateResourceResponse):

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

        Fix the build.

        * page/Geolocation.cpp:
        * page/Geolocation.h:

2009-12-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=32499
        Add client based Geolocation provider

        Add first cut of a client based Geolocation provider. This is guarded by
        ENABLE(CLIENT_BASED_GEOLOCATION) and is off by default for now. This adds a
        GeolocationControllerClient interface that no-one currently implements,
        but will in a subsequent patch.

        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * page/Geolocation.cpp:
        (WebCore::createGeopositionFromGeolocationPosition):
        (WebCore::createPositionErrorFromGeolocationError):
        (WebCore::Geolocation::Geolocation):
        (WebCore::Geolocation::~Geolocation):
        (WebCore::Geolocation::disconnectFrame):
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::startRequest):
        (WebCore::Geolocation::fatalErrorOccurred):
        (WebCore::Geolocation::requestTimedOut):
        (WebCore::Geolocation::clearWatch):
        (WebCore::Geolocation::handleError):
        (WebCore::Geolocation::positionChanged):
        (WebCore::Geolocation::makeSuccessCallbacks):
        (WebCore::Geolocation::errorOccurred):
        (WebCore::Geolocation::geolocationServicePositionChanged):
        (WebCore::Geolocation::geolocationServiceErrorOccurred):
        (WebCore::Geolocation::startUpdating):
        (WebCore::Geolocation::stopUpdating):
        * page/Geolocation.h:
        * page/GeolocationController.cpp: Added.
        (WebCore::GeolocationController::GeolocationController):
        (WebCore::GeolocationController::~GeolocationController):
        (WebCore::GeolocationController::addObserver):
        (WebCore::GeolocationController::removeObserver):
        (WebCore::GeolocationController::positionChanged):
        (WebCore::GeolocationController::errorOccurred):
        (WebCore::GeolocationController::lastPosition):
        * page/GeolocationController.h: Added.
        * page/GeolocationControllerClient.h: Added.
        (WebCore::GeolocationControllerClient::~GeolocationControllerClient):
        * page/GeolocationError.h: Added.
        (WebCore::GeolocationError::):
        (WebCore::GeolocationError::create):
        (WebCore::GeolocationError::code):
        (WebCore::GeolocationError::message):
        * page/GeolocationPosition.h: Added.
        (WebCore::GeolocationPosition::create):
        (WebCore::GeolocationPosition::timestamp):
        (WebCore::GeolocationPosition::latitude):
        (WebCore::GeolocationPosition::longitude):
        (WebCore::GeolocationPosition::accuracy):
        (WebCore::GeolocationPosition::altitude):
        (WebCore::GeolocationPosition::altitudeAccuracy):
        (WebCore::GeolocationPosition::heading):
        (WebCore::GeolocationPosition::speed):
        (WebCore::GeolocationPosition::canProvideAltitude):
        (WebCore::GeolocationPosition::canProvideAltitudeAccuracy):
        (WebCore::GeolocationPosition::canProvideHeading):
        (WebCore::GeolocationPosition::canProvideSpeed):
        (WebCore::GeolocationPosition::GeolocationPosition):
        * page/Geoposition.h:
        (WebCore::Geoposition::create):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::geolocationController):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2009-12-14  Adam Langley  <agl@google.com>

        Reviewed by Darin Adler.

        Test that an image's size is valid before reading it.

        Previously, an image that failed to load (m_failed == true) would
        trigger an assertion failure when WebKit tried to get its size.

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

        Test: fast/images/size-failure.html

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::createFrameAtIndex):

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

        Reviewed by Darin Adler.

        <rdar://problem/7458272> REGRESSION (r50470) Reproducible ASSERT in
        RenderWidget::setWidgetGeometry()

        Test: fast/forms/defer-updateFromElement.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::updateFromElementCallback): Added this post-attach callback
        that invokes updateFromElement().
        (WebCore::HTMLFormControlElement::recalcStyle): Instead of calling
        updateFromElement(), enqueue a post-attach (in this case, post-style
        recalc) callback to do it. updateFromElement() can cause the selection
        to change, and in turn trigger synchronous layout, so it must not be
        called during style recalc.

2009-12-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: [regression] inspector deletes nodes when editing css.

        Now all the treeoutlines are focusable, sections and their titles
        are also focusable. Change contains couple of drive-by fixes such as
        canceling of the attribute edit nuking attr info and maintaining proper
        selection while deleting nodes.

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

        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.handleShortcut):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._promptKeyDown):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype._keyDown):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView):
        (WebInspector.DatabaseQueryView.prototype._promptKeyDown):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel.prototype.get defaultFocusedElement):
        (WebInspector.ElementsPanel.prototype.handleShortcut):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline):
        (WebInspector.ElementsTreeOutline.prototype._keyDown):
        (WebInspector.ElementsTreeElement.prototype._textNodeEditingCommitted):
        (WebInspector.ElementsTreeElement.prototype._editingCancelled):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.show):
        (WebInspector.Panel.prototype.get defaultFocusedElement):
        * inspector/front-end/PropertiesSection.js:
        (WebInspector.PropertiesSection):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.get defaultFocusedElement):
        (WebInspector.ScriptsPanel.prototype.handleShortcut):
        * inspector/front-end/SidebarPane.js:
        (WebInspector.SidebarPane):
        (WebInspector.SidebarPane.prototype.toggleExpanded):
        (WebInspector.SidebarPane.prototype._onTitleKeyDown):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._loaded):
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.documentKeyDown):
        (WebInspector.documentCanCopy):
        (WebInspector.documentCopy):
        (WebInspector._searchFieldManualFocus):
        (WebInspector._searchKeyDown):
        (WebInspector.startEditing.cleanUpAfterEditing):
        (WebInspector.startEditing.keyDownEventListener):
        (WebInspector.startEditing):
        * inspector/front-end/treeoutline.js:
        (TreeOutline):
        (TreeOutline._removeChildAtIndex):
        (TreeOutline.prototype._treeKeyDown):
        (TreeElement.prototype.deselect):
        * inspector/front-end/utilities.js:
        ():

2009-12-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Guard all of JSC's wrapper cache-related members on Document.

        * dom/Document.cpp:
        (WebCore::Document::createWrapperCache): Widened the guards to the whole method.
        * dom/Document.h: Added JSC guards to wrapper cache-related members.

2009-12-14  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Adele Peterson.

        AX: there's an infinite loop going on for some webpages - facebook.com
        https://bugs.webkit.org/show_bug.cgi?id=32501

        The problem is that parentObjectUnignored() cannot be called
        while in accessibilityIsIgnored, because it leads to
        recursiveness. Specifically, there were checks to determine
        if an object was within a ARIA tree. That check should
        1) be moved to all platforms, and 2) not call parentObjectUnignored().

        Test: accessibility/hang-in-isignored.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isAllowedChildOfTree):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):

2009-12-14  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6293979> Adopt shared control drawing for <video> controls on Leopard and Windows

        Use MediaControllerThemeQuickTime on Leopard.

        * rendering/RenderThemeMac.mm:
        (WebCore::mediaControllerTheme):

2009-12-14  Adam Roben  <aroben@apple.com>

        Move QuartzCore-related build settings into a vsprops file

        Fixes <http://webkit.org/b/32518>

        Reviewed by Dan Bernstein.

        * WebCore.vcproj/WebCore.vcproj: Let VS reformat the files list, added
        WebCoreQuartzCore.vsprops to the non-Cairo configurations, moved all
        other QuartzCore-related build settings from here...
        * WebCore.vcproj/WebCoreQuartzCore.vsprops: ...to here.

2009-12-14  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Antti Koivisto.

        handling scripts can block UI
        https://bugs.webkit.org/show_bug.cgi?id=27612

        Break execution of external scrips to smaller chunks. 
        No new tests since no new functionality was introduced.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::HTMLTokenizer):
        (WebCore::HTMLTokenizer::reset):
        (WebCore::HTMLTokenizer::notifyFinished):
        (WebCore::HTMLTokenizer::executeExternalScriptsIfReady):
        (WebCore::HTMLTokenizer::executeExternalScriptsTimerFired):
        (WebCore::HTMLTokenizer::continueExecutingExternalScripts):
        * html/HTMLTokenizer.h:

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

        Reviewed by Simon Hausmann.

        [Qt] Connect QNetworkReply via direct connections.
        https://bugs.webkit.org/show_bug.cgi?id=32113

        In the past we have switched from auto connections to queued
        connections to get some more stability. The problem with the
        Queued connections is latency. Even when running simple loading
        tests the time it takes to runs highly varies and by using
        direct connections these tests produce a stable result.

        We will have to look out for crashes coming from within the
        QNetworkAccessManager due this patch and address them then.

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

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

        Rubber-stamped by Simon Hausmann.

        [Qt] QtWebKit should use QImageReader::setQuality(49)
        https://bugs.webkit.org/show_bug.cgi?id=30740

        Using QImageReader::setQuality(49) will influence the JPEG
        decoder of Qt to use the JDCT_IFAST routines for decompressing. This
        is showing a 5% improvement in a reduction that decodes all images
        used during the page loading test. The libjpeg documentation mentions
        that the IFAST routine is not as accurate as other routines but in
        our tests we couldn't see a difference.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::setData):

2009-12-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Changed GC from mark-sweep to mark-allocate.

        * ForwardingHeaders/runtime/WeakGCMap.h: Added.
        * bindings/js/GCController.cpp:
        (WebCore::collect):
        (WebCore::GCController::gcTimerFired):
        (WebCore::GCController::garbageCollectNow): Updated for rename.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::removeWrappers):
        (WebCore::hasCachedDOMObjectWrapperUnchecked):
        (WebCore::hasCachedDOMObjectWrapper):
        (WebCore::hasCachedDOMNodeWrapperUnchecked):
        (WebCore::forgetDOMObject):
        (WebCore::forgetDOMNode):
        (WebCore::isObservableThroughDOM):
        (WebCore::markDOMNodesForDocument):
        (WebCore::markDOMObjectWrapper):
        (WebCore::markDOMNodeWrapper):
        * bindings/js/JSDOMBinding.h: Changed DOM wrapper maps to be WeakGCMaps.
        Don't ASSERT that an item must be in the WeakGCMap when its destructor
        runs, since it might have been overwritten in the map first.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS): Changed Document from a DOM object wrapper to a DOM node
        wrapper, to simplify some code.

        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::JSInspectedObjectWrapper):
        (WebCore::JSInspectedObjectWrapper::~JSInspectedObjectWrapper):
        * bindings/js/JSInspectorCallbackWrapper.cpp: Use a WeakGCMap for these
        wrappers.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::markChildren): Updated for WeakGCMap and Document using
        a DOM node wrapper instead of a DOM object wrapper.

        * bindings/js/JSSVGPODTypeWrapper.h:
        (WebCore::JSSVGDynamicPODTypeWrapperCache::wrapperMap):
        (WebCore::JSSVGDynamicPODTypeWrapperCache::lookupOrCreateWrapper):
        (WebCore::JSSVGDynamicPODTypeWrapperCache::forgetWrapper):
        (WebCore::::~JSSVGDynamicPODTypeWrapper): Shined a small beam of sanity light
        on this code. Use hashtable-based lookup in JSSVGPODTypeWrapper.h instead
        of linear lookup through iteration, since that's what hashtables were
        invented for. Make JSSVGPODTypeWrapper.h responsible for reomving itself
        from the table, instead of its JS wrapper, to decouple these objects from
        GC, and because these objects are refCounted, not solely owned by their
        JS wrappers.

        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Document.h: Adopted changes above.

2009-12-13  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: Removed an incorrect #ifdef.

        * bindings/js/GCController.cpp:

2009-12-13  Charles Reis  <creis@chromium.org>

        Reviewed by Adam Barth.

        Refactor some security code out of V8 bindings
        https://bugs.webkit.org/show_bug.cgi?id=32326

        No new tests. There should be no functionality changes in this patch,
        since it is only refactoring code.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * bindings/BindingSecurity.h: Added.
        (WebCore::BindingSecurity::BindingSecurity):
        (WebCore::::canAccessWindow):
        (WebCore::::canAccessFrame):
        (WebCore::::checkNodeSecurity):
        * bindings/BindingSecurityBase.cpp: Added.
        (WebCore::BindingSecurityBase::getDOMWindow):
        (WebCore::BindingSecurityBase::getFrame):
        (WebCore::BindingSecurityBase::canAccessWindow):
        * bindings/BindingSecurityBase.h: Added.
        * bindings/GenericBinding.h: Added.
        (WebCore::):
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::isSafeScript):
        * bindings/v8/V8Binding.h:
        * bindings/v8/V8BindingState.cpp: Added.
        (WebCore::::Only):
        (WebCore::::getActiveWindow):
        (WebCore::::immediatelyReportUnsafeAccessTo):
        * bindings/v8/V8BindingState.h: Added.
        (WebCore::):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::reportUnsafeAccessTo):
        (WebCore::reportUnsafeJavaScriptAccess):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::):
        * bindings/v8/custom/V8CustomBinding.cpp:
        (WebCore::allowSettingFrameSrcToJavascriptUrl):
        (WebCore::INDEXED_ACCESS_CHECK):
        (WebCore::NAMED_ACCESS_CHECK):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::V8Custom::ClearTimeoutImpl):
        (WebCore::NAMED_ACCESS_CHECK):
        (WebCore::INDEXED_ACCESS_CHECK):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_ACCESS_CHECK):
        (WebCore::NAMED_ACCESS_CHECK):

2009-11-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] Implement initializeMaximumHTTPConnectionCountPerHost.
        https://bugs.webkit.org/show_bug.cgi?id=31849

        Qt allows to have three connections per host on Symbian, for
        every other platform the limit is set to six connections per
        host but the default implementation will only schedule four
        connections per host.
        In a manual test we seem to get the best loading speed by
        going with Qt's limit and schedule two more jobs to allow Qt
        to prepare them.

        * platform/network/ResourceRequestBase.cpp:
        * platform/network/qt/ResourceRequestQt.cpp:
        (WebCore::initializeMaximumHTTPConnectionCountPerHost):

2009-12-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7341364> Crash at HTMLParser::popOneBlockCommon() after
        handling misnested residual style tags

        Test: fast/parser/residual-style-close-ref-clone.html

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks): Gave the
        block stack a strong reference to the cloned residual style element. 

2009-12-13  Adele Peterson  <adele@apple.com>

        Reviewed by Sam Weinig.

        Reverting changes from http://trac.webkit.org/changeset/49585 to fix:
        <rdar://problem/7382815> REGRESSION (4.0.4-TOT): Home photo slider is too narrow at http://www.ziprealty.com/
        https://bugs.webkit.org/show_bug.cgi?id=32078

        * css/CSSPrimitiveValue.cpp: (WebCore::CSSPrimitiveValue::cssText):

2009-12-08  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Eric Seidel.

        Add code to allow toggling ATSUI/Core Text rendering at runtime in ComplexTextController.
        https://bugs.webkit.org/show_bug.cgi?id=31802

        The goal here is to allow for a zero runtime hit for ports that decide to select
        the API at compile time.
        When both USE(ATSUI) and USE(CORE_TEXT) are true, the API is toggled
        at runtime.  Core Text is used for OS Versions >= 10.6.

        No test since this is already covered by existing pixel tests.

        * platform/graphics/SimpleFontData.h:  Change #ifdef to define getNSFont() on Chrome/Mac .
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::shouldUseATSUIAPI): Cache decision about which API to use.
        (WebCore::ComplexTextController::ComplexTextRun::indexAt):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters): Stub function to call through
        to ATSUI/Core text variants.
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): The actual work for object construction
        is delegate to createTextRunFromFontDataATSUI/createTextRunFromFontDataCoreText.
        * platform/graphics/mac/ComplexTextController.h:
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::overrideLayoutOperation): Small style fix.
        (WebCore::ComplexTextController::ComplexTextRun::createTextRunFromFontDataATSUI):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersATSUI):
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        (WebCore::ComplexTextController::ComplexTextRun::createTextRunFromFontDataCoreText):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText):

2009-12-13  Eric Carlson  <eric.carlson@apple.com>

        No review, rolling out r52059 until I can generate new Tiger
        test results.

        * rendering/RenderThemeMac.mm:
        (WebCore::mediaControllerTheme):

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

        Rubber-stamped by Dan Bernstein.

        Fix the EXPERIMENTAL_SINGLE_VIEW_MODE build.

        * Configurations/WebCore.xcconfig:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clearDragState):
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::isCopyKeyDown):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::eventActivatedView):
        * platform/PlatformKeyboardEvent.h:
        * platform/PlatformMouseEvent.h:
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/mac/KeyEventMac.mm:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/mac/PlatformMouseEventMac.mm:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::show):
        * platform/mac/WidgetMac.mm:

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

        Rubber-stamped by Dan Bernstein.

        Fix the !ENABLE(VIDEO) build.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForVideo):

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

        Rubber-stamped by Dan Bernstein.

        Fix the !ENABLE(DATABASE) build.

        * storage/SQLTransactionClient.cpp:
        * storage/SQLTransactionClient.h:
        * storage/SQLTransactionCoordinator.cpp:
        * storage/SQLTransactionCoordinator.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):

2009-12-12  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6293979> Adopt shared control drawing for <video> controls on Leopard and Windows

        Use MediaControllerThemeQuickTime on Leopard.

        * rendering/RenderThemeMac.mm:
        (WebCore::mediaControllerTheme):

2009-12-12  Kenneth Russell  <kbr@google.com>

        Reviewed by Oliver Hunt.

        Errors in WebGL[T]Array set() and get() methods
        https://bugs.webkit.org/show_bug.cgi?id=32456

        Test: fast/canvas/webgl/bug-32456.html

        * bindings/js/JSWebGLFloatArrayCustom.cpp:
        (WebCore::JSWebGLFloatArray::set):
        * bindings/js/JSWebGLIntArrayCustom.cpp:
        (WebCore::JSWebGLIntArray::set):
        * bindings/js/JSWebGLShortArrayCustom.cpp:
        (WebCore::JSWebGLShortArray::set):
        * bindings/js/JSWebGLUnsignedByteArrayCustom.cpp:
        (WebCore::JSWebGLUnsignedByteArray::set):
        * bindings/js/JSWebGLUnsignedIntArrayCustom.cpp:
        (WebCore::JSWebGLUnsignedIntArray::set):
        * bindings/js/JSWebGLUnsignedShortArrayCustom.cpp:
        (WebCore::JSWebGLUnsignedShortArray::set):
        * bindings/v8/custom/V8WebGLArrayCustom.h:
        (WebCore::setWebGLArray):
        * html/canvas/WebGLFloatArray.idl:
        * html/canvas/WebGLUnsignedIntArray.idl:

2009-12-12  Kenneth Russell  <kbr@google.com>

        Reviewed by Oliver Hunt.

        Update WebGL tests to released versions
        https://bugs.webkit.org/show_bug.cgi?id=32457

        * manual-tests/webgl/Earth.html:
        * manual-tests/webgl/ManyPlanetsDeep.html:
        * manual-tests/webgl/SpinningBox.html:
        * manual-tests/webgl/TeapotPerPixel.html:
        * manual-tests/webgl/TeapotPerVertex.html:
        * manual-tests/webgl/resources/CanvasMatrix.js:
        (CanvasMatrix4.prototype.getAsWebGLFloatArray):
        * manual-tests/webgl/resources/utils3d.js:
        (initWebGL.gl.console.window.console.log):
        (initWebGL):
        (loadShader):
        (makeBox):
        (makeSphere):
        (processLoadObj):
        (doLoadObj):
        (doLoadImageTexture):

2009-12-12  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Dirk Schulze.

        Remove the include to SVGFEDisplacementMap.h, it's not needed at all.

        * platform/graphics/filters/FEComponentTransfer.h:

2009-12-12  Christian Dywan  <christian@twotoasts.de>

        Rubber-stamped by Maciej Stachowiak.

        Only include SVGFEDisplacementMap.h if SVG is enabled.

        * platform/graphics/filters/FEComponentTransfer.h:

2009-12-12  Dirk Schulze  <krit@webkit.org>

        Reviewed by Eric Seidel.

        [Cairo][Qt] Alpha blending in SVG filters is wrong
        https://bugs.webkit.org/show_bug.cgi?id=32427

        This patch is a follow-up to:
        http://trac.webkit.org/changeset/51950
        It fixes the alpha blending for Cairo and Qt on SVG Filters.

        Covered by: * LayoutTests/svg/filters/feGaussianBlur.svg
                    * LayoutTests/svg/filters/feComposite.svg
                     and others.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::platformTransformColorSpace):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::platformTransformColorSpace):

2009-12-11  Eric Roman  <eroman@chromium.org>

        Unreviewed build fix.

        [V8] Add a method on ScriptController to get it compiling after http://trac.webkit.org/changeset/52033.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::anyPageIsProcessingUserGesture):
        * bindings/v8/ScriptController.h:

2009-12-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [V8] Change bindings to catch up with http://trac.webkit.org/changeset/52033.

        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Added retrieval of calling frame and passing
          to the submit method.

2009-12-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Put -umbrella linker flag into a variable so that it can be overridden.

        * Configurations/WebCore.xcconfig:

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

        Reviewed by Darin Adler.

        body with display:inline causes crash
        https://bugs.webkit.org/show_bug.cgi?id=32371

        Tests: fast/inline/inline-body-crash.html
               fast/inline/inline-body-with-scrollbar-crash.html

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

2009-12-11  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Sam Weinig.

        https://webkit.org/b/22851 - Remove defunct FIXME.

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::HTMLPlugInElement): This flag was removed completely
          from the HTMLFrameOwnerElement chain of classes.

2009-12-11  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Small refactoring to get rid of some extra unneeded selection-related work
        in RenderLayer::scrollToOffset and separate caret and range selection
        logic in FrameView::layout. This may be useful later when changing how
        the range selection logic works to fix layout reentrancy problems.

        * page/Frame.cpp: Removed invalidateSelection.
        * page/Frame.h: Ditto.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout): Call SelectionController::setNeedsLayout
        and Frame::selectionLayoutChanged instead of calling
        Frame::invalidateSelection, which was just a function that called
        both of those others.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset): Call
        SelectionController::setNeedsLayout instead of calling
        Frame::invalidateSelection. This call site only needs the caret-related
        work in that first function, not the other work formerly done by
        Frame::invalidateSelection. The caret works outside the normal
        painting and rendering system, and the range selection highlight is
        more or less inside it and doesn't need special handling when scrolling.

2009-12-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7342725> and https://webkit.org/b/32383
        Selecting article text at sfgate.com results in spurious back/forward entries

        If an iframe had a form and that form is submitted by javascript, IE and Opera don't add back/forward entries.
        
        In the case where the frame was added dynamically via createElement(), Firefox would like to add a back entry
        but has a bug that prevents this.

        Therefore by a bizarre coincidence, WebKit is the loner and the only engine affected by sfgate.com's technique.

        This patch changes us to willfully match IE and Opera and fixes sfgate.com in the process.

        Tests: http/tests/navigation/dynamic-iframe-dynamic-form-back-entry.html
               http/tests/navigation/parsed-iframe-dynamic-form-back-entry.html

        Capture whether the form was submitted by javascript:
        * loader/FormState.cpp:
        (WebCore::FormState::FormState):
        (WebCore::FormState::create):
        * loader/FormState.h:
        (WebCore::FormState::formSubmissionTrigger):

        When deciding the value of the lockBackForwardList variable, take formSubmissionTrigger() into account:
        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::scheduleFormSubmission):

        Rearrange the public HTMLFormElement::submit() method to be called only from DOM or JS bindings,
        and figure out the rest of the parameters for an internal submit() call including the formSubmissionTrigger:
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::submit):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::prepareSubmit):
        (WebCore::HTMLFormElement::submit):
        * html/HTMLFormElement.h:

2009-12-11  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=32445
        REGRESSION: http://www.mcafee.com/japan/ displays unstyled

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::setCSSStyleSheet):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        Add a quirk for mcafee.com/japan (http or https, with or without www).

2009-12-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Make PlatformWheelEvent.h private instead of project.

        * WebCore.xcodeproj/project.pbxproj:

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

        Reviewed by Darin Adler.

        Support reflections on composited layers
        https://bugs.webkit.org/show_bug.cgi?id=31885
        
        First part of supporting composited reflections on compositing layers.
        
        Rename the m_transformLayer member variable to m_structuralLayer, since it
        will get used both for transform layers (for preserve-3d) and to hold a flattening
        layer related to reflections, both of which have similar requirements, and are
        mutually exclusive.

        * platform/graphics/mac/GraphicsLayerCA.h:
        primaryLayer(), hostLayerForSublayers() and layerForSuperlayer() all now return
        a CALayer, since m_structuralLayer isn't always a WebLayer.
        
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::commitLayerChanges):
        updateLayerPreserves3D() renamed to updateStructuralLayer()
        
        (WebCore::GraphicsLayerCA::updateLayerNames):
        New "update" method for updating layer names.
        
        (WebCore::GraphicsLayerCA::updateSublayerList):
        m_transformLayer -> m_structuralLayer. Also minor refactor to only
        allocate newSublayers in one place.
        
        (WebCore::GraphicsLayerCA::updateLayerSize):
        (WebCore::GraphicsLayerCA::removeAnimationFromLayer):
        (WebCore::GraphicsLayerCA::hostLayerForSublayers):
        (WebCore::GraphicsLayerCA::layerForSuperlayer):
        m_transformLayer -> m_structuralLayer
        
        (WebCore::GraphicsLayerCA::updateStructuralLayer):
        Call ensureStructuralLayer() which handles any deltas to the
        structural layer type.
        
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        Handle changes to the structural layer requirements
        
        (WebCore::GraphicsLayerCA::structuralLayerPurpose):
        Return an enum describing the purpose of the structural layer; for now
        this only returns NoStructuralLayer or StructuralLayerForPreserves3D, but
        will in future also have a value related to reflections.

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

        Build fix for platforms where ACCELERATED_COMPOSITING is not defined.

        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::pauseAnimation):

2009-12-11  Adam Roben  <aroben@apple.com>

        Windows build fix

        * platform/graphics/win/WKCACFLayerRenderer.cpp: Removed #include of
        non-existent header.

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

        Build fix, no review.

        Build fix for platforms where ACCELERATED_COMPOSITING is not defined.

        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::startAnimation):

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

        Build fix, no review.

        Build fix for platforms where ACCELERATED_COMPOSITING is not defined.

        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::startAnimation):

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

        Reviewed by Darin Adler.

        Negative values for animation-delay are ignored (treated as zero)
        https://bugs.webkit.org/show_bug.cgi?id=26150
        
        When we get the m_startTime for an animation or transition, subtract any negative
        delay so the animation/transition behaves like it started in the past, per spec.

        Tests: animations/negative-delay.html
               transitions/negative-delay.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):

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

        Reviewed by Dan Bernstein.

        Accelerated transitions broken when mixed with paused animations
        https://bugs.webkit.org/show_bug.cgi?id=32387

        Synchronization of a mixture of accelerated and software animations occurs via
        a callback from GraphicsLayerCA, which ends up in
        AnimationControllerPrivate::receivedStartTimeResponse(). The time passed in is
        the exact time at which the accelerated animations started, so is used as the
        start time for all animations and transitions which are marked as waiting.

        The bug was that the callback called when re-starting animations that were
        paused sent back an old time value, but this was used to start normal
        transitions. Therefore the transition would start with a stale start time, and
        thus end prematurely.

        The fix is to change the way that GraphicsLayerCA handles paused animations.
        Rather than setting the beginTime of the animation, it uses a beginTime of 0
        and a timeOffset that gets passed down. Thus the callbacks always come with
        beginTime for 'now'.

        Also clarify the role of AnimationBase::endAnimation() by splitting it into
        pauseAnimation() and endAnimation(), and pass down timeOffsets, rather than
        beginTimes when starting and pausing.

        Manual test only, because the bug requires a non-trivial combination of
        animation pausing and transitions which take time, and the bug only shows in
        pixel results.
        
        * manual-tests/animation/transitions-and-paused-animations.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::startAnimation):
        (WebCore::AnimationBase::pauseAnimation):
        (WebCore::AnimationBase::endAnimation):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::~ImplicitAnimation):
        (WebCore::ImplicitAnimation::startAnimation):
        (WebCore::ImplicitAnimation::endAnimation):
        (WebCore::ImplicitAnimation::onAnimationEnd):
        * page/animation/ImplicitAnimation.h:
        (WebCore::ImplicitAnimation::pauseAnimation):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::~KeyframeAnimation):
        (WebCore::KeyframeAnimation::startAnimation):
        (WebCore::KeyframeAnimation::pauseAnimation):
        (WebCore::KeyframeAnimation::endAnimation):
        (WebCore::KeyframeAnimation::onAnimationEnd):
        * page/animation/KeyframeAnimation.h:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::addAnimation):
        (WebCore::GraphicsLayer::pauseAnimation):
        * platform/graphics/mac/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::LayerAnimation::LayerAnimation):
        (WebCore::GraphicsLayerCA::AnimationProcessingAction::AnimationProcessingAction):
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::addAnimation):
        (WebCore::GraphicsLayerCA::removeAnimationsForKeyframes):
        (WebCore::GraphicsLayerCA::pauseAnimation):
        (WebCore::GraphicsLayerCA::updateLayerAnimations):
        (WebCore::GraphicsLayerCA::setAnimationOnLayer):
        (WebCore::GraphicsLayerCA::pauseAnimationOnLayer):
        (WebCore::GraphicsLayerCA::createAnimationFromKeyframes):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):
        (WebCore::RenderLayerBacking::animationPaused):
        * rendering/RenderLayerBacking.h:

2009-12-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.

        Fixes <http://webkit.org/b/32399>.
        Pan Scrolling Jumps out of frames if the initial location is in a frame that can't be scrolled.
        
        When we initially figure out the layer that we should begin scrolling, don't try to jump out
        of frames/iFrames to look at the owner document. We don't want to jump out of frames, so we
        don't need that logic anymore.
        
        Added a test to make sure that we don't pan scroll if we start to scroll in an empty
        iFrame that has a scrollable owner document.

        Test: platform/win/fast/events/panScroll-no-iframe-jump.html

        * dom/Node.cpp:
        (WebCore::Node::defaultEventHandler):

2009-12-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Fixes <http://webkit.org/b/32303>.
        Middle-mouse button not firing mousedown DOM event when autoscroll happens.
        
        This fix moves the pan scrolling code into Node.cpp, as part of the default event handler.
        We get two wins out of this:
            1) Mousedown DOM events are now fired before pan scrolling.
            2) Calling event.preventDefault() on a middle mouse button will now prevent pan scrolling.
        
        Added tests to show that middle mousedown DOM events are fired when panscrolling happens, and
        that when event.preventDefault is called, pan scrolling doesn't happen.

        Tests: platform/win/fast/events/panScroll-event-fired.html
               platform/win/fast/events/panScroll-preventDefault.html

        * dom/Node.cpp:
        (WebCore::Node::defaultEventHandler): Moved pan scrolling starting code to here.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::startPanScrolling): Function to initialize scrolling variables and start timer.
        (WebCore::EventHandler::handleMousePressEvent): From here.
        * page/EventHandler.h:

2009-12-11  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        Delay load DLLs for accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=31856
        
        Change calls that use the data export symbols from
        QuartzCore to use the functions in QuartzCoreInterface.
        This allows QuartzCore to be delay loaded.

        * platform/graphics/win/GraphicsLayerCACF.cpp:
        (WebCore::GraphicsLayerCACF::GraphicsLayerCACF):
        (WebCore::GraphicsLayerCACF::updateLayerPreserves3D):
        (WebCore::GraphicsLayerCACF::updateContentsImage):
        * platform/graphics/win/WKCACFLayer.cpp:
        (WebCore::toCACFLayerType):
        (WebCore::toCACFContentsGravityType):
        (WebCore::fromCACFContentsGravityType):
        (WebCore::toCACFFilterType):
        (WebCore::fromCACFFilterType):
        (WebCore::WKCACFLayer::create):
        (WebCore::WKCACFLayer::WKCACFLayer):
        (WebCore::WKCACFLayer::setContentsGravity):
        (WebCore::WKCACFLayer::contentsGravity):
        (WebCore::WKCACFLayer::setMagnificationFilter):
        (WebCore::WKCACFLayer::magnificationFilter):
        (WebCore::WKCACFLayer::setMinificationFilter):
        (WebCore::WKCACFLayer::minificationFilter):
        * platform/graphics/win/WKCACFLayer.h:
        (WebCore::WKCACFLayer::):
        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::acceleratedCompositingAvailable):
        (WebCore::WKCACFLayerRenderer::createRenderer):

2009-12-11  Steve Block  <steveblock@google.com>

        Reviewed by Darin Fisher.

        Adds an Android-specific implementation of initializeMaximumHTTPConnectionCountPerHost.
        https://bugs.webkit.org/show_bug.cgi?id=31810

        * platform/network/ResourceRequestBase.cpp: Modified. Disable default implementation
            of initializeMaximumHTTPConnectionCountPerHost for Android.
        * platform/network/android: Added.
        * platform/network/android/ResourceRequestAndroid.cpp: Added.
        (WebCore::initializeMaximumHTTPConnectionCountPerHost): Android-specific implementation.

2009-12-11  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Fisher.

        Add acceptTypes() method to FileChooser.
        https://bugs.webkit.org/show_bug.cgi?id=32429

        This method returns an 'accept' attribute value of the
        corresponding INPUT element. A ChromeClient::runOpenPanel()
        implementation can refer it through a FileChooser instance to
        support type-restricted file selecting.

        This makes no user-visible changes for now.

        * platform/FileChooser.h:
        (WebCore::FileChooser::acceptTypes):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::acceptTypes):
        * rendering/RenderFileUploadControl.h:

2009-12-11  Victor Wang  <victorw@chromium.org>

        Reviewed by Darin Fisher.

        Changed PopupMenuChromium to keep the value selected from
        keyboard when popup is closed.

        The problem is Chromium does not fire the onchange event
        when the popup is closed if an item is selected via
        keyboard by typing the first char of the item. This makes
        chromium popup not having consistent behaviours and also
        behaves differently from other major browsers.
        Calling popup->hide() instead of popup->hidePopup() in
        PopupMenu fixes the issues as it does extra step to check
        whethere there is a keyboard selection changed when closing
        the popup.

        https://bugs.webkit.org/show_bug.cgi?id=32403
    
        TEST: add a manual test as the current layout test shell
        does not support sending keyboard events to popup list.

        * manual-tests/chromium/select-close-popup-value-change.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupMenu::hide):

2009-12-11  anton muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] refactor WeakReferenceMap.
        Move common bits of functionality to reduce duplication.

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

        Should be covered by buildbots.

        * bindings/v8/DOMData.h:
        (WebCore::DOMData::WrapperMapObjectRemover::visitDOMWrapper):
        (WebCore::DOMData::handleWeakObject):
        (WebCore::DOMData::removeObjectsFromWrapperMap):
        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::weakDOMObjectCallback):
        (WebCore::DOMDataStore::weakActiveDOMObjectCallback):
        (WebCore::DOMDataStore::weakNodeCallback):
        (WebCore::DOMDataStore::weakSVGElementInstanceCallback):
        (WebCore::DOMDataStore::weakSVGObjectWithContextCallback):
        * bindings/v8/DOMDataStore.h:
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::visitDOMNodesInCurrentThread):
        (WebCore::visitDOMObjectsInCurrentThread):
        (WebCore::visitActiveDOMObjectsInCurrentThread):
        (WebCore::visitDOMSVGElementInstancesInCurrentThread):
        (WebCore::visitSVGObjectsInCurrentThread):
        * bindings/v8/V8DOMMap.h:
        (WebCore::WeakReferenceMap::removeIfPresent):
        (WebCore::WeakReferenceMap::clear):
        (WebCore::WeakReferenceMap::visit):

2009-12-11  anton muhin  <antonm@chromium.org>
        Reviewed by Adam Barth.

        [v8] in Debug builds create an additional handle scope
        when doing debug build checks.
        https://bugs.webkit.org/show_bug.cgi?id=32335

        Should be covered by buildbots.

        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::convertDOMWrapperToNative):
        (WebCore::V8DOMWrapper::convertDOMWrapperToNode):

2009-12-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Do not use ContextMenuItem as value type in custom
        context menu implementation.

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

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::showContextMenu):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::InspectorFrontendHost):
        (WebCore::InspectorFrontendHost::~InspectorFrontendHost):
        (WebCore::InspectorFrontendHost::showContextMenu):
        (WebCore::InspectorFrontendHost::contextMenuCleared):
        * inspector/InspectorFrontendHost.h:
        (WebCore::InspectorFrontendHost::MenuProvider::create):
        (WebCore::InspectorFrontendHost::MenuProvider::~MenuProvider):
        (WebCore::InspectorFrontendHost::MenuProvider::disconnect):
        (WebCore::InspectorFrontendHost::MenuProvider::populateContextMenu):
        (WebCore::InspectorFrontendHost::MenuProvider::contextMenuCleared):
        (WebCore::InspectorFrontendHost::MenuProvider::MenuProvider):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::ContextMenuController):
        (WebCore::ContextMenuController::clearContextMenu):
        (WebCore::ContextMenuController::showContextMenu):
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/ContextMenuController.h:
        * page/ContextMenuProvider.h: Added.
        (WebCore::ContextMenuProvider::~ContextMenuProvider):
        * page/ContextMenuSelectionHandler.h: Removed.

2009-12-11  Simon Hausmann  <hausmann@webkit.org>, Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Antti Koivisto.

        Basic cross-platform implementation of mapping platform touch events
        to JavaScript touch events.

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

        Test: fast/events/basic-touch-events.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent):
        * page/EventHandler.h:

2009-12-11  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's EmptyFrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=32110

        Inherits the following class from Noncopyable because it is
        instantiated by 'new' and no need to be copyable:

        class name              - instantiated at: WebCore/'location'

        class EmptyFrameLoaderClient - svg/graphics/SVGImage.cpp:229

        * loader/FrameLoaderClient.h:

2009-12-11  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for 3 classes in WebCore's svg and loader directory
        https://bugs.webkit.org/show_bug.cgi?id=32106

        Inherits the following classes from Noncopyable because these are instantiated 
        by 'new' and no need to be copyable:

        class/struct name            - instantiated at: WebCore/'location'

        class EmptyContextMenuClient - instantiated at: svg/graphics/SVGImage.cpp:232
        class EmptyDragClient        - instantiated at: svg/graphics/SVGImage.cpp:237
        class SVGImageChromeClient   - instantiated at: svg/graphics/SVGImage.cpp:243

        * svg/graphics/SVGImage.cpp:
        * loader/EmptyClients.h:

2009-12-11  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Darin Adler.

        The values of RuntimeArray are not enumerable
        https://bugs.webkit.org/show_bug.cgi?id=29005

        The indices of RuntimeArray should be enumerated like for a regular array.

        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertyNames):
        * bridge/runtime_array.h:

2009-12-11  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] ImageDecoderQt: Fix retrieval of image file extensions

        QImageReader only allows retrieving the format() before actually reading the image.

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

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::setData):
        (WebCore::ImageDecoderQt::internalDecodeSize):

2009-12-11  Simon Hausmann  <hausmann@webkit.org>, Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Antti Koivisto.

        Added interfaces for touch event support in JavaScript.

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

        The Touch, TouchEvent and TouchList interfaces come straight from
        Android's copy of WebKit (eclaire branch).

        The PlatformTouchEvent and PlatformTouchPoint code was written by
        us.

        No new tests added, we are just adding interfaces
        with this patch.

        * WebCore.pro:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * dom/Document.cpp:
        (WebCore::Document::addListenerTypeIfNeeded):
        * dom/Document.h:
        (WebCore::Document::):
        * dom/Document.idl:
        * dom/Element.h:
        * dom/Element.idl:
        * dom/Event.cpp:
        (WebCore::Event::isTouchEvent):
        * dom/Event.h:
        * dom/EventNames.h:
        * dom/Touch.cpp: Added.
        (WebCore::contentsX):
        (WebCore::contentsY):
        (WebCore::Touch::Touch):
        (WebCore::Touch::updateLocation):
        * dom/Touch.h: Added.
        (WebCore::Touch::create):
        (WebCore::Touch::frame):
        (WebCore::Touch::target):
        (WebCore::Touch::identifier):
        (WebCore::Touch::clientX):
        (WebCore::Touch::clientY):
        (WebCore::Touch::screenX):
        (WebCore::Touch::screenY):
        (WebCore::Touch::pageX):
        (WebCore::Touch::pageY):
        * dom/Touch.idl: Added.
        * dom/TouchEvent.cpp: Added.
        (WebCore::TouchEvent::TouchEvent):
        (WebCore::TouchEvent::initTouchEvent):
        * dom/TouchEvent.h: Added.
        (WebCore::TouchEvent::create):
        (WebCore::TouchEvent::touches):
        (WebCore::TouchEvent::targetTouches):
        (WebCore::TouchEvent::changedTouches):
        (WebCore::TouchEvent::TouchEvent):
        (WebCore::TouchEvent::isTouchEvent):
        * dom/TouchEvent.idl: Added.
        * dom/TouchList.cpp: Added.
        (WebCore::TouchList::item):
        * dom/TouchList.h: Added.
        (WebCore::TouchList::create):
        (WebCore::TouchList::length):
        (WebCore::TouchList::append):
        (WebCore::TouchList::TouchList):
        * dom/TouchList.idl: Added.
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * platform/PlatformTouchEvent.h: Added.
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        (WebCore::PlatformTouchEvent::touchPoints):
        * platform/PlatformTouchPoint.h: Added.
        (WebCore::PlatformTouchPoint::):
        (WebCore::PlatformTouchPoint::id):
        (WebCore::PlatformTouchPoint::state):
        (WebCore::PlatformTouchPoint::screenPos):
        (WebCore::PlatformTouchPoint::pos):
        * platform/qt/PlatformTouchEventQt.cpp: Added.
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        * platform/qt/PlatformTouchPointQt.cpp: Added.
        (WebCore::PlatformTouchPoint::PlatformTouchPoint):

2009-12-11  Grace Kloba  <klobag@gmail.com>

        Reviewed by Darin Adler.

        [Android] Add detachHistoryItem() to AndroidWebHistoryBridge. And the constructor takes
        HistoryItem* now. As AndroidWebHistoryBridge holds a dumb pointer of HistoryItem and
        HistoryItem holds a RefPtr of AndroidWebHistoryBridge, the dumb pointer needs to be cleared
        when HistoryItem is deleted to avoid potential crash.
        https://bugs.webkit.org/show_bug.cgi?id=32251

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::~HistoryItem):
        * history/android/AndroidWebHistoryBridge.h:
        (WebCore::AndroidWebHistoryBridge::AndroidWebHistoryBridge):
        (WebCore::AndroidWebHistoryBridge::detachHistoryItem):


2009-12-11  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Pavel Feldman.

        Log WebSocket error to Web Inspector console.
        https://bugs.webkit.org/show_bug.cgi?id=32165

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didOpen):
        (WebCore::WebSocketChannel::appendToBuffer):
        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readServerHandshake):
        (WebCore::WebSocketHandshake::readHTTPHeaders):
        (WebCore::WebSocketHandshake::checkResponseHeaders):

2009-12-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Mixed content shouldn't trigger for plug-ins without URLs
        https://bugs.webkit.org/show_bug.cgi?id=32384

        These plug-ins cannot be controlled by active network attackers, so
        there's no reason to trigger a mixed content warning.

        Test: http/tests/security/mixedContent/empty-url-plugin-in-frame.html

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

2009-12-10  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=32140
        REGRESSION(r50072): Mailman administrative functionality is broken

        Test: http/tests/misc/percent-sign-in-form-field-name.html

        * platform/network/FormDataBuilder.cpp: (WebCore::appendQuotedString): Don't encode percent
        sign, we never had a good reason to do that.

2009-12-10  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Geoffrey Garen.

        Remove getPropertyAttributes() from JavaScript bindings.
        https://bugs.webkit.org/show_bug.cgi?id=31933

        The functionality is provided by getOwnPropertyDescriptor().

        * WebCore.order:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSDOMWindowShell.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * page/DOMWindow.idl:

2009-12-10  Kenneth Russell  <kbr@google.com>

        Reviewed by Oliver Hunt.

        Changed WebGLRenderingContext to synthesize GL errors rather than
        raising JavaScript exceptions. Removed internal getError() calls
        after each graphics call. The GraphicsContext3D maintains the
        synthetic exceptions because only it has complete information
        about certain conditions requiring them to be raised.

        Based on idea from Ilmari Heikkinen, added create3DDebugContext()
        to webgl-test.js and changed the WebGL layout tests expecting
        error conditions to use it. Updated expected.txt files, which now
        implicitly test the OpenGL error as it is part of the exception's
        message.

        Added new targeted test covering aspects of synthetic errors as
        well as regression tests for bugs uncovered during its development.

        Test: fast/canvas/webgl/error-reporting.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::sizeInBytes):
        (WebCore::WebGLRenderingContext::activeTexture):
        (WebCore::WebGLRenderingContext::attachShader):
        (WebCore::WebGLRenderingContext::bindAttribLocation):
        (WebCore::WebGLRenderingContext::bindBuffer):
        (WebCore::WebGLRenderingContext::bindFramebuffer):
        (WebCore::WebGLRenderingContext::bindRenderbuffer):
        (WebCore::WebGLRenderingContext::bindTexture):
        (WebCore::WebGLRenderingContext::bufferData):
        (WebCore::WebGLRenderingContext::bufferSubData):
        (WebCore::WebGLRenderingContext::compileShader):
        (WebCore::WebGLRenderingContext::createShader):
        (WebCore::WebGLRenderingContext::detachShader):
        (WebCore::WebGLRenderingContext::disableVertexAttribArray):
        (WebCore::WebGLRenderingContext::drawArrays):
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::enableVertexAttribArray):
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer):
        (WebCore::WebGLRenderingContext::framebufferTexture2D):
        (WebCore::WebGLRenderingContext::getActiveAttrib):
        (WebCore::WebGLRenderingContext::getActiveUniform):
        (WebCore::WebGLRenderingContext::getBufferParameter):
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getProgramParameter):
        (WebCore::WebGLRenderingContext::getProgramInfoLog):
        (WebCore::WebGLRenderingContext::getRenderbufferParameter):
        (WebCore::WebGLRenderingContext::getShaderParameter):
        (WebCore::WebGLRenderingContext::getShaderInfoLog):
        (WebCore::WebGLRenderingContext::getShaderSource):
        (WebCore::WebGLRenderingContext::getTexParameter):
        (WebCore::WebGLRenderingContext::getUniform):
        (WebCore::WebGLRenderingContext::getUniformLocation):
        (WebCore::WebGLRenderingContext::getVertexAttrib):
        (WebCore::WebGLRenderingContext::linkProgram):
        (WebCore::WebGLRenderingContext::shaderSource):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        (WebCore::WebGLRenderingContext::uniform1f):
        (WebCore::WebGLRenderingContext::uniform1fv):
        (WebCore::WebGLRenderingContext::uniform1i):
        (WebCore::WebGLRenderingContext::uniform1iv):
        (WebCore::WebGLRenderingContext::uniform2f):
        (WebCore::WebGLRenderingContext::uniform2fv):
        (WebCore::WebGLRenderingContext::uniform2i):
        (WebCore::WebGLRenderingContext::uniform2iv):
        (WebCore::WebGLRenderingContext::uniform3f):
        (WebCore::WebGLRenderingContext::uniform3fv):
        (WebCore::WebGLRenderingContext::uniform3i):
        (WebCore::WebGLRenderingContext::uniform3iv):
        (WebCore::WebGLRenderingContext::uniform4f):
        (WebCore::WebGLRenderingContext::uniform4fv):
        (WebCore::WebGLRenderingContext::uniform4i):
        (WebCore::WebGLRenderingContext::uniform4iv):
        (WebCore::WebGLRenderingContext::uniformMatrix2fv):
        (WebCore::WebGLRenderingContext::uniformMatrix3fv):
        (WebCore::WebGLRenderingContext::uniformMatrix4fv):
        (WebCore::WebGLRenderingContext::useProgram):
        (WebCore::WebGLRenderingContext::validateProgram):
        (WebCore::WebGLRenderingContext::vertexAttribPointer):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore::WebGLRenderingContext::cleanupAfterGraphicsCall):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniform):
        (WebCore::GraphicsContext3D::getError):
        (WebCore::GraphicsContext3D::synthesizeGLError):

2009-12-10  Stephen White  <senorblanco@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix for assert on Chrome/skia with SVG Filters enabled.
        https://bugs.webkit.org/show_bug.cgi?id=32394

        Covered by LayoutTests/svg/W3C-SVG-1.1/filters-tile-01-b.svg and others.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::platformTransformColorSpace):

2009-12-10  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        REGRESSION(4.0.4-42a12): With 2 highlighted lines of text in gmail/hotmail selecting Bold selects other 2 edit buttons automatically.
        <rdar://problem/7442065>
        https://bugs.webkit.org/show_bug.cgi?id=32285

        When examining the styles of the nodes after the first in a range selection, we take into
        cosideration differences in style of txt nodes only.
        
        Test: editing/execCommand/queryCommandState-02.html

        * editing/Editor.cpp:
        (WebCore::Editor::selectionHasStyle):

2009-12-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Alexey Proskuryakov.

        Crash in XMLTokenizer::popCurrentNode if window.close() is called during parsing
        https://bugs.webkit.org/show_bug.cgi?id=31576

        Add a RefCounted wrapper object around xmlParserCtxtPtr so we can
        maintain it's lifetime more effectively.

        Test: fast/parser/xhtml-close-while-parsing.xhtml

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::popCurrentNode):
        * dom/XMLTokenizer.h:
        (WebCore::XMLParserContext::context):
        (WebCore::XMLParserContext::XMLParserContext):
        (WebCore::XMLTokenizer::context):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLParserContext::createStringParser):
        (WebCore::XMLParserContext::createMemoryParser):
        (WebCore::XMLParserContext::~XMLParserContext):
        (WebCore::XMLTokenizer::~XMLTokenizer):
        (WebCore::XMLTokenizer::doWrite):
        (WebCore::XMLTokenizer::initializeParserContext):
        (WebCore::XMLTokenizer::doEnd):
        (WebCore::XMLTokenizer::lineNumber):
        (WebCore::XMLTokenizer::columnNumber):
        (WebCore::XMLTokenizer::stopParsing):
        (WebCore::parseXMLDocumentFragment):
        (WebCore::parseAttributes):

2009-12-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: debugger shortcuts don't work when
        Search field or Console drawer has focus.

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

        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.documentKeyDown):
        (WebInspector.documentKeyUp):
        (WebInspector.searchKeyDown):

2009-12-10  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        [V8] Events created in isolated worlds may fire in main world.
        https://bugs.webkit.org/show_bug.cgi?id=32386

        Test: http/tests/security/isolatedWorld/events.html

        * WebCore.gypi: Added WorldContextHandle.
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener): Added WorldContextHandle params.
        * bindings/v8/SharedPersistent.h: Fixed a few style/include issues.
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::V8AbstractEventListener): Added WorldContextHandle params.
        (WebCore::V8AbstractEventListener::handleEvent): Adjusted context retrieval to use WorldContextHandle.
        (WebCore::V8AbstractEventListener::invokeEventHandler): Ditto.
        * bindings/v8/V8AbstractEventListener.h:
        (WebCore::V8AbstractEventListener::worldContext): Added WorldContextHandle params.
        * bindings/v8/V8EventListenerList.h:
        (WebCore::V8EventListenerList::findOrCreateWrapper): Ditto.
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener): Ditto.
        (WebCore::V8LazyEventListener::prepareListenerObject): Adjusted context retrieval to use WorldContextHandle.
        * bindings/v8/V8LazyEventListener.h:
        (WebCore::V8LazyEventListener::create): Added WorldContextHandle params.
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::context): Refactored to use mainWorldContext();
        (WebCore::V8Proxy::mainWorldContext): Added.
        (WebCore::toV8Context): Changed to use WorldContextHandle.
        * bindings/v8/V8Proxy.h: Added mainWorldContext decl.
        * bindings/v8/V8Utilities.cpp:
        (WebCore::reportException): Added an extra check to avoid crashes during frame teardown.
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::V8WorkerContextEventListener): Added WorldContextHandle params.
        * bindings/v8/V8WorkerContextEventListener.h:
        (WebCore::V8WorkerContextEventListener::create): Added WorldContextHandle params.
        * bindings/v8/WorldContextHandle.cpp: Added.
        * bindings/v8/WorldContextHandle.h: Added.
        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::V8EventListener): Added WorldContextHandle params.
        * bindings/v8/custom/V8CustomEventListener.h:
        (WebCore::V8EventListener::create): Added WorldContextHandle params.

2009-12-10  Jon Honeycutt  <jhoneycutt@apple.com>

        Pass more information about a plug-in to the PluginHalterDelegate

        Reviewed by Adam Roben.

        * loader/EmptyClients.h:
        Remove this unused class.

        * page/HaltablePlugin.h:
        Add new functions to return the plug-in's name and whether it is
        windowed.

        * page/PluginHalter.cpp:
        (WebCore::PluginHalter::timerFired):
        Pass new arguments to the client.

        * page/PluginHalterClient.h:
        Add new parameters.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::pluginName):
        Return the name from the PluginPackage.

        * plugins/PluginView.h:
        (WebCore::PluginView::isWindowed):

2009-12-09  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Pavel Feldman.

        Fixes <http://webkit.org/b/31738>.
        Web Inspector: Console Scope Bar should be on top of console when Console is a Panel.
        
        When the console is set to be shown as a full panel, move the scope bar to the top
        where it looks best. When it is only shown as a drawer, move it to the bottom, where
        it originally was. This takes up less space as a drawer, and makes it more discoverable
        and usable when it is the full panel.

        * inspector/front-end/ConsolePanel.js:
        (WebInspector.ConsolePanel.prototype.show): Move filter bar to top.
        (WebInspector.ConsolePanel.prototype.hide): Move filter bar back to bottom.
        * inspector/front-end/inspector.css:

2009-12-10  Stephen White  <senorblanco@chromium.org>

        Reviewed by Dirk Schulze.

        Fix for alpha blending in SVG Filters on Chromium/skia.
        https://bugs.webkit.org/show_bug.cgi?id=32378

        Covered by LayoutTests/svg/filters/feGaussianBlur.svg and others.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::platformTransformColorSpace):

2009-12-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add context menu actions for DOM tree.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ContextMenu.js:
        (WebInspector.ContextMenu):
        (WebInspector.ContextMenu.prototype.show):
        (WebInspector.ContextMenu.prototype.appendItem):
        (WebInspector.ContextMenu.prototype.appendSeparator):
        (WebInspector.ContextMenu.prototype._itemSelected):
        (WebInspector.contextMenuItemSelected):
        (WebInspector.contextMenuCleared):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._onmouseout):
        (WebInspector.ElementsTreeOutline.prototype.populateContextMenu):
        (WebInspector.ElementsTreeElement.prototype.ondblclick):
        (WebInspector.ElementsTreeElement.prototype._startEditingFromEvent):
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        (WebInspector.ElementsTreeElement.prototype._populateTextContextMenu):
        (WebInspector.ElementsTreeElement.prototype._startEditing):
        (WebInspector.ElementsTreeElement.prototype._addNewAttribute):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.ondblclick):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._toggleURLdecoding):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.ondblclick):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/inspector.js:
        (WebInspector.contextMenuEventFired):
        * inspector/front-end/treeoutline.js:
        (TreeElement.treeElementDoubleClicked):

2009-12-09  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Oliver Hunt.

        Filters contain some leaks in untested code
        https://bugs.webkit.org/show_bug.cgi?id=32325

        Fix obvious leak in SVGFE*Lighting classes. Implement the create() idiom for 
        all classes in svg/graphics, that were missing it. The lighting filters aren't
        implemented so far, but the associated FilterEffect objects are build, which created
        these leaks.

        This removes the SVG related failures in the leaks bot.

        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::findLights):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDistantLightElement.cpp:
        (WebCore::SVGFEDistantLightElement::lightSource):
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFELightElement.h:
        * svg/SVGFEPointLightElement.cpp:
        (WebCore::SVGFEPointLightElement::lightSource):
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::findLights):
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFESpotLightElement.cpp:
        (WebCore::SVGFESpotLightElement::lightSource):
        * svg/SVGFESpotLightElement.h:
        * svg/graphics/filters/SVGDistantLightSource.h:
        (WebCore::DistantLightSource::create):
        (WebCore::DistantLightSource::DistantLightSource):
        * svg/graphics/filters/SVGFEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::FEDiffuseLighting):
        (WebCore::FEDiffuseLighting::create):
        (WebCore::FEDiffuseLighting::setLightSource):
        * svg/graphics/filters/SVGFEDiffuseLighting.h:
        * svg/graphics/filters/SVGFESpecularLighting.cpp:
        (WebCore::FESpecularLighting::FESpecularLighting):
        (WebCore::FESpecularLighting::create):
        (WebCore::FESpecularLighting::setLightSource):
        * svg/graphics/filters/SVGFESpecularLighting.h:
        * svg/graphics/filters/SVGLightSource.h:
        * svg/graphics/filters/SVGPointLightSource.h:
        (WebCore::PointLightSource::create):
        (WebCore::PointLightSource::PointLightSource):
        * svg/graphics/filters/SVGSpotLightSource.h:
        (WebCore::SpotLightSource::create):
        (WebCore::SpotLightSource::SpotLightSource):

2009-12-10  Kenneth Russell  <kbr@google.com>

        Reviewed by Oliver Hunt.

        [Chromium] SporeViewer demo doesn't work in Chromium
        https://bugs.webkit.org/show_bug.cgi?id=32364

        Test: fast/canvas/webgl/bug-32364.html

        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):

2009-12-09  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver Hunt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=32346 SVG property 
        -webkit-shadow should apply shadow on the result after compositing
        -and corresponding-
        <rdar://problem/7389404>

        Set a transparency layer when setting a shadow to apply the shadow 
        to the composite.
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::finishRenderSVGContent):

2009-12-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=32332
        WebSocket events should be dispatched synchronously

        Updated websocket/tests/simple to test for the new behavior.

        When Web Sockets API says that events should be queued for async dispatch, it means something
        different. We should keep this in mind when dealing with other HTML5-related specs.

        The model for HTML5 is that code running in response to network events (e.g. WebSocket or
        XMLHttpRequest algorithms) runs in a separate thread of execution, and thus needs to post
        async events as its only way to communicate with client code. As long as network events are
        queued themselves (as they are in WebKit), there is no need to queue JS events for async
        dispatch.

        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didReceiveMessage):
        (WebCore::WebSocket::didClose):

2009-12-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=32355
        Assertion failure when opening a WebSocket connection

        I couldn't make a reliable test for this. Once the test from bug 32299 is landed, it
        will provide partial coverage, as I was frequently seeing the assertion failure with it.

        * platform/network/SocketStreamHandleBase.cpp: (WebCore::SocketStreamHandleBase::send):
        It's not an error if zero is returned from platformSend() - it just means that nothing could
        be pushed down to the network layer, and all data was queued for later.
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::readStreamCallback): This will no longer happen with SocketStream,
        but a client can potentially destroy the handle from any callback, so we need to check that
        this didn't happen.
        (WebCore::SocketStreamHandle::writeStreamCallback): Ditto.

2009-12-09  Sam Weinig  <sam@webkit.org>

        Roll out 51919 and 51920. They were incorrect and unnecessary right now.

        * platform/mac/WebCoreObjCExtras.mm:
        (WebCoreObjCScheduleDeallocateOnMainThread):
        * platform/network/mac/NetworkStateNotifierMac.cpp:
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):

2009-12-09  Steve Block  <steveblock@google.com>

        Reviewed by Darin Fisher.

        Adds wtf/StdLibExtras.h include for DEFINE_STATIC_LOCAL in V8 ScriptState.
        https://bugs.webkit.org/show_bug.cgi?id=32330

        Build fix only, no new tests.

        * bindings/v8/ScriptState.cpp: Modified. Adds wtf/StdLibExtras.h include.

2009-12-09  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Adds ENABLE(INSPECTOR) guards around script binding methods that use types
        defined only when INSPECTOR is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=32328

        Build fix only, no new tests.

        * bindings/js/ScriptValue.cpp: Modified. Added ENABLE(INSPECTOR) guard to ScriptValue::quarantineValue.
        * bindings/v8/ScriptObject.cpp: Modified. Added ENABLE(INSPECTOR) guard to some overloads of ScriptGlobalObject::set.

2009-12-09  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Adds Android Makefiles for building with V8.
        Also updates existing Android Makefiles with latest additions.
        https://bugs.webkit.org/show_bug.cgi?id=32278

        Build fix only, no new tests.

        * Android.derived.jscbindings.mk: Modified.
        * Android.derived.mk: Modified.
        * Android.derived.v8bindings.mk: Added.
        * Android.jscbindings.mk: Modified.
        * Android.mk: Modified.
        * Android.v8bindings.mk: Added.

2009-12-09  Jonathan Dixon  <joth@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 32338 - [Chromium] Fix Chromium builder by including missing GeolocationServiceChromium
        https://bugs.webkit.org/show_bug.cgi?id=32338

        Fix build break: re-include file dropped out by merge in http://trac.webkit.org/changeset/51681/trunk/WebCore/WebCore.gypi

        * WebCore.gypi: Add missing GeolocationServiceChromium.cpp

2009-12-09  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Brady Eidson.

        Fixed a typo in http://trac.webkit.org/changeset/51644 that broke
        the QWebPage autotest.

        No new test required.

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

2009-12-09  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Eric Seidel.

        Exclude JSSVG*.cpp generated files from --minimal and --no-svg builds.
        
        https://bugs.webkit.org/show_bug.cgi?id=32286

        * WebCore.pro:

2009-12-09  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        Ogg mimetypes are incorrect
        https://bugs.webkit.org/show_bug.cgi?id=27113

        The ogg extension is handled by audio/ogg instead of
        application/ogg. See
        http://wiki.xiph.org/MIME_Types_and_File_Extensions

        * platform/MIMETypeRegistry.cpp:
        (WebCore::TypeExtensionPair::):

2009-12-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Use the current run loop instead of the main runloop for the NetworkStateNotifier.

        * platform/network/mac/NetworkStateNotifierMac.cpp:
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):

2009-12-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Use isMainThread() helper instead of pthread_main_np() != 0.

        * platform/mac/WebCoreObjCExtras.mm:
        (WebCoreObjCScheduleDeallocateOnMainThread):

2009-12-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add some #ifdefs to allow us to experiment with a single NSView mac WebKit.

        * page/Chrome.h:
        * page/EventHandler.h:
        * page/mac/ChromeMac.mm:
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::dragOperation):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::eventLoopHandleMouseDragged):
        (WebCore::EventHandler::eventActivatedView):
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::createDraggingClipboard):
        (WebCore::isKeyboardOptionTab):
        (WebCore::EventHandler::invertSenseOfTabsToLinks):
        (WebCore::EventHandler::tabsToAllControls):
        (WebCore::EventHandler::needsKeyboardEventDisambiguationQuirks):
        (WebCore::EventHandler::accessKeyModifiers):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/Widget.cpp:
        * platform/Widget.h:
        * platform/mac/ScrollViewMac.mm:
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::setCursor):
        (WebCore::Widget::paint):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::setIsSelected):
        (WebCore::Widget::frameRect):
        (WebCore::Widget::setFrameRect):

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

        Reviewed by Dimitri Glazkov.

        Chromium build fix.

        No new tests.

        * bindings/v8/DOMData.cpp
        * bindings/v8/V8DOMWrapper.cpp
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):

2009-12-09  Søren Gjesse  <sgjesse@chromium.org>

        Reviewed by Pavel Feldman.

        [V8] Isolated world reuse failure
        https://bugs.webkit.org/show_bug.cgi?id=32306

        Fixed bug introduced in r51407: (http://trac.webkit.org/changeset/51407) which caused layout test
        LayoutTests/http/tests/security/isolatedWorld/world-reuse.html to fail.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setInjectedScriptContextDebugId):
        (WebCore::V8Proxy::contextDebugId):

2009-12-09  Patrick Scott  <phanna@email.unc.edu>

        Fix the build with ENABLE_ORIENTATION_EVENTS
        https://bugs.webkit.org/show_bug.cgi?id=32321

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

2009-12-09  Avi Drissman  <avi@chromium.org>

        Reviewed by Darin Fisher.

        Chromium tickmarks in scrollbar now UX approved.
        https://bugs.webkit.org/show_bug.cgi?id=32069

        * platform/chromium/ScrollbarThemeChromiumMac.mm:
        (WebCore::ScrollbarThemeChromiumMac::paint):

2009-12-09  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        Delay load DLLs for accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=31856
        
        Add logic to turn off accelerated compositing if d3d9 or QuartzCore
        DLLs are not present.
        
        This patch also changes the WKCACFLayerRenderer to be a pointer.
        This allows me to have a create() method which will not create it when
        accelerated compositing is disabled because of missing DLLs. It 
        avoids having to do so many checks. I also made WebViewWndProc 
        a member function to allow several methods to be made protected, which
        allows me to avoid doing availability checks there as well.

        * platform/graphics/win/WKCACFLayer.cpp:
        * platform/graphics/win/WKCACFLayer.h:
        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        * platform/graphics/win/WKCACFLayerRenderer.h:
        * rendering/RenderLayerBacking.cpp:

2009-12-09  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Adler.

        Rename dom/ClassNames to SpaceSplitString and update build files.

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

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchRules):
        * dom/ClassNames.cpp: Removed.
        * dom/ClassNames.h: Removed.
        * dom/ClassNodeList.h:
        * dom/NamedMappedAttrMap.h:
        (WebCore::NamedMappedAttrMap::classNames):
        * dom/SpaceSplitString.cpp: Copied from WebCore/dom/ClassNames.cpp.
        (WebCore::SpaceSplitStringData::createVector):
        (WebCore::SpaceSplitStringData::containsAll):
        * dom/SpaceSplitString.h: Copied from WebCore/dom/ClassNames.h.
        (WebCore::SpaceSplitStringData::SpaceSplitStringData):
        (WebCore::SpaceSplitString::SpaceSplitString):
        (WebCore::SpaceSplitString::set):
        (WebCore::SpaceSplitString::containsAll):
        * dom/StyledElement.h:
        (WebCore::StyledElement::classNames):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::setRel):

2009-12-09  Stephen White  <senorblanco@chromium.org>

        Reviewed by Darin Fisher.

        Enable SVG filters in Chromium build.
        https://bugs.webkit.org/show_bug.cgi?id=32323

        Covered by SVG filter layout tests.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:

2009-12-09  Oliver Hunt  <oliver@apple.com>

        Build fix

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::functionForUniform):

2009-12-08  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Darin Adler.

        WebSocket allow space (U+0020) in sub protocol name.
        https://bugs.webkit.org/show_bug.cgi?id=32266

        Test: websocket/tests/sub-protocol-with-space.html

        * websockets/WebSocket.cpp:
        (WebCore::isValidProtocolString):

2009-12-08  Peterson Trethewey  <petersont@google.com>

        Reviewed by Oliver Hunt.

        Implement WebGLUniformLocation and change API to use it.
        https://bugs.webkit.org/show_bug.cgi?id=31173

        Test: fast/canvas/webgl/uniform-location.html

        * DerivedSources.make:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::getProgramParameter):
        (WebCore::JSWebGLRenderingContext::getUniform):
        (WebCore::functionForUniform):
        (WebCore::dataFunctionf):
        (WebCore::dataFunctioni):
        (WebCore::dataFunctionMatrix):
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toWebGLUniformLocation):
        (WebCore::):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::isFunctionToCallForAttribute):
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniform):
        (WebCore::WebGLRenderingContext::getUniformLocation):
        (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):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:
        * html/canvas/WebGLUniformLocation.cpp: Added.
        (WebCore::WebGLUniformLocation::create):
        (WebCore::WebGLUniformLocation::WebGLUniformLocation):
        * html/canvas/WebGLUniformLocation.h: Added.
        (WebCore::WebGLUniformLocation::~WebGLUniformLocation):
        (WebCore::WebGLUniformLocation::program):
        (WebCore::WebGLUniformLocation::location):
        * html/canvas/WebGLUniformLocation.idl: Added.

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

        Reviewed by Darin Adler.

        Fix assertion failure in WebCore::RenderBlock::startDelayUpdateScrollInfo

        startDelayUpdateScrollInfo calls a function that can end up calling
        startDelayUpdateScrollInfo again. However, it's static state is
        inconsistent when this happens leading to an assertion failure (or
        probably a memory leak if assertions are off).

        Thanks to Robert Swiecki for the test case.

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

        Test: fast/css/recursive-delay-update-scroll.html

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

2009-12-08  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WebCore source level debugging on Windows not reliable in some cases
        https://bugs.webkit.org/show_bug.cgi?id=32297

        Customized pdb file name/location for WebCore static library.

        * WebCore.vcproj/WebCoreCommon.vsprops: Add ProgramDataBaseFileName.

2009-12-08  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Mac plugins support.
        
        https://bugs.webkit.org/show_bug.cgi?id=32236

        * platform/FileSystem.h:
        * platform/cf/BinaryPropertyList.h:
        * platform/network/curl/ResourceHandleManager.cpp:
        * platform/wx/FileSystemWx.cpp:
        (WebCore::fileExists):
        (WebCore::unloadModule):
        (WebCore::wxDirTraverserNonRecursive::wxDirTraverserNonRecursive):
        (WebCore::wxDirTraverserNonRecursive::OnFile):
        (WebCore::wxDirTraverserNonRecursive::OnDir):
        (WebCore::listDirectory):
        * plugins/mac/PluginViewMac.cpp:
        (WebCore::nativeWindowFor):
        (WebCore::cgHandleFor):
        (WebCore::topLevelOffsetFor):
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::globalMousePosForPlugin):
        * plugins/wx/PluginDataWx.cpp: Added.
        (WebCore::PluginData::initPlugins):
        (WebCore::PluginData::refresh):
        * wscript:

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

        Reviewed by Darin Adler.

        Navigating to a cached page can result in accessing a destroyed HTMLInputElement.
        <rdar://problem/6856662> and https://webkit.org/b/32293

        Test: fast/loader/input-element-page-cache-crash.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute): Make sure to unregister for the activation
          callback after the new m_autocomplete setting has been stored so the unregistration actually
          takes place.

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

        Rubber-stamped by David Levin.

        Revert and reopen "Add asserts to RefCounted to make sure ref/deref happens on the right thread."
        It may have caused massive increase of reported leaks on the bots.
        https://bugs.webkit.org/show_bug.cgi?id=31639

        * ForwardingHeaders/wtf/ThreadVerifier.h: Removed.
        * loader/icon/IconRecord.cpp:
        (WebCore::IconRecord::IconRecord):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl):

2009-12-08  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Darin Fisher.

        Chromium: support custom WebCore context menu items in Chromium port.

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

        * platform/ContextMenu.h:
        * platform/ContextMenuItem.h:
        (WebCore::PlatformMenuItemDescription::PlatformMenuItemDescription):
        * platform/chromium/ContextMenuChromium.cpp:
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::itemCount):
        (WebCore::ContextMenu::insertItem):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::itemWithAction):
        (WebCore::ContextMenu::itemAtIndex):
        (WebCore::ContextMenu::platformDescription):
        * platform/chromium/ContextMenuItemChromium.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::releasePlatformDescription):
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::title):
        (WebCore::ContextMenuItem::checked):
        (WebCore::ContextMenuItem::enabled):
        (WebCore::ContextMenuItem::setType):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::setChecked):
        (WebCore::ContextMenuItem::setEnabled):

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

        Reviewed by Dimitri Glazkov.

        Chromium Linux: set default scrollbar colours.

        This is so that layout tests have sane defaults for the scrollbar
        colours, even if the API user doesn't set any.

        This is a fix due to r51827.

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

        This is very well covered by existing layout tests.

        * rendering/RenderThemeChromiumLinux.cpp:

2009-12-08  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/7397808> Crash occurs at 
        RenderObject::containingBlock() as I type in the Google Search 
        field (during page load)

        * editing/Editor.cpp:
        (WebCore::Editor::insideVisibleArea): ownerRenderer() needs to be 
        null checked.

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

        Reviewed by Darin Adler.

        Add asserts to RefCounted to make sure ref/deref happens on the right thread.
        https://bugs.webkit.org/show_bug.cgi?id=31639

        * loader/icon/IconRecord.cpp:
        (WebCore::IconRecord::IconRecord): Disable thread verification for this class because of its cross-thread use in IconDatabase.
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer): Ditto.
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl): Disable thread verification for this class, add FIXME to enforce proper usage via crossThreadString.
        * ForwardingHeaders/wtf/ThreadVerifier.h: Added.

2009-12-08  John Gregg  <johnnyg@google.com>

        Reviewed by Adam Barth.

        Inform the NotificationCenter when its window goes away in the same
        manner as other DOMWindow fields, and prevent invalid operations on
        it after that happens.

        As part of this, change the V8 bindings for notifications to call
        through the NotificationCenter rather than doing those operations
        itself.

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

        Test: fast/notifications/notification-after-close.html

        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::checkPermission):
        (WebCore::NotificationCenter::requestPermission):
        * notifications/NotificationCenter.h:
        (WebCore::NotificationCenter::createHTMLNotification):
        (WebCore::NotificationCenter::createNotification):
        (WebCore::NotificationCenter::disconnectFrame):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clear):

2009-12-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        Fixed block selection gap repainting in table cells

        Test: fast/repaint/block-selection-gap-in-table-cell.html

        This recently-introduced regression exposed the fact that
        RenderTableCell did not override offsetFromContainer() to adjust for
        the fact that table cells’ coordinates are relative to the table
        section, not the table row. With this fixed, RenderTableCell no longer
        needs to override mapLocalToContainer() and mapAbsoluteToLocalPoint(),
        since the base class implementations of those use offsetFromContainer().

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::offsetFromContainer):
        * rendering/RenderTableCell.h:

2009-12-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Sane way to force a rebuild on all win slaves, according to Adam Roben.

        * WebCorePrefix.h:

2009-12-08  Dan Bernstein  <mitz@apple.com>

        Build fix

        * loader/loader.cpp:
        (WebCore::cachedResourceTypeToTargetType):

2009-12-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Touch svgtags.in to eventually fix the win debug build.

        * svg/svgtags.in:

2009-12-08  Mike Belshe  <mike@belshe.com>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=32167
        Update the ResourceRequest::RequestType.  This previously
        was specific to Chromium.  Moved into ResourceRequestBase, enabling
        more specificity about the type (which is otherwise only known to the
        loader), and also making this information available to all platforms.
        Any platform with a network layer which can utilize this information
        may want to use it for prioritization.

        Note to Chromium glue: TargetIsSubResource renamed to TargetIsSubresource.

        * loader/loader.cpp:
        (WebCore::Loader::Loader):
        (WebCore::CachedResourceTypeToTargetType):
        (WebCore::Loader::Host::servePendingRequests):
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::):
        (WebCore::ResourceRequestBase::targetType):
        (WebCore::ResourceRequestBase::setTargetType):
        (WebCore::ResourceRequestBase::ResourceRequestBase):
        * platform/network/chromium/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):

2009-12-08  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        [Android] Adds Makefiles for Android port.
        https://bugs.webkit.org/show_bug.cgi?id=31325

        Build system change only. No tests possible.

        * Android.derived.jscbindings.mk: Added.
        * Android.derived.mk: Added.
        * Android.jscbindings.mk: Added.
        * Android.mk: Added.
        * WebCorePrefix.h: Modified. Sets up some flags and adds a header required for building on Android.

2009-12-08  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Xan Lopez.

        * platform/network/soup/DNSSoup.cpp:
        (WebCore::prefetchDNS): Conditionalize prefetching on
        the libSoup version.

2009-12-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Rubber-stamped by Maciej Stachowiak.

        Turn on (SVG) Filters for Win.
        https://bugs.webkit.org/show_bug.cgi?id=32224

        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/build-generated-files.sh:
        * bindings/scripts/CodeGeneratorCOM.pm: Touch file to assure a world rebuild. Hopefully.

2009-12-08  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Darin Adler.

        CSS Counter Nesting still does not work according to the spec.
        https://bugs.webkit.org/show_bug.cgi?id=31723

        Test: fast/css/counters/nesting.html

        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):
        Replaced the faulty counter insertion algorithm with one that works.

2009-12-08  John Sullivan  <sullivan@apple.com>

        Add isAutofilled getter to match existing setter.

        Reviewed by Ada Chan.

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _isAutofilled]):
        Implemented new cover function.
        
        * bindings/objc/DOMPrivate.h:
        Declared new cover function.

2009-12-08  Dominik Röttsches  <dominik.roettsches@access-company.com>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] Create a TextBreakIterator implementation based on GLib (without ICU)
        https://bugs.webkit.org/show_bug.cgi?id=31469

        Added a TextBreakIterator implementation based on GLib and pango,
        which allows compiling WebCore without ICU.

        * GNUmakefile.am:
        * platform/text/gtk/TextBreakIteratorGtk.cpp: Added.
        (WebCore::):
        (WebCore::setUpIterator):
        (WebCore::characterBreakIterator):
        (WebCore::cursorMovementIterator):
        (WebCore::wordBreakIterator):
        (WebCore::lineBreakIterator):
        (WebCore::sentenceBreakIterator):
        (WebCore::textBreakFirst):
        (WebCore::textBreakLast):
        (WebCore::textBreakNext):
        (WebCore::textBreakPrevious):
        (WebCore::textBreakPreceding):
        (WebCore::textBreakFollowing):
        (WebCore::textBreakCurrent):
        (WebCore::isTextBreak):

2009-12-08  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Change the way cookies are retrieved in the WebInspector frontend.

        Moved the cookie filtering from the native code into the frontend so that
        all cookies can be retrieved regardless of the associated domain
        (required for certain audits to run.)
        https://bugs.webkit.org/show_bug.cgi?id=32160

        Test: inspector/cookie-resource-match.html

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getCookies):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::getCookies):
        * inspector/InspectorController.h:
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype.update.callback):
        (WebInspector.CookieItemsView.prototype.update):
        (WebInspector.CookieItemsView.prototype._cookiesForDomain):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.Cookies.getCookiesAsync):
        (WebInspector.Cookies.cookieMatchesResourceURL):
        (WebInspector.Cookies.cookieDomainMatchesResourceDomain):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource.prototype.get documentURL):
        (WebInspector.Resource.prototype.set documentURL):
        * inspector/front-end/inspector.js:
        (WebInspector.addResource):

2009-12-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Touch svgtags.in, in order to force SVGNames.* regeneration. Praying for gtk bot to be fixed :-)

        * svg/svgtags.in:

2009-12-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Trying to force a rebuild on the Gtk slave. If that doesn't work, someone must force a rebuild from scratch.

        * bindings/scripts/CodeGeneratorJS.pm:

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

        Reviewed by Timothy Hatcher.

        Web Inspector: provide custom context menu in the front-end window.

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

        * English.lproj/localizedStrings.js:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::showContextMenu):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::contextMenuItemSelected):
        (WebCore::InspectorFrontend::contextMenuCleared):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::InspectorFrontendHost):
        (WebCore::InspectorFrontendHost::~InspectorFrontendHost):
        (WebCore::InspectorFrontendHost::showContextMenu):
        (WebCore::InspectorFrontendHost::contextMenuItemSelected):
        (WebCore::InspectorFrontendHost::contextMenuCleared):
        * inspector/InspectorFrontendHost.h:
        (WebCore::InspectorFrontendHost::MenuSelectionHandler::create):
        (WebCore::InspectorFrontendHost::MenuSelectionHandler::~MenuSelectionHandler):
        (WebCore::InspectorFrontendHost::MenuSelectionHandler::disconnect):
        (WebCore::InspectorFrontendHost::MenuSelectionHandler::contextMenuItemSelected):
        (WebCore::InspectorFrontendHost::MenuSelectionHandler::contextMenuCleared):
        (WebCore::InspectorFrontendHost::MenuSelectionHandler::MenuSelectionHandler):
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/ContextMenu.js: Added.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.documentContextMenu):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::ContextMenuController):
        (WebCore::ContextMenuController::clearContextMenu):
        (WebCore::ContextMenuController::handleContextMenuEvent):
        (WebCore::ContextMenuController::showContextMenu):
        (WebCore::ContextMenuController::createContextMenu):
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/ContextMenuController.h:
        * page/ContextMenuSelectionHandler.h: Added.
        (WebCore::ContextMenuSelectionHandler::ContextMenuSelectionHandler):
        (WebCore::ContextMenuSelectionHandler::~ContextMenuSelectionHandler):
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        * platform/ContextMenuItem.h:

2009-12-08  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Rubber-stamped by Kenneth Rohde Christiansen.

        [Qt] Build fix of duplicated platform/graphics/filters/FEGaussianBlur.cpp in WebCore.pro after enabled svg filters.

        No new tests needed.
        * WebCore.pro:

2009-12-07  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Add a function to show render tree for debugging
        https://bugs.webkit.org/show_bug.cgi?id=31288

        No new tests because this just adds a function for debugging.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::showRenderObject):
        (WebCore::RenderObject::showRenderTreeAndMark):
        (showRenderTree):
        * rendering/RenderObject.h:

2009-12-07  Victor Wang  <victorw@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement NamedPropertyEnumerator and IndexedPropertyEnumerator for
        V8 NPObject. This should make the object enumerable and fix the
        enumeration issue in layout test plugins/netscape-enumerate.html.

        Also fix some existing style issues per webkit style guidelines.

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

        Test: plugins/netscape-enumerate.html

        * bindings/v8/V8NPObject.cpp:
        (npObjectInvokeImpl):
        (npObjectInvokeDefaultHandler):
        (npObjectGetProperty):
        (npObjectPropertyEnumerator):
        (npObjectNamedPropertyEnumerator):
        (npObjectIndexedPropertyEnumerator):
        (createV8ObjectForNPObject):

2009-12-07  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fragments now make WebSocket URL parsing fail.
        https://bugs.webkit.org/show_bug.cgi?id=32144

        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):

2009-12-07  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Darin Adler.

        Fix wrong length parsing in WebSocket.
        https://bugs.webkit.org/show_bug.cgi?id=32203

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didReceiveData):

2009-12-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        Rubber-stamped by Maciej Stachowiak.

        Turn on (SVG) Filters for Qt.
        https://bugs.webkit.org/show_bug.cgi?id=32224

        * WebCore.pro:

2009-12-07  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel.

        Chromium: theme scrollbars to match GTK theme.
        Add functions to RenderThemeChromiumLinux to change the scrollbar
        color.

        Since the change is to the Chromium WebKit API layer, testing will
        be in Chromium's test shell.
        http://bugs.webkit.org/show_bug.cgi?id=32048

        Patch from Markus Gutschke <markus@chromium.org>.

        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::saturateAndBrighten):
        (WebCore::outlineColor):
        (WebCore::ScrollbarThemeChromiumLinux::paintTrackPiece):
        (WebCore::ScrollbarThemeChromiumLinux::paintThumb):
        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::setScrollbarColors):
        * rendering/RenderThemeChromiumLinux.h:
        (WebCore::RenderThemeChromiumLinux::thumbInactiveColor):
        (WebCore::RenderThemeChromiumLinux::thumbActiveColor):
        (WebCore::RenderThemeChromiumLinux::trackColor):

2009-12-08  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Doesn't respect Content-Disposition for downloads, and provides no way for apps to do that
        https://bugs.webkit.org/show_bug.cgi?id=32247

        Allow creating a ResourceResponse from a SoupMessage.

        Covered by API test.

        * platform/network/soup/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::updateFromSoupMessage):

2009-12-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Reverting problematic patch, causing errors.

        Revert r51789 (Avoid zero division during SVGPaintServerPattern::setup()). Crashes on all Windows slaves.
        Reopen bug https://bugs.webkit.org/show_bug.cgi?id=29912.

        * svg/graphics/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::setup):

2009-12-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Add support for HTMLInputElement::stepUp() and stepDown() for
        type=number and type=range.
        https://bugs.webkit.org/show_bug.cgi?id=27451

        Our implementation of stepUp() and stepDown() rounds the resultant
        value to conform to the step value.
        Change the number-string conversion method for RenderSlider to be
        consistent with type=number.

        Tests: fast/forms/input-step-number.html
               fast/forms/input-step-range.html
               fast/forms/input-step-unsupported.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::rangeUnderflow): Unify the code for NUMBER and RANGE.
        (WebCore::HTMLInputElement::rangeOverflow): Unify the code for NUMBER and RANGE.
        (WebCore::HTMLInputElement::minimum): Renamed from rangeMinimum(), and support for NUMBER.
        (WebCore::HTMLInputElement::maximum): Renamed from rangeMaximum(), and support for NUMBER.
        (WebCore::HTMLInputElement::stepBase):
        (WebCore::HTMLInputElement::stepMismatch): Use stepBase().
        (WebCore::HTMLInputElement::applyStepForNumberOrRange):
        (WebCore::HTMLInputElement::stepUp):
        (WebCore::HTMLInputElement::stepDown):
        (WebCore::HTMLInputElement::formStringFromDouble):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::stepUp):
        (WebCore::HTMLInputElement::stepDown):
        * html/HTMLInputElement.idl: Add stepUp() and stepDown().
        * rendering/RenderSlider.cpp:
        (WebCore::SliderRange::SliderRange): Sync with rangeMinimum()/rangeMaximum() renaming.
        (WebCore::RenderSlider::updateFromElement): Use formStringFromDouble().
        (WebCore::RenderSlider::setValueForPosition): Use formStringFromDouble().

2009-12-07  Albert J. Wong  <ajwong@chromium.org>

        Not reviewed: Chromium build fix try 2 (dumb error).

        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::getString):

2009-12-07  Albert J. Wong  <ajwong@chromium.org>

        Not reviewed: Chromium build fix.

        Fix Chromium build break caused by an added dependency from
        ScriptControllerBase to JSDOMWindowShell, and an API change in
        ScriptValue.

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::getString):

2009-12-07  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        REGRESSION(4.0.4-42a12): Indent does not work for twice modified with background text in gmail.
        <rdar://problem/7442387>
        https://bugs.webkit.org/show_bug.cgi?id=32233
        
        Fixes problem in re-creating the correct hierarchy under the new block.
        Added extensive testing to cover all the cases.

        Test: editing/execCommand/indent-with-style2.html

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

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

        Rubber-stamped by Darin Adler.

        Remove ENABLE_SHARED_SCRIPT flags
        https://bugs.webkit.org/show_bug.cgi?id=32245
        This patch was obtained by "git revert" command and then un-reverting of ChangeLog files.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * WebCore.pro:

2009-12-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Force JS binding regeneration, eventually fixing the broken tests on the bots.

        * bindings/scripts/CodeGeneratorJS.pm:

2009-12-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Try to fix mac builds by touching svgtags.in - I only tried from-scratch builds.

        * svg/svgtags.in:

2009-12-07  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=32184
        Handle out-of-memory conditions with JSC Ropes with a JS exception, rather than crashing.
        Switch from using fastMalloc to tryFastMalloc, pass an ExecState to record the exception on.

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toHTMLCanvasStyle):
        (WebCore::JSCanvasRenderingContext2D::setFillColor):
        (WebCore::JSCanvasRenderingContext2D::setStrokeColor):
        (WebCore::JSCanvasRenderingContext2D::setShadow):
        * bindings/js/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::ScriptCallStack):
        (WebCore::ScriptCallStack::initialize):
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::getString):
        * bindings/js/ScriptValue.h:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializingTreeWalker::convertIfTerminal):
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * page/Console.cpp:
        (WebCore::Console::addMessage):

2009-12-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Holger Hans Peter Freyther.

        Turn on (SVG) Filters support, by default.
        https://bugs.webkit.org/show_bug.cgi?id=32224

        Only enable filters on mac for now, skipped all affected tests on the other platforms.
        Will enable them one after another, to minimize breakage.

        * Configurations/FeatureDefines.xcconfig: Enable FILTERS build flag.

2009-12-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Fix a bug that KURL rejects a host name which has an IPv4 address
        inside an IPv6 form like [::127.0.0.1].
        https://bugs.webkit.org/show_bug.cgi?id=29913

        * platform/KURL.cpp:
        (WebCore::characterClassTable): Add IPv6Char to '.'.

2009-12-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7443417> - Closing a window opened with "New windows open with: Same Page" results in crash in ::~HistoryItem

        The HistoryItem copy constructor has one very specific use case - to support the feature of a WebView copying another WebView's
        BackForwardList.  That constructor wasn't initializing its m_document pointer, leading to this crash in the destructor.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::~HistoryItem): Change the setDocument(0) to an ASSERT that the document is already 0. A HistoryItem cannot
          outlive its Document and Documents will always clear the back-pointer in their ::detach() method.
        (WebCore::HistoryItem::HistoryItem): Missed the m_document initializer in the copy constructor. Also remove an invalid assertion
          about the original items m_cachedPage object (which is irrelevant to the copy).

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

        Reviewed by Darin Adler.

        Remove partial SharedScript implementation.
        https://bugs.webkit.org/show_bug.cgi?id=32237
        The patch was obtained by running "git revert" command and then un-reverting WebCore/ChangeLog.

        * DerivedSources.make:
        * SharedScript/SharedScriptContext.cpp: Removed.
        * SharedScript/SharedScriptContext.h: Removed.
        * SharedScript/SharedScriptContext.idl: Removed.
        * SharedScript/SharedScriptController.h: Removed.
        * SharedScript/WebKitSharedScript.cpp: Removed.
        * SharedScript/WebKitSharedScript.h: Removed.
        * SharedScript/WebKitSharedScript.idl: Removed.
        * SharedScript/WebKitSharedScriptRepository.cpp: Removed.
        * SharedScript/WebKitSharedScriptRepository.h: Removed.
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::detach):
        * dom/EventTarget.cpp:
        * dom/EventTarget.h:
        * dom/ScriptExecutionContext.h:

2009-12-07  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Nikolas Zimmermann.

        https://bugs.webkit.org/show_bug.cgi?id=32226
        Random crashes in WebSocket tests on Leopard Debug builbot

        * platform/network/SocketStreamHandleBase.cpp: (WebCore::SocketStreamHandleBase::close):
        Make sure the object still exists when setting m_state.

2009-12-07  Shiki Okasaka  <shiki@google.com>

        Reviewed by Dirk Schulze.

        Avoid zero division during SVGPaintServerPattern::setup()
        https://bugs.webkit.org/show_bug.cgi?id=29912

        Fix zero division bugs in SVGPaintServerPattern::setup() that occurred
        if the tile of a pattern was bigger than the pattern and the pattern
        size was < 0.5, and if the attribute overflow was set to visible.

        Test: svg/custom/small-pattern.html

        * svg/graphics/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::setup):

2009-12-07  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        [v8] WebCore::WebGLArrayBufferInternal::byteLengthAttrGetter NULL pointer
        https://bugs.webkit.org/show_bug.cgi?id=31889

        Fixed bug in handling of zero-argument constructor call.

        Test: fast/canvas/webgl/bug-31889.html

        * bindings/v8/custom/V8WebGLArrayBufferCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-12-07  Gyuyoung Kim  <gyuyoung@gmail.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=32024
        [GTK] WebKit does not compile without JAVASCRIPT_DEBUGGER

        Fix build errors when javascript-debugger is disabled on GTK

        * GNUmakefile.am:

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

        Reviewed by Darin Adler.

        Fixed <rdar://problem/7437820> Weird selection artifacts

        Tests: fast/repaint/block-selection-gap-stale-cache-2.html
               fast/repaint/block-selection-gap-stale-cache.html

        Instead of caching the block selection gaps’ bounds in the RenderView at setSelection()
        time, cache them in each RenderLayer at paint time. This prevents the cache from getting
        stale due to layout changes and overflow scrolling.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGapRectsForRepaint): Account for overflow scroll.
        (WebCore::RenderBlock::paintSelection): Update the enclosing layer’s selection gaps bounds.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::addBlockSelectionGapsBounds): Added. Updates the selection gaps
        bounds to include the given rect.
        (WebCore::RenderLayer::clearBlockSelectionGapsBounds): Added. Recursively clears the cached
        selection gaps bounds.
        (WebCore::RenderLayer::repaintBlockSelectionGaps): Added. Recursively invalidates the
        selection gaps bounds.
        * rendering/RenderLayer.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSelection): Clear the layer-level selection gaps bounds instead
        of the view-level cache.
        (WebCore::RenderView::clearSelection): Changed to call repaintBlockSelectionGaps().
        * rendering/RenderView.h:

2009-12-07  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        Fixed whitelist comment and removed useless (tags, sdp) mimetypes
        from it. Also, GStreamer doesn't handle directly SMIL.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache):

2009-12-07  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

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

        Eliminate the segfaults which occur when accessing the text interface now
        implemented by text controls.

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

2009-12-07  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        Turn the MediaPlayer supported types blacklist into a whitelist

        [GTK] REGRESSION: webkit thinks it can render PDFs
        https://bugs.webkit.org/show_bug.cgi?id=32183

        Covered by API test.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache):

2009-12-07  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25524
        [Gtk] Expose the title attribute to assistive technologies

        Expose 'alt' attribute from images as accessible name.
        Expose the 'title' core HTML attribute as accessible description.
        This is a modified version of the original fix submitted by Mario Sanchez Prada,
        adjusted so that it doesn't impact other platforms.

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

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

        Reviewed by Simon Hausmann.

        [Qt] Fix support for generic font families

        By not propagating the resolved font family in FontCacheQt and
        only concidering the font description we ended up passing the
        generic font families to Qt directly. Since most systems don't
        have a mapping for these font families we ended up using the
        default font in most cases.

        * platform/graphics/qt/FontCacheQt.cpp:
        * platform/graphics/qt/FontPlatformData.h:
        * platform/graphics/qt/FontPlatformDataQt.cpp:

2009-12-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Object.getOwnPropertyDescriptor() allows cross-frame access
        https://bugs.webkit.org/show_bug.cgi?id=32119

        Make all implementations of getOwnPropertyDescriptor that have
        cross domain restrictions simply fail immediately on cross domain
        access, rather than trying to mimic the behaviour of normal
        property access.

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

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertyDescriptor):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::getOwnPropertyDescriptorDelegate):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertyDescriptorDelegate):
        * bindings/scripts/CodeGeneratorJS.pm:

2009-12-07  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Moves JSC-specific functions from jni_utility and moves them to new jsc/jni_utility_private files.
        https://bugs.webkit.org/show_bug.cgi?id=32157

        Build fix only, no new tests.

        * WebCore.xcodeproj/project.pbxproj: Modified. Add jni_utility_private.[cpp|h].
        * bridge/jni/jni_instance.cpp: Modified. Include jni_utility_private.h for JSC.
        * bridge/jni/jni_jsobject.mm: Modified. Include jni_utility_private.h for JSC.
        * bridge/jni/jni_objc.mm: Modified. Include jni_utility_private.h for JSC.
        * bridge/jni/jni_runtime.cpp: Modified. Include jni_utility_private.h for JSC.
        * bridge/jni/jni_utility.cpp: Modified. Removed convertValueToJValue and convertArrayInstanceToJavaArray.
        * bridge/jni/jni_utility.h: Modified. Removed convertValueToJValue and dispatchJNICall.
        * bridge/jni/jsc: Added.
        * bridge/jni/jsc/jni_utility_private.cpp: Added.
        (JSC::Bindings::convertArrayInstanceToJavaArray):
        (JSC::Bindings::convertValueToJValue):
        * bridge/jni/jsc/jni_utility_private.h: Added. Header for convertValueToJValue and dispatchJNICall.
        * platform/android/TemporaryLinkStubs.cpp: Modified. Include jni_utility_private.h for JSC.

2009-12-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        texImage2D pixel junk for transparency
        https://bugs.webkit.org/show_bug.cgi?id=32188

        Use kCGBlendModeCopy when drawing an image to the intermediate context
        used to create a GL texture.

        No test as we don't currently have any mechanism to retrieve pixel data
        from the webgl context.

        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::imageToTexture):

2009-12-03  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        Advertize audio/ogg correctly and refactored mime-type cache
        building.

        [GTK] Recognize oga as audio/ogg
        https://bugs.webkit.org/show_bug.cgi?id=31990

        Test: media/media-can-play-ogg.html

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache):

2009-12-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=32175
        REGRESSION: websocket/tests/url-parsing.html is crashing on Leopard Bot

        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::readStreamCallback): Call platformClose() to unschedule both
        streams, guaranteeing that there will be no callbacks after SocketStreamHandle is destroyed.
        (WebCore::SocketStreamHandle::writeStreamCallback): Edited a comment a bit.

2009-12-05  Adam Langley  <agl@google.com>

        Reviewed by Adam Barth.

        Check that a CSS format() argument is of a valid type.

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

        Test: fast/css/url-format-non-string.html

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

2009-12-04  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Chromium: make rounded borders heavier.

        Skia draws its rounded corners differently from the other ports.
        Whereas they have anti-aliased clipping regions, Skia only has 1-bit
        regions. (Which is technically more correct, but somewhat unhelpful
        for us.) Instead, with Skia we use a layer and collect all the
        clipping paths in effect. When the state is popped, we paint
        transparency outside the clipping paths and merge the layer down.

        This appears to cause rounded borders to look a little thin, which is
        addressed in this patch.

        This is well covered by existing tests but will require new baselines
        in the Chromium tree.

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

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

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

        Reviewed by Dan Bernstein.

        <rdar://problem/7441571> Hardware-backed layers are skipped when printing
        
        When printing, set the PaintBehaviorFlattenCompositingLayers flag so that compositing layers
        paint. This also causes 3D transforms to be flattened to 2D.

        Test: printing/compositing-layer-printing.html

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

2009-12-04  Oliver Hunt  <oliver@apple.com>

        Reviewed by Beth Dakin.

        Fix up some issues in my SVGListTraits change from yesterday.

        * svg/SVGListTraits.h:
        (WebCore::):

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

        Not reviewed: chromium build fix.

        Fix Chromium build break caused by moving of isDefaultPortForProtocol() and
        portAllowed() into KURL.h/KURL.cpp.  Cloning code.

        * platform/KURLGoogle.cpp:
        (WebCore::isDefaultPortForProtocol):
        (WebCore::portAllowed):

2009-12-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Remove suppress highlight when restoring selected node.

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

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.setDocument.selectNode):
        (WebInspector.ElementsPanel.prototype.setDocument.selectLastSelectedNode):
        (WebInspector.ElementsPanel.prototype.setDocument):

2009-12-04  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Gradient SVG animation demonstrates tearing at animation extremes
        https://bugs.webkit.org/show_bug.cgi?id=11929

        The focalPoint of a radial gradient is temporarly substracted by
        the centralPoint, if the focalPoint is not in the radius of the
        gradient. This is needed to calculate a new postion of the focalPoint
        according to the specification. But the new focalPoint needs to be
        moved by the centralPoint after this calculation, which is not the case
        at the moment. This patch fixes this issue. It was also introduced a
        deviation of maximal 0.2% for Cairo to get around the fixed point numbers
        in Cairo.

        W3C-SVG-1.1/pservers-grad-13-b needed an update. The missing adjustment
        of the new focalPoint caused wrong results for the last three tests.

        Test: svg/custom/radial-gradient-with-outstanding-focalPoint.svg

        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):

2009-12-04  Anton Muhin  <antonm@chromium.org>

        Reviewed by Dmitry Titov.

        Do not use WebCore::String::String(const UChar*, int length) to convert
        short v8 strings.

        Plus added string traits.
        https://bugs.webkit.org/show_bug.cgi?id=31415

        * bindings/v8/V8Binding.cpp:
        (WebCore::):
        (WebCore::v8StringToWebCoreString):

2009-12-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: AX: buttons now extremely repetitive
        https://bugs.webkit.org/show_bug.cgi?id=32164

        Test: platform/mac/accessibility/button-shouldnot-have-axvalue.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isButton):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):

2009-12-04  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Check whether the right side of a string append is non-empty
        https://bugs.webkit.org/show_bug.cgi?id=32151

        Especially beneficial for CachedScript::script() method
        which usually appends an empty string returned by flush()
        to its m_script member. m_script is often hundreds of kbytes
        which is duplated without reason.

        * platform/text/String.cpp:
        (WebCore::String::append):

2009-12-04  Enrica Casucci  <enrica@apple.com>

        Reviewed by John Sullivan.

        Mail.app crashes when indenting table pasted from Numbers.app.
        <rdar://problem/7209507>
        https://bugs.webkit.org/show_bug.cgi?id=32166

        Test: LayoutTests/editing/execCommand/indent-partial-table.html
        
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentRegion): Added test to verify that the end of the paragraph
        after the selection has not been moved.

2009-12-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=32085
        WebSocket should block the same ports that are blocked for resource loading

        Test: websocket/tests/url-parsing.html

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::localURLSchemes):
        * page/SecurityOrigin.h:
        Move isDefaultPortForProtocol() to KURL, because that's a better place for it (SecurityOrigin
        is not even in WebCore/platform directory).

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::host):
        (WebCore::HTMLAnchorElement::setHost):
        (WebCore::HTMLAnchorElement::setPort):
        Updated for the new location of isDefaultPortForProtocol().

        * platform/KURL.cpp:
        (WebCore::KURL::protocolIs): In an assertion, compare to "javascript" case-insensitively,
        since the function doesn't require lower case input.
        (WebCore::isDefaultPortForProtocol): Moved from SecurityOrigin.
        (WebCore::portAllowed): Moved from ResourceHandle.
        * platform/KURL.h:

        * platform/network/ResourceHandle.cpp: (WebCore::ResourceHandle::create): Updated for the
        new location of portAllowed().

        * websockets/WebSocket.cpp: (WebCore::WebSocket::connect): Per the spec, raise a SECURITY_ERR
        if trying to connect to a blocked port.

2009-12-04  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] WebKit crashes when loading certain SVG images
        https://bugs.webkit.org/show_bug.cgi?id=29443

        Remove FontFallbackListQt and rely on the common FontFallbackList
        to handle the fonts. FontCache and FontPlatformData have been
        updated to work with the common FontFallbackList.

        In the previous implementation, FontPlatformDataCacheKey
        was a clone of FontPlatformData with the hashing
        capabilities added in order to use it as a key in the cache's
        hashmap. FontPlatformData has been modified to handle the hashing
        function directly so the data are not copied twice in memory.

        FontFallbackList::fontDataAt() from FontFallbackListQt was a copy of
        code from FontCache::getFontData() and FontFallbackList::fontDataAt().
        The behavior is similar except currFamily->family().length() was
        not tested and the fallback fonts selector were not used.

        Existing tests cover the change.

        * WebCore.pro:
        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontCache::platformInit):
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::FontCache::getTraitsInFamily):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/qt/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/qt/FontFallbackListQt.cpp:
        Removed. We now use the implementation from FontFallbackList.cpp
        * platform/graphics/qt/FontPlatformData.h:
        Add hashing capabilities to be able to use the data with the FontCache.
        This was previously done in FontCacheQt.cpp
        (WebCore::FontPlatformDataPrivate::FontPlatformDataPrivate):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        (WebCore::FontPlatformData::font):
        (WebCore::FontPlatformData::size):
        (WebCore::FontPlatformData::family):
        (WebCore::FontPlatformData::bold):
        (WebCore::FontPlatformData::italic):
        (WebCore::FontPlatformData::smallCaps):
        (WebCore::FontPlatformData::pixelSize):
        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::operator==):
        (WebCore::FontPlatformData::hash):

2009-12-04  Adam Treat  <atreat@rim.com>

        Reviewed by Dan Bernstein.

        Fix wrong assert that was only working through sheer luck.
        https://bugs.webkit.org/show_bug.cgi?id=32162

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

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

        Reviewed by Simon Hausmann.

        [Qt] Allow removing 'qrc' as a local security origin scheme

        * page/SecurityOrigin.cpp:

2009-12-04  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Eric Seidel.

        Allow custom memory allocation control for WebCore's CollectionCache
        https://bugs.webkit.org/show_bug.cgi?id=32109

        Inherits the following class from FastAllocBase because it is
        instantiated by 'new':

        struct name            - instantiated at: WebCore/'location'

        struct CollectionCache - dom/Document.cpp:4029

        * html/CollectionCache.h:

2009-12-04  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Fixes a crashing bug in Geolocation when a watch is cleared from some callbacks. 
        https://bugs.webkit.org/show_bug.cgi?id=32111

        In Geolocation::GeoNotifier::timerFired, a JS callback may be invoked if a
        fatal error was registered on this GeoNotifier or if this request has timed
        out. If the request is a watch, and is cleared by a call to clearWatch in the
        callback, the GeoNotifier object will be destroyed. We must therefore cache the
        m_geolocation member to allow us to call Geolocation::fatalErrorOccurred or
        Geolocation::requestTimedOut.

        Tests: fast/dom/Geolocation/permission-denied-already-clear-watch.html
               fast/dom/Geolocation/timeout-clear-watch.html

        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::GeoNotifier::timerFired): Modified. Cache the m_geolocation member before invoking the JS callback.

2009-12-04  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Eric Seidel.

        Allow custom memory allocation control for 2 classes of the platform directory in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=

        Inherits the following class from Noncopyable because it is instantiated
        by 'new' and no need to be copyable:

        class/struct name         - instantiated at: WebCore/'location'

        class SharedTimer         - (its child class) workers/WorkerRunLoop.cpp:91

        Inherits the following class from FastAllocBase because it is
        instantiated by 'new':

        class TransformOperations - rendering/style/RenderStyle.h:1175

        Noncopyable.h's include added to SharedTimer.h.

        * platform/SharedTimer.h:
        * platform/graphics/transforms/TransformOperations.h:

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

        Reviewed by Gustavo Noronha.

        [GTK]Enable DNS prefetching
        https://bugs.webkit.org/show_bug.cgi?id=23846

        Enable DNS prefetching.

        Based on a patch by José Millán.

        * platform/network/soup/DNSSoup.cpp:
        (WebCore::prefetchDNS):

2009-12-04  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Eric Seidel.

        Allow custom memory allocation control for the svg directory in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=

        Inherits the following classes from Noncopyable because these are instantiated
        by 'new' and no need to be copyable:

        class/struct name           - instantiated at: WebCore/'location'

        struct ResourceSet          - svg/graphics/SVGResource.cpp:148
        class SVGFontData           - css/CSSFontFaceSource.cpp:156
        class SVGDocumentExtensions - dom/Document.cpp:3962
        class SVGViewSpec           - svg/SVGSVGElement.cpp:191

        * svg/SVGDocumentExtensions.h:
        * svg/SVGFontData.h:
        * svg/SVGViewSpec.h:
        * svg/graphics/SVGResource.cpp:

2009-12-03  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        WAI-ARIA: aria-activedescendant doesn't work as intended
        https://bugs.webkit.org/show_bug.cgi?id=32100

        Fixes a number of issues regarding the "tree" role and aria-activedescendant.
        1. The indexes were being reported incorrectly by treeitems.
        2. aria-activedescendant changes were not being sent to the containing item.
        3. The tree's selected rows need to consult aria-activedescendant.
        4. Since a tree changes what it returns as its children (it returns its rows)
           the mac-specific array indexing methods need to correctly handle the tree case.

        Tests: platform/mac/accessibility/aria-tree-activedescendant.html
               platform/mac/accessibility/aria-tree-index-of-items.html

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::shouldFocusActiveDescendant):
        (WebCore::AccessibilityRenderObject::activeDescendant):
        (WebCore::AccessibilityRenderObject::handleActiveDescendantChanged):
        (WebCore::AccessibilityRenderObject::ariaTreeSelectedRows):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilityIndexOfChild:]):
        (-[AccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):

2009-12-03  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Eric Seidel.

        Allow custom memory allocation control for the xml directory in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=

        Inherits the following class from Noncopyable because it is instantiated 
        by 'new' and no need to be copyable:

        class/struct name               - instantiated at: WebCore/'location'

        struct XMLHttpRequestStaticData - xml/XMLHttpRequest.cpp:134

        Inherits the following classes from FastAllocBase because these are instantiated by 'new':

        class NodeTest                  - xml/XPathGrammar.y:258
        class NodeSet                   - xml/XPathValue.cpp:52
        struct EvaluationContext        - xml/XPathExpressionNode.cpp:40

        * xml/XMLHttpRequest.cpp:
        * xml/XPathExpressionNode.h:
        * xml/XPathNodeSet.h:
        * xml/XPathStep.h:

2009-12-03  Drew Wilson  <atwilson@chromium.org>

        Reviewed by Adam Barth.

        New History changes do not compile for Chromium/V8
        https://bugs.webkit.org/show_bug.cgi?id=32148

        Existing tests suffice (just trying to get code to compile).

        * WebCore.gypi:
        Added V8HistoryCustom.cpp and other missing files.
        * bindings/v8/custom/V8CustomBinding.h:
        Added custom handlers for History.pushState()/replaceState().
        * bindings/v8/custom/V8HistoryCustom.cpp: Added.
        Added custom handlers for History.pushState()/replaceState().
        * history/BackForwardListChromium.cpp:
        (WebCore::BackForwardList::pushStateItem):
        Stubbed out this routine for now - will implement in the future.

2009-12-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        OwnPtr<XBLBindingManager> Document::m_bindingManager;
        https://bugs.webkit.org/show_bug.cgi?id=32147

        The document actually owns the bindingManager.  That's what the code
        should say.

        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * dom/Document.h:
        (WebCore::Document::bindingManager):

2009-12-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        OwnPtr<Tokenizer> Document::m_tokenizer;
        https://bugs.webkit.org/show_bug.cgi?id=32145

        The document actually owns the tokenizer.  That's what the code should say.

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        (WebCore::Document::~Document):
        (WebCore::Document::cancelParsing):
        (WebCore::Document::implicitOpen):
        (WebCore::Document::implicitClose):
        * dom/Document.h:
        (WebCore::Document::tokenizer):

2009-12-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        OwnPtr<RenderArena> Document::m_renderArena;
        https://bugs.webkit.org/show_bug.cgi?id=32146

        The document owns the renderArena.  That's what the code should say.

        * dom/Document.cpp:
        (WebCore::Document::Document): Also, removed a redundant initialization
        of the tokenizer that I missed in my previous patch.
        (WebCore::Document::~Document):
        (WebCore::Document::attach):
        (WebCore::Document::detach):
        * dom/Document.h:
        (WebCore::Document::renderArena):

2009-12-03  Drew Wilson  <atwilson@chromium.org>

        Rolling back r51633 because it causes a chromium perf regression.

        * platform/graphics/SimpleFontData.h:
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:

2009-12-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        The code should say that Document owns DocLoader
        https://bugs.webkit.org/show_bug.cgi?id=32143

        It's the truth.

        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * dom/Document.h:
        (WebCore::Document::docLoader):

2009-12-03  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Eric Seidel.

        AX: VO just says "term" on many web sites
        https://bugs.webkit.org/show_bug.cgi?id=32139

        Test: platform/mac/accessibility/definition-list-term.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityDescription):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper subrole]):
        (-[AccessibilityObjectWrapper roleDescription]):

2009-12-03  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Implement WAI-ARIA scrollbar role and related property aria-orientation
        https://bugs.webkit.org/show_bug.cgi?id=32126

        Test: accessibility/aria-scrollbar-role.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::createARIARoleMap):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isScrollbar):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::valueForRange):
        (WebCore::AccessibilityRenderObject::orientation):
        (WebCore::AccessibilityRenderObject::canHaveChildren):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        * html/HTMLAttributeNames.in:

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

        Reviewed by Darin Adler.

        Fixed <rdar://problem/7401617> Selection painting issue in hardware-
        accelerated layers
        which is another part of https://bugs.webkit.org/show_bug.cgi?id=23628
        Fix selection painting to do container-relative repaints

        Test: fast/repaint/block-selection-gap-in-composited-layer.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGapRectsForRepaint): Compute and paint
        gap rects in the coordinate space of the repaint container.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::recursiveRepaintLayerRect): Added a
        FIXME.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSelection): Map block selection gap rects from
        the repaint container’s coordinate space to the view’s coordinate space
        before adding them to the cached selection bounds.
        (WebCore::RenderView::clearSelection): Changed to use
        repaintRectangleInViewAndCompositedLayers() so that the selection rect
        is invalidated in composited layers as well.

2009-12-03  Jonathan Dixon  <joth@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 32066 - Add enable geolocation flag to WebCore::Settings for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=32066

        Adds geolocationEnabled in Settings for runtime control of geolocaiton features. This defaults to ON
        as it is intended as a development and testing aid, not a user control. To completely remove geolocation
        from a given port, the compile time ENABLE_GEOLOCATION should still be used.
        Adding placeholder GeolocationServiceChromium implementation, as this is required to allows
        ENABLE_GEOLOCATION to be defined (in turn required for testing), even though this patch does not
        make that the default just yet.

        * WebCore.gypi:
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Add new m_geolocationEnabled flag default value
        (WebCore::Settings::setGeolocationEnabled): Setter for  m_geolocationEnabled flag
        * page/Settings.h:
        (WebCore::Settings::geolocationEnabled):  Add m_geolocationEnabled flag
        * platform/chromium/GeolocationServiceChromium.cpp: Added.
        (WebCore::GeolocationServiceChromium::GeolocationServiceChromium): Place holder GeolocationServiceChromium)
        (WebCore::createGeolocationService): factory function, only required when ENABLED(GEOLOCATION) is true

2009-12-03  Enrica Casucci  <enrica@apple.com>

        Reviewed by John Sullivan.

        SpinTracer: 349 spins in Mail at WebCore::Editor::advanceToNextMisspelling(bool)
        <rdar://problem/7198592>
        https://bugs.webkit.org/show_bug.cgi?id=32129

        Fixed the way the next paragraph is calculated.
        I've added a repro case in Safari and attached it to the Bugzilla bug.

        * editing/Editor.cpp:
        (WebCore::findFirstMisspellingOrBadGrammarInRange): Changed the way we move to the
        next paragraph in the loop.

2009-12-03  Oliver Hunt  <oliver@apple.com>

        Build fix

        * svg/SVGListTraits.h:
        (WebCore::):

2009-12-03  Oliver Hunt  <oliver@apple.com>

        Build fix

        * svg/SVGListTraits.h:
        (WebCore::):

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

        No wonder editing WebCore.exp repeatedly while I worked on this patch never seemed to stick.

        Long live our auto-generated overlords that I didn't know about...  

        * WebCore.base.exp:

2009-12-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION (r51627): 3 SVG tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=32117

        Null checking Items in the SVGList is insufficient as items may
        be floats, etc so add SVGListTraits::isNull and add appropriate
        specializations.

        Test: svg/dom/svglist-exception-on-out-bounds-error.html

        * svg/SVGList.h:
        (WebCore::SVGListTypeOperations::isNull):
        (WebCore::SVGList::initialize):
        (WebCore::SVGList::insertItemBefore):
        (WebCore::SVGList::replaceItem):
        (WebCore::SVGList::appendItem):
        * svg/SVGListTraits.h:
        (WebCore::):

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

        No review - release build fix.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::documentDetached):

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

        No review - release build fix.

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::pushState):

2009-12-03  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        Multiple Undos removes the last posted comment and/or the ones before it.
        <rdar://problem/6557066>
        https://bugs.webkit.org/show_bug.cgi?id=32079
        
        The fix consists in preventing Undos and Redos to be applied to elements that
        are no longer editable. We do not attempt to remove the commands from the queue.
        It is a relatively simple fix that comes with a little extra overhead for the apply
        and unapply methods where we are now performing the editability check.

        Test: editing/undo/undo-indent-noneditable.html

        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::doApply):
        (WebCore::AppendNodeCommand::doUnapply):
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::doApply):
        (WebCore::DeleteFromTextNodeCommand::doUnapply):
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doApply):
        (WebCore::InsertIntoTextNodeCommand::doUnapply):
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply):
        (WebCore::InsertNodeBeforeCommand::doUnapply):
        * editing/JoinTextNodesCommand.cpp:
        (WebCore::JoinTextNodesCommand::doApply):
        (WebCore::JoinTextNodesCommand::doUnapply):
        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::doApply):
        (WebCore::MergeIdenticalElementsCommand::doUnapply):
        * editing/RemoveNodeCommand.cpp:
        (WebCore::RemoveNodeCommand::doApply):
        (WebCore::RemoveNodeCommand::doUnapply):
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::executeApply):
        (WebCore::SplitElementCommand::doUnapply):
        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::doApply):
        (WebCore::SplitTextNodeCommand::doUnapply):
        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::doUnapply):
        (WebCore::WrapContentsInDummySpanCommand::doReapply):

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

        Reviewed by Sam Weinig.

        <rdar://problem/7214236> and http://webkit.org/b/32052 - Implement HTML5 state object history API

        Tests: fast/loader/stateobjects/document-destroyed-navigate-back.html
               fast/loader/stateobjects/document-destroyed-navigate-back-with-fragment-scroll.html
               fast/loader/stateobjects/popstate-after-load-complete-addeventlistener.html
               fast/loader/stateobjects/popstate-after-load-complete-body-attribute.html
               fast/loader/stateobjects/popstate-after-load-complete-window-attribute.html
               fast/loader/stateobjects/pushstate-object-types.html
               fast/loader/stateobjects/pushstate-then-replacestate.html
               fast/loader/stateobjects/pushstate-with-fragment-urls-and-hashchange.html
               fast/loader/stateobjects/replacestate-then-pushstate.html
               http/tests/loading/state-object-security-exception.html

        Derived sources and project file changes:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am
        * WebCore.pro
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

        Add the new PopStateEvent:
        * dom/PopStateEvent.cpp: Added.
        (WebCore::PopStateEvent::PopStateEvent):
        (WebCore::PopStateEvent::initPopStateEvent):
        * dom/PopStateEvent.h: Added.
        (WebCore::PopStateEvent::create):
        (WebCore::PopStateEvent::isPopStateEvent):
        (WebCore::PopStateEvent::state):
        * dom/PopStateEvent.idl: Added.
        * bindings/js/JSPopStateEventCustom.cpp: Added.
        (WebCore::JSPopStateEvent::initPopStateEvent):
        (WebCore::JSPopStateEvent::state):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * dom/Event.cpp:
        (WebCore::Event::isPopStateEvent):
        * dom/Event.h:
        * dom/EventNames.h:

        Add the "onpopstate" attribute:
        * html/HTMLAttributeNames.in:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute):
        * html/HTMLBodyElement.idl:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        * html/HTMLFrameSetElement.h:
        * html/HTMLFrameSetElement.idl:
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

        Add pushState and replaceState management to the loader and history machinery:
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::pushState):
        (WebCore::JSHistory::replaceState):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateForSameDocumentNavigation): Augmented from "scrollToAnchor()", combining
          both the same-document fragment scroll case with the new same-document state object activation case.
        (WebCore::HistoryController::pushState):
        (WebCore::HistoryController::replaceState):
        * loader/HistoryController.h:
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::addItem): Use insertItemAfterCurrent.
        (WebCore::BackForwardList::insertItemAfterCurrent): Optionally insert the item without clearing the forward
          list, as pushStateItem might've selectively cleared only certain items, with the bulk of the forward list
          meant to remain.
        (WebCore::BackForwardList::pushStateItem): Clear the forward list *only* for the state item's document, then 
          insert the new item.
        (WebCore::BackForwardList::removeItem):
        * history/BackForwardList.h:
        * page/History.cpp:
        (WebCore::History::urlForState):
        (WebCore::History::stateObjectAdded):
        * page/History.h:
        * page/History.idl:

        Let HistoryItems and Documents associate with each other, as well as letting HistoryItems contain state objects:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::~HistoryItem):
        (WebCore::HistoryItem::setStateObject):
        (WebCore::HistoryItem::setDocument):
        (WebCore::HistoryItem::documentDetached):
        * history/HistoryItem.h:
        (WebCore::HistoryItem::stateObject):
        (WebCore::HistoryItem::document):
        * dom/Document.cpp:
        (WebCore::Document::detach): Notify all back/forward history items owned by this Document that it
          is going away.
        (WebCore::Document::registerHistoryItem): Manage the list of back/forward history items this document owns.
        (WebCore::Document::unregisterHistoryItem): Ditto.
        * dom/Document.h:

        Add the ability for Documents, DocumentLoaders, and FrameLoaderClients to be notified when a Documents
        URL changes as the result of pushState(), replaceState(), or a popstate navigation:
        * dom/Document.cpp:
        (WebCore::Document::implicitClose): If there's a pending state object, dispatch the popstate event.
        (WebCore::Document::updateURLForPushOrReplaceState):
        (WebCore::Document::statePopped): If loading is complete, dispatch the popstate event. Otherwise, set 
          the pending state object.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::replaceRequestURLForSameDocumentNavigation):
        * loader/DocumentLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::dispatchDidChangeStateObjectForPageForFrame):

        Change handling of "loading a HistoryItem" to distinguish between new-Document navigations and same-Document
        navigations, combining the old concept of anchor scrolls with the new concept of state object navigations:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadInSameDocument):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::navigateWithinDocument):
        (WebCore::FrameLoader::navigateToDifferentDocument):
        (WebCore::FrameLoader::loadItem):
        * loader/FrameLoader.h:
        * page/Page.cpp:
        (WebCore::Page::goToItem): Changed to allow state object activations to pass through without the load stopping.

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

        Not reviewed: chromium build fix.
        r51621 changed JS bindings only, broke v8's.

        * bindings/v8/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::appendArgument):
        * bindings/v8/ScriptFunctionCall.h:

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

        Reviewed by Adam Barth.

        [V8] Attributes and NamedNodeMaps aren't tracked correctly and may be prematurely garbage-collected.
        https://bugs.webkit.org/show_bug.cgi?id=32094

        Covered by existing test: LayoutTests/fast/dom/Attr/access-after-element-destruction.html

        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8DOMWrapper::convertToV8Object):
        (WebCore::V8DOMWrapper::convertNamedNodeMapToV8Object):
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8GCController.cpp:
        (WebCore::ObjectGrouperVisitor::visitDOMWrapper):
        * bindings/v8/custom/V8CustomBinding.h:

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

        Reviewed by Timothy Hatcher.

        Chromium: Add support for settings containing ":"

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

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

2009-12-03  Rafael Antognolli  <antognolli@profusion.mobi>, Kenneth Christiansen <kenneth@webkit.org>

        Reviewed by Simon Fraser.

        repaint events from outside the viewport aren't received
        https://bugs.webkit.org/show_bug.cgi?id=32081

        When using a tiled backing store for painting, you need to receive
        event from outside the viewport. Setting the viewport to the size
        of the contents is not an option if you want to make use of WebCore's
        infrastructure for drawing scrollbars etc.

        A new property, paintsEntireContents, has been introduced for the
        above use-case. It is settable, as tiling will be optional for Qt,
        and for the not yet upstreamed EFL port, there will be two different
        views, where only one of them are tiled.

        No change in behavior, so no new tests added.

        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::setPaintsEntireContents):
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        (WebCore::ScrollView::paintsEntireContents):

2009-11-23  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Eric Seidel.

        Switch Chrome/Mac to use Core Text APIs rather than ATSUI APIs.
        https://bugs.webkit.org/show_bug.cgi?id=31802

        No test since this is already covered by existing pixel tests.

        * platform/graphics/SimpleFontData.h: Change #ifdef to define getNSFont() on Chrome/Mac .
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp: Provide forward declarations
        of Core Text functions that are public on 10.6 but SPI on 10.5.

2009-12-03  Pavel Feldman  <pfeldman@dhcp-172-28-174-220.spb.corp.google.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Simplify the settings support in inspector controller.

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

        Test: inspector/settings-set-get.html

        * WebCore.Inspector.exp:
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::setting):
        (WebCore::InspectorController::setSetting):
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::attachWindow):
        (WebCore::InspectorController::setAttachedWindowHeight):
        (WebCore::InspectorController::storeLastActivePanel):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::showWindow):
        (WebCore::InspectorController::enableResourceTracking):
        (WebCore::InspectorController::disableResourceTracking):
        (WebCore::InspectorController::ensureResourceTrackingSettingsLoaded):
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        (WebCore::InspectorController::disableDebugger):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::setting):
        (WebCore::InspectorFrontendHost::setSetting):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * loader/EmptyClients.h:
        (WebCore::EmptyInspectorClient::populateSetting):
        (WebCore::EmptyInspectorClient::storeSetting):

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

        Reviewed by Brady Eidson.

        [Android] notifyHistoryItemChanged() should pass a pointer to the HistoryItem that changed.
        https://bugs.webkit.org/show_bug.cgi?id=31915

        No change in functionality so no new tests required.

        * history/HistoryItem.cpp:
        (WebCore::defaultNotifyHistoryItemChanged): Update this function to pass the HistoryItem that is being changed.
        (WebCore::HistoryItem::setAlternateTitle): Update call to notifyHistoryItemChanged to include the new parameter.
        (WebCore::HistoryItem::setURLString): ditto.
        (WebCore::HistoryItem::setOriginalURLString): ditto.
        (WebCore::HistoryItem::setReferrer): ditto.
        (WebCore::HistoryItem::setTitle): ditto.
        (WebCore::HistoryItem::setTarget): ditto.
        (WebCore::HistoryItem::setDocumentState): On Android, add a call to notifyHistoryItemChanged. See bug for a discussion of why this is needed.
        (WebCore::HistoryItem::clearDocumentState): ditto.
        (WebCore::HistoryItem::setIsTargetItem): ditto.
        (WebCore::HistoryItem::addChildItem): ditto.
        (WebCore::HistoryItem::setFormInfoFromRequest): ditto.
        * history/HistoryItem.h: Update signature of notifyHistoryItemChanged.

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

        Reviewed by Brady Eidson.

        [Android] The FrameLoaderClient is unaware of BackForwardList changes.
        https://bugs.webkit.org/show_bug.cgi?id=31914

        This change adds three new methods on the FrameLoaderClient interface to receive notifications when the BackForwardList changes.

        No new tests required. Functionality on all platforms upstream remains the same. Android is the first platform to make use of these callbacks.

        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::addItem): Execute the callback.
        (WebCore::BackForwardList::goBack): ditto.
        (WebCore::BackForwardList::goForward): ditto.
        (WebCore::BackForwardList::goToItem): ditto.
        (WebCore::BackForwardList::setCapacity): dito.
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::dispatchDidAddBackForwardItem): Add an empty implementation for the callback that does nothing.
        (WebCore::EmptyFrameLoaderClient::dispatchDidRemoveBackForwardItem): ditto.
        (WebCore::EmptyFrameLoaderClient::dispatchDidChangeBackForwardIndex): ditto.
        * loader/FrameLoaderClient.h:

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

        Reviewed by Brady Eidson.

        [Android] Upstream WebCore/history/android: Require some platform specific state attached to HistoryItem.
        https://bugs.webkit.org/show_bug.cgi?id=31913

        Android stores information such as the zoom scale factor and bridge back to the Java counterpart with HistoryItem.

        No new tests required as this is Android specific code.

        * history/HistoryItem.h: Add Android specific member data to HistoryItem.
        * history/android: Added.
        * history/android/AndroidWebHistoryBridge.h: Added.
        * history/android/HistoryItemAndroid.cpp: Added, provides implementation for Android specific member functions in HistoryItem.
        (WebCore::HistoryItem::bridge): Added.
        (WebCore::HistoryItem::setBridge): Added.

2009-12-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        NULL ptr in SVGPathSegList::getPathSegAtLength()
        https://bugs.webkit.org/show_bug.cgi?id=30313

        Add exception checks to SVGPathSegList's implementation to catch (and propagate) exceptions.
        Add null checks to SVGList's content manipulation functions to prevent
        null values from entering the list in the first place.

        Test: svg/dom/svgpath-out-of-bounds-getPathSeg.html

        * svg/SVGList.h:
        (WebCore::SVGList::initialize):
        (WebCore::SVGList::insertItemBefore):
        (WebCore::SVGList::replaceItem):
        (WebCore::SVGList::appendItem):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::getPathSegAtLength):
        * svg/SVGPathElement.h:
        * svg/SVGPathElement.idl:
        * svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::getPathSegAtLength):
        (WebCore::SVGPathSegList::toPathData):
        (WebCore::SVGPathSegList::createAnimated):
        * svg/SVGPathSegList.h:

2009-12-02  Yusuke Sato  <yusukes@chromium.org>

        Reviewed by Eric Seidel.

        Sanitize web fonts using the OTS library 
        https://bugs.webkit.org/show_bug.cgi?id=31106

        Add support for OpenType sanitizer (OTS). It parses OpenType files (from @font-face)
        and attempts to validate and sanitize them. We hope this reduces the attack surface
        of the system font libraries.

        * WebCore.gyp/WebCore.gyp: Added dependency to (chromium_src_dir)/third_party/ots/ library.
        * WebCore.gypi: Added new files below.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * platform/graphics/chromium/FontCustomPlatformData.cpp: Validate and transcode a web font.
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.cpp: Ditto.
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/opentype/OpenTypeSanitizer.cpp: Added.
        (WebCore::OpenTypeSanitizer::sanitize):
        * platform/graphics/opentype/OpenTypeSanitizer.h: Added.
        (WebCore::OpenTypeSanitizer::OpenTypeSanitizer):

2009-12-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        Web Inspector frontend heap allocates ScriptFunctionCall which is unsafe
        https://bugs.webkit.org/show_bug.cgi?id=32098

        Fix is simply to make the ScriptFunctionCall stack allocated as nature intended.
        Doing this required adding an appendArgument(char*) to ScriptFunctionCall so
        that an explicit String cast would not be necessary.

        To prevent something like this happening again in future i've added private
        operator new implementations to ScriptFunctionCall making this type of mistake
        produce errors when compiling.

        Test case: Inspector tests now pass with GC on every alloc enabled.

        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::appendArgument):
        * bindings/js/ScriptFunctionCall.h:
        (WebCore::ScriptFunctionCall::operator new):
        (WebCore::ScriptFunctionCall::operator new[]):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addConsoleMessage):
        (WebCore::InspectorFrontend::updateConsoleMessageRepeatCount):
        (WebCore::InspectorFrontend::addResource):
        (WebCore::InspectorFrontend::updateResource):
        (WebCore::InspectorFrontend::removeResource):
        (WebCore::InspectorFrontend::updateFocusedNode):
        (WebCore::InspectorFrontend::setAttachedWindow):
        (WebCore::InspectorFrontend::addRecordToTimeline):
        (WebCore::InspectorFrontend::parsedScriptSource):
        (WebCore::InspectorFrontend::failedToParseScriptSource):
        (WebCore::InspectorFrontend::addProfileHeader):
        (WebCore::InspectorFrontend::setRecordingProfile):
        (WebCore::InspectorFrontend::didGetProfileHeaders):
        (WebCore::InspectorFrontend::didGetProfile):
        (WebCore::InspectorFrontend::pausedScript):
        (WebCore::InspectorFrontend::setDocument):
        (WebCore::InspectorFrontend::setDetachedRoot):
        (WebCore::InspectorFrontend::setChildNodes):
        (WebCore::InspectorFrontend::childNodeCountUpdated):
        (WebCore::InspectorFrontend::childNodeInserted):
        (WebCore::InspectorFrontend::childNodeRemoved):
        (WebCore::InspectorFrontend::attributesUpdated):
        (WebCore::InspectorFrontend::didRemoveNode):
        (WebCore::InspectorFrontend::didGetChildNodes):
        (WebCore::InspectorFrontend::didApplyDomChange):
        (WebCore::InspectorFrontend::didGetEventListenersForNode):
        (WebCore::InspectorFrontend::didGetCookies):
        (WebCore::InspectorFrontend::didDispatchOnInjectedScript):
        (WebCore::InspectorFrontend::addDatabase):
        (WebCore::InspectorFrontend::selectDatabase):
        (WebCore::InspectorFrontend::didGetDatabaseTableNames):
        (WebCore::InspectorFrontend::addDOMStorage):
        (WebCore::InspectorFrontend::selectDOMStorage):
        (WebCore::InspectorFrontend::didGetDOMStorageEntries):
        (WebCore::InspectorFrontend::didSetDOMStorageItem):
        (WebCore::InspectorFrontend::didRemoveDOMStorageItem):
        (WebCore::InspectorFrontend::updateDOMStorage):
        (WebCore::InspectorFrontend::addNodesToSearchResult):
        (WebCore::InspectorFrontend::evaluateForTestInFrontend):
        * inspector/InspectorFrontend.h:

2009-12-02  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=32072, clean up invalid @-rule error handling so that we
        pass more CSS test suite stuff.  Make the grammar stop enforcing the ordering of @namespace vs.
        @variables vs. @import.  Just let the parser handle that instead.  This simplifies the grammar and
        makes error handling deal with more cases correctly.

        Added fast/css/namespaces/namespaces-invalid-at-rules.xml

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseRule):
        (WebCore::CSSParser::createCharsetRule):
        (WebCore::CSSParser::createImportRule):
        (WebCore::CSSParser::createMediaRule):
        (WebCore::CSSParser::createKeyframesRule):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::createFontFaceRule):
        (WebCore::CSSParser::addNamespace):
        (WebCore::CSSParser::createVariablesRule):
        * css/CSSParser.h:

2009-12-02  Yusuke Sato  <yusukes@chromium.org>

        Reviewed by Dan Bernstein.

        Safari/Chromium for Windows fails to load CJK WebFonts
        https://bugs.webkit.org/show_bug.cgi?id=31804
        
        * platform/graphics/opentype/OpenTypeUtilities.cpp:
        (WebCore::renameAndActivateFont): Load a remote font even if the font has 2 or more faces.

2009-12-02  Avi Drissman  <avi@chromium.org>

        Reviewed by Darin Fisher.

        Chromium: Need tickmarks in scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=32069

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/ScrollbarThemeChromiumMac.h: Added.
        * platform/chromium/ScrollbarThemeChromiumMac.mm: Added.

2009-11-13  Timothy Hatcher  <timothy@apple.com>

        Expose a function to set the value of an input element on behalf of the user.
        This function will dispatch the change event so the page is notified when autofill
        happens. Also dispatch a change event when a select element is changed by autofill.

        <rdar://problem/6760590> Would like a way to detect a login form AutoFill from JavaScript

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj: Added the DOMHTMLInputElementPrivate.h header.
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLSelectElement _activateItemAtIndex:]): Call setSelectedIndexByUser instead so
        a change event is fired. This method is called by Safari autofill.
        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode): Use dispatchFormControlChangeEvent instead
        of dispatching the change event directly to be consistent.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLInputElement::setValueForUser): Added. Calls setValue with the sendChangeEvent
        (WebCore::HTMLInputElement::setValue): Added the optional sendChangeEvent argument. Mimics setChecked.
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl: Added setValueForUser for non-JS languages.
        * html/InputElement.h: Added setValueForUser.

2009-12-02  Pavel Feldman  <pfeldman@dhcp-172-28-174-220.spb.corp.google.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: DOM tree selection disappears upon page refresh.

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

        Test: inspector/elements-panel-selection-on-refresh.html

        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::pushNodeByPathToFrontend):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorBackend.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::releaseDOMAgent):
        (WebCore::InspectorController::resetScriptObjects):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::~InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::reset):
        (WebCore::InspectorDOMAgent::setDocument):
        (WebCore::InspectorDOMAgent::pushDocumentToFrontend):
        (WebCore::InspectorDOMAgent::nodeForPath):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype._renumber):
        (WebInspector.DOMAgent.prototype._setDocument):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.reset):
        (WebInspector.ElementsPanel.prototype.setDocument.selectDefaultNode):
        (WebInspector.ElementsPanel.prototype.setDocument.selectLastSelectedNode):
        (WebInspector.ElementsPanel.prototype.setDocument):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.pushNodeByPathToFrontend):
        * inspector/front-end/InjectedScriptAccess.js:

2009-12-01  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=32045, make sure escape sequences work with
        all the @-rules we support.  When escape sequences are present, the lexical scanner
        just returns a generic token name: ATKEYWORD.  We have to process the escape sequences
        and then recheck against the rules we support with the final processed name.  If we
        find a match, we mutate the token value to the appropriate rule name token, e.g.,
        NAMESPACE_SYM.

        Added fast/css/namespaces/namespaces-escapes.xml

        * css/CSSParser.cpp:
        (WebCore::CSSParser::lex):
        (WebCore::CSSParser::recheckAtKeyword):
        (WebCore::CSSParser::text):
        * css/CSSParser.h:

2009-12-02  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.:w

        Allow to skip thread checks when accessing DOMDataStore for processes
        which run V8 in single thread mode.
        https://bugs.webkit.org/show_bug.cgi?id=31877

        Should be covered by buildbots.

        * bindings/v8/V8DOMMap.cpp:
        (WebCore::getDOMDataStore):
        (WebCore::enableFasterDOMStoreAccess):
        (WebCore::getDOMNodeMap):
        (WebCore::getDOMObjectMap):
        (WebCore::getActiveDOMObjectMap):
        (WebCore::getDOMSVGElementInstanceMap):
        (WebCore::getDOMSVGObjectWithContextMap):
        * bindings/v8/V8DOMMap.h:

2009-12-02  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Code clean up: remove ScriptObjectQuarantine.* as a whole.

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

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/ScriptObjectQuarantine.cpp: Removed.
        * bindings/js/ScriptObjectQuarantine.h: Removed.
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::quarantineValue):
        * bindings/js/ScriptValue.h:
        * bindings/v8/ScriptObjectQuarantine.cpp: Removed.
        * bindings/v8/ScriptObjectQuarantine.h: Removed.
        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::quarantineValue):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        * inspector/InspectorController.cpp:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorFrontend.cpp:

2009-12-02  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket handshake check query component of URL
        https://bugs.webkit.org/show_bug.cgi?id=31617

        Tests: websocket/tests/url-with-credential.html
               websocket/tests/url-with-empty-query.html
               websocket/tests/url-with-fragment.html
               websocket/tests/url-with-query-for-no-query.html
               websocket/tests/url-with-query.html

        * platform/KURLGoogle.cpp:
        (WebCore::KURL::query): returns a null if query is not specified and returns an empty if query is specified but empty.
        * websockets/WebSocketHandshake.cpp:
        (WebCore::resourceName): added. add query component to path if specified.
        (WebCore::WebSocketHandshake::clientLocation):
        (WebCore::WebSocketHandshake::clientHandshakeMessage):

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

        Reviewed by Eric Seidel.

        Incorrect code in WebGLRenderingContext.cpp
        https://bugs.webkit.org/show_bug.cgi?id=32046

        Fix incorrect code that happened to work. != has higher precendence than &.
        The simplest fix is to remove the "!= 0" which violates WebKit style
        guidelines anyway.

        Also added periods to few comments in the same function.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateIndexArray):

2009-12-01  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Change [Reflect] to [ConvertNullToNullString, Reflect] for min, max,
        pattern and step attributes of HTMLInputElement.
        https://bugs.webkit.org/show_bug.cgi?id=31708

        * html/HTMLInputElement.idl:

2009-12-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        WAI-ARIA: implement support for ARIA drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=32007

        Test: platform/mac/accessibility/aria-drag-drop.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::supportsARIADropping):
        (WebCore::AccessibilityObject::supportsARIADragging):
        (WebCore::AccessibilityObject::isARIAGrabbed):
        (WebCore::AccessibilityObject::setARIAGrabbed):
        (WebCore::AccessibilityObject::determineARIADropEffects):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::supportsARIADropping):
        (WebCore::AccessibilityRenderObject::supportsARIADragging):
        (WebCore::AccessibilityRenderObject::isARIAGrabbed):
        (WebCore::AccessibilityRenderObject::setARIAGrabbed):
        (WebCore::AccessibilityRenderObject::determineARIADropEffects):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilityIsAttributeSettable:]):
        (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        * html/HTMLAttributeNames.in:

2009-12-01  Adam Barth  <abarth@webkit.org>

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

        Unreviewed port of @sandbox to V8.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::isEnabled):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::createWindow):

2009-12-01  Patrik Persson  <patrik.j.persson@ericsson.com>

        Reviewed by Darin Adler.

        Implement HTML5 sandbox attribute for iframes.
        http://www.w3.org/TR/html5/text-level-semantics.html#attr-iframe-sandbox
        https://bugs.webkit.org/show_bug.cgi?id=21288

        Tests: fast/frames/sandboxed-iframe-attribute-parsing.html
               fast/frames/sandboxed-iframe-forms.html
               fast/frames/sandboxed-iframe-navigation-allowed.html
               fast/frames/sandboxed-iframe-navigation-parent.html
               fast/frames/sandboxed-iframe-navigation-targetlink.html
               fast/frames/sandboxed-iframe-navigation-windowopen.html
               fast/frames/sandboxed-iframe-plugins.html
               fast/frames/sandboxed-iframe-scripting.html
               fast/frames/sandboxed-iframe-storage.html
               http/tests/security/sandboxed-iframe-document-cookie.html
               http/tests/security/sandboxed-iframe-modify-self.html
               http/tests/security/xss-DENIED-sandboxed-iframe.html
               http/tests/xmlhttprequest/access-control-sandboxed-iframe-allow.html
               http/tests/xmlhttprequest/access-control-sandboxed-iframe-denied-without-wildcard.html
               http/tests/xmlhttprequest/access-control-sandboxed-iframe-denied.html

        * bindings/js/JSDOMWindowCustom.cpp: sandboxing navigation
        (WebCore::createWindow):
        * bindings/js/ScriptController.cpp: sandboxing scripts
        (WebCore::ScriptController::isEnabled):
        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::cookie): raise exception when accessed from sandbox
        (WebCore::Document::setCookie): raise exception when accessed from sandbox
        (WebCore::Document::initSecurityContext): updae sandbox status
        (WebCore::Document::updateSandboxFlags):
        * dom/Document.h:
        * dom/Document.idl:
        * html/HTMLAppletElement.cpp: sandboxing applets
        (WebCore::HTMLAppletElement::createRenderer):
        (WebCore::HTMLAppletElement::renderWidgetForJSBindings):
        (WebCore::HTMLAppletElement::canEmbedJava):
        * html/HTMLAppletElement.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLFrameOwnerElement.cpp: management of sandbox flags as stated in attribute
        (WebCore::HTMLFrameOwnerElement::HTMLFrameOwnerElement):
        (WebCore::HTMLFrameOwnerElement::setSandboxFlags):
        * html/HTMLFrameOwnerElement.h:
        (WebCore::HTMLFrameOwnerElement::sandboxFlags):
        * html/HTMLIFrameElement.cpp: sandbox attribute parsing
        (WebCore::parseSandboxAttribute):
        (WebCore::HTMLIFrameElement::parseMappedAttribute):
        * html/HTMLIFrameElement.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::getCookies):
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::passesAccessControlCheck):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::submitForm): sandboxing forms
        (WebCore::FrameLoader::requestObject): sandboxing plugins
        (WebCore::FrameLoader::shouldAllowNavigation): sandboxing navigation
        (WebCore::FrameLoader::updateSandboxFlags): propagation of sandbox flags
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::ownerElementSandboxFlagsChanged):
        (WebCore::FrameLoader::isSandboxed):
        (WebCore::FrameLoader::sandboxFlags):
        * loader/FrameLoaderTypes.h:
        (WebCore::):
        * page/DOMWindow.cpp: disable storage and databases in sandboxed frames
        (WebCore::DOMWindow::sessionStorage):
        (WebCore::DOMWindow::localStorage):
        (WebCore::DOMWindow::openDatabase):
        * page/SecurityOrigin.cpp: added sandboxing status
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::canAccess):
        (WebCore::SecurityOrigin::canRequest):
        (WebCore::SecurityOrigin::toString):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::setSandboxFlags):
        (WebCore::SecurityOrigin::isSandboxed):
        (WebCore::SecurityOrigin::canAccessDatabase):
        (WebCore::SecurityOrigin::canAccessStorage):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didReceiveData):

2009-12-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        ARIA: support a way to create a static text object
        https://bugs.webkit.org/show_bug.cgi?id=32030

        Test: accessibility/aria-text-role.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::createARIARoleMap):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::stringValue):
        (WebCore::AccessibilityRenderObject::isDescendantOfBarrenParent):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::text):
        * accessibility/AccessibilityRenderObject.h:

2009-12-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Inspector crashes when collecting on every allocation
        https://bugs.webkit.org/show_bug.cgi?id=32044

        The crash is caused by the prototype wrapper object getting collected
        when allocating the object that is going to use it as a prototype.
        Because the only reference to the prototype wrapper is through the
        new object's Structure it does not get marked automatically.

        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::wrap):
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::wrap):

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

        Reviewed by Simon Fraser.

        Add SVG animation test framework with 'snapshot' functionality
        https://bugs.webkit.org/show_bug.cgi?id=31897

        Add 'sampleSVGAnimationForElementAtTime' method to the LayoutTestController,
        for the use within the new SVG animation test framework (LayoutTests/svg/animations/)

        layoutTestController.sampleAnimationAtTime(<svg animation id>, <absolute time>, <svg element id>);
        to sample a svg animateMotion/animateColor/animate/set element at certain times.

        After the desired SVG animation starts and calling the method above, it's immediately forwarded to
        the desired sampling time. After JS returns from the 'sampleSVGAnimationForElementAtTime' method
        a callback is fired used to sample the animation value at the target time. It's modelled similar
        to the CSS animation/transition testing framework, inspired by
        LayoutTests/animations/animation-test-helpers.js.

        Though it has been extended to integrate within the fast/js/js-test-* framework, that's used for
        the SVG dynamic-updates tests, to simplify test creation, by utilizing script-tests/* only.

        Adding a simple testcase testing the DRT methods, it will soon be extended to test animVal/baseVal
        interaction, while animating.

        Test: svg/animations/animVal-basics.html

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::sampleAnimationAtTime):
        * svg/SVGDocumentExtensions.h:
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::SMILTimeContainer):
        (WebCore::SMILTimeContainer::sampleAnimationAtTime):
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SMILTimeContainer.h:

2009-12-01  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Adler.

        Add convenience methods to Element and QualifiedName that take
        char* instead of AtomicString, in preparation for removing the
        implicit conversion between the two types (30187).
        https://bugs.webkit.org/show_bug.cgi?id=31749

        * dom/Element.cpp:
        (WebCore::Element::setCStringAttribute):  Equivalent to setAttribute.
        * dom/Element.h:
        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::init):  Shared impl of both constructors
        (WebCore::QualifiedName::QualifiedName):  New c'tor taking char*.
        * dom/QualifiedName.h:
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::CaseFoldingCStringTranslator):  Enables lookup by C string
        (WebCore::HTTPHeaderMap::get):  New variant that takes C string
        (WebCore::HTTPHeaderMap::contains):  New variant that takes C string
        (WebCore::HTTPHeaderMap::add):  New variant that takes C string
        * platform/network/HTTPHeaderMap.h:
        (WebCore::HTTPHeaderMap::get):
        (WebCore::HTTPHeaderMap::add):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::httpHeaderField):  New variant that takes C string
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::setHTTPHeaderField):  Use symbolic names for headers
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::httpHeaderField):  New variant that takes C string
        * platform/network/ResourceResponseBase.h:

2009-12-01  Alexey Proskuryakov  <ap@apple.com>

        More Windows build fix.

        * platform/network/cf/CredentialStorageCFNet.cpp:
        (WebCore::CredentialStorage::getFromPersistentStorage):

2009-12-01  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * platform/network/cf/CredentialStorageCFNet.cpp: Include RetainPtr.h.

2009-12-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=32036
        Implement CredentialStorage::getFromPersistentStorage for CFNetwork

        * platform/network/cf/CredentialStorageCFNet.cpp:
        (WebCore::CredentialStorage::getFromPersistentStorage):

2009-12-01  Daniel Bates  <dbates@webkit.org>

        Reviewed by Pavel Feldman.

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

        Added missing localized strings (that I left out of the patch for bug #21554):
        %d × %d pixels
        %d × %d pixels (Natural: %d × %d pixels)

        Also, changed formatting of these stings to conform with existing ones (added
        a space on both sides of the multiply sign).

        * English.lproj/localizedStrings.js: Added stings.
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.createTooltipForImageNode):

2009-12-01  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        Fix for bug 32032, empty namespaces should be allowed in @namespace directives in CSS.

        Added fast/css/namespaces/namespaces-empty.xml

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::addNamespace):
        (WebCore::CSSStyleSheet::determineNamespace):

2009-12-01  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Escape key in the Search Field should be more User Friendly
        https://bugs.webkit.org/show_bug.cgi?id=32005

        * inspector/front-end/inspector.js:
        (WebInspector.loaded): add mousedown listener on the search field
        (WebInspector.searchFieldManualFocus): user clicked to focus on the search field
        (WebInspector.searchKeyDown): handle escape

2009-12-01  Dave Hyatt  <hyatt@apple.com>

        Reviewed by David Kilzer.

        @namespace directives need to use "maybe_space" in the "maybe_ns_prefix" portion of the grammar to match
        the spec.  Not doing so prevent comments from being used immmediately after the namespace prefix.

        Added fast/css/namespaces-comments.xml

        * css/CSSGrammar.y:

2009-12-01  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Timothy Hatcher.

        Reloading WebInspector from context menu is closing it instead of reloading.
        https://bugs.webkit.org/show_bug.cgi?id=32004

        When reloading WebInspector, don't delete its m_page.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::close):

2009-12-01  Steve Block  <steveblock@google.com>

        Reviewed by Dimitri Glazkov.

        Adds V8 bindings for Geolocation.
        https://bugs.webkit.org/show_bug.cgi?id=30206

        Also adds Geolocation files to Chrome build files.

        * WebCore.gyp/WebCore.gyp: Modified. Corrects list of Geolocation IDL files.
        * WebCore.gypi: Modified. Adds Geolocation files.
        * bindings/v8/DOMObjectsInclude.h: Modified. Adds Geolocation includes.
        * bindings/v8/DerivedSourcesAllInOne.cpp: Modified. Adds Geolocation files.
        * bindings/v8/V8Index.cpp: Modified. Includes Geolocation generated headers.
        * bindings/v8/V8Index.h: Modified. Adds Geolocation types to DOM_OBJECT_TYPES.
        * bindings/v8/custom/V8CoordinatesCustom.cpp: Added. Handles optional properties.
        * bindings/v8/custom/V8CustomBinding.h: Modified. Declares callbacks and getters.
        * bindings/v8/custom/V8CustomPositionCallback.cpp: Added.
        (WebCore::V8CustomPositionCallback::V8CustomPositionCallback): Added. Constructor.
        (WebCore::V8CustomPositionCallback::~V8CustomPositionCallback): Added. Destructor.
        (WebCore::V8CustomPositionCallback::handleEvent): Added. Invokes callback.
        * bindings/v8/custom/V8CustomPositionCallback.h: Added.
        (WebCore::V8CustomPositionCallback::create): Added. Factory method.
        * bindings/v8/custom/V8CustomPositionErrorCallback.cpp: Added.
        (WebCore::V8CustomPositionErrorCallback::V8CustomPositionErrorCallback): Added. Constructor.
        (WebCore::V8CustomPositionErrorCallback::~V8CustomPositionErrorCallback): Added. Destructor.
        (WebCore::V8CustomPositionErrorCallback::handleEvent): Added. Invokes callback.
        * bindings/v8/custom/V8CustomPositionErrorCallback.h: Added.
        (WebCore::V8CustomPositionErrorCallback::create): Added. Factory method.
        * bindings/v8/custom/V8GeolocationCustom.cpp: Added.
        (WebCore::throwTypeMismatchException): Added. Throws a type mismatch error.
        (WebCore::createPositionCallback): Added. Handles type checking for successCallback argument.
        (WebCore::createPositionErrorCallback): Added. Handles type checking for errorCallback argument.
        (WebCore::createPositionOptions): Added. Handles type checking for positionOptions argument.

2009-12-01  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Adam Barth.

        Provide a way to get ScriptState for the inspected page.

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

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::mainWorldScriptState):
        * bindings/v8/ScriptController.h:
        * bindings/v8/ScriptState.cpp:
        (WebCore::scriptStateFromPage):

2009-12-01  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        Changed mallocs to fastMallocs and frees to fastFrees in GraphicsContext3D. Also added error returns
        https://bugs.webkit.org/show_bug.cgi?id=30778

        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        (WebCore::imageToTexture):

2009-12-01  Mads Ager  <ager@chromium.org>

        Reviewed by Eric Seidel.

        [V8] Don't crash in DOMWindow event getter in OOM situations
        https://bugs.webkit.org/show_bug.cgi?id=32017

        Add missing null handle checks in DOMWindow event property
        accessors.  V8Proxy::context(frame) can return a null handle in
        OOM situations either if failing to initialize a context or if an
        OOM is handled gracefully and javascript is disabled.

        No new tests because we don't have a good way to test
        out-of-memory bugs.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):

2009-12-01  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Updated HTMLCanvasElement to accept "experimental-webgl" as the context name.
        https://bugs.webkit.org/show_bug.cgi?id=31672

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):

2009-12-01  Pavel Feldman  <pfeldman@dhcp-172-28-174-220.spb.corp.google.com>

        Not reviewed: chromium build fix, added missing import.

        * inspector/InspectorFrontendHost.cpp:

2009-12-01  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: fix windows build via unexcluding generated files from
        project.

        * WebCore.vcproj/WebCore.vcproj:

2009-12-01  Mark Rowe  <mrowe@apple.com>

        Stop copying IDL files in to the WebCore framework wrapper.

        * WebCore.xcodeproj/project.pbxproj:

2009-12-01  Mark Rowe  <mrowe@apple.com>

        Fix the Tiger build by making the Xcode project compatible with Xcode 2.4.

        This was probably broken by hand-editing the project file as Xcode itself
        knows how to keep project files to a backwards-compatible subset of its format.

        * WebCore.xcodeproj/project.pbxproj:

2009-12-01  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: windows build fix (bad vcproj in r51528).

        * WebCore.vcproj/WebCore.vcproj:

2009-11-27  Pavel Feldman  <pfeldman@dhcp-172-28-174-220.spb.corp.google.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Split InspectorBackend into three parts: backend,
        injected script host and frontend host.
        
        https://bugs.webkit.org/show_bug.cgi?id=31888

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSInspectorBackendCustom.cpp: Removed.
        * bindings/js/JSInspectorFrontendHostCustom.cpp: Added.
        (WebCore::JSInspectorFrontendHost::search):
        (WebCore::JSInspectorFrontendHost::setting):
        (WebCore::JSInspectorFrontendHost::setSetting):
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/js/ScriptObject.h:
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/v8/ScriptObject.h:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8InspectorBackendCustom.cpp: Removed.
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        * inspector/InjectedScriptHost.cpp: Added.
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        (WebCore::InjectedScriptHost::~InjectedScriptHost):
        (WebCore::InjectedScriptHost::copyText):
        (WebCore::InjectedScriptHost::nodeForId):
        (WebCore::InjectedScriptHost::wrapObject):
        (WebCore::InjectedScriptHost::unwrapObject):
        (WebCore::InjectedScriptHost::pushNodePathToFrontend):
        (WebCore::InjectedScriptHost::addNodesToSearchResult):
        (WebCore::InjectedScriptHost::currentCallFrame):
        (WebCore::InjectedScriptHost::databaseForId):
        (WebCore::InjectedScriptHost::selectDatabase):
        (WebCore::InjectedScriptHost::selectDOMStorage):
        (WebCore::InjectedScriptHost::reportDidDispatchOnInjectedScript):
        (WebCore::InjectedScriptHost::inspectorDOMAgent):
        (WebCore::InjectedScriptHost::inspectorFrontend):
        * inspector/InjectedScriptHost.h: Added.
        (WebCore::InjectedScriptHost::create):
        (WebCore::InjectedScriptHost::inspectorController):
        (WebCore::InjectedScriptHost::disconnectController):
        * inspector/InjectedScriptHost.idl: Added.
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::InspectorBackend):
        (WebCore::InspectorBackend::storeLastActivePanel):
        (WebCore::InspectorBackend::toggleNodeSearch):
        (WebCore::InspectorBackend::resourceTrackingEnabled):
        (WebCore::InspectorBackend::debuggerEnabled):
        (WebCore::InspectorBackend::enableDebugger):
        (WebCore::InspectorBackend::disableDebugger):
        (WebCore::InspectorBackend::addBreakpoint):
        (WebCore::InspectorBackend::updateBreakpoint):
        (WebCore::InspectorBackend::removeBreakpoint):
        (WebCore::InspectorBackend::pauseInDebugger):
        (WebCore::InspectorBackend::resumeDebugger):
        (WebCore::InspectorBackend::stepOverStatementInDebugger):
        (WebCore::InspectorBackend::stepIntoStatementInDebugger):
        (WebCore::InspectorBackend::stepOutOfFunctionInDebugger):
        (WebCore::InspectorBackend::pauseOnExceptions):
        (WebCore::InspectorBackend::setPauseOnExceptions):
        (WebCore::InspectorBackend::profilerEnabled):
        (WebCore::InspectorBackend::enableProfiler):
        (WebCore::InspectorBackend::disableProfiler):
        (WebCore::InspectorBackend::startProfiling):
        (WebCore::InspectorBackend::stopProfiling):
        (WebCore::InspectorBackend::getProfileHeaders):
        (WebCore::InspectorBackend::getProfile):
        (WebCore::InspectorBackend::currentCallFrame):
        (WebCore::InspectorBackend::highlightDOMNode):
        (WebCore::InspectorBackend::hideDOMNodeHighlight):
        (WebCore::InspectorBackend::getCookies):
        (WebCore::InspectorBackend::deleteCookie):
        (WebCore::InspectorBackend::didEvaluateForTestInFrontend):
        (WebCore::InspectorBackend::nodeForId):
        * inspector/InspectorBackend.h:
        (WebCore::InspectorBackend::create):
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::inspectorFrontendHost):
        (WebCore::InspectorController::injectedScriptHost):
        * inspector/InspectorFrontendHost.cpp: Added.
        (WebCore::InspectorFrontendHost::InspectorFrontendHost):
        (WebCore::InspectorFrontendHost::~InspectorFrontendHost):
        (WebCore::InspectorFrontendHost::loaded):
        (WebCore::InspectorFrontendHost::attach):
        (WebCore::InspectorFrontendHost::detach):
        (WebCore::InspectorFrontendHost::closeWindow):
        (WebCore::InspectorFrontendHost::windowUnloading):
        (WebCore::InspectorFrontendHost::setAttachedWindowHeight):
        (WebCore::InspectorFrontendHost::moveWindowBy):
        (WebCore::InspectorFrontendHost::localizedStringsURL):
        (WebCore::InspectorFrontendHost::hiddenPanels):
        (WebCore::InspectorFrontendHost::platform):
        (WebCore::InspectorFrontendHost::port):
        (WebCore::InspectorFrontendHost::addResourceSourceToFrame):
        (WebCore::InspectorFrontendHost::addSourceToFrame):
        * inspector/InspectorFrontendHost.h: Added.
        (WebCore::InspectorFrontendHost::create):
        (WebCore::InspectorFrontendHost::inspectorController):
        (WebCore::InspectorFrontendHost::disconnectController):
        * inspector/InspectorFrontendHost.idl: Added.
        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint.prototype.set condition):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane.prototype.addBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype.removeBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype._breakpointEnableChanged):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.clearMessages):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._deleteCookieCallback):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.getChildNodesAsync):
        (WebInspector.DOMAgent.prototype.setAttributeAsync):
        (WebInspector.DOMAgent.prototype.removeAttributeAsync):
        (WebInspector.DOMAgent.prototype.setTextNodeValueAsync):
        (WebInspector.Cookies.getCookiesAsync):
        (WebInspector.EventListeners.getEventListenersForNodeAsync):
        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorage.prototype.getEntries):
        (WebInspector.DOMStorage.prototype.setItem):
        (WebInspector.DOMStorage.prototype.removeItem):
        * inspector/front-end/Database.js:
        (WebInspector.Database.prototype.getTableNames):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel.prototype.hide):
        (WebInspector.ElementsPanel.prototype.reset):
        (WebInspector.ElementsPanel.prototype.handleCopyEvent):
        (WebInspector.ElementsPanel.prototype._nodeSearchButtonClicked):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.set focusedDOMNode.restoreHighlightToHoveredNode):
        (WebInspector.ElementsTreeOutline.prototype.set focusedDOMNode):
        ():
        * inspector/front-end/EventListenersSidebarPane.js:
        (WebInspector.EventListenersSidebarPane.prototype):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript._evaluateAndWrap):
        (InjectedScript.performSearch.addNodesToResults):
        (InjectedScript.getCallFrames):
        (InjectedScript._callFrameForId):
        (InjectedScript._clearConsoleMessages):
        (InjectedScript._inspectObject):
        (InjectedScript._copy):
        (InjectedScript._ensureCommandLineAPIInstalled):
        (InjectedScript._window):
        (InjectedScript._nodeForId):
        (InjectedScript._objectForId):
        (InjectedScript.pushNodeToFrontend):
        (InjectedScript.executeSql):
        (InjectedScript.executeSql.errorCallback):
        (InjectedScript.executeSql.queryTransaction):
        * inspector/front-end/InjectedScriptAccess.js:
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.methodName):
        (InjectedScriptAccess._installHandler):
        * inspector/front-end/InspectorBackendStub.js: Added.
        (.WebInspector.InspectorBackendStub):
        (.WebInspector.InspectorBackendStub.prototype.wrapCallback):
        (.WebInspector.InspectorBackendStub.prototype.platform):
        (.WebInspector.InspectorBackendStub.prototype.port):
        (.WebInspector.InspectorBackendStub.prototype.closeWindow):
        (.WebInspector.InspectorBackendStub.prototype.attach):
        (.WebInspector.InspectorBackendStub.prototype.detach):
        (.WebInspector.InspectorBackendStub.prototype.storeLastActivePanel):
        (.WebInspector.InspectorBackendStub.prototype.clearMessages):
        (.WebInspector.InspectorBackendStub.prototype.searchingForNode):
        (.WebInspector.InspectorBackendStub.prototype.search):
        (.WebInspector.InspectorBackendStub.prototype.toggleNodeSearch):
        (.WebInspector.InspectorBackendStub.prototype.setAttachedWindowHeight):
        (.WebInspector.InspectorBackendStub.prototype.moveByUnrestricted):
        (.WebInspector.InspectorBackendStub.prototype.addResourceSourceToFrame):
        (.WebInspector.InspectorBackendStub.prototype.addSourceToFrame):
        (.WebInspector.InspectorBackendStub.prototype.getResourceDocumentNode):
        (.WebInspector.InspectorBackendStub.prototype.highlightDOMNode):
        (.WebInspector.InspectorBackendStub.prototype.hideDOMNodeHighlight):
        (.WebInspector.InspectorBackendStub.prototype.inspectedWindow):
        (.WebInspector.InspectorBackendStub.prototype.loaded):
        (.WebInspector.InspectorBackendStub.prototype.localizedStringsURL):
        (.WebInspector.InspectorBackendStub.prototype.windowUnloading):
        (.WebInspector.InspectorBackendStub.prototype.hiddenPanels):
        (.WebInspector.InspectorBackendStub.prototype.debuggerEnabled):
        (.WebInspector.InspectorBackendStub.prototype.enableResourceTracking):
        (.WebInspector.InspectorBackendStub.prototype.disableResourceTracking):
        (.WebInspector.InspectorBackendStub.prototype.resourceTrackingEnabled):
        (.WebInspector.InspectorBackendStub.prototype.enableDebugger):
        (.WebInspector.InspectorBackendStub.prototype.disableDebugger):
        (.WebInspector.InspectorBackendStub.prototype.addBreakpoint):
        (.WebInspector.InspectorBackendStub.prototype.removeBreakpoint):
        (.WebInspector.InspectorBackendStub.prototype.updateBreakpoint):
        (.WebInspector.InspectorBackendStub.prototype.pauseInDebugger):
        (.WebInspector.InspectorBackendStub.prototype.pauseOnExceptions):
        (.WebInspector.InspectorBackendStub.prototype.setPauseOnExceptions):
        (.WebInspector.InspectorBackendStub.prototype.resumeDebugger):
        (.WebInspector.InspectorBackendStub.prototype.profilerEnabled):
        (.WebInspector.InspectorBackendStub.prototype.enableProfiler):
        (.WebInspector.InspectorBackendStub.prototype.disableProfiler):
        (.WebInspector.InspectorBackendStub.prototype.startProfiling):
        (.WebInspector.InspectorBackendStub.prototype.stopProfiling):
        (.WebInspector.InspectorBackendStub.prototype.getProfileHeaders):
        (.WebInspector.InspectorBackendStub.prototype.getProfile):
        (.WebInspector.InspectorBackendStub.prototype.takeHeapSnapshot):
        (.WebInspector.InspectorBackendStub.prototype.databaseTableNames):
        (.WebInspector.InspectorBackendStub.prototype.stepIntoStatementInDebugger):
        (.WebInspector.InspectorBackendStub.prototype.stepOutOfFunctionInDebugger):
        (.WebInspector.InspectorBackendStub.prototype.stepOverStatementInDebugger):
        (.WebInspector.InspectorBackendStub.prototype.setSetting):
        (.WebInspector.InspectorBackendStub.prototype.dispatchOnInjectedScript):
        (.WebInspector.InspectorBackendStub.prototype.releaseWrapperObjectGroup):
        (.WebInspector.InspectorBackendStub.prototype.setting):
        * inspector/front-end/InspectorControllerStub.js:
        * inspector/front-end/InspectorFrontendHostStub.js: Added.
        (.WebInspector.InspectorFrontendHostStub):
        (.WebInspector.InspectorFrontendHostStub.prototype.platform):
        (.WebInspector.InspectorFrontendHostStub.prototype.port):
        (.WebInspector.InspectorFrontendHostStub.prototype.closeWindow):
        (.WebInspector.InspectorFrontendHostStub.prototype.attach):
        (.WebInspector.InspectorFrontendHostStub.prototype.detach):
        (.WebInspector.InspectorFrontendHostStub.prototype.search):
        (.WebInspector.InspectorFrontendHostStub.prototype.setAttachedWindowHeight):
        (.WebInspector.InspectorFrontendHostStub.prototype.moveWindowBy):
        (.WebInspector.InspectorFrontendHostStub.prototype.addResourceSourceToFrame):
        (.WebInspector.InspectorFrontendHostStub.prototype.addSourceToFrame):
        (.WebInspector.InspectorFrontendHostStub.prototype.loaded):
        (.WebInspector.InspectorFrontendHostStub.prototype.localizedStringsURL):
        (.WebInspector.InspectorFrontendHostStub.prototype.hiddenPanels):
        (.WebInspector.InspectorFrontendHostStub.prototype.setSetting):
        (.WebInspector.InspectorFrontendHostStub.prototype.setting):
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileView):
        (WebInspector.CPUProfileType.prototype.buttonClicked):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._updateInterface):
        (WebInspector.ProfilesPanel.prototype._enableProfiling):
        (WebInspector.ProfilesPanel.prototype._toggleProfiling):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype._toggleLargerResources):
        (WebInspector.ResourcesPanel.prototype._enableResourceTracking):
        (WebInspector.ResourcesPanel.prototype._toggleResourceTracking):
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView.prototype.setupSourceFrameIfNeeded):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.show):
        (WebInspector.ScriptsPanel.prototype.addScript):
        (WebInspector.ScriptsPanel.prototype.attachDebuggerWhenShown):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype.canShowResource):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu):
        (WebInspector.ScriptsPanel.prototype._updatePauseOnExceptionsButton):
        (WebInspector.ScriptsPanel.prototype._updateDebuggerButtons):
        (WebInspector.ScriptsPanel.prototype._enableDebugging):
        (WebInspector.ScriptsPanel.prototype._toggleDebugging):
        (WebInspector.ScriptsPanel.prototype._togglePauseOnExceptions):
        (WebInspector.ScriptsPanel.prototype._togglePause):
        (WebInspector.ScriptsPanel.prototype._stepOverClicked):
        (WebInspector.ScriptsPanel.prototype._stepIntoClicked):
        (WebInspector.ScriptsPanel.prototype._stepOutClicked):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.setupSourceFrameIfNeeded):
        (WebInspector.SourceView.prototype.performSearch.findSearchMatches):
        (WebInspector.SourceView.prototype.performSearch):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._changeColorFormat):
        * inspector/front-end/TestController.js:
        (WebInspector.TestController.prototype.notifyDone):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._toggleTimelineButtonClicked):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):
        (WebInspector.WatchExpressionsSection.prototype.loadSavedExpressions):
        (WebInspector.WatchExpressionsSection.prototype.saveExpressions):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.pendingDispatches.0.get platform):
        (WebInspector.get port):
        (WebInspector.set currentPanel):
        (WebInspector._createPanels):
        (WebInspector._loadPreferences):
        (WebInspector.set attached):
        (WebInspector._updateHoverHighlight):
        (WebInspector.loaded):
        (windowLoaded):
        (WebInspector.windowUnload):
        (WebInspector.close):
        (WebInspector.toolbarDrag):
        (WebInspector.UIString):

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

        Reviewed by Dan Bernstein.

        css2.1/t1205-c566-list-stl-00-e-ag.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=23264
        css2.1/t1205-c565-list-pos-00-b.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=23263

        Ignore whitespaces after list markers.
        Rendering of this was already done for the case where inside=false.
        This fixes the rendering of inside=true case and calcInlinePrefWidths.

        Test: fast/lists/calc-width-with-space.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcInlinePrefWidths):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2009-11-30  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed Chromium build fix introduced by r51212

        Fix scriptStateFromNode and ScriptStateFromPage to take DOMWrapperWorld
        as the first argument.
        Move mainThreadNormalWorld() to ScriptState.{h,cpp}.
        Add debuggerWorld() and pluginWorld() in ScriptState.h.

        * bindings/v8/ScriptController.cpp:
        * bindings/v8/ScriptController.h:
        * bindings/v8/ScriptState.cpp:
        (WebCore::scriptStateFromNode):
        (WebCore::scriptStateFromPage):
        (WebCore::mainThreadNormalWorld):
        * bindings/v8/ScriptState.h:
        (WebCore::debuggerWorld):
        (WebCore::pluginWorld):

2009-11-30  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Can focus but not type into content editable block that contains only non-editable content.
        <rdar://problem/5982901>
        https://bugs.webkit.org/show_bug.cgi?id=31750
        
        The goal is to change the way we choose a visible position
        after hit detection, by preferring a visually equivalent editable
        position if available. By doing this, it is possible to add content
        to an editable block that initially contains only non editable elements.

        Test: editing/selection/mixed-editability-10.html

        * WebCore.base.exp: Changed to match the new signature of downstream
        and upstream in the Position class.
        * dom/Position.cpp:
        (WebCore::Position::atEditingBoundary): Added.
        (WebCore::Position::upstream): Modified to allow to cross the boundary
        between editable and non editable content if required.
        (WebCore::Position::downstream): Modified to allow to cross the boundary
        between editable and non editable content if required.
        (WebCore::Position::isCandidate): Modified to qualify as candidates positions
        that are at the editability boundary.
        (WebCore::Position::getInlineBoxAndOffset): Modified to retrieve the inline box
        to be used in calculating the caret rectangle.
        * dom/Position.h:
        (WebCore::Position::):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::atEditingBoundary): Added.
        (WebCore::PositionIterator::isCandidate): Modified to qualify as candidates positions
        that are at the editability boundary.
        * dom/PositionIterator.h:
        * editing/htmlediting.cpp:
        (WebCore::firstEditablePositionAfterPositionInRoot): Modified to accept not only
        descendants of the editable container, but the container itself.
        (WebCore::lastEditablePositionBeforePositionInRoot): Modified to accept not only
        descendants of the editable container, but the container itself.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createVisiblePosition): Added logic to prefer an editable position,
        if available.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::isAllCollapsibleWhitespace): Added.
        * rendering/RenderText.h:

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

        wx build fix, add header needed for wx build.

        * css/CSSFontFaceSrcValue.cpp:

2009-11-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by David Kilzer.

        <rdar://problem/7424387> WebCore binary missing symbols when built for x86_64 from a machine that cannot run x86_64 binaries

        The check for whether WTF_USE_PLUGIN_HOST_PROCESS is defined occurs under the native architecture of the build machine.
        If that is 32-bit then WTF_USE_PLUGIN_HOST_PROCESS will not be defined.  We work around this by forcing the check to
        be performed against the x86_64 architecture.

        * DerivedSources.make:

2009-11-30  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver Hunt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=32000 Crash in 
        Safari caused by extreme column-gap and column-width values 
        -and corresponding-
        <rdar://problem/7425433>

        Prevent desiredColumnCount from being less than 1 since it is used 
        as a divisor.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcColumnWidth):

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

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=31659
        Connection must be closed in case of Web Socket handshake error

        The network connection was closed, but the close event wasn't dispatched.

        Tested by websocket/tests/handshake-error.html, which is un-skipped now.

        * platform/network/cf/SocketStreamHandleCFNet.cpp: (WebCore::SocketStreamHandle::platformClose):
        Call client didHandle() method. This looks strange in CFNetwork implementation, because
        it's the client that asked to close the stream, so it shouldn't need the callback. It makes
        more sense in cross-process implementation, because closing is async there.

2009-11-30  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 31859 - Make world selection for JSC IsolatedWorlds automagical.

        WebCore presently has to explicitly specify the world before entering into JSC,
        which is a little fragile (particularly since property access via a
        getter/setter might invoke execution). Instead derive the current world from
        the lexical global object.

        Remove the last uses of mainThreadCurrentWorld(), so the world is always obtained via
        currentWorld().  Switch this to obtain the world from the ExecsState's lexical global
        object instead.  Remove the call/construct/evaluate 'InWorld' methods, since these
        are no longer necessary.

        * WebCore.base.exp:
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCallbackData.h:
        (WebCore::JSCallbackData::JSCallbackData):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::currentWorld):
        (WebCore::mainThreadNormalWorld):
        * bindings/js/JSDOMBinding.h:
        (WebCore::WebCoreJSClientData::WebCoreJSClientData):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::updateDocument):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        (WebCore::JSEventListener::reportError):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::open):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::construct):
        (WebCore::JSQuarantinedObjectWrapper::call):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::initScript):
        (WebCore::ScriptController::updateDocument):
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call):
        (WebCore::ScriptFunctionCall::construct):
        * bindings/js/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * bindings/js/ScriptState.cpp:
        (WebCore::scriptStateFromNode):
        (WebCore::scriptStateFromPage):
        * bindings/js/ScriptState.h:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_Construct):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        * dom/NodeFilter.h:
        (WebCore::NodeFilter::acceptNode):
        * dom/NodeIterator.h:
        (WebCore::NodeIterator::nextNode):
        (WebCore::NodeIterator::previousNode):
        * dom/TreeWalker.h:
        (WebCore::TreeWalker::parentNode):
        (WebCore::TreeWalker::firstChild):
        (WebCore::TreeWalker::lastChild):
        (WebCore::TreeWalker::previousSibling):
        (WebCore::TreeWalker::nextSibling):
        (WebCore::TreeWalker::previousNode):
        (WebCore::TreeWalker::nextNode):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::didEvaluateForTestInFrontend):
        * inspector/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::evaluate):

2009-11-30  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        All HTML5 media element events should be regular events
        https://bugs.webkit.org/show_bug.cgi?id=30513

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::selectMediaResource):
        (WebCore::HTMLMediaElement::noneSupported):
        (WebCore::HTMLMediaElement::mediaEngineError):
        (WebCore::HTMLMediaElement::setNetworkState):
        (WebCore::HTMLMediaElement::userCancelledLoad):
            Call scheduleEvent instead of scheduleProgressEvent.
        (WebCore::HTMLMediaElement::progressEventTimerFired):
            Call scheduleEvent instead of scheduleProgressEvent. Call renderer->updateFromElement
            after scheduling a 'progress' event so the controller will update download
            progress indicator.
        * html/HTMLMediaElement.h:
            Remove scheduleProgressEvent prototype.

2009-11-30  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Wrong console output for Regexp escape sequence
        https://bugs.webkit.org/show_bug.cgi?id=31538

        Updated inspector/console-format.html

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.createDividerElement): style issues.
        (WebInspector.ConsoleView.createFilterElement): style issues.
        (WebInspector.ConsoleView): added _customFormatters table.
        (WebInspector.ConsoleView.prototype.updateMessageRepeatCount): style isses.
        (WebInspector.ConsoleView.prototype._incrementErrorWarningCount): style issues.
        (WebInspector.ConsoleView.prototype._format): simplified delegation to formatter logic.
        (WebInspector.ConsoleView.prototype._formatobject):
        (WebInspector.ConsoleView.prototype._formatnode):
        (WebInspector.ConsoleView.prototype._printArray):
        (WebInspector.ConsoleMessage.prototype._format): commented and broke down the algorithm into parts.
        (WebInspector.ConsoleMessage.prototype._formatWithSubstitutionString.append): handle substitution string formatting.
        (WebInspector.ConsoleMessage.prototype._formatIndividualValue): handling individual value formatting.
        (WebInspector.ConsoleCommandResult):
        * inspector/front-end/InjectedScript.js: simplified regex formatting.
        * inspector/front-end/inspector.js:
        (WebInspector.linkifyStringAsFragment): converted new RegExp to literal for performance benefits.
        * inspector/front-end/utilities.js: 
        (Element.prototype.hasStyleClass): update inaccurate comment.
        (String.prototype.trimURL): converted new RegExp to literal for performance benefits.

2009-11-30  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Adam Barth.

        Clean up V8 bindings for CSSStyleDeclaration and CSSVariableDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=31895

        No new tests. This is already covered by:
                fast/dom/CSSStyleDeclaration/css-computed-style-item.html
                fast/dom/CSSStyleDeclaration/css-style-item.html

        * bindings/v8/V8Collection.h:
        (WebCore::collectionStringIndexedPropertyGetter):
        (WebCore::setCollectionStringIndexedGetter):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):

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

        Reviewed by Eric Seidel.

        Adds include of wtf/StdLibExtras.h for DEFINE_STATIC_LOCAL in V8 ScriptController.
        https://bugs.webkit.org/show_bug.cgi?id=31932

        Build fix only, no new tests.

        * bindings/v8/ScriptController.cpp: Modified. Adds include of wtf/StdLibExtras.h.

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

        Reviewed by Eric Seidel.

        Adds PassOwnPtr include to ScriptExecutionContext.h.
        https://bugs.webkit.org/show_bug.cgi?id=31929

        Build fix only, no new tests.

        * dom/ScriptExecutionContext.h: Modified. Adds PassOwnPtr include.

2009-11-30  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        REGRESSION (r49757): masking-mask-01-b.svg rendered incorrectly
        [https://bugs.webkit.org/show_bug.cgi?id=31980]

        It turns out, that we did not handle maskUnits="userSpaceOnUse"
        correctly. We just need to move the context of the maskImage
        if maskContentUnits="objectBoundingBox". The context gets scaled
        on this unit combination, so we have to substract the position of
        the targetRect. On userSpaceOnUse the position just depends on the
        position of the mask element.
        I added a test with some senseless and reasonable values for size
        and postion of the mask and it's contents. I also used every
        combination of maskUnits and maskContentUnits to be sure, that it
        is fixed this time.

        Test: svg/custom/mask-with-all-units.svg

        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):

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

        Reviewed by Eric Seidel.

        Adds ENABLE(INSPECTOR) guards around DOMWindow::inspectorTimelineAgent.
        https://bugs.webkit.org/show_bug.cgi?id=31928

        Build fix only, no new tests.

        * page/DOMWindow.cpp: Modified. Adds ENABLE(INSPECTOR) guards around DOMWindow::inspectorTimelineAgent.

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

        Reviewed by Eric Seidel.

        Adds SHARED_WORKERS guards to V8 WorkerContextExecutionProxy.
        https://bugs.webkit.org/show_bug.cgi?id=31926

        Build fix only, no new tests.

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):
        (WebCore::WorkerContextExecutionProxy::convertToV8Object):
        (WebCore::WorkerContextExecutionProxy::convertEventTargetToV8Object):

2009-11-30  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Chrome::contentsSizeChanged() is called when the content size has not changed
        https://bugs.webkit.org/show_bug.cgi?id=31978

        Do not trigger contentsSizeChaned() is the new size is the same as the old one.

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

2009-11-30  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix some compiler warnings seen on QtWebKit/Mac
        https://bugs.webkit.org/show_bug.cgi?id=31962

        No new tests as there is no functional change.

        * platform/network/ResourceHandle.h: Make destructor virtual as 
        after r50772 ResourceHandle has virtual functions.

        * plugins/mac/PluginPackageMac.cpp: 
        (WebCore::PluginPackage::fetchInfo): Fix typo WTF is a namespace
        not a label

        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded): Add l to the format
        specifier

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

        Reviewed by Gustavo Noronha.

        Add new headers to sources list.

        * GNUmakefile.am:

2009-11-30  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Holger Freyther.

        [Qt] Mac Plugins : Get context menu to work in QGraphicsView
        
        Flash expects the value in record.where to be the global position for
        displaying the context menu.
        
        https://bugs.webkit.org/show_bug.cgi?id=31979

        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::handleMouseEvent):

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

        Reviewed by Eric Seidel.

        Adds PLATFORM(CHROMIUM) guards around memory usage code in V8GCController.
        https://bugs.webkit.org/show_bug.cgi?id=31925

        This code uses ChromiumBridge and Chromium-specific constant values not
        appropriate for other platforms such as Android.

        Build fix only, no new tests.

        * bindings/v8/V8GCController.cpp: Modified. Adds PLATFORM(CHROMIUM) around Chromium-specific code.

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

        Build fix.

        Correct draw signature used in ImageCairoWin.cpp.

        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):

2009-11-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        postMessage should serialize File objects
        https://bugs.webkit.org/show_bug.cgi?id=31955

        Update SerializedScriptValue to include support for
        File objects in the serialized object graph.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValueData::SerializedScriptValueData):
        (WebCore::SerializingTreeWalker::convertIfTerminal):
        (WebCore::DeserializingTreeWalker::convertIfTerminal):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValueData::):
        (WebCore::SerializedScriptValueData::asString):

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

        Reviewed by Dan Bernstein.

        Optimize the hierarchy rebuilding of compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=31879
        
        When updating the compositing layer hierarchy, instead of removing all
        child layers and then re-adding them one by one, build a vector of child
        layers, and set them in one go.
        
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::setChildren): New method that takes a Vector of child
        GraphicsLayers.
        
        * platform/graphics/mac/GraphicsLayerCA.h: Override setChildren().
        * platform/graphics/win/GraphicsLayerCACF.h: Ditto.
        * platform/graphics/mac/GraphicsLayerCA.mm: 
        (WebCore::GraphicsLayerCA::setChildren): Implement setChildren() to 
        set the bit that notes that sublayers changed.
        * platform/graphics/win/GraphicsLayerCACF.cpp:
        (WebCore::GraphicsLayerCACF::setChildren): Implement setChildren() to 
        udpate sublayers, with a note that this is not efficient.
        
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        When updating compositing layers, use the faster updateLayerTreeGeometry() if
        we know that no layer hierarchy changes are needed, and, at the root, use
        the vector returned from rebuildCompositingLayerTree() to attach the root
        layer.
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): Changed to
        collect child layers into Vectors of GraphicsLayers, which can be set as
        layer children in one go.
        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry): Split out from
        rebuildCompositingLayerTree() for simplicity, and called when we just need to
        update layer geometry, without doing any reparenting.

2009-11-29  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

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

        Updated comment to reflect latest XSSAuditor bindings.

        No functionality was changed. So, no new tests.

        * page/XSSAuditor.h:

2009-11-29  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel.

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

        Removes unnecessary #include files.

        No functionality was changed. So, no new tests.

        * css/CSSComputedStyleDeclaration.cpp: Removed include CachedImage.h, and
        Pair.h
        * css/CSSCursorImageValue.cpp: Removed include RenderStyle.h
        * css/CSSFontFaceSrcValue.cpp: Removed include Node.h
        * css/CSSFontSelector.cpp: Removed include NodeList.h
        * css/CSSGradientValue.cpp: Removed include GraphicsContext.h, ImageBuffer.h
        * css/CSSImageValue.cpp: Removed include RenderStyle.h
        * css/CSSImportRule.cpp: Removed include MediaList.h
        * css/CSSMutableStyleDeclaration.cpp: Removed include CSSProperty.h
        * css/CSSRule.cpp: Removed include CSSStyleSheet.h
        * css/CSSStyleSelector.cpp: Removed include CSSFontFace.h,
        CSSFontFaceSource.h, and CSSProperty.h
        * page/EventSource.h: Removed include EventListener.h

2009-11-29  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel.

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

        Removed #include KeyframeList.h from CSSStyleSelector.h. Instead,
        forward declared it.

        As a side effect, we need to #include KeyframeList.h in
        RenderLayerBacking.cpp.

        No functionality was changed. So, no new tests.

        * css/CSSStyleSelector.cpp:
        * css/CSSStyleSelector.h: Removed #include KeyframeList.h
        * rendering/RenderLayerBacking.cpp: Added #include KeyframeList.h

2009-11-29  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Eric Seidel.

        Continue to search for matching node in the case where multiple nodes
        have the same id.
        https://bugs.webkit.org/show_bug.cgi?id=31428

        Test: fast/dom/Element/id-in-node-list-index01.html

        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeList::itemWithName):

2009-11-29  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel.

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

        Removed #include RenderStyle.h from file KeyframeAnimation.h. Instead,
        forward declared it.

        No functionality was changed. So, no new tests.

        * page/animation/KeyframeAnimation.cpp:
        * page/animation/KeyframeAnimation.h:

2009-11-29  Daniel Bates  <dbates@webkit.org>

        Unreviewed, fix change log entry date.

        For some reason, bugzilla-tool did not update the date in the change
        log entry for my last commit (r51468). So, this commit fixes the date
        of that entry.

2009-11-29  Daniel Bates  <dbates@webkit.org>

        Reviewed by Dan Bernstein.

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

        Removed #include StringImpl, StyleImage. Instead, forward declared them.
        Also, we can substitute #include <wtf/PassRefPtr.h> for #include PlatformString.h,
        since it seems we only really used it to include PassRefPtr.h.

        No functionality was changed. So, no new tests.

        * rendering/style/ContentData.h:

2009-11-29  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Eric Seidel.

        Allow custom memory allocation control for classes of the rendering and storage directory in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=31906

        Inherits the following classes from Noncopyable because these are instantiated
        by 'new' and no need to be copyable:

        class/struct name               - instantiated at: WebCore/'location'

        class SQLTransactionClient      - storage/DatabaseThread.cpp:45
        class SQLTransactionCoordinator - storage/DatabaseThread.cpp:46
        class OriginUsageRecord         - storage/OriginQuotaManager.cpp:66
        class DatabaseTracker           - storage/DatabaseTracker.cpp:62
        class ScrollbarTheme            - (its child class) rendering/RenderScrollbarTheme.cpp:35
        class RenderSelectionInfoBase   - (its child class) rendering/RenderView.cpp:310
        class RenderOverflow            - rendering/RenderBox.cpp:2846

        Inherits the following classes from FastAllocBase because these are instantiated by 'new':

        struct FillLayer                - css/CSSStyleSelector.cpp:197
        struct ShadowData               - rendering/style/ShadowData.cpp:35
        class CounterContent            - css/CSSStyleSelector.cpp:4111

        * platform/ScrollbarTheme.h:
        * rendering/RenderOverflow.h:
        * rendering/RenderSelectionInfo.h:
        * rendering/style/CounterContent.h:
        * rendering/style/FillLayer.h:
        * rendering/style/ShadowData.h:
        * storage/DatabaseTracker.h:
        * storage/OriginUsageRecord.h:
        * storage/SQLTransactionClient.h:
        * storage/SQLTransactionCoordinator.h:

2009-11-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] Sify compose button alerts error
        https://bugs.webkit.org/show_bug.cgi?id=31394

        Test: http/tests/security/calling-versus-current.html

        We're supposed to use the calling context for security checks.  In JSC
        land, this is the lexicalGlobalObject.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::canAccessPrivate):

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

        Unreviewed Chromium build fix introduced by r51428.

        [Chromium] Ignore line-height CSS property for PushButton
        https://bugs.webkit.org/show_bug.cgi?id=31712

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::adjustButtonStyle):

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

        Unreviewed Chromium test fix by reverting r51413.

        [v8] Do not check the thread when accessing DOMDataStore
        https://bugs.webkit.org/show_bug.cgi?id=31877

        * bindings/v8/V8DOMMap.cpp:
        (WebCore::getDOMNodeMap):
        (WebCore::getDOMObjectMap):
        (WebCore::getActiveDOMObjectMap):
        (WebCore::getDOMSVGElementInstanceMap):
        (WebCore::getDOMSVGObjectWithContextMap):

2009-11-27  Daniel Bates  <dbates@webkit.org>

        Unreviewed, comment fix.

        Corrected misspelling of the word "implemented".

        * inspector/front-end/InjectedScriptAccess.js:

2009-11-27  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

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

        Makes the error messages more descriptive when we refuse to load an object/embed or
        refuse to load from the document base URL.

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canLoadObject): Changed console message to be more descriptive.
        (WebCore::XSSAuditor::canSetBaseElementURL): Ditto.

2009-11-27  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        This is a WebCore part of the fix that allows to view plugin
        resources loaded by plugins.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didReceiveContentLength):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::addLength):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didFailToLoad):
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveResponse):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveContentLength):
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):

2009-11-27  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Instead of generating negative identifiers for cached resources in
        InspectorController and extending identifier type from 'unsigned long' to 'long
        long' reuse progress tracker from the inspected page to generate those
        identifiers. It guarantees that InspectorResources have unique ids since
        all of them are generated by that progress tracker.

        Added a couple new overloaded methods to Script* objects that accept
        long and unsigned long arguments. These types of argumens have already
        been passed as long long.

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

        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::appendArgument):
        * bindings/js/ScriptFunctionCall.h:
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptObject::set):
        * bindings/js/ScriptObject.h:
        * bindings/v8/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::appendArgument):
        * bindings/v8/ScriptFunctionCall.h:
        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptObject::set):
        * bindings/v8/ScriptObject.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::getTrackedResource):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache): Use inspected page's ProgressTracker to generate unique identifiers for cached resources in InspectorController.
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addResource):
        (WebCore::InspectorFrontend::updateResource):
        (WebCore::InspectorFrontend::removeResource):
        (WebCore::InspectorFrontend::updateFocusedNode):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::InspectorResource::createCached):
        * inspector/InspectorResource.h: Change InspectorResource identifier type from 'long long' to 'unsigned long'.
        (WebCore::InspectorResource::create):
        (WebCore::InspectorResource::identifier):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createResourceSendRequestRecord):
        (WebCore::TimelineRecordFactory::createResourceReceiveResponseRecord):
        (WebCore::TimelineRecordFactory::createResourceFinishRecord):

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

        Reviewed by Dan Bernstein.

        Assertion failure in RenderBlock::positionForPointWithInlineChildren when running fast/inline/relative-positioned-overflow.html
        https://bugs.webkit.org/show_bug.cgi?id=29966

        When an empty inline element is clicked, the root inline box has
        no leaf children. Use the renderer of a normal child instead.

        This change resolves Windows port's assertion failure in a layout test.
        Also, this fixes the behavior when a user drags the mouse from an
        empty inline element to above texts.

        Test: editing/selection/last-empty-inline.html

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

2009-11-26  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        [Chromium] Ignore line-height CSS property specified to push buttons on
        Windows and Linux.
        https://bugs.webkit.org/show_bug.cgi?id=31712

        LayoutTests/fast/forms/control-restrict-line-height.html checks that the
        following controls should ignore line-height CSS property.
         - <select>
         - <input type=button>
         - <input type=search>
        This change addresses the <input type=button> issue with Chromium/Windows
        and Chromium/Linux.
        
        * rendering/RenderThemeChromiumSkia.cpp: Implement adjustButtonStyle() to ignore line-height.
        * rendering/RenderThemeChromiumSkia.h: Declare adjustButtonStyle().

2009-11-26  Kinuko Yasuda  <kinuko@chromium.com>

        Reviewed by Eric Seidel.

        Remove the special charset meta tag in the clipboard so that
        copy-and-paste with interchange breaklines/spaces works correctly
        within WebKit.

        No new tests.  Layout tests that involve copy-and-paste with
        interchange breaklines (like editing/pasteboard/paste-line-endings-00?)
        should pass on Mac/Chromium with this fix.

        * platform/chromium/ClipboardChromium.cpp:
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::documentFragment):

2009-11-26  İsmail Dönmez  <ismail@namtrac.org>

        Reviewed by Eric Seidel.

        Compile with QT_NO_WHEELEVENT defined.

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

2009-11-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Oliver Hunt.

        Move GOwnPtr* from wtf to wtf/gtk
        https://bugs.webkit.org/show_bug.cgi?id=31793

        No new tests as there is no functional change.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp: Change the
          path for GOwnPtr.h.
        * platform/text/TextEncoding.cpp: Ditto.
        * platform/text/gtk/TextCodecGtk.cpp: Ditto.

2009-11-26  Yury Semikhatsky  <yurys@chromium.org>

        Not reviewed. Build fix: revert r51421.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didReceiveContentLength):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::addLength):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didFailToLoad):
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveResponse):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveContentLength):
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):

2009-11-26  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        This is a WebCore part of the fix that allows to view plugin
        resources loaded by plugins.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didReceiveContentLength):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        * inspector/InspectorController.h: Remove unused DocumentLoader parameters from inspector methods.
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::addLength): Update loading end time when new data are received.
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didFailToLoad): Notify InspectorController about the failure.
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveResponse):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveContentLength):
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):

2009-11-26  Daniel Bates  <dbates@webkit.org>

        Reviewed by Pavel Feldman.

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

        Implements support for hovering over <img> src to display the height and width of that image
        in a tooltip. Displays both the displayable and natural dimensions of the image.

        Test: inspector/elements-img-tooltip.html

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.createTooltipForImageNode): Added.
        (WebInspector.ElementsTreeElement.prototype._updateTitle.callback):
        (WebInspector.ElementsTreeElement.prototype._updateTitle):
        (WebInspector.ElementsTreeElement.prototype._nodeTitleInfo):
        * inspector/front-end/ObjectProxy.js:
        (WebInspector.ObjectProxy.getPropertiesAsync): Added.
        * inspector/front-end/inspector.js:
        (WebInspector.linkifyURLAsNode): Added tooltipText argument.
        (WebInspector.linkifyURL): Ditto.

2009-11-26  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix after drawPattern API change.

        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::Image::drawPattern):

2009-11-26  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Use an internal field instead of hidden property to speedup lookup
        of entered isolated world.

        Plus some inlinings.
        https://bugs.webkit.org/show_bug.cgi?id=31884

        Covered by layout tests + manual running of some benchmarks as
        content scripts.

        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::setDOMWrapper):
        * bindings/v8/V8HiddenPropertyName.h:
        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::V8IsolatedWorld):
        * bindings/v8/V8IsolatedWorld.h:
        (WebCore::V8IsolatedWorld::getEntered):
        (WebCore::V8IsolatedWorld::getGlobalObject):
        * bindings/v8/custom/V8CustomBinding.h:

2009-11-26  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Corrects build break on Windows.

        Rename platform/text/qt/TextBoundaries.cpp to TextBoundariesQt.cpp since
        platform/text/TextBoundaries.cpp was compiled instead when compiling with nmake.

        * WebCore.pro:
        * platform/text/qt/TextBoundariesQt.cpp: Renamed from WebCore/platform/text/qt/TextBoundaries.cpp.
        (WebCore::findNextWordFromIndex):
        (WebCore::findWordBoundary):

2009-11-26  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Do not check if the thread is main or not when accessing DOMDataStore as currently in Chromium WebKit is used in main thread only.
        https://bugs.webkit.org/show_bug.cgi?id=31877

        Covered by layout tests and buildbots.

        * bindings/v8/V8DOMMap.cpp:
        (WebCore::getDOMNodeMap):
        (WebCore::getDOMObjectMap):
        (WebCore::getActiveDOMObjectMap):
        (WebCore::getDOMSVGElementInstanceMap):
        (WebCore::getDOMSVGObjectWithContextMap):

2009-11-26  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Holger Freyther.

        [Qt] Mac Plugins : Pass mouse position relative to the fake window
        
        When using off-screen rendering, we need to pass mouse events relative
        to the fake window instead of the global position.
        
        https://bugs.webkit.org/show_bug.cgi?id=31794

        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::handleMouseEvent):

2009-11-24  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Eric Seidel.

        [Qt] Use QNetworkReply::rawHeaderPairs
        https://bugs.webkit.org/show_bug.cgi?id=31826

        The QNetworkReply is internally storing the HTTP headers
        as a list of pairs. Currently we have to ask the QNetworkReply
        to put all header names into a QStringList. Afterwards we will
        iterate over this QStringList and ask the QNetworkReply to
        give us the value for this header name. The current Qt implementation
        is doing a linear to find the header value.

        Use a new API to directly access the list of pairs and push
        this into WebCore. This avoids doing some allocations and doing
        linear searches from within a loop.

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

2009-11-21  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add Qt specific information of RenderPart
        https://bugs.webkit.org/show_bug.cgi?id=31203

        The WebCore::Widget of the RenderPart (RenderWidget) might be
        backed with a platform widget. Print both the WebCore::Widget
        and platform widget state. In the above bug we had a problem
        that the WebCore::Widget was invisible but the QWidget was
        visible.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::operator<<): Add special case for RenderPart

2009-11-17  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Call Widget::setSelfVisible from hide/show
        https://bugs.webkit.org/show_bug.cgi?id=31203

        Call Widget::setSelfVisible from Widget::show and
        Widget::hide and use isParentVisible to decide
        if the widget should be shown. This way client
        code can rely on isVisible.

        Change PluginViewQt::show, PluginViewQt::hide to
        call the base class as it is doing the right thing
        now. Add an assert verify that platfomWidget and
        platformPluginWidget are the same.

        * manual-tests/qt/qtplugin.html: Modify manual test
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):

2009-11-24  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Alexey Proskuryakov.

        Fix compilation of REQUEST_DEBUG debug code
        https://bugs.webkit.org/show_bug.cgi?id=31850

        In r47907 the single parameter KURL constructor to parse
        from a WebCore::String was replaced with a two parameter
        constructor. I think in this debug case parsing the urls
        again is no problem and I have changed the code to use the
        two parameter version.

        * loader/loader.cpp:
        (WebCore::Loader::Host::didFinishLoading):

2009-11-26  Søren Gjesse  <sgjesse@chromium.org>

        Reviewed by Pavel Feldman.

        [V8] Avoid using JavaScript objects as context data
        https://bugs.webkit.org/show_bug.cgi?id=31873

        Change the context "data" from a JavaScript object holding the two properties type and value to
        a string holding type and value separated by a comma.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setInjectedScriptContextDebugId):
        (WebCore::V8Proxy::setContextDebugId):
        (WebCore::V8Proxy::contextDebugId):

2009-11-25  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by David Levin.

        [Chromium] Implement canSetValueAttribute in the API, the clean-up part.
        https://bugs.webkit.org/show_bug.cgi?id=31894

        * accessibility/chromium/AccessibilityObjectWrapper.h: Added RefCounted decl.
        (WebCore::AccessibilityObjectWrapper::AccessibilityObjectWrapper): Removed mis-refcountingness.

2009-11-25  Kenneth Russell  <kbr@google.com>

        Reviewed by Oliver Hunt.

        Off-by-one error in index validation for drawElements and drawArrays
        https://bugs.webkit.org/show_bug.cgi?id=31891

        Fixed computation of number of elements for bound array objects.

        Test: fast/canvas/webgl/index-validation.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::vertexAttribPointer):

2009-11-25  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Update SharedScript to use eventNames() instead of EventNames()
        https://bugs.webkit.org/show_bug.cgi?id=31890

        * SharedScript/WebKitSharedScript.cpp:
        (WebCore::LoadEventTask::performTask):

2009-11-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7409331> Windows: Support closed caption in <video> element

        Enable closed captions in QuickTime/Windows media engine.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::hasClosedCaptions):
        (WebCore::MediaPlayerPrivate::setClosedCaptionsVisible):
            New, all through to m_qtMovie.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
            Make all but the destructor private since MediaPlayer call through the media
            engine interface.

        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::disableUnsupportedTracks):
            Use handy new constants for QuickTime track types.
        (QTMovieWin::hasClosedCaptions):
        (QTMovieWin::setClosedCaptionsVisible):
            New, closed caption support.
        * platform/graphics/win/QTMovieWin.h:

        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart):
            Deal with closed caption buttons.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::shouldRenderMediaControlPart):
            New, don't ask the media engine if it has closed captions unless the Safari theme will
            be able to render the button.
        (WebCore::RenderThemeWin::paintMediaToggleClosedCaptionsButton):
            New.
        * rendering/RenderThemeWin.h:

2009-11-25  Drew Wilson  <atwilson@chromium.org>

        Reviewed by David Levin.

        MessagePorts always look remotely entangled even when closed.
        https://bugs.webkit.org/show_bug.cgi?id=31698

        Tests: Existing tests suffice, Chromium soak test passes now.

        * bindings/v8/custom/V8CustomBinding.h:
        Removed kMessagePortEntangledPortIndex which is no longer used.
        * bindings/v8/V8GCController.cpp:
        (WebCore::GCPrologueVisitor::visitDOMWrapper):
        Simplified GC code to reflect the Chromium MessagePort implementation
        (locallyEntangledPort() always returns false).
        (WebCore::GCEpilogueVisitor::visitDOMWrapper):
        Cleaned up epilogue code to handle the case where the port gets closed
        in mid-GC (due to the parent context being freed).
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::MessagePort):
        (WebCore::MessagePort::close):
        Now sets the closed flag.
        (WebCore::MessagePort::disentanglePorts):
        Updated to use new isCloned() API instead of relying on isEntangled(), which was incorrect.
        * dom/MessagePort.h:
        Added a m_closed flag and updated isEntangled() to check it.
        (WebCore::MessagePort::isEntangled):
        Now returns false if the port has been closed.
        (WebCore::MessagePort::isCloned):
        Added new API to differentiate between cloned and closed ports (closed ports can still be passed to postMessage).

2009-11-25  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix crash of QtWebKit on any page with Flash when compiled with MinGW.

        Fix inline assembly, don't dereference the function pointer twice.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::hookedBeginPaint):
        (WebCore::PluginView::hookedEndPaint):

2009-11-22  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Adam Barth.

        [Qt] Remove the Referer header when redirecting to a non-secure site
        https://bugs.webkit.org/show_bug.cgi?id=31785

        This makes Qt pass two tests introduced in r50226.

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

2009-11-25  Andrei Popescu  <andreip@google.com>

        Reviewed by Dimitri Glazkov.

        The select elements do not reflect the actual choice the user makes.
        https://bugs.webkit.org/show_bug.cgi?id=31831

        Handle the drawing of the listboxes in Android code.

        No new features, just fixing an Android problem. Existing layout tests are sufficient.

        * platform/android/RenderThemeAndroid.cpp:
        (WebCore::theme):
        (WebCore::RenderThemeAndroid::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeAndroid::platformActiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeAndroid::platformInactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeAndroid::platformActiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeAndroid::platformInactiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeAndroid::adjustButtonStyle):
        (WebCore::RenderThemeAndroid::paintTextArea):
        (WebCore::RenderThemeAndroid::adjustListboxStyle):
        * platform/android/RenderThemeAndroid.h:

2009-11-25  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Load InspectorResource mime type from CachedResource for 304 responses

        For network libraries that do not merge cache data into 304 ResourceResponses,
        the mime type for cached resources is unknown.
        https://bugs.webkit.org/show_bug.cgi?id=31868

        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateResponse):
        (WebCore::InspectorResource::updateScriptObject):
        (WebCore::InspectorResource::type):

2009-11-25  Andrei Popescu  <andreip@google.com>

        Reviewed by Eric Seidel.

        Android is missing implementation of SSL Key generator functions.
        https://bugs.webkit.org/show_bug.cgi?id=31825

        This change adds the PlatformBridge class to platform/android.
        PlarformBridge is used to access the embedding layer for things
        such as key generator, cookies, plugins, etc.

        No new tests required, this is platform code.

        * platform/android/PlatformBridge.h: Added.
        * platform/android/SSLKeyGeneratorAndroid.cpp: Added.
        (WebCore::getSupportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):

2009-11-25  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] use gst_init_check() instead of gst_init()
        https://bugs.webkit.org/show_bug.cgi?id=31864

        Use gst_init_check() instead of gst_init() to prevent eventual
        unexpected exit of the application.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::do_gst_init):
        (WebCore::MediaPlayerPrivate::isAvailable):

2009-11-25  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Some tests are crashing from time to time
        https://bugs.webkit.org/show_bug.cgi?id=31866

        Make sure we do not notify the client of a finished load, if the
        load has been cancelled, or the client is gone.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::):

2009-11-24  Ben Murdoch  <benm@google.com>

        Reviewed by Eric Seidel.

        [Android] Upstream Android changes to WebCore/bridge/jni
        https://bugs.webkit.org/show_bug.cgi?id=31824

        No new tests required as no new functionality.

        * bridge/jni/jni_class.cpp:
        (JavaClass::JavaClass): Add calls to delete allocated references, to avoid potential leaks.
        * bridge/jni/jni_instance.cpp: Add an Android include path.
        * bridge/jni/jni_instance.h: Add getter/setter for JObjectWrapper::_instance and make the JavaInstance ctor and member variables protected. Both needed for the Android port, see bug for discussion.
        (JSC::Bindings::JObjectWrapper::instance): Added.
        (JSC::Bindings::JObjectWrapper::setInstance): Added.
        * bridge/jni/jni_runtime.cpp:
        (JavaMethod::JavaMethod): Delete an allocated reference to avoid a potential leak.
        * bridge/jni/jni_utility.h:
        (JSC::Bindings::callJNIMethodV): Delete an allocated reference to avoid a potential leak.

2009-11-24  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Eric Seidel.

        Allow custom memory allocation control for classes of the plugins and rendering directory in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=31827

        Inherits the following classes from Noncopyable because these are instantiated
        by 'new' and no need to be copyable:

        class/struct name               - instantiated at: WebCore/'location'

        class PluginRequest             - plugins/PluginView.cpp:521
        class PluginMainThreadScheduler - plugins/PluginMainThreadScheduler.cpp:34
        class PluginDatabase            - plugins/PluginDatabase.cpp:50
        struct MimeClassInfo            - plugins/PluginInfoStore.cpp:50
        struct PluginInfo               - plugins/PluginInfoStore.cpp:40
        class RenderArena               - dom/Document.cpp:1401
        class RenderImageScaleData      - rendering/RenderImage.cpp:149
        class TableLayout               - (its child class) rendering/RenderTable.cpp:82
        struct ColumnInfo               - rendering/RenderBlock.cpp:3590
        struct FloatingObject           - rendering/RenderBlock.cpp:2300
        struct MaxMargin                - rendering/RenderBlock.cpp:4794
        class RenderMarquee             - rendering/RenderLayer.cpp:3277

        * plugins/PluginData.h:
        * plugins/PluginDatabase.h:
        * plugins/PluginMainThreadScheduler.h:
        * plugins/PluginView.h:
        * rendering/RenderArena.h:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderImage.cpp:
        * rendering/RenderMarquee.h:
        * rendering/TableLayout.h:

2009-11-24  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Initial implementation of WebKitSharedScript and SharedScriptContext
        https://bugs.webkit.org/show_bug.cgi?id=31569

        No new tests since there are no bindings yet (soon to come).

        * DerivedSources.make: Add WebKitSharedScript and SharedScriptContext to a list of idl files.
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::detach): Notify WebKitSharedScriptRepository that document is detaching.
        * dom/EventTarget.cpp: Add new casting methods, since the new types are EventTargets.
        (WebCore::EventTarget::toWebKitSharedScript):
        (WebCore::EventTarget::toSharedScriptContext):
        * dom/EventTarget.h: Ditto
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::isSharedScriptContext): New virtual method, since there is a new type of context.

        * SharedScript/SharedScriptContext.cpp: Added. Similar to WorkerContext, but w/o threading.
        (WebCore::SharedScriptContext::SharedScriptContext):
        (WebCore::SharedScriptContext::~SharedScriptContext):
        (WebCore::SharedScriptContext::clearScript):
        (WebCore::SharedScriptContext::virtualURL):
        (WebCore::SharedScriptContext::virtualCompleteURL):
        (WebCore::SharedScriptContext::reportException):
        (WebCore::SharedScriptContext::addMessage):
        (WebCore::SharedScriptContext::resourceRetrievedByXMLHttpRequest):
        (WebCore::SharedScriptContext::scriptImported):
        (WebCore::SharedScriptContext::matches):
        (WebCore::SharedScriptContext::addToDocumentsList):
        (WebCore::SharedScriptContext::destructionTimerFired):
        (WebCore::SharedScriptContext::removeFromDocumentList):
        (WebCore::SharedScriptContext::load):
        (WebCore::SharedScriptContext::postTask):
        (WebCore::SharedScriptContext::eventTargetData):
        (WebCore::SharedScriptContext::ensureEventTargetData):
        (WebCore::SharedScriptContext::scriptExecutionContext):
        * SharedScript/SharedScriptContext.h: Added.
        (WebCore::SharedScriptContext::create):
        (WebCore::SharedScriptContext::isSharedScriptContext):
        (WebCore::SharedScriptContext::userAgent):
        (WebCore::SharedScriptContext::toSharedScriptContext):
        (WebCore::SharedScriptContext::self):
        (WebCore::SharedScriptContext::script):
        (WebCore::SharedScriptContext::loaded):
        (WebCore::SharedScriptContext::name):
        (WebCore::SharedScriptContext::refEventTarget):
        (WebCore::SharedScriptContext::derefEventTarget):
        (WebCore::SharedScriptContext::refScriptExecutionContext):
        (WebCore::SharedScriptContext::derefScriptExecutionContext):
        * SharedScript/SharedScriptContext.idl: Added.

        * SharedScript/SharedScriptController.h: 
        Added. Empty implementation of a ScriptController, will come later as part of bindings. Needed to compile.

        * SharedScript/WebKitSharedScript.cpp: Added. EventTarget-based DOM object.
        (WebCore::WebKitSharedScript::WebKitSharedScript):
        (WebCore::WebKitSharedScript::~WebKitSharedScript):
        (WebCore::WebKitSharedScript::setContext):
        (WebCore::LoadEventTask::create): Fires asynchronous 'load' event when underlying SharedScriptContext is initialized.
        (WebCore::LoadEventTask::performTask):
        (WebCore::LoadEventTask::LoadEventTask):
        (WebCore::WebKitSharedScript::scheduleLoadEvent):
        * SharedScript/WebKitSharedScript.h: Added.
        (WebCore::WebKitSharedScript::create):
        (WebCore::WebKitSharedScript::scriptExecutionContext):
        (WebCore::WebKitSharedScript::toWebKitSharedScript):
        (WebCore::WebKitSharedScript::context):
        (WebCore::WebKitSharedScript::refEventTarget):
        (WebCore::WebKitSharedScript::derefEventTarget):
        (WebCore::WebKitSharedScript::eventTargetData):
        (WebCore::WebKitSharedScript::ensureEventTargetData):
        * SharedScript/WebKitSharedScript.idl: Added.

        * SharedScript/WebKitSharedScriptRepository.cpp: Added. Implements a list of running SharedScriptContexts.
        (WebCore::ScriptLoader::ScriptLoader): The helper class to load an initial script of SharedScriptContext.
        (WebCore::ScriptLoader::load):
        (WebCore::ScriptLoader::notifyFinished):
        (WebCore::WebKitSharedScriptRepository::instance): Repository has a static global instance.
        (WebCore::WebKitSharedScriptRepository::connect):
        (WebCore::WebKitSharedScriptRepository::documentDetached): Called from Document::detach().
        (WebCore::WebKitSharedScriptRepository::removeSharedScriptContext): Called from ~SharedScriptContext().
        (WebCore::WebKitSharedScriptRepository::connectToSharedScript):
        (WebCore::WebKitSharedScriptRepository::getSharedScriptContext):
        * SharedScript/WebKitSharedScriptRepository.h: Added.
        (WebCore::WebKitSharedScriptRepository::WebKitSharedScriptRepository):

2009-11-24  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Eric Seidel.

        Add ENABLE_SHARED_SCRIPT feature define and flag for build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=31444

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * WebCore.pro:

2009-11-24  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Implement accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=27314
        
        This part of the checkin adds the Windows specific GraphicsLayer support files.
        It provides the interface between GraphicsLayer and CACF. It also deals with
        the compositing loop, and provides the plumbing to pass the root layer up to
        WebView.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * page/FrameView.cpp:
        (WebCore::FrameView::syncCompositingStateRecursive):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/win/GraphicsLayerCACF.cpp: Added.
        * platform/graphics/win/GraphicsLayerCACF.h: Added.
        * platform/graphics/win/WKCACFContextFlusher.cpp: Added.
        * platform/graphics/win/WKCACFContextFlusher.h: Added.
        * platform/graphics/win/WKCACFContextFlusherWin.cpp: Added.
        * platform/graphics/win/WKCACFLayer.cpp: Added.
        * platform/graphics/win/WKCACFLayer.h: Added.
        * platform/graphics/win/WKCACFLayerWindow.cpp: Added.
        * platform/graphics/win/WKCACFLayerWindow.h: Added.

2009-11-24  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Eric Seidel.

        Do error checking of parameter to createShader
        https://bugs.webkit.org/show_bug.cgi?id=31808

        Test: fast/canvas/webgl/invalidPassedParams.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::createShader):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:

2009-11-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        [Chromium] Ignore line-height CSS property specified to a search field on
        Windows and Linux.
        https://bugs.webkit.org/show_bug.cgi?id=31820

        LayoutTests/fast/forms/control-restrict-line-height.html checks that the
        following controls should ignore line-height CSS property.
         - <select>
         - <input type=button>
         - <input type=search>
        This change addresses the <input type=search> issue with Chromium/Windows
        and Chromium/Linux.

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldStyle): Implement this to ignore line-height.
        * rendering/RenderThemeChromiumSkia.h: Declare adjustSearchFieldStyle().

2009-11-24  Simon Fraser  <simon.fraser@apple.com>

        No review.

        Stylistic fix: indent the member var initialisation.

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):

2009-11-24  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 31848 - Remove uses of mainThreadCurrentWorld, and of currentWorld using a globalData.

        These methods get the world from the global data rather than from an execstate.
        If the current world is always read from an exec state then it can be read
        from the global object, and world entry can become automagical, rather than
        being explicitly set by an EnterDOMWrapperWorld.

        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::currentWorld):
        (WebCore::DOMObjectWrapperMapFor):
        (WebCore::hasCachedDOMObjectWrapper):
        (WebCore::getCachedDOMObjectWrapper):
        (WebCore::cacheDOMObjectWrapper):
        (WebCore::hasCachedDOMNodeWrapper):
        (WebCore::getCachedDOMNodeWrapper):
        (WebCore::cacheDOMNodeWrapper):
        * bindings/js/JSDOMBinding.h:
        (WebCore::createDOMObjectWrapper):
        (WebCore::getDOMObjectWrapper):
        (WebCore::createDOMNodeWrapper):
        (WebCore::getDOMNodeWrapper):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::history):
        (WebCore::JSDOMWindow::location):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::location):
        (WebCore::toJS):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::markChildren):
        (WebCore::createWrapper):
        (WebCore::toJS):
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dropProtection):

2009-11-24  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * platform/network/cf/SocketStreamHandleCFNet.cpp: Also, don't include the wrong one!

2009-11-24  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * platform/network/cf/SocketStreamHandleCFNet.cpp: Include the proper WKSI header.

2009-11-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Oliver Hunt.

        SVGUseElement::toClipPath can crash
        <rdar://problem/7385270>

        Null-test m_shadowTreeRootElement again, because the call to buildPendingResource() may not
        actually initialize it.

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

2009-11-24  Simon Fraser  <simon.fraser@apple.com>

        Windows build fix.

        * page/win/FrameCGWin.cpp:
        (WebCore::imageFromRect):
        (WebCore::imageFromSelection):

2009-11-24  Eric Carlson  <eric.carlson@apple.com>

        Not reviewed. Revert r51351 until a new WebKitSupportLibrary is available.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
        * platform/graphics/win/QTMovieWin.cpp:
        * platform/graphics/win/QTMovieWin.h:
        * rendering/RenderMediaControls.cpp:
        * rendering/RenderThemeWin.cpp:
        * rendering/RenderThemeWin.h:

2009-11-24  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=31844
        SocketStreamHandleCFNet should support CONNECT proxy credentials

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/CredentialStorage.h:
        * platform/network/mac/CredentialStorageMac.mm: Added.
        (WebCore::CredentialStorage::getFromPersistentStorage):
        * platform/network/cf/CredentialStorageCFNet.cpp: Added.
        (WebCore::CredentialStorage::getFromPersistentStorage):
        Add support for fetching credentials from persistent storage (CFNet version is currently
        a stub).

        * bindings/js/JSWebSocketCustom.cpp: Removed an unneeded include.

        * platform/network/cf/SocketStreamHandle.h:
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        (WebCore::SocketStreamHandle::createStreams):
        (WebCore::getStoredCONNECTProxyCredentials):
        (WebCore::authenticationSchemeFromAuthenticationMethod):
        (WebCore::SocketStreamHandle::addCONNECTCredentials):
        (WebCore::SocketStreamHandle::readStreamCallback):
        Check if connection attempt was resulted in 407, and try stored credentials if it did.

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * WebCore.base.exp:
        Updated WKSI.

2009-11-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Find highlight is drawn incorrectly on pages with compositing layers
        <rdar://problem/7413925>
        
        Part 2: Add a new bit to the PaintBehavior flags, PaintBehaviorFlattenCompositingLayers,
        and pass that down when painting into an image.
        
        When set, it forces painting of compositing layers to go down a software paint path
        when all layers are painted, irrespective of compositing status, and where
        3d transforms are flattened to 2d. When doing this, we also need to use temporary
        clip rects for layers which are normally composited.
        
        * page/FrameView.h:
        (WebCore::FrameView::paintBehavior):
        * page/mac/FrameMac.mm:
        (WebCore::Frame::imageFromRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::renderableTransform):
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::transparencyClipBox):
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::paintsWithTransparency):
        (WebCore::RenderLayer::paintsWithTransform):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        * rendering/RenderObject.h:

2009-11-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Find highlight is drawn incorrectly on pages with compositing layers
        <rdar://problem/7413925>
        
        Part 1: Rename PaintRestriction to PaintBehavior, and make it a bitmask, in
        preparation for adding a new flag related to painting into an image.
        
        PaintBehaviorSelectionOnly and PaintBehaviorForceBlackText are now separate flags.

        * page/FrameView.cpp:
        (WebCore::FrameView::reset):
        (WebCore::FrameView::paintContents):
        (WebCore::FrameView::setPaintBehavior):
        * page/FrameView.h:
        * page/mac/FrameMac.mm:
        (WebCore::Frame::selectionImage):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint):
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderObject.h:
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::paint):

2009-11-24  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7409331> Windows: Support closed caption in <video> element

        Enable closed captions in QuickTime/Windows media engine.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::hasClosedCaptions):
        (WebCore::MediaPlayerPrivate::setClosedCaptionsVisible):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::hasClosedCaptions):
        (QTMovieWin::setClosedCaptionsVisible):
        * platform/graphics/win/QTMovieWin.h:
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintMediaToggleClosedCaptionsButton):
        * rendering/RenderThemeWin.h:

2009-11-24  Darin Fisher  <darin@chromium.org>

        Reviewed by Adam Barth.

        [Chromium] Renderer hang when using www.expedia.com
        https://bugs.webkit.org/show_bug.cgi?id=31822

        Test: http/tests/cache/subresource-failover-to-network.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously): Use the originalRequest
        when inheriting cache policy.  This matches SubresourceLoader::create.

2009-11-23  Kenneth Russell  <kbr@google.com>

        Reviewed by Oliver Hunt.

        Change get... calls to latest spec
        https://bugs.webkit.org/show_bug.cgi?id=30091

        Removed old versions of get calls on WebGLRenderingContext and
        added new ones per spec returning "any". New code simplifies
        GraphicsContext3D and fixes previously unimplemented routines.
        Added custom JS and V8 bindings. Added exhaustive test case
        exercising all new code paths. Updated preexisting test cases for
        new APIs. Fixed preexisting bugs in WebKit's and Chrome's WebGL
        implementations.

        Ran WebGL layout tests in WebKit (clean) and Chrome (couple of
        preexisting known failures) and manual WebGL tests in both
        browsers.

        Test: fast/canvas/webgl/gl-object-get-calls.html

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        (WebCore::):
        (WebCore::getObjectParameter):
        (WebCore::getProgramParameterHelper):
        (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):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8):
        (WebCore::):
        (WebCore::getObjectParameter):
        (WebCore::getProgramParameter):
        (WebCore::CALLBACK_FUNC_DECL):
        * html/canvas/CanvasObject.cpp:
        (WebCore::CanvasObject::CanvasObject):
        (WebCore::CanvasObject::setObject):
        (WebCore::CanvasObject::deleteObject):
        * html/canvas/CanvasObject.h:
        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::create):
        (WebCore::WebGLBuffer::WebGLBuffer):
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLGetInfo.cpp: Added.
        (WebCore::WebGLGetInfo::WebGLGetInfo):
        (WebCore::WebGLGetInfo::~WebGLGetInfo):
        (WebCore::WebGLGetInfo::getType):
        (WebCore::WebGLGetInfo::getBool):
        (WebCore::WebGLGetInfo::getFloat):
        (WebCore::WebGLGetInfo::getLong):
        (WebCore::WebGLGetInfo::getString):
        (WebCore::WebGLGetInfo::getUnsignedLong):
        (WebCore::WebGLGetInfo::getWebGLBuffer):
        (WebCore::WebGLGetInfo::getWebGLFloatArray):
        (WebCore::WebGLGetInfo::getWebGLFramebuffer):
        (WebCore::WebGLGetInfo::getWebGLIntArray):
        (WebCore::WebGLGetInfo::getWebGLProgram):
        (WebCore::WebGLGetInfo::getWebGLRenderbuffer):
        (WebCore::WebGLGetInfo::getWebGLTexture):
        (WebCore::WebGLGetInfo::getWebGLUnsignedByteArray):
        * html/canvas/WebGLGetInfo.h: Added.
        (WebCore::WebGLGetInfo::):
        * html/canvas/WebGLRenderbuffer.cpp:
        (WebCore::WebGLRenderbuffer::create):
        (WebCore::WebGLRenderbuffer::WebGLRenderbuffer):
        * html/canvas/WebGLRenderbuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLStateRestorer::WebGLStateRestorer):
        (WebCore::WebGLStateRestorer::~WebGLStateRestorer):
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
        (WebCore::WebGLRenderingContext::activeTexture):
        (WebCore::WebGLRenderingContext::bindBuffer):
        (WebCore::WebGLRenderingContext::bindFramebuffer):
        (WebCore::WebGLRenderingContext::bindRenderbuffer):
        (WebCore::WebGLRenderingContext::bindTexture):
        (WebCore::WebGLRenderingContext::getBufferParameter):
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getProgramParameter):
        (WebCore::WebGLRenderingContext::getProgramInfoLog):
        (WebCore::WebGLRenderingContext::getRenderbufferParameter):
        (WebCore::WebGLRenderingContext::getShaderParameter):
        (WebCore::WebGLRenderingContext::getShaderInfoLog):
        (WebCore::WebGLRenderingContext::getShaderSource):
        (WebCore::WebGLRenderingContext::getString):
        (WebCore::WebGLRenderingContext::getTexParameter):
        (WebCore::WebGLRenderingContext::getUniform):
        (WebCore::WebGLRenderingContext::getVertexAttrib):
        (WebCore::WebGLRenderingContext::useProgram):
        (WebCore::WebGLRenderingContext::getBooleanParameter):
        (WebCore::WebGLRenderingContext::getFloatParameter):
        (WebCore::WebGLRenderingContext::getIntParameter):
        (WebCore::WebGLRenderingContext::getLongParameter):
        (WebCore::WebGLRenderingContext::getUnsignedLongParameter):
        (WebCore::WebGLRenderingContext::getWebGLFloatArrayParameter):
        (WebCore::WebGLRenderingContext::getWebGLIntArrayParameter):
        (WebCore::WebGLRenderingContext::getWebGLUnsignedByteArrayParameter):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:
        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::create):
        (WebCore::WebGLTexture::WebGLTexture):
        * html/canvas/WebGLTexture.h:
        * manual-tests/webgl/resources/utils3d.js:
        (initWebGL):
        (loadShader):
        (Framerate.prototype.snapshot):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::bindRenderbuffer):
        (WebCore::GraphicsContext3D::getBooleanv):
        (WebCore::GraphicsContext3D::getBufferParameteriv):
        (WebCore::GraphicsContext3D::getFloatv):
        (WebCore::GraphicsContext3D::getFramebufferAttachmentParameteriv):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::getProgramiv):
        (WebCore::GraphicsContext3D::getRenderbufferParameteriv):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getTexParameterfv):
        (WebCore::GraphicsContext3D::getTexParameteriv):
        (WebCore::GraphicsContext3D::getUniformfv):
        (WebCore::GraphicsContext3D::getUniformiv):
        (WebCore::GraphicsContext3D::getVertexAttribfv):
        (WebCore::GraphicsContext3D::getVertexAttribiv):

2009-11-24  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * WebCore.vcproj/QTMovieWin.vcproj: Add additional search path for QuickTime SDK.

2009-11-24  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] GStreamer-CRITICAL's (and other warnings) on <video>
        https://bugs.webkit.org/show_bug.cgi?id=26354

        Implemented MediaPlayerPrivate::isAvailable by checking the
        presence of the playbin2 GStreamer element.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::isAvailable):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2009-11-24  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

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

        When building up the pango layout from text boxes, only append a
        newline char after verifying there are no more boxes on this line.

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

2009-11-24  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Keyboard Shortcut to Clear Console Messages
        https://bugs.webkit.org/show_bug.cgi?id=31780

        All Platforms:  Ctrl+L  = Clear Console Messages
        Mac Only:       Cmd+K   = Clear Console Messages

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView): create shortcuts
        (WebInspector.ConsoleView.prototype._promptKeyDown): handle shortcuts
        * inspector/front-end/KeyboardShortcut.js:
        (WebInspector.KeyboardShortcut.makeKey): convenience conversion of "a-z" character to keyCode
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel): style fixes for keyboard shortcuts

2009-11-24  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: touch inspector controller in order to
        kick win bot inspector deploy. rs=aroben.

        * inspector/InspectorController.cpp:

2009-11-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Implement expandable compartments on timeline panel.

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

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane.prototype._setWindowPosition):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.addRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelinePanel.prototype._addToRecordsWindow):
        (WebInspector.TimelineRecordListRow):
        (WebInspector.TimelineRecordListRow.prototype.update):
        (WebInspector.TimelineRecordListRow.prototype.dispose):
        (WebInspector.TimelineRecordGraphRow):
        (WebInspector.TimelineRecordGraphRow.prototype.update):
        (WebInspector.TimelineRecordGraphRow.prototype._onClick):
        (WebInspector.TimelineRecordGraphRow.prototype.dispose):
        * inspector/front-end/inspector.css:

2009-11-24  Mark Rowe  <mrowe@apple.com>

        Fix production builds where the source tree may be read-only.

        * WebCore.xcodeproj/project.pbxproj:

2009-11-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Include "config.h" to meet Coding Style Guidelines
        https://bugs.webkit.org/show_bug.cgi?id=31792

        No new tests as there is no new functionality.

        * platform/graphics/win/IntPointWin.cpp:
        * platform/graphics/win/IntRectWin.cpp:
        * platform/graphics/win/IntSizeWin.cpp:
        * platform/network/chromium/ResourceRequest.cpp:
        * platform/win/PlatformMouseEventWin.cpp:

2009-11-23  Jian Li  <jianli@chromium.org>

        Reviewed by NOBODY (Chromium build fix).

        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * platform/graphics/GraphicsContext3D.h:

2009-11-23  Aaron Golden  <agolden@apple.com>

        Reviewed by Alexey Proskuryakov.

        Prevent ResourceHandleMac's version of ResourceHandle::receivedCredential from stripping
        identity and certificate information from a WebCore::Credential when receivedCredential
        needs to modify the credential's persistence.

        Adding a new constructor Credential(const Credential& original, CredentialPersistence)
        that copies every field from original except for persistence.

        * platform/network/Credential.cpp:
        (WebCore::Credential::Credential):
        * platform/network/Credential.h:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::receivedCredential):

2009-11-23  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Part 2/3 of <rdar://problem/7377477> REGRESSION: Many web pages fail to render after interesting script runs in isolated world

        Some clients of the JavaScriptCore API expect to be able to make callbacks over the JSC API,
        and for this to automagically cause execution to take place in the world associated with the
        global object associated with the ExecState (JSContextRef) passed.  However this is not how
        things work - the world must be explicitly set within WebCore.

        Making this work just for API calls to evaluate & call will be a far from perfect solution,
        since direct (non-API) use of JSC still relies on WebCore setting the current world correctly.
        A better solution would be to make this all work automagically all throughout WebCore, but this
        will require more refactoring.

        Add references from the JSDOMWindowShell and the JSDOMGlobalObject to the world that owns them,
        so that we can get to the world from the lexical global object of an ExecState.  In the long-term
        we should switch over to using this approach for all cases we want to get a world from an exec state.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::WebCoreJSClientData::beginningExecution):
        (WebCore::WebCoreJSClientData::completedExecution):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::JSDOMGlobalObject::world):
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObjectData::JSDOMGlobalObjectData):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBaseData::JSDOMWindowBaseData):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::world):
        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore::JSWorkerContextBase::JSWorkerContextBase):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::initScript):

2009-11-23  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Add range checks to rendering calls in WebGL
        https://bugs.webkit.org/show_bug.cgi?id=31239

        I am now tracking the size of the data in each CanvasBuffer object
        and keeping track of the buffer size of each active vertex attrib.
        In drawArrays and drawElements I make sure no attempt is made to
        access elements outside the valid buffer ranges. The test at:

            http://cs.helsinki.fi/u/ilmarihe/c3d/functions/drawArraysOutOfBounds.html

        no longer crashes.

        I also added all the WebGL enumerations to GraphicsContext3D to use them in the validation checks

        Tests: fast/canvas/webgl/drawArraysOutOfBounds.html
               fast/canvas/webgl/drawElementssOutOfBounds.html

        * bindings/js/JSWebGLArrayCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::bufferData):
        (WebCore::JSWebGLRenderingContext::bufferSubData):
        (WebCore::JSWebGLRenderingContext::texSubImage2D):
        * html/canvas/WebGLArrayBuffer.cpp:
        (WebCore::WebGLArrayBuffer::create):
        (WebCore::WebGLArrayBuffer::data):
        * html/canvas/WebGLArrayBuffer.h:
        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::WebGLBuffer):
        (WebCore::WebGLBuffer::associateBufferData):
        (WebCore::WebGLBuffer::associateBufferSubData):
        (WebCore::WebGLBuffer::byteLength):
        * html/canvas/WebGLBuffer.h:
        (WebCore::WebGLBuffer::elementArrayBuffer):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
        (WebCore::WebGLRenderingContext::sizeInBytes):
        (WebCore::WebGLRenderingContext::bindBuffer):
        (WebCore::WebGLRenderingContext::bufferData):
        (WebCore::WebGLRenderingContext::bufferSubData):
        (WebCore::WebGLRenderingContext::createShader):
        (WebCore::WebGLRenderingContext::disableVertexAttribArray):
        (WebCore::WebGLRenderingContext::validateIndexArray):
        (WebCore::WebGLRenderingContext::validateRenderingState):
        (WebCore::WebGLRenderingContext::drawArrays):
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::enableVertexAttribArray):
        (WebCore::WebGLRenderingContext::isFramebuffer):
        (WebCore::WebGLRenderingContext::isProgram):
        (WebCore::WebGLRenderingContext::isRenderbuffer):
        (WebCore::WebGLRenderingContext::isShader):
        (WebCore::WebGLRenderingContext::isTexture):
        (WebCore::WebGLRenderingContext::useProgram):
        (WebCore::WebGLRenderingContext::validateProgram):
        (WebCore::WebGLRenderingContext::vertexAttribPointer):
        (WebCore::WebGLRenderingContext::detachAndRemoveAllObjects):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore::WebGLRenderingContext::VertexAttribState::VertexAttribState):
        * html/canvas/WebGLRenderingContext.idl:
        * html/canvas/WebGLShader.cpp:
        (WebCore::WebGLShader::create):
        (WebCore::WebGLShader::WebGLShader):
        * html/canvas/WebGLShader.h:
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::):
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::createShader):

2009-11-23  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Eric Seidel.

        JSC bindings for HasIndexGetter generates incorrect code (affects
        MediaList and CSSStyleDeclaration).
        This cleans up the edge cases for indexing out of range for style and
        computed style objects to return an empty string according to the spec.
        MediaList now returns null when indexed out of range.
        https://bugs.webkit.org/show_bug.cgi?id=31683

        Tests: fast/dom/CSSStyleDeclaration/css-computed-style-item.html
               fast/dom/CSSStyleDeclaration/css-style-item.html
               fast/dom/StyleSheet/css-medialist-item.html

        * bindings/scripts/CodeGeneratorJS.pm: If IndexGetterReturnsString then
                we do not check the length before calling the item function.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::item):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::item):
        * css/CSSStyleDeclaration.idl:

2009-11-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        DocumentMarkers need to be educated about transforms
        https://bugs.webkit.org/show_bug.cgi?id=31751
        
        Find highlight is incorrect with transforms
        <rdar://problem/6358394>

        Allow callers to specify that Frame::selectionTextRects() takes transforms into account
        when computing the set of rects that encompass a selection. For transformed elemenets, the
        selection rect will be the bounding box of the selected content.
        
        Fix DocumentMarkers to cache rects in absolute coordinates, rather than painting coordinates.
        
        Test: editing/selection/transformed-selection-rects.html
        
        * WebCore.base.exp:
        Frame::selectionTextRects() has a new parameter.
        
        * dom/Document.cpp:
        (WebCore::Document::setRenderedRectForMarker):
        * dom/Document.h:
        Pass the marker as a const reference.
        
        * dom/Range.h:
        * dom/Range.cpp:
        (WebCore::Range::textQuads):
        Add a new method, textQuads(), which returns a list of quads, respecting transforms.
        
        * page/Frame.h:
        * page/Frame.cpp:
        (WebCore::Frame::selectionTextRects):
        Add a new parameter, respectTransforms, and when that is RespectTransforms, use the quad
        method to get quads for ranges, and then take their bounding boxes.

        * rendering/InlineTextBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::paintDocumentMarkers):
        (WebCore::InlineTextBox::textPos):
        (WebCore::InlineTextBox::offsetForPosition):
        
        Pass DocumentMarkers as a const references.
        Convert the argument to setRenderedRectForMarker() into absolute coordinates.
        
        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionBounds):

2009-11-23  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        [Cairo] support blurred test-shadow
        [https://bugs.webkit.org/show_bug.cgi?id=31797]

        Support for blurred text-shadows on Cairo. This patch
        reuses the code of blurred box-shadows, introduced in
        bug 26102. For a full textshadow support, a filters enabled
        build is needed.

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):

2009-11-23  Jens Alfke  <snej@chromium.org>

        Reviewed by Geoffrey Garen.

        Change incorrect calls to the constructor "EventNames()" to the correct accessor
        "eventNames()". This saves ~100 AtomicString lookups each time.
        https://bugs.webkit.org/show_bug.cgi?id=31811

        * dom/EventNames.h:  Make constructor private to prevent this from happening again.
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):  EventNames() --> eventNames()
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::checkValidity):  EventNames() --> eventNames()
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):  EventNames() --> eventNames()
        (WebCore::FrameLoader::pageHidden):  EventNames() --> eventNames()
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchAllPendingUnloadEvents):  EventNames() --> eventNames()

2009-11-23  Adam Langley  <agl@google.com>

        Reviewed by Dmitry Titov.

        Chromium Linux: Limit the stroke width and mitre limit.

        Limit the stroke width and mitre limit that we'll pass into Skia to
        avoid overflowing Skia's uint16_t glyph widths.

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

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (scalarBound):
        (PlatformContextSkia::setupPaintForStroking):

2009-11-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=31812
        WebSocket code uses RefPtr::get() where it shouldn't

        No change in funcitonality, just coding style correction.

        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::~WebSocket):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        (WebCore::WebSocketChannel::send):
        (WebCore::WebSocketChannel::bufferedAmount):
        (WebCore::WebSocketChannel::close):
        (WebCore::WebSocketChannel::disconnect):
        (WebCore::WebSocketChannel::didOpen):
        (WebCore::WebSocketChannel::didClose):
        (WebCore::WebSocketChannel::didReceiveData):
        (WebCore::WebSocketChannel::didFail):

2009-11-23  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::pacExecutionCallbackMainThread): pacExecutionCallbackMainThread
        is static, so it can't use member variables directly.

2009-11-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=31748
        Make WebSocketHandleCFNet respect proxy auto-configuration files via CFProxySupport

        * platform/network/cf/SocketStreamHandle.h: Removed names from some void* arguments, since
        they didn't carry useful information.

        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::SocketStreamHandle): When we need an http-style URL, we actually
        always need https.
        (WebCore::SocketStreamHandle::scheduleStreams): Factored out from constructor, since streams
        only get scheduled after PAC is fetched and executed asynchronously.
        (WebCore::SocketStreamHandle::copyPACExecutionDescription): Return a description for event
        source.
        (WebCore::MainThreadPACCallbackInfo::MainThreadPACCallbackInfo): Forward callback to main thread.
        (WebCore::SocketStreamHandle::pacExecutionCallback): Ditto.
        (WebCore::SocketStreamHandle::pacExecutionCallbackMainThread): Ditto. To avoid code duplication,
        we make the call even on Mac.
        (WebCore::SocketStreamHandle::executePACFileURL): Make an async call to CFNetworkExecuteProxyAutoConfigurationURL.
        (WebCore::SocketStreamHandle::removePACRunLoopSource): Once PAC execution is done or aborted,
        we need to get rid of the event source.
        (WebCore::SocketStreamHandle::chooseProxy): Use stored m_httpsURL.get.
        (WebCore::SocketStreamHandle::chooseProxyFromArray): Factored out from chooseProxy - the
        array may come directly from system configuration, or from PAC.
        (WebCore::SocketStreamHandle::chooseProxy): Tiger version of this function is now completely
        separate.
        (WebCore::SocketStreamHandle::~SocketStreamHandle): Run loop source should be destroyed
        before we get to the destructor.
        (WebCore::SocketStreamHandle::platformClose): Destroy the run loop source, if PAC execution
        is still in progress.

2009-11-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Don't leak the CGImage we create when drawing a sub image.

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

2009-11-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Don't crash when OOM in creating isolated world
        https://bugs.webkit.org/show_bug.cgi?id=31805

        We need to add some more null checks to avoid crashing.  No new tests
        because we don't have a good way to test out-of-memory bugs.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        (WebCore::V8Proxy::evaluateInNewContext):
        (WebCore::V8Proxy::setInjectedScriptContextDebugId):
        * bindings/v8/V8Proxy.h:

2009-11-23  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        This is the implementation of the filterRes attribute. It
        helps the SVG developer to set the quality of a filter by
        giving the width or height of filter.
        This patch also sets the filter resolution to lower values
        if a intermediate ImageBuffer size is bigger than the given
        maximal size.
        The maximal size is set to 5000x5000 by default. This is a
        subjectiv decission. Everthing greater than this values gets
        sensible slower. Values of 10000x10000 crashed on WebKitGtk.
        For mobil devices a maximum size of 100x100 or 200x200 seems
        to be reasonable.
        The important fact on filter resolution is, that the output
        size is still the size given by the <filter> element.

        Tests: svg/filters/big-sized-filter-2.svg
               svg/filters/big-sized-filter.svg
               svg/filters/filterRes.svg

        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::scale): Add the abbility to scale a rect by x and y.
        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::scale): Add the abbility to scale a rect by x and y.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::createPlatformShadow): Use scaledSubRegion for
        calculation.
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::apply): Use scaledSubRegion for effect intern calculations.
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::apply): Use scaledSubRegion for effect intern calculations.
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::apply): Use scaledSubRegion for effect intern
        calculations.
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::apply): Use scaledSubRegion for effect intern calculations.
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::apply): Use scaledSubRegion for effect intern calculations.
        * platform/graphics/filters/Filter.h: Add the abbility to change the quality
        of a filter output.
        (WebCore::Filter::filterResolution):
        (WebCore::Filter::setFilterResolution):
        (WebCore::Filter::calculateEffectSubRegion): Calculates the correct subRegion
        as well as the scaledSubRegion. It also searches for the biggest effect size.
        We have to change the filter resolution, if one intermediate ImageBuffer size
        doesn't fit in the maximal image size.
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::calculateDrawingIntRect): Use scaledSubRegion to get
        the right part of a previous effect result.
        (WebCore::FilterEffect::calculateDrawingRect): Use scaledSubRegion to get
        the right part of a previous effect result.
        (WebCore::FilterEffect::getEffectContext): Use scaledSubRegion to create
        a new intermediate ImageBuffer for the result of the current effect.
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::scaledSubRegion): The scaled subRegion of a the
        filter effect.
        (WebCore::FilterEffect::setScaledSubRegion):
        (WebCore::FilterEffect::effectBoundaries): The original values of the
        EffectElement for a second subRegion calculation.
        (WebCore::FilterEffect::setEffectBoundaries):
        * platform/graphics/filters/ImageBufferFilter.cpp:
        (WebCore::ImageBufferFilter::ImageBufferFilter): Set the scale factor to one.
        * platform/graphics/filters/ImageBufferFilter.h:
        (WebCore::ImageBufferFilter::maxImageSize):
        (WebCore::ImageBufferFilter::calculateEffectSubRegion):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::calculateEffectRect): Use scaledSubRegion for effect
        intern calculations.
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::calculateEffectRect): Use scaledSubRegion for effect
        intern calculations.
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::parseMappedAttribute): Parse filterRes attribute.
        (WebCore::SVGFilterElement::buildFilter): Give SVGResourceFilter the current
        filterResolution.
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::setStandardAttributes): Save
        values to effectBoundaries of the filter effect
        * svg/graphics/SVGResourceFilter.cpp:
        (WebCore::SVGResourceFilter::SVGResourceFilter):
        (WebCore::shouldProcessFilter): Return signal if a neccessary value is zero.
        (WebCore::SVGResourceFilter::fitsInMaximumImageSize): Checks if the given size
        fits into the maximal image size, modifys scale factors if not and return a
        bool: fits.
        (WebCore::SVGResourceFilter::prepareFilter): Scale the SourceImage to
        filterResolution (given by FilterElement or calculated on to big image sizes).
        Set the scale level to SVGFilter.
        (WebCore::SVGResourceFilter::applyFilter): Don't apply filters if shouldProcessFilter
        is wrong.
        * svg/graphics/SVGResourceFilter.h:
        (WebCore::SVGResourceFilter::setFilterResolution): FilterResolution of FilterElement.
        (WebCore::SVGResourceFilter::setHasFilterResolution): Does FilterElement provides
        a FilterResolution?
        (WebCore::SVGResourceFilter::scaleX): Current scale factor for horizontal.
        (WebCore::SVGResourceFilter::scaleY): Current scale factor for vertical.
        * svg/graphics/filters/SVGFEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::apply): Use scaledSubRegion for effect intern calculations.
        Kernel values are scaled to current filter resolution too.
        * svg/graphics/filters/SVGFEFlood.cpp:
        (WebCore::FEFlood::apply): Use scaledSubRegion for effect intern calculations.
        * svg/graphics/filters/SVGFEMerge.cpp:
        (WebCore::FEMerge::apply): Use scaledSubRegion for effect intern calculations.
        Kernel values are scaled to current filter resolution too.
        * svg/graphics/filters/SVGFEMorphology.cpp:
        (WebCore::FEMorphology::apply): Use scaledSubRegion for effect intern calculations.
        Kernel values are scaled to current filter resolution too.
        * svg/graphics/filters/SVGFEOffset.cpp:
        (WebCore::FEOffset::apply): Use scaledSubRegion for effect intern calculations.
        * svg/graphics/filters/SVGFETile.cpp:
        (WebCore::FETile::apply): Use scaledSubRegion for effect intern calculations.
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::calculateEffectSubRegion): Calculate subRegion for LayoutTests,
        scaledSubRegion according to the current filterResolution and get the maximal image size.
        * svg/graphics/filters/SVGFilter.h:
        (WebCore::SVGFilter::effectBoundingBoxMode): Original values of the FilterElement. 
        (WebCore::SVGFilter::filterRegion): Use virtual for clarification.
        (WebCore::SVGFilter::sourceImageRect): Use virtual for clarification.
        (WebCore::SVGFilter::maxImageSize): Get the maximal image size.

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

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Wrong runtime instance objects of wrapped QObjects may be used if
        the wrapped object died before the gc removed the instance.

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

        Before using a cached instance, verify that its wrapped QObject is
        still alive.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getQtInstance):
        * bridge/qt/qt_instance.h:
        (JSC::Bindings::QtInstance::hashKey):

2009-11-22  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        ARIA: support aria-flowto
        https://bugs.webkit.org/show_bug.cgi?id=31762

        Test: platform/mac/accessibility/aria-flowto.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::ariaOwnsElements):
        (WebCore::AccessibilityObject::supportsARIAFlowTo):
        (WebCore::AccessibilityObject::ariaFlowToElements):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::linkedUIElements):
        (WebCore::AccessibilityRenderObject::supportsARIAFlowTo):
        (WebCore::AccessibilityRenderObject::ariaFlowToElements):
        * accessibility/AccessibilityRenderObject.h:
        * html/HTMLAttributeNames.in:

2009-11-22  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Build fix for WML enabled builds.
        Adopt WebCore API changes.

        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::defaultEventHandler):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::defaultEventHandler):

2009-11-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Introduce sidebar background on timeline panel in order
        to prevent it from flickering on scroll.

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

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.setSidebarWidth):
        (WebInspector.TimelinePanel.prototype._onScroll):
        (WebInspector.TimelinePanel.prototype._scheduleRefresh):
        * inspector/front-end/inspector.css:

2009-11-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Reimplement TimelinePanel to make it fast:
        - Extract grid and overview into separate files
        - Make timeline create only divs for visible rows

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype.createInterface):
        (WebInspector.AbstractTimelinePanel.prototype.refresh):
        (WebInspector.AbstractTimelinePanel.prototype.set calculator):
        * inspector/front-end/TimelineGrid.js: Added.
        (WebInspector.TimelineGrid):
        (WebInspector.TimelineGrid.prototype.get itemsGraphsElement):
        (WebInspector.TimelineGrid.prototype.updateDividers):
        (WebInspector.TimelineGrid.prototype.addEventDivider):
        (WebInspector.TimelineGrid.prototype.setScrollAndDividerTop):
        * inspector/front-end/TimelineOverviewPane.js: Added.
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype._onCheckboxClicked):
        (WebInspector.TimelineOverviewPane.prototype.update):
        (WebInspector.TimelineOverviewPane.prototype.setSidebarWidth):
        (WebInspector.TimelineOverviewPane.prototype.updateMainViewWidth):
        (WebInspector.TimelineOverviewPane.prototype.reset):
        (WebInspector.TimelineOverviewPane.prototype._resizeWindow):
        (WebInspector.TimelineOverviewPane.prototype._windowResizeDragging):
        (WebInspector.TimelineOverviewPane.prototype._dragWindow):
        (WebInspector.TimelineOverviewPane.prototype._windowDragging):
        (WebInspector.TimelineOverviewPane.prototype._resizeWindowLeft):
        (WebInspector.TimelineOverviewPane.prototype._resizeWindowRight):
        (WebInspector.TimelineOverviewPane.prototype._setWindowPosition):
        (WebInspector.TimelineOverviewPane.prototype._endWindowDragging):
        (WebInspector.TimelineOverviewCalculator):
        (WebInspector.TimelineOverviewCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.TimelineOverviewCalculator.prototype.reset):
        (WebInspector.TimelineOverviewCalculator.prototype.updateBoundaries):
        (WebInspector.TimelineOverviewCalculator.prototype.get boundarySpan):
        (WebInspector.TimelineOverviewCalculator.prototype.formatValue):
        (WebInspector.TimelineCategoryTreeElement):
        (WebInspector.TimelineCategoryTreeElement.prototype.onattach):
        (WebInspector.TimelineCategoryGraph):
        (WebInspector.TimelineCategoryGraph.prototype.get graphElement):
        (WebInspector.TimelineCategoryGraph.prototype.addChunk):
        (WebInspector.TimelineCategoryGraph.prototype.clearChunks):
        (WebInspector.TimelineCategoryGraph.prototype.set dimmed):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._toggleTimelineButtonClicked):
        (WebInspector.TimelinePanel.prototype.addRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelinePanel.prototype.setSidebarWidth):
        (WebInspector.TimelinePanel.prototype.updateMainViewWidth):
        (WebInspector.TimelinePanel.prototype.resize):
        (WebInspector.TimelinePanel.prototype.reset):
        (WebInspector.TimelinePanel.prototype.show):
        (WebInspector.TimelinePanel.prototype._onScroll):
        (WebInspector.TimelinePanel.prototype._scheduleRefresh):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelinePanel.prototype._adjustScrollPosition):
        (WebInspector.TimelineCategory):
        (WebInspector.TimelineCalculator):
        (WebInspector.TimelineCalculator.prototype.get boundarySpan):
        (WebInspector.TimelineRecordListRow):
        (WebInspector.TimelineRecordListRow.prototype.update):
        (WebInspector.TimelineRecordGraphRow):
        (WebInspector.TimelineRecordGraphRow.prototype.update):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:

2009-11-22  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Disable access to file:/// directory listings
        https://bugs.webkit.org/show_bug.cgi?id=31329

        Deny access to directory listings. This needs doing in WebKit for
        WebKit clients that do permit top-level navigation to file:///dir.
        This matches Firefox, plus the existing Safari implementation (which
        does not support any directory access at all). It will fix the
        LayoutTest named below for Chromium.

        Test: fast/xmlhttprequest/xmlhttprequest-nonexistent-file.html

        * page/SecurityOrigin.cpp: Deny access to directory listings.
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::canRequest):

2009-11-20  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Support Ctrl+P and Ctrl+N, Readline keyboard shortcuts in the Console
        https://bugs.webkit.org/show_bug.cgi?id=31400

        Handle the following when on a Mac:

          Ctrl+P = Previous (like Up arrow)
          Ctrl+N = Next (like Down arrow)

        No longer rerun autocompletion when just pushing a modifier key
        like Control, Alt, Shift, or Meta.

        Improved arrow key behavior with Multiline code in the Console, with the following behavior:

          Up   = Previous Command if on First Line (caret moves to the end of the first line)
                 otherwise default caret movement in text.
          Down = Next Command if on Last Line (caret naturally moves to the end)
                 otherwise default caret movement in text.

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.handleKeyEvent): handle new keyboard shortcuts
        (WebInspector.TextPrompt.prototype.isCaretOnFirstLine): check if the caret is on the top line
        (WebInspector.TextPrompt.prototype.isCaretOnLastLine): check if the caret is on the bottom line
        (WebInspector.TextPrompt.prototype._upKeyPressed):
        (WebInspector.TextPrompt.prototype._downKeyPressed):
        (WebInspector.TextPrompt.prototype._moveBackInHistory):
        (WebInspector.TextPrompt.prototype._moveForwardInHistory):

2009-11-21  Jessie Berlin  <jberlin@webkit.org>

        Reviewed by Timothy Hatcher.

        Adds a tooltip containing the full url of the resource to each element
        in the Resources panel so that it is possible to quickly see the query
        parameters.
        https://bugs.webkit.org/show_bug.cgi?id=19103

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.refresh):
        Set the tooltip to be the resource's url.

2009-11-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        CSSKeyframesRule::findRule() and deleteRule() should accept 'from' and 'to' as well as percentages
        https://bugs.webkit.org/show_bug.cgi?id=31588
        
        In WebKitCSSKeyframesRule::findRuleIndex(), map 'from' to 0% an 'to' to 100%
        so that findRule() and deleteRule() work with these keywords.

        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::findRuleIndex):

2009-11-21  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel.

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

        Changed KeyboardEvent::m_keyEvent from a raw pointer to an OwnPtr.

        No functionality was changed. So, no new tests.

        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::~KeyboardEvent):
        * dom/KeyboardEvent.h: Changed m_keyEvent to OwnPtr.
        (WebCore::KeyboardEvent::keyEvent):

2009-11-20  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        WAI-ARIA: add support for aria-owns
        https://bugs.webkit.org/show_bug.cgi?id=31702

        Re-organized how accessibilityAttributeNames are returned so 
        that it's possible for an element to add an attribute based on 
        a dynamic value. In this case, we only want to add AXOwn if the 
        element actually supports aria-owns.
  
        Test: platform/mac/accessibility/aria-owns.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::supportsARIAOwns):
        (WebCore::AccessibilityObject::ariaOwnsElements):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaOwnsElements):
        (WebCore::AccessibilityRenderObject::supportsARIAOwns):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        * html/HTMLAttributeNames.in:

2009-11-20  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7414396> Leopard & Tiger: Support closed caption in <video> element

        * css/mediaControls.css:
            Define closed caption toggle button.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::updateControls):
            Create closed caption toggle button in display order.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::shouldRenderMediaControlPart):
            Don't require MediaControllerThemeQuickTime theme for captions toggle button.
            No need to check if the movie has video, a closed captions track is a video
            track.

2009-11-20  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Running code in the Console that ends with a
        single line comment no longer produces a parse error.

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

2009-11-20  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        WAI-ARIA: add support for 'math' role
        https://bugs.webkit.org/show_bug.cgi?id=31706

        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:

2009-11-20  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        NPN_ReloadPlugins does not reload the page even if reloadPages is true.
        https://bugs.webkit.org/show_bug.cgi?id=30460

        Replace call to PluginDatabase::installedPlugins()->refresh() with Page::refreshPlugins().
        It already refreshes plugins and reloads pages when necessary.

        Tests: plugins/reloadplugins-and-pages.html
               plugins/reloadplugins-no-pages.html

        * plugins/PluginInfoStore.cpp:
        (WebCore::refreshPlugins):

2009-11-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://7409188> WebKit needs to be able to serialize and deserialize objects.

        Expose WebCore object serialization to WebKit.

        * WebCore.base.exp:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::~SerializedScriptValue):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/js/SerializedScriptValue.h:

2009-11-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Tim Hatcher.

        Fixes <http://webkit.org/b/31741>.
        Web Inspector: User Entered Data on the console should show up no matter what filters.
        
        Always show .console-user-command-result, no matter what the filter say
        we should do with the other classes.

        * inspector/front-end/inspector.css:

2009-11-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Tim Hatcher.

        Fixes <http://webkit.org/b/31700>.
        Web Inspector: isMac should be in one central location + Cached.
        
        We should cache the value of isMac, and make the indexOf call in one
        single location, because we are calling it from multiple places, and saving
        the result can save us time, and make the call sites simpler.

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype._updateFilter):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._updateFilter):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.handleKeyEvent):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._loaded):
        * inspector/front-end/inspector.js:
        (WebInspector.documentKeyDown):
        (WebInspector.isMac):

2009-11-19  Joseph Pecoraro  <joepeck@webkit.org>

        Removed .DS_Store accidentally added in last (r51245).

2009-11-19  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add Console Only Layout Mode
        https://bugs.webkit.org/show_bug.cgi?id=30282

        Adds a Console Panel, which allows for a Full size Console. This
        extends the Drawer to the size of a Panel. This also fixes previous
        resize issues with the Drawer.

        * inspector/front-end/ConsolePanel.js: added.
        (WebInspector.ConsolePanel):
        (WebInspector.ConsolePanel.prototype.toolbarItemClass.get toolbarItemLabel):
        (WebInspector.ConsolePanel.prototype.show):
        (WebInspector.ConsolePanel.prototype.hide):
        * inspector/front-end/Drawer.js:
        (WebInspector.Drawer):
        (WebInspector.Drawer.prototype.set visibleView):
        (WebInspector.Drawer.prototype.get savedHeight): access the saved height of the variable console.
        (WebInspector.Drawer.prototype.show.animationFinished):
        (WebInspector.Drawer.prototype.show):
        (WebInspector.Drawer.prototype.hide.animationFinished):
        (WebInspector.Drawer.prototype.hide):
        (WebInspector.Drawer.prototype.resize): resize appropriately if full/non-full
        (WebInspector.Drawer.prototype.enterPanelMode):
        (WebInspector.Drawer.prototype.exitPanelMode):
        (WebInspector.Drawer.prototype.immediatelyExitPanelMode):
        (WebInspector.Drawer.prototype._cancelAnimationIfNeeded):
        (WebInspector.Drawer.prototype._animateDrawerHeight.animationFinished):
        (WebInspector.Drawer.prototype._animateDrawerHeight):
        (WebInspector.Drawer.prototype._animationDuration):
        (WebInspector.Drawer.prototype._startStatusBarDragging):
        (WebInspector.Drawer.prototype._statusBarDragging):
        (WebInspector.Drawer.prototype._endStatusBarDragging):

        Miscellaneous changes and cleanup.

        * English.lproj/localizedStrings.js: "Console" toolbar title.
        * inspector/front-end/ConsoleView.js: removed unnecessary element reordering  
        * inspector/front-end/Images/consoleIcon.png: added.
        * inspector/front-end/inspector.css: added icon.
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels): create console panel
        (WebInspector.windowResize): resize drawer if necessary
        (WebInspector.documentKeyDown): esc should not toggle the console when in panel mode
        (WebInspector.animateStyle): start animation interval, returns the interval key
        (WebInspector.toggleAttach): resize drawer if necessary
        (WebInspector.showConsolePanel): restore the panel when the inspector restarts
        (WebInspector.showProfileForURL): style fix

        Restore the panel when the inspector restarts.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::specialPanelForJSName):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::showPanel):

        Build files.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/WebKit.qrc:

2009-11-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Tim Hatcher.

        Fixes <http://webkit.org/b/31699>.
        Web Inspector: Should Cache Values of InspectorController.platform() and port().

        Refactor the Inspector to cache the value of InspectorController.platform
        and InspectorController.port, because those need to call into C++, they are
        being called more and more as we add platform specific keyboard shortcuts, and
        they shouldn't change in the lifecycle of the Web Inspector.

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype._updateFilter):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._updateFilter):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.handleKeyEvent):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._loaded):
        * inspector/front-end/inspector.js:
        (WebInspector.get platform):
        (WebInspector.get port):
        (WebInspector.loaded):
        (WebInspector.documentKeyDown):
        (WebInspector.toolbarDragStart):

2009-11-20  Dirk Schulze  <krit@webkit.org>

        Unreviewed build fix for filters enabled builds.

        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::apply):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::apply):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::apply):
        * svg/graphics/SVGResourceFilter.cpp:
        (WebCore::SVGResourceFilter::applyFilter):
        * svg/graphics/filters/SVGFEMerge.cpp:
        (WebCore::FEMerge::apply):
        * svg/graphics/filters/SVGFEOffset.cpp:
        (WebCore::FEOffset::apply):
        * svg/graphics/filters/SVGFETile.cpp:
        (WebCore::FETile::apply):

2009-11-20  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7389945> QTKit based media engine should not claim to support 
        fullscreen on Leopard

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::supportsFullscreen):
            Only return true on SnowLeopard for now.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::shouldRenderMediaControlPart):
            No need to special case MediaFullscreenButtonPart as the default implementation 
            asks the media engine if it supports fullscreen.

2009-11-18  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        Patch by Yongjun Zhang <yongjun.zhang@nokia.com> and
                 Girish Ramakrishnan <girish@forwardbias.in>
        
        [Qt] Implement support for rendering plugins on Qt/Mac when a page is used
        without a QWebView or when inside QGraphicsWebView.
        
        Currently, the code provides the cgcontext of the PlatformPluginWidget to
        the plugin. This approach does not work when we are printing, or using
        QWebFrame::render() to render to a QImage/QPixmap since the plugin ends
        up drawing on the QWebView (i.e platformPluginWidget's cgcontext) instead
        of the QPaintDevice's context.
        
        To solve all cases and keep the code simple, we render the plugin to an
        offscreen pixmap in all cases. This way, the plugin always renders to the
        CGContext of the pixmap and we then use QPainter to blit the pixmap into
        the QPaintDevice. We also create a fake window and set it's WindowRef in
        NPWindow. Only with this WindowRef does Flash paint correctly to the QPixmap.
        
        Now, that's the theory. In practice, ATM, mouse events do not work when using
        the fake window. So, setPlatformPluginWidget() is still called when using QWebView
        so that there are no regressions after this patch. Once we get mouse events
        working, setPlatformPluginWidget will be removed.
        
        https://bugs.webkit.org/show_bug.cgi?id=31183

        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::platformDestroy):
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::invalidateRect):

2009-11-19  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Resync Resources Backend and Frontend
        https://bugs.webkit.org/show_bug.cgi?id=31705

        * inspector/front-end/Resource.js: resync enum values with backend
        (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType): return false if all else fails, not true in all cases

2009-11-19  Steve Block  <steveblock@google.com>

        Reviewed by Darin Fisher.

        Android port lacks configuration in Platform.h and config.h.
        https://bugs.webkit.org/show_bug.cgi?id=31671

        Build change only. No new tests possible.

        * config.h: Modified. Added Android-specific configuration.

2009-11-20  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Darin Adler.

        Change default stylesheet to reset text indentation for ruby elements by default.
        (https://bugs.webkit.org/show_bug.cgi?id=31247)

        Test: fast/ruby/ruby-text-indent.html

        * css/html.css: reset text-indent on <ruby> and <rt> elements

2009-11-19  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.

        Fixes <http://webkit.org/b/22754>.
        Web Inspector: Keyboard shortcut for Element finder.

        Use Command + Shift + C as a shortcut for Node Search, to 
        match the Firebug shortcut to do the same thing.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.handleKeyEvent):

2009-11-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=31690
        Make SocketStreamHandleCFNet work on Windows

        * WebCore.vcproj/WebCore.vcproj: Added LoaderRunLoopCF.

        * platform/network/ResourceHandle.h: Removed loaderRunLoop().

        * platform/network/cf/LoaderRunLoopCF.cpp: Added.
        (WebCore::emptyPerform):
        (WebCore::runLoaderThread):
        (WebCore::loaderRunLoop):
        * platform/network/cf/LoaderRunLoopCF.h: Added.
        Moved the run loop that we use for CFNetwork from ResourceHandle to its own file, because
        it's needed for more than just resource loading.

        * platform/network/cf/ResourceHandleCFNet.cpp: Use loaderRunLoop() from its new location.

        * platform/network/cf/DNSCFNet.cpp: (WebCore::DNSResolveQueue::resolve): Ditto.

        * platform/network/cf/SocketStreamHandle.h: Added static callbacks for forwarding events to
        main thread.
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::SocketStreamHandle): Use loaderRunLoop() on Windows instead of
        inoperable main run loop.

        (WebCore::MainThreadEventCallbackInfo::MainThreadEventCallbackInfo): 
        (WebCore::SocketStreamHandle::readStreamCallback):
        (WebCore::SocketStreamHandle::writeStreamCallback):
        (WebCore::SocketStreamHandle::readStreamCallbackMainThread):
        (WebCore::SocketStreamHandle::writeStreamCallbackMainThread):
        Forward stream events to main thread on Windows.

2009-11-19  Avi Drissman  <avi@chromium.org>

        Reviewed by Darin Adler.

        Quick style fix.
        https://bugs.webkit.org/show_bug.cgi?id=27777

        * platform/graphics/cg/PDFDocumentImage.cpp:

2009-11-19  Beth Dakin  <bdakin@apple.com>

       Build fix. No review needed.

        * platform/chromium/ScrollbarThemeChromium.cpp:
        (WebCore::ScrollbarThemeChromium::paintTickmarks):
        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaButton):

2009-11-19  Beth Dakin  <bdakin@apple.com>
      
       Build fix. No review needed.

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintCheckbox):
        (WebCore::RenderThemeChromiumSkia::paintRadio):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldCancelButton):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsButton):

2009-11-19  Beth Dakin  <bdakin@apple.com>

       Build fix. No review needed.

        * platform/graphics/qt/StillImageQt.cpp:
        (WebCore::StillImage::draw):
        * platform/graphics/qt/StillImageQt.h:

2009-11-19  Beth Dakin  <bdakin@apple.com>

       Build fix. No review needed.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintSearchFieldCancelButton):
        (WebCore::RenderThemeWin::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeWin::paintSearchFieldResultsButton):

2009-11-19  Beth Dakin  <bdakin@apple.com>

       Build fix. No review needed.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::paintMissingPluginIcon):

2009-11-19  Beth Dakin  <bdakin@apple.com>

        Build fix. No review needed.

        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):

2009-11-19  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=31321 Make -webkit-
        color-correction work with untagged images

        Image's draw(), drawPattern(), and fillWithSolidColor() functions 
        now take a ColorSpace. A bunch of classes inherit from Image, so 
        draw() and drawPattern() functions there must also take a 
        ColorSpace.
        * platform/graphics/Image.cpp:
        (WebCore::Image::fillWithSolidColor):
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/GeneratedImage.cpp:
        (WebCore::GeneratedImage::draw):
        (WebCore::GeneratedImage::drawPattern):
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::draw):
        * platform/graphics/cg/PDFDocumentImage.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):
        * svg/graphics/SVGImage.h:

        All of the drawImage() functions and drawTiled() functions of 
        GraphicsContext now take a ColorSpace.
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/graphics/GraphicsContext.h:

        This is where the actual work is done.
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::imageWithColorSpace): New static function that returns a 
        copy of the given image in the given ColorSpace *IF* we should use 
        the given ColorSpace. We will ignore the color space if the image 
        is tagged and return 0. 
        (WebCore::BitmapImage::draw): Now takes a ColorSpace and uses it to 
        call imageWithColorSpace(). 
        (WebCore::Image::drawPattern): Same.

        Attempt to keep all ports building. 
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):
        * platform/graphics/haiku/ImageHaiku.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::drawPattern):
        (WebCore::BitmapImage::draw):
        * platform/graphics/skia/BitmapImageSingleFrameSkia.h:
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::Image::drawPattern):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImageSingleFrameSkia::draw):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::drawPattern):

        Callers of GraphicsContext's drawImage() and drawTiled() functions 
        now need to send a ColorSpace.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::drawImageFromRect):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::apply):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::apply):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::apply):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintResizer):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        * svg/graphics/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        * svg/graphics/SVGResourceFilter.cpp:
        (WebCore::SVGResourceFilter::applyFilter):
        * svg/graphics/filters/SVGFEMerge.cpp:
        (WebCore::FEMerge::apply):
        * svg/graphics/filters/SVGFEOffset.cpp:
        (WebCore::FEOffset::apply):
        * svg/graphics/filters/SVGFETile.cpp:
        (WebCore::FETile::apply):

2009-11-19  Avi Drissman  <avi@chromium.org>

        Reviewed by Darin Adler.

        Properly create a CGImageRef on non-PLATFORM(MAC).
        https://bugs.webkit.org/show_bug.cgi?id=27777

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::sharedBufferGetBytesAtPosition):
        (WebCore::sharedBufferRelease):
        (WebCore::ImageSource::setData):
        * platform/graphics/cg/ImageSourceCG.h:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dataChanged):

2009-11-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Dave Hyatt.

        -webkit-user-drag: element Drag images include overflow decorations from incorrect nodes
        https://bugs.webkit.org/show_bug.cgi?id=31656

        Make sure we're a child of the painting root before drawing overflow features.

        * manual-tests/user-drag-with-decorations.html: Added.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):

2009-11-19  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, attempt to fix Chromium build.

        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::RenderMediaControlsChromium::paintMediaControlsPart): Add new enum values for Show/HideClosedCaptionButton to make it compile.

2009-11-19  Rahul Kuchhal  <kuchhal@chromium.org>

        Reviewed by Darin Adler.

        Do not assert when a high number is used for roman numerals in lists.
        https://bugs.webkit.org/show_bug.cgi?id=31652

        Test: fast/lists/ol-start-roman.html

        * rendering/RenderListMarker.cpp:
        (WebCore::toRoman): Increase the char array size.

2009-11-19  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Oliver Hunt.

        Add translatable strings to cover validationMessage, after
        r51172. Already covered by existing test.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::validationMessageValueMissingText):
        (WebCore::validationMessageTypeMismatchText):
        (WebCore::validationMessagePatternMismatchText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageStepMismatchText):

2009-11-19  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Remove HAVE(FLOAT_H) guard
        https://bugs.webkit.org/show_bug.cgi?id=31661

        WebCore has a dependency on float.h, there is
        no need to guard float.h.

        No new tests as there is no functional change.

        * html/HTMLInputElement.cpp: Remove include directive
        for float.h as it is included in MathExtras.h already.

2009-11-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Pavel Feldman.

        Instrumentation should account for painting in compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=31674

        Add calls to InspectorTimelineAgent for painting into compositing layers,
        which is not accounted for in FrameView::paintContents().

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        Avoid fetching the FrameView multiple times.
        
        (WebCore::inspectorTimelineAgent):
        (WebCore::RenderLayerBacking::paintContents):

2009-11-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7035231>
        Support closed caption in <video> element

        Test: media/media-captions.html

        * WebCore.base.exp:
        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::controlTypeName):
            Define ShowClosedCaptionsButton and HideClosedCaptionsButton.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
            Add MediaToggleClosedCaptionsButtonPart.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
            Define and match mediaControlsToggleClosedCaptionsButton.

        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
            Define and match PseudoMediaControlsToggleClosedCaptions.

        * css/CSSValueKeywords.in:
            Define and use media-toggle-closed-captions-button.

        * css/mediaControls.css:
        * css/mediaControlsQuickTime.css:
            Add webkit-media-controls-toggle-closed-captions-button.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): 
            Initialize m_closedCaptionsVisible.
        (WebCore::HTMLMediaElement::loadInternal): 
            Set m_closedCaptionsVisible to false.
        (WebCore::HTMLMediaElement::hasClosedCaptions): 
        (WebCore::HTMLMediaElement::closedCaptionsVisible): 
        (WebCore::HTMLMediaElement::setClosedCaptionsVisible): 
            New, captions internal methods.
        (WebCore::HTMLMediaElement::setWebkitClosedCaptionsVisible): 
        (WebCore::HTMLMediaElement::webkitClosedCaptionsVisible): 
        (WebCore::HTMLMediaElement::webkitHasClosedCaptions): 
            New, captions DOM API.

        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
            Declare methods needed for captions API.

        * platform/ThemeTypes.h:
            Add MediaToggleClosedCaptionsButtonPart.

        * platform/android/LocalizedStringsAndroid.cpp:
        (WebCore::localizedMediaControlElementString):
        (WebCore::localizedMediaControlElementHelpText):
        (WebCore::localizedMediaTimeDescription):
            Add empty implmentations.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::hasClosedCaptions):
        (WebCore::NullMediaPlayerPrivate::setClosedCaptionsVisible):
            New, empty implementations of media engine closed caption functions.
        (WebCore::MediaPlayer::hasClosedCaptions):
        (WebCore::MediaPlayer::setClosedCaptionsVisible):
            New, call media engine closed caption functions.

        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::hasClosedCaptions):
        (WebCore::MediaPlayerPrivateInterface::setClosedCaptionsVisible):
            Declare new media engine methods.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::hasClosedCaptions):
        (WebCore::MediaPlayerPrivate::setClosedCaptionsVisible):
            New, QTKit implementation of closed caption methods.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::localizedMediaControlElementString):
        (WebCore::localizedMediaControlElementHelpText):
            Add help text for ShowClosedCaptionsButton and HideClosedCaptionsButton.

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
            Declare and initialize wkQTMovieHasClosedCaptions and wkQTMovieSetShowClosedCaptions.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlInputElement::MediaControlInputElement):
            Deal with MEDIA_CONTROLS_TOGGLE_CLOSED_CAPTIONS_BUTTON.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::updateDisplayType):
            New, implement the closed caption toggle button,

        * rendering/MediaControlElements.h:
            Define MediaShowClosedCaptionsButton and MediaHideClosedCaptionsButton,
            declare MediaControlToggleClosedCaptionsButtonElement.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::styleDidChange):
        (WebCore::RenderMedia::createToggleClosedCaptionsButton):
        (WebCore::RenderMedia::createStatusDisplay):
        (WebCore::RenderMedia::updateControls):
        (WebCore::RenderMedia::forwardEvent):
        * rendering/RenderMedia.h:
            Deal with m_toggleClosedCaptionsButton.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
            Deal with MediaToggleClosedCaptionsButtonPart.

        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
            Declare paintMediaToggleClosedCaptionsButton.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMediaToggleClosedCaptionsButton):
            New.
        (WebCore::RenderThemeMac::shouldRenderMediaControlPart):
            Don't render captions toggle button unless we are using the new theme, the
            movie has captions, and the movie is in a <video> element since we currently
            rely on QTKit to render the captions.

        * rendering/style/RenderStyleConstants.h:
            Define MEDIA_CONTROLS_TOGGLE_CLOSED_CAPTIONS_BUTTON.

2009-11-19  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Add missing header.

        * platform/wx/LocalizedStringsWx.cpp:

2009-11-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=31634
        Ignore realm for proxy protection spaces

        Only affects WebSocket proxy authentication, cannot be tested in DRT.

        * platform/network/ProtectionSpace.cpp:
        (WebCore::operator==):
        * platform/network/ProtectionSpaceHash.h:
        (WebCore::ProtectionSpaceHash::hash):

2009-11-19  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Simon Hausmann.

        [Qt] Normalize signal and slot signatures.

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):

2009-11-19  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Store cookie domains in the WebInspector object

        The cookie domains have been moved from StoragePanel into WebInspector.
        Also, the document URLs are now passed inside the WebInspector.addResource()
        payload rather than pushed directly from InspectorController.
        https://bugs.webkit.org/show_bug.cgi?id=31627

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::didFinishLoading):
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::createScriptObject):
        (WebCore::InspectorResource::updateScriptObject):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.reset):
        (WebInspector.StoragePanel.prototype.addCookieDomain):
        * inspector/front-end/inspector.js:
        (WebInspector.addResource):
        (WebInspector.addCookieDomain):
        (WebInspector.reset):

2009-11-19  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for the other part of platform directory in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=31585

        Inherits the following classes from FastAllocBase because these are
        instantiated by 'new':

        class RegularExpression    - instantiated at: WebCore/page/Frame.cpp:415
        class TransformationMatrix - instantiated at: WebCore/rendering/TransformState.cpp:62
        class Path                 - instantiated at: WebCore/html/HTMLAreaElement.cpp:73
        class FontPlatformData     - instantiated at: WebCore/platform/graphics/qt/FontCacheQt.cpp:188

        Inherits the following classes from Noncopyable because these are
        instantiated by 'new' and no need to be copyable:

        class Cursors                         - instantiated at: WebCore/platform/qt/CursorQt.cpp:146
        class NetworkStateNotifier            - instantiated at: WebCore/platform/network/NetworkStateNotifier.cpp:37
        struct CrossThreadResourceRequestData - instantiated at: WebCore/platform/network/ResourceRequestBase.cpp:71

        class ImageDecoder - its child class is instantiated at: WebCore/platform/graphics/qt/ImageDecoderQt.cpp:46
        class MediaPlayerPrivateInterface - its child class is instantiated at: WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:119

        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/Path.h:
        * platform/graphics/qt/FontPlatformData.h:
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/image-decoders/ImageDecoder.h:
        * platform/network/NetworkStateNotifier.h:
        * platform/network/ResourceRequestBase.h:
        * platform/qt/CursorQt.cpp:
        * platform/text/RegularExpression.h:

2009-11-18  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        [Qt] Build fix for QtWebKit after r51172.

        * platform/qt/Localizations.cpp:
        (WebCore::validationMessageValueMissingText):
        (WebCore::validationMessageTypeMismatchText):
        (WebCore::validationMessagePatternMismatchText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageStepMismatchText):

2009-11-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Fixed <rdar://problem/7398987> Assertion failure in
        RenderLayer::updateClipRects when a plug-in’s enclosing layer is
        enclosed by a transformed layer

        Tests: fast/layers/clip-rects-transformed-2.html
               fast/layers/clip-rects-transformed.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clippingRoot): Added. Finds the nearest ancestor
        that is either transformed or composited. During painting and hit
        testing, when a transformed or composited layer is hit, it becomes the
        new root layer, which ultimately gets passed to calculateRects().
        (WebCore::RenderLayer::childrenClipRect): Pass the clipping root as the
        root layer to calculateRects(), and return the bounding box of the
        transformed rectangle.
        (WebCore::RenderLayer::selfClipRect): Ditto.
        * rendering/RenderLayer.h:

2009-11-18  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove support for Qt v4.3 or older versions
        https://bugs.webkit.org/show_bug.cgi?id=29469

        No new tests as there is no change if compiled with 
        Qt v4.4 or later version.

        * WebCore.pro:
        * dom/XMLTokenizerQt.cpp:
        (WebCore::EntityResolver::resolveUndeclaredEntity):
        (WebCore::XMLTokenizer::XMLTokenizer):
        (WebCore::XMLTokenizer::~XMLTokenizer):
        (WebCore::XMLTokenizer::doWrite):
        (WebCore::XMLTokenizer::startDocument):
        (WebCore::XMLTokenizer::parseDtd):
        * platform/graphics/qt/FontQt.cpp:
        * platform/graphics/qt/FontQt43.cpp: Removed.
        * platform/graphics/qt/ImageQt.cpp:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        (WebCore::ResourceHandle::setDefersLoading):
        * platform/network/qt/ResourceRequest.h:
        * platform/network/qt/ResourceRequestQt.cpp:
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::clearData):
        * platform/qt/CookieJarQt.cpp:
        (WebCore::cookieJar):
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::keyIdentifierForQtKeyCode):
        (WebCore::windowsKeyCodeForKeyEvent):
        * platform/text/qt/TextBoundaries.cpp:
        * platform/text/qt/TextBreakIteratorQt.cpp:
        * plugins/qt/PluginDataQt.cpp:
        (WebCore::PluginData::initPlugins):

2009-11-18  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Darin Adler.

        Fix for <https://bugs.webkit.org/show_bug.cgi?id=27959>.
        Support for validationMessage attribute, as per HTML5 specs.

        Test: fast/forms/validationMessage.html

        * html/HTMLButtonElement.idl: validationMessage attribute
        * html/HTMLFieldSetElement.idl: validationMessage attribute
        * html/HTMLFormControlElement.cpp:
        * html/HTMLFormControlElement.h:
        * html/HTMLInputElement.idl: validationMessage attribute
        * html/HTMLSelectElement.idl: validationMessage attribute
        * html/HTMLTextAreaElement.idl: validationMessage attribute
        * html/ValidityState.cpp: new method to retrieve pertinent localized text
        * html/ValidityState.h:
        * page/mac/WebCoreViewFactory.h:
        * platform/LocalizedStrings.h:
        * platform/android/LocalizedStringsAndroid.cpp:
        * platform/gtk/LocalizedStringsGtk.cpp:
        * platform/haiku/LocalizedStringsHaiku.cpp:
        * platform/mac/LocalizedStringsMac.mm:
        * platform/wx/LocalizedStringsWx.cpp:

2009-11-18  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        Fix a typo. Remove the trailing semicolon
        from an include directive after r51137.

        No new tests as there is no functional change.

        * platform/qt/QWebPageClient.h:

2009-11-18  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        [Qt] Build fix for QtWebKit after r51159.

        Include float.h for DBL_MANT_DIG. Not sure why this
        is not a problem for other ports.

        * html/HTMLInputElement.cpp:

2009-11-19  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Darin Adler.

        Bug 31574 -  Crashing bug when removing <ruby> element
        (https://bugs.webkit.org/show_bug.cgi?id=31574)

        Cause of the bug:
        1.) RenderBlock::destroy() of the RenderRubyRun called destroyLeftoverChildren()
        2.) that called destroy() of the RenderRubyBase(), which in RenderObject::destroy() calls remove()
        3.) remove() is being redirected as parent()->removeChild() in RenderObject.h
        4.) this triggers the special handling of child removal in RenderRubyRun that
            causes it to destroy itself
        5.) On returning from all this the renderer crashes when accessing a member
            or virtual function on this now illegal object.

        I therefore added a flag that tracks if the ruby run is being destroyed.
        If so, avoid doing the special handling in removeChild that caused this.
        It's not the most elegant solution, but the easiest to implement without
        touching unrelated code. Also, it's self-documenting.

        Test: fast/ruby/ruby-remove.html

        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::RenderRubyRun):
        (WebCore::RenderRubyRun::destroy):
        (WebCore::RenderRubyRun::removeChild):
        * rendering/RenderRubyRun.h:

2009-11-18  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove WTF_USE_JAVASCRIPTCORE_BINDINGS as it is no longer used
        https://bugs.webkit.org/show_bug.cgi?id=31643

        No new tests as there is no functional change.

        * WebCore.pro:

2009-11-18  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Eric Seidel.

        Implement TextBoundaries for WINCE port.
        https://bugs.webkit.org/show_bug.cgi?id=27371

        * platform/text/wince/TextBoundariesWince.cpp: Added.

2009-11-18  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Eric Seidel.

        Implement TextBreakIterator for WINCE port.
        https://bugs.webkit.org/show_bug.cgi?id=27371

        * platform/text/wince/TextBreakIteratorWince.cpp: Added.

2009-11-18  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Add support for ValidityState.typeMismatch for the following INPUT types:
          date datetime datetime-local month time week
        https://bugs.webkit.org/show_bug.cgi?id=31342

        Tests: fast/forms/ValidityState-typeMismatch-date.html
               fast/forms/ValidityState-typeMismatch-datetime.html
               fast/forms/ValidityState-typeMismatch-datetimelocal.html
               fast/forms/ValidityState-typeMismatch-month.html
               fast/forms/ValidityState-typeMismatch-time.html
               fast/forms/ValidityState-typeMismatch-week.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::formStringToISODateTime): Check the type
          validity of the specified type and string using the ISODateTime class.
        * html/HTMLInputElement.h:
        * html/ValidityState.cpp:
        (WebCore::ValidityState::typeMismatch): Check the type validity
          for date, datetime, datetime-local, month, time and week with
          HTMLInputElemtn::formStringToISODateTime()

2009-11-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        Fix REGRESSION (r47022): Performance of DocumentFragment.appendChild is 1000x slower sometimes
        https://bugs.webkit.org/show_bug.cgi?id=31237
        
        Also speeds up Dromaeo DOM Core tests by 1.31x.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::markChildren): Change marking algorithm to avoid O(N^2) behavior. The subtree
        mark bit was no longer effective; instead I changed things so only a node that has no ancestors
        with wrappers would do marking; there should be only one in the typical case (the root of the
        detached subtree).
        * dom/Node.cpp:
        (WebCore::Node::Node): Remove now useless m_inSubtreeMark bit and related functions.
        * dom/Node.h: ditto

2009-11-18  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Get rid of the redundant strokeType and fillType data members on
        a GraphicsContext as well as the FillOrStrokeType enum. Use
        null pointers instead.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setStrokeColor): Null out the pattern
        and gradient.
        (WebCore::GraphicsContext::setFillColor): Ditto.
        (WebCore::GraphicsContext::setStrokePattern): Null out the graident.
        (WebCore::GraphicsContext::setFillPattern): Ditto.
        (WebCore::GraphicsContext::setStrokeGradient): Null out the pattern.
        (WebCore::GraphicsContext::setFillGradient): Ditto.

        * platform/graphics/GraphicsContextPrivate.h: Remove all that stuff.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::setPlatformFill): Use null checks on fillPattern and
        fillGraident instead of a switch statement.
        (WebCore::setPlatformStroke): Ditto.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::applyStrokePattern): Removed unneeded get.
        (WebCore::GraphicsContext::applyFillPattern): Ditto.
        (WebCore::calculateDrawingMode): Use fillPattern and strokePattern
        to see if there is a pattern instead of fillType and strokeType.
        (WebCore::GraphicsContext::drawPath): Use fillGradient, strokeGradient,
        fillPattern, and strokePattern instead of fillType and strokeType.
        (WebCore::GraphicsContext::fillPath): Added FIXME about color space that
        is used in the pattern and gradient case probably erroneously. Moved
        gradient code inside an if statement. Streamlined pattern code and
        use an if statement. No switch any more.
        (WebCore::GraphicsContext::strokePath): Ditto.
        (WebCore::GraphicsContext::fillRect): Ditto.
        (WebCore::GraphicsContext::strokeRect): Ditto.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillPath): Use null checks on fillPattern and
        fillGraident instead of a switch statement.
        (WebCore::GraphicsContext::strokePath): Ditto.
        (WebCore::GraphicsContext::fillRect): Ditto.

        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::fillPath): Removed unneeded check of fillType.
        (WebCore::GraphicsContext::fillRect): Ditto.

2009-11-18  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Support for step attribute and ValidityStae.stepMismatch for
        type=number and range.  stepMismatch will be false if the
        difference between the current value and a multiple of the step
        value is very small.

        Change the behavior of RenderSlider so that it always has a value
        rounded to the step attribute value.

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

        Tests: fast/forms/ValidityState-stepMismatch-number.html
               fast/forms/ValidityState-stepMismatch-range.html
               fast/forms/ValidityState-stepMismatch-unsupported.html
               fast/forms/input-step.html

        * html/HTMLAttributeNames.in: Add "step".
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::stepMismatch):
        (WebCore::HTMLInputElement::getStepParameters):
        (WebCore::HTMLInputElement::getAllowedValueStep):
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl: Add "step".
        * html/ValidityState.cpp:
        (WebCore::ValidityState::stepMismatch): Forward to HTMLInputElement::stepMismatch().
        * html/ValidityState.h:
        * rendering/RenderSlider.cpp:
        (WebCore::SliderRange::SliderRange):
        (WebCore::SliderRange::clampValue):

2009-11-18  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        Need to ASSERT(isMainThread()) in ThreadShared methods.
        https://bugs.webkit.org/show_bug.cgi?id=31637

        Added ASSERT(IsMainThread()) to all following methods:
        * platform/TreeShared.h:
        (WebCore::TreeShared::TreeShared):
        (WebCore::TreeShared::~TreeShared):
        (WebCore::TreeShared::ref):
        (WebCore::TreeShared::deref):
        (WebCore::TreeShared::setParent):
        (WebCore::TreeShared::parent):

2009-11-18  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Eric Seidel.

        Add plugin visibility manual test

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

        * manual-tests/plugins/windowed.html:
        * manual-tests/plugins/windowless.html:

2009-11-18  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Pavel Feldman.

        Web Inspector - remember last script displayed in Scripts panel
        https://bugs.webkit.org/show_bug.cgi?id=27552

        Manual test added
        
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.showScript):
        (WebInspector.ScriptsPanel.prototype.showResource):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        (WebInspector.ScriptsPanel.prototype._goBack):
        (WebInspector.ScriptsPanel.prototype._goForward):
        * manual-tests/inspector/remember-last-script.html: Added.

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

        Reviewed by Dimitri Glazkov.

        Win chromium is slow to draw transparent texts
        https://bugs.webkit.org/show_bug.cgi?id=31258

        Create bounded transparency layers instead of just clipping.

        No new tests because this is just a performance improvement.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::initializeForGDI):

2009-11-18  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Add support for displaying deleteButton.
        https://bugs.webkit.org/show_bug.cgi?id=31560

        Test: LayoutTests/editing/deleting/5408255.html

        * WebCore.qrc:
        * platform/graphics/qt/ImageQt.cpp:
        (loadResourcePixmap):

2009-11-18  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Eric Seidel.

        Fix Qt build without JavaScript debugger.

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

        * page/Console.idl:

2009-11-18  Daniel Bates  <dbates@webkit.org>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=24971
        And
        <rdar://problem/7138265>

        Fixes an issue where setting the height of a table row programmatically
        (via JavaScript) causes the table to be improperly rendered because the
        height of each row in the table is not recalculated with respect to the
        CSS height property.

        In particular, programmatically setting the height of some table row causes
        the rows of that table to be rendered with a height equal to the minimum
        height required by the cells in that row, regardless of any specified cell
        heights. Instead, when RenderTableSection::recalcCells is called, the height
        of each row should be set to the CSS height property just as we do in
        RenderTableSection::addChild.

        Test: fast/table/row-height-recalc2.html

        * rendering/RenderTableSection.cpp:
        (WebCore::setRowHeightToRowStyleHeightIfNotRelative): Added.
        (WebCore::RenderTableSection::addChild): Moved code that set row height into
        method WebCore::setRowHeightToRowStyleHeightIfNotRelative.
        (WebCore::RenderTableSection::recalcCells): Modified to call
        WebCore::setRowHeightToRowStyleHeightIfNotRelative.

2009-11-18  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for the part of platform directory in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=31473

        Inherits the following classes from FastAllocBase because these are
        instantiated by 'new':

        class  AnimationList         - instantiated at WebCore/rendering/style/StyleRareNonInheritedData.cpp:85
        class  Color                 - instantiated at WebCore/rendering/RenderTheme.cpp:48
        struct Length                - instantiated at WebCore/platform/Length.cpp:103
        class  PlatformKeyboardEvent - instantiated at WebCore/dom/KeyboardEvent.cpp:63
        class  ContextMenuItem       - instantiated at WebCore/platform/ContextMenu.cpp:70
        class  DeprecatedPtrList     - instantiated at WebCore/rendering/RenderBlock.cpp:2284

        Inherits the following classes from Noncopyable because these are
        instantiated by 'new' and no need to be copyable:

        class  GraphicsContextPrivate - instantiated at WebCore/platform/graphics/GraphicsContext.cpp:78
        class  FontCache              - instantiated at WebCore/platform/graphics/qt/FontCacheQt.cpp:43
        struct MediaPlayerFactory     - instantiated at WebCore/platform/graphics/MediaPlayer.cpp:163
        class  DeprecatedPtrListNode  - instantiated at WebCore/platform/DeprecatedPtrListImpl.cpp:53

        * platform/ContextMenuItem.h:
        * platform/DeprecatedPtrList.h:
        * platform/DeprecatedPtrListImpl.cpp:
        * platform/Length.h:
        * platform/PlatformKeyboardEvent.h:
        * platform/animation/AnimationList.h:
        * platform/graphics/Color.h:
        * platform/graphics/FontCache.h:
        * platform/graphics/GraphicsContextPrivate.h:
        * platform/graphics/MediaPlayer.cpp:

2009-11-18  Daniel Bates  <dbates@webkit.org>

        Reviewed by Darin Adler.

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

        Renames RenderTextControl::m_edited and RenderTextControl::m_userEdited to
        m_wasChangedSinceLastChangeEvent and m_lastChangeWasUserEdit, respectively.
        These are more descriptive names so as to clear an ambiguity surrounding
        their usage. Also, renames associated setters and getters so that they
        coincide with the renamed fields.

        No functionality was changed. So, no tests were included.

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _isEdited]):
        (-[DOMHTMLTextAreaElement _isEdited]):
        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        (WebCore::RenderTextControl::setInnerTextValue):
        (WebCore::RenderTextControl::setLastChangeWasUserEdit): Formerly named setUserEdited.
        (WebCore::RenderTextControl::subtreeHasChanged):
        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::wasChangedSinceLastChangeEvent): Formerly named isEdited.
        (WebCore::RenderTextControl::setChangedSinceLastChangeEvent): Formerly named setEdited.
        (WebCore::RenderTextControl::lastChangeWasUserEdit): Formerly named setUserEdited.
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::defaultEventHandler):

2009-11-18  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        Remove V8CanvasPixelArrayCustom.cpp because it is no longer used by V8.
        https://bugs.webkit.org/show_bug.cgi?id=31499

        No new tests, just a build cleanup.

        * WebCore.gypi:
        * bindings/v8/custom/V8CanvasPixelArrayCustom.cpp: Removed.
        * bindings/v8/custom/V8CustomBinding.h:

2009-11-18  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Enable wx plugin support using the Windows implementation as a base.
        
        https://bugs.webkit.org/show_bug.cgi?id=31636

        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::inTransparencyLayer):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::getWindowsContext):
        (WebCore::GraphicsContext::releaseWindowsContext):
        * platform/wx/FileSystemWx.cpp:
        (WebCore::unloadModule):
        (WebCore::listDirectory):
        * plugins/PluginDatabase.cpp:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::stop):
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/win/PluginViewWin.cpp:
        (windowHandleForPageClient):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::snapshot):
        * wscript:

2009-11-18  Andrei Popescu  <andreip@google.com>

        Reviewed by Dimitri Glazkov.

        [Android] Add shared timer and sound utilities to platform/android
        https://bugs.webkit.org/show_bug.cgi?id=31584

        No new tests required, this is platform specific code.

        * platform/android/SharedTimerAndroid.cpp: Added.
        (WebCore::setSharedTimerFiredFunction):
        (WebCore::setSharedTimerFireTime):
        (WebCore::stopSharedTimer):
        * platform/android/SoundAndroid.cpp: Added.
        (WebCore::systemBeep):

2009-11-18  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Fix profile tree nodes loss after focus / restore actions.

        Focusing on a node is currently implemented via nodes reattaching
        with some caching involved. It seems that not all code was updated
        to handle this scenario correctly.

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

        * inspector/front-end/BottomUpProfileDataGridTree.js:
        (WebInspector.BottomUpProfileDataGridNode):
        (WebInspector.BottomUpProfileDataGridNode.prototype._restore):
        (WebInspector.BottomUpProfileDataGridNode.prototype._sharedPopulate):
        (WebInspector.BottomUpProfileDataGridNode.prototype._willHaveChildren):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype.insertChild):
        (WebInspector.DataGridNode.prototype._detach):
        (WebInspector.DataGridNode.prototype.savePosition):
        (WebInspector.DataGridNode.prototype.restorePosition):
        * inspector/front-end/TopDownProfileDataGridTree.js:
        (WebInspector.TopDownProfileDataGridTree.prototype.focus):
        (WebInspector.TopDownProfileDataGridTree.prototype.restore):

2009-11-18  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QWebPageClient.h needs in some cases QCursor, but it does not
        include it 
        https://bugs.webkit.org/show_bug.cgi?id=31527

        No new tests as this is just a coding style fix that affects the 
        build of some not yet submitted patches (i.e. for bug 30173).

        * platform/qt/QWebPageClient.h:

2009-11-18  Nicolas Roard   <nicolas@roard.com>

        Reviewed by Dimitri Glazkov.

        InspectorTimelineAgent.h should be guarded by ENABLE(INSPECTOR)
        https://bugs.webkit.org/show_bug.cgi?id=31504

        * inspector/InspectorTimelineAgent.h:Added the guard.

2009-11-18  Jens Alfke  <snej@chromium.org>

        Build fix to my previous checkin, for Windows Chromium

        * svg/SVGAnimatedProperty.h:
        (WebCore::PropertySynchronizer::synchronize): Fix implicit-conversion error on AtomicString.

2009-11-18  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Directly Access <head> Instead of Searching for It
        https://bugs.webkit.org/show_bug.cgi?id=31641
        
        Changed old access of the head element (document.getElementsByTagName)
        to just use the document.head accessor.

        * inspector/front-end/FontView.js:
        (WebInspector.FontView):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.addStyleSelector):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._loaded):
        * inspector/front-end/inspector.js:
        (windowLoaded):

2009-11-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix two Geolocation assertions.

        * page/Chrome.cpp:
        (WebCore::Chrome::requestGeolocationPermissionForFrame): No need to use PageGroupLoadDeferrer since this
        is not called from JS. 
        * page/Geolocation.cpp:
        (WebCore::Geolocation::Watchers::set): The PassRefPtr was getting nulled out, so we need to put it in
        a RefPtr first.

2009-11-18  Alexey Proskuryakov  <ap@apple.com>

        Case sensitive file system build fix.

        * platform/network/Credential.h: It's not WTF, just wtf.

2009-11-18  Aaron Golden  <agolden@apple.com>

        Reviewed by Alexey Proskuryakov.

        Add support for certificates to WebCore::Credential so we can convert between NSURLCredential
        objects and WebCore::Credential objects without losing certificate information.

        * platform/network/Credential.cpp:
        (WebCore::Credential::Credential):  Adding a constructor that takes an identity argument and a certificate chain argument
        (WebCore::Credential::isEmpty):  Modifying isEmpty to support certificate based credentials (which don't have a username or password)
        (WebCore::Credential::identity): Accessor for the m_identity property
        (WebCore::Credential::certificates): Accessor for the m_certificates property
        (WebCore::Credential::type):  Accessor for the m_type property
        (WebCore::operator==):  Modifying == to compare the identity and certificate chains of certificate based credentials.
        * platform/network/Credential.h:  Adding new fields to WebCore::Credential to support certificate based credentials.
        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::mac):  Modifying the mac() conversion method to correctly convert certificate based WebCore::Credential objects.
        (WebCore::core):  Modifying the core() conversion method to correctly convert certificate based NSURLCredential objects.

2009-11-18  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Eric Seidel.

        Reverting r50919 that has introduced a non-thread-safe refcounting in ScriptExecutionContext::postTaskToMainThread.
        https://bugs.webkit.org/show_bug.cgi?id=31615

        * dom/Document.cpp:
        (WebCore::ScriptExecutionContextTaskTimer::ScriptExecutionContextTaskTimer):
        (WebCore::ScriptExecutionContextTaskTimer::fired):
        (WebCore::PerformTaskContext::PerformTaskContext):
        (WebCore::performTask):
        (WebCore::Document::postTask):
        * dom/ScriptExecutionContext.cpp:
        * dom/ScriptExecutionContext.h:

2009-11-18  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Adler.

        Eliminate unnecessary String-->AtomicString conversions from generated V8 bindings,
        by causing the right v8-to-WebCore conversion function to be called for every parameter.
        This no longer requires any IDL metadata, so I've removed the [HintAtomic] annotations.
        To enforce correctness, I added a mode that disables implicit
        String-->AtomicString conversions while compiling the generated bindings.
        https://bugs.webkit.org/show_bug.cgi?id=31168

        * bindings/scripts/CodeGeneratorV8.pm:  Generate usage of V8Parameter class.
        * bindings/v8/DerivedSourcesAllInOne.cpp:  Enable NO_IMPLICIT_ATOMICSTRING.
        * bindings/v8/V8Binding.h:  Add V8Parameter class.
        * css/WebKitCSSKeyframesRule.h:  Make AtomicString conversions explicit.
        * dom/Document.idl:  Remove obsolete [HintAtomic] annotation.
        * platform/text/AtomicString.h:  Added NO_IMPLICIT_ATOMICSTRING option.
        * svg/SVGAnimatedTemplate.h:  Change some return types to String to avoid implicit conversion.
        * svg/SVGAnimatedProperty.h: Adapt to changed return types in SVGAnimatedTemplate.

2009-11-18  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Move FillOrStrokeType out of public header.

        * platform/graphics/GraphicsContext.h: Updated copyright date to cover
        some years we published Apple changes, sorted forward declarations,
        removed FillOrStrokeType enum.
        * platform/graphics/GraphicsContextPrivate.h: Updated copyright date
        to cover some years we published Apple changes, sorted includes,
        moved FillOrStrokeType enum here.

2009-11-18  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Add Settings for WebKitShowDebugBorders and WebKitShowRepaintCounter
        https://bugs.webkit.org/show_bug.cgi?id=31601

        These are used to debug accelerated compositing layers. I removed
        the platform specific code from GraphicsLayerCA.mm and added calls
        to GraphicsLayerClient to get it from the higher levels. The values 
        now get cached in RenderLayerCompositing and are queried from there
        by RenderLayerBacking (which implements the GraphicsLayerClient interface).

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayers):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setShowDebugBorders):
        (WebCore::Settings::setShowRepaintCounter):
        * page/Settings.h:
        (WebCore::Settings::showDebugBorders):
        (WebCore::Settings::showRepaintCounter):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::showDebugBorders):
        (WebCore::GraphicsLayer::showRepaintCounter):
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::showDebugBorders):
        (WebCore::RenderLayerBacking::showRepaintCounter):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):
        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::showDebugBorders):
        (WebCore::RenderLayerCompositor::showRepaintCounter):

2009-11-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Get rid of metrics and properties sidebars'
        flickering.

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

        * inspector/front-end/MetricsSidebarPane.js:
        * inspector/front-end/PropertiesSidebarPane.js:

2009-11-17  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Pavel Feldman.

        Fixes <http://webkit.org/b/31606>.
        Web Inspector: Enter/Return key should enter edit mode for Editable Fields.
        
        This implements Enter starting editing mode in an editable DataGrid. If the
        DataGrid is editable and the user hits return, startEditing the first child
        of the selected node. Also refactored some editing functions to take an 
        event target instead of the event itself, because the functions only needed
        the target. Lastly, added had return in editing mode stop propogation, because
        when enter was hit to confirm text, it would propagate back to the datagrid
        and try to start editing again.

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype._ondblclick):
        (WebInspector.DataGrid.prototype._startEditing):
        (WebInspector.DataGrid.prototype.handleKeyEvent):
        (WebInspector.DataGrid.prototype.dataGridNodeFromEvent):
        (WebInspector.DataGrid.prototype._mouseDownInDataTable):
        (WebInspector.DataGrid.prototype._clickInDataTable):
        * inspector/front-end/inspector.js:
        (WebInspector.startEditing.element.handleKeyEvent):
        (WebInspector.startEditing):

2009-11-18  Ben Murdoch  <benm@google.com>

        Reviewed by Darin Adler.

        HTMLAnchorElement is inconsistent with its internal handling of the value returned for the href attribute.
        https://bugs.webkit.org/show_bug.cgi?id=31593

        Test: fast/dom/HTMLAnchorElement/set-href-attribute-whitespace.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::href): Add call to deprecatedParseURL.

2009-11-18  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Touch InspectorController so that frontend
        JS files are deployed on Windows.

        * inspector/InspectorController.cpp:

2009-11-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: clone timeline records array instead of
        copying reference on invalidate all.

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

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype.invalidateAllItems):

2009-11-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Elements don't drop out of compositing layers when animation ends
        https://bugs.webkit.org/show_bug.cgi?id=31613
        <rdar://problem/7402913>

        Avoid setting the mustOverlapCompositedLayers flag on RenderLayers which
        are compositing anyway for other reasons. Doing so can cause those layers
        to stay in compositing mode even after animations finish, because needsToBeComposited()
        continues to return true.
        
        No new tests because it's not possible to determine which elements are in
        compositing layers from DRT output.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2009-11-18  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Tor Arne Vestbø.

        [Qt] Mac Plugins: Remove null timer
        
        A null timer was used to send mouse move events. Instead, we now use
        move events to send nullEvent. This brings down CPU usage by 20-30%.
        
        https://bugs.webkit.org/show_bug.cgi?id=31624

        * plugins/PluginView.h:
        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::handleMouseEvent):

2009-11-18  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] WebKit crashes when loading certain SVG images

        Check if the familly exist before creating the PlatformData from it.

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

        Test: svg/text/text-font-invalid.html

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

2009-11-17  Nicolas Weber  <thakis@chromium.org>

        Reviewed by Darin Fisher.

        Fix crash in Chromium/Mac where dropdowns weren't dismissed correctly
        after navigation.
        https://bugs.webkit.org/show_bug.cgi?id=31609

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::showExternal): Set parent for external
        dropdowns, so that |PopupListBox::hidePopup()| can successfully notify
        its parent's client.

2009-11-17  Hayato Ito  <hayato@google.com>

        Reviewed by Darin Adler.

        Avoid infinite mutual recursion when deeply nested tags are loaded
        https://bugs.webkit.org/show_bug.cgi?id=30651

        Test: fast/parser/block-nesting-cap-table.html

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::parseToken):
        (WebCore::tagPriorityOfNode):
        (WebCore::HTMLParser::limitBlockDepth):
        (WebCore::HTMLParser::insertNodeAfterLimitBlockDepth):
        (WebCore::HTMLParser::insertNode):
        * html/HTMLParser.h:

2009-11-17  Brent Fulgham  <bfulgham@webkit.org>

        Rubber-stamped by Alexey Proskuryakov.

        Final clean-ups for minor coding standard violations.
        https://bugs.webkit.org/show_bug.cgi?id=26102.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:

2009-11-17  Johnny Ding  <jnd@chromium.org>

        Reviewed by Darin Adler.

        In all valid script tags for JavaScript, the event handler in <script...for> should not get executed.
        https://bugs.webkit.org/show_bug.cgi?id=31567

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::shouldExecuteAsJavaScript):

2009-11-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Make DRT show web inspector for tests in inspector/ folder.
        - Updated DRT to show/close inspector for all tests under /inspector
        - Introduced LayoutTestController::setTimelineProfilingEnabled and
          WebInspector::setTimelineProfilingEnabled beside setJavaScriptProfilingEnabled
        - Removed reload on each inspector test
        - Renamed fast/inspector to fast/inspector-support in order not to trigger
        inspector for those.
        - Reimplemented timeline tests in order to get rid of reload there.
        - Moved tests that don't require harness into the fast group.

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

        * WebCore.Inspector.exp:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._formatRecord):

2009-11-17  Andrei Popescu  <andreip@google.com>

        Reviewed by Dimitri Glazkov.

        [Android] Android is missing the implementation of the GeolocationService iface.
        https://bugs.webkit.org/show_bug.cgi?id=31554

        No new tests required as this is platform specific code.

        * platform/android/GeolocationServiceAndroid.cpp: Added.
        (WebCore::GeolocationServiceAndroid::create):
        (WebCore::GeolocationServiceAndroid::GeolocationServiceAndroid):
        (WebCore::GeolocationServiceAndroid::startUpdating):
        (WebCore::GeolocationServiceAndroid::stopUpdating):
        (WebCore::GeolocationServiceAndroid::suspend):
        (WebCore::GeolocationServiceAndroid::resume):
        (WebCore::GeolocationServiceAndroid::newPositionAvailable):
        (WebCore::GeolocationServiceAndroid::newErrorAvailable):
        (WebCore::GeolocationServiceAndroid::timerFired):
        (WebCore::GeolocationServiceAndroid::isPositionMovement):
        (WebCore::GeolocationServiceAndroid::isPositionMoreAccurate):
        (WebCore::GeolocationServiceAndroid::isPositionMoreTimely):
        * platform/android/GeolocationServiceAndroid.h: Added.
        (WebCore::GeolocationServiceAndroid::~GeolocationServiceAndroid):
        (WebCore::GeolocationServiceAndroid::lastPosition):
        (WebCore::GeolocationServiceAndroid::lastError):
        * platform/android/GeolocationServiceBridge.cpp: Added.
        (WebCore::):
        (WebCore::GeolocationServiceBridge::GeolocationServiceBridge):
        (WebCore::GeolocationServiceBridge::~GeolocationServiceBridge):
        (WebCore::GeolocationServiceBridge::start):
        (WebCore::GeolocationServiceBridge::stop):
        (WebCore::GeolocationServiceBridge::setEnableGps):
        (WebCore::GeolocationServiceBridge::newLocationAvailable):
        (WebCore::GeolocationServiceBridge::newErrorAvailable):
        (WebCore::GeolocationServiceBridge::toGeoposition):
        (WebCore::GeolocationServiceBridge::startJavaImplementation):
        (WebCore::GeolocationServiceBridge::stopJavaImplementation):
        * platform/android/GeolocationServiceBridge.h: Added.

2009-11-16  Kent Tamura  <tkent@chromium.org>

        Unreviewd build fix.

        - Fix typo in WebCore.vcproj.
        - Intlude limits.h for INT_MAX.
        - Enclose with parenthesis to suspress warning.

        * WebCore.vcproj/WebCore.vcproj:
        * html/ISODateTime.cpp:
        (WebCore::ISODateTime::addDay):

2009-11-16  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        Make sure wx scrollbar drawing code factors in transforms when switching backends,
        fix calcs for scrollbar length, and tweak the Mac scrollbar tracking rects.
        
        https://bugs.webkit.org/show_bug.cgi?id=31570

        * platform/wx/ScrollbarThemeWx.cpp:
        (WebCore::ScrollbarThemeWx::minimumThumbLength):
        (WebCore::ScrollbarThemeWx::splitTrack):
        (WebCore::ScrollbarThemeWx::forwardButtonRect):
        * platform/wx/ScrollbarThemeWx.h:
        * platform/wx/wxcode/gtk/scrollbar_render.cpp:
        (wxRenderer_DrawScrollbar):
        * platform/wx/wxcode/scrollbar_render.h:
        (calcThumbStartAndLength):
        * platform/wx/wxcode/win/scrollbar_render.cpp:
        (wxRenderer_DrawScrollbar):

2009-11-16  Kent Tamura  <tkent@chromium.org>

        Reviewed by David Levin.

        Introduce WebCore::ISODateTime class.
        https://bugs.webkit.org/show_bug.cgi?id=31340

        This class represents a value of date/time types of the HTML5 INPUT
        element, and has some parsing methods for ISO 8601.

        This change has no tests because the class is not used yet.

        * GNUmakefile.am: Add ISODateTime.cpp and ISODateTime.h.
        * WebCore.gypi: ditto.
        * WebCore.pro: ditto.
        * WebCore.vcproj/WebCore.vcproj: ditto.
        * WebCore.xcodeproj/project.pbxproj: ditto.
        * WebCoreSources.bkl: ditto.
        * html/ISODateTime.cpp: Added. Implementation of WebCore::ISODateTime class.
        (WebCore::isLeapYear):
        (WebCore::maxDayOfMonth):
        (WebCore::dayOfWeek):
        (WebCore::ISODateTime::maxWeekNumberInYear):
        (WebCore::countDigits):
        (WebCore::toInt):
        (WebCore::ISODateTime::parseYear): Private helper for parseDate() and parseWeek().
        (WebCore::ISODateTime::addDay): Private helper for parseTimeZone().
        (WebCore::ISODateTime::addMinute): ditto.
        (WebCore::ISODateTime::parseTimeZone): Private helper for parseDateTime().
        (WebCore::ISODateTime::parseMonth): Parser for <input type=month>.
        (WebCore::ISODateTime::parseDate): Parser for <input type=date>.
        (WebCore::ISODateTime::parseWeek): Parser for <input type=week>.
        (WebCore::ISODateTime::parseTime): Parser for <input type=time>.
        (WebCore::ISODateTime::parseDateTimeLocal): Parser for <input type=datetime-local>.
        (WebCore::ISODateTime::parseDateTime): Parser for <input type=datetime>.
        * html/ISODateTime.h: Added.  Declare WebCore::ISODateTime class.
        (WebCore::ISODateTime::ISODateTime):
        (WebCore::ISODateTime::millisecond):
        (WebCore::ISODateTime::second):
        (WebCore::ISODateTime::minute):
        (WebCore::ISODateTime::hour):
        (WebCore::ISODateTime::monthDay):
        (WebCore::ISODateTime::month):
        (WebCore::ISODateTime::fullYear):
        (WebCore::ISODateTime::week):

2009-11-16  Alexey Proskuryakov  <ap@apple.com>

        Fix a typo in previous commit.

        * platform/network/cf/SocketStreamHandleCFNet.cpp: #ifdef, not #if.

2009-11-16  Alexey Proskuryakov  <ap@apple.com>

        Fix a typo in previous commit.

        * platform/network/cf/SocketStreamHandleCFNet.cpp:

2009-11-16  Alexey Proskuryakov  <ap@apple.com>

        Tiger build fix.

        * platform/network/cf/SocketStreamHandleCFNet.cpp: Define CFN_EXPORT, as this macro was named
        differently in Tiger CFNetwork.

2009-11-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        [KURLGoogle] setHostAndPort doesn't handle arguments without port correctly.

        Fix a bug in the code that was dormant until http://trac.webkit.org/changeset/50784.

        Covered by existing test: LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-host.html

        * platform/KURLGoogle.cpp:
        (WebCore::KURL::setHostAndPort): Added handling of arguments without port specified.

2009-11-16  Alexey Proskuryakov  <ap@apple.com>

        Rubber-stamped by Jon Honeycutt.

        A better Windows build fix

        * platform/network/cf/SocketStreamHandleCFNet.cpp: (WebCore::SocketStreamHandle::createStreams):
        Use a macro that inserts __declspec(dllimport) when appropriate for CFNetwork imports.

2009-11-16  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Rename protocolIsValid to isValidProtocol.
        https://bugs.webkit.org/show_bug.cgi?id=31503

        This name change was suggested in https://bugs.webkit.org/show_bug.cgi?id=29972#c19.

        No new tests since no new functionality was introduced.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::setProtocol):
        * platform/KURL.cpp:
        (WebCore::isValidProtocol):
        * platform/KURL.h:
        * platform/KURLGoogle.cpp:
        (WebCore::isValidProtocol):

2009-11-16  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: aria-labelledby duplicates some of its WAI-ARIA label
        https://bugs.webkit.org/show_bug.cgi?id=31565

        Test: accessibility/aria-labelledby-overrides-label.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::hasTextAlternative):
        (WebCore::AccessibilityRenderObject::exposesTitleUIElement):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.h:

2009-11-16  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.

        Handle the case of a null NPObject* in NPN_SetException in
        the V8 bindings.  This allow out of process plugins calling
        NPN_SetException to just send null instead of sending an
        NPObject* that would be an address in a different 
        process's memory space.

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

        * bindings/v8/NPV8Object.cpp:
        (_NPN_SetException): Allow null NPObject* and just throw a general error.

2009-11-16  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * platform/network/cf/SocketStreamHandleCFNet.cpp: (WebCore::SocketStreamHandle::createStreams):
        Disable CONNECT proxies on Windows until WebKitSupportLibrary includes support for those.

2009-11-14  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] ASSERT failure while running DRT
        https://bugs.webkit.org/show_bug.cgi?id=30978

        Add needed Structure typeInfo flags to QtRuntimeObjectImpl and QtRuntimeMethod.
        These flags are needed after r49649, where HasDefaultmark was changed to OverrideMarkChildren.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObjectImp::createStructure):
        * bridge/qt/qt_runtime.h:
        (JSC::Bindings::QtRuntimeMethod::createStructure):

2009-11-16  Mark Rowe  <mrowe@apple.com>

        Attempt to fix the build.  Land a file that was missing from r51049.

        * bindings/js/JSWebGLArrayHelper.h: Copied from WebCore/html/canvas/WebGLByteArray.idl.
        (WebCore::setWebGLArrayFromArray):

2009-11-16  Kenneth Russell  <kbr@google.com>

        Reviewed by Oliver Hunt.

        Update API of WebGLArray and friends
        https://bugs.webkit.org/show_bug.cgi?id=31175

        * bindings/js/JSWebGLArrayCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSWebGLArrayHelper.h: Added.
        (WebCore::setWebGLArrayFromArray):
        * bindings/js/JSWebGLByteArrayCustom.cpp:
        (WebCore::JSWebGLByteArray::set):
        * bindings/js/JSWebGLFloatArrayCustom.cpp:
        (WebCore::JSWebGLFloatArray::set):
        * bindings/js/JSWebGLIntArrayCustom.cpp:
        (WebCore::JSWebGLIntArray::set):
        * bindings/js/JSWebGLShortArrayCustom.cpp:
        (WebCore::JSWebGLShortArray::set):
        * bindings/js/JSWebGLUnsignedByteArrayCustom.cpp:
        (WebCore::JSWebGLUnsignedByteArray::set):
        * bindings/js/JSWebGLUnsignedIntArrayCustom.cpp:
        (WebCore::JSWebGLUnsignedIntArray::set):
        * bindings/js/JSWebGLUnsignedShortArrayCustom.cpp:
        (WebCore::JSWebGLUnsignedShortArray::set):
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertToV8Object):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8WebGLArrayBufferCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WebGLArrayCustom.h:
        (WebCore::constructWebGLArray):
        (WebCore::getWebGLArrayElement):
        (WebCore::setWebGLArrayFromArray):
        (WebCore::setWebGLArray):
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * html/canvas/WebGLArray.cpp:
        (WebCore::WebGLArray::WebGLArray):
        (WebCore::WebGLArray::~WebGLArray):
        (WebCore::WebGLArray::setImpl):
        * html/canvas/WebGLArray.h:
        (WebCore::WebGLArray::isByteArray):
        (WebCore::WebGLArray::isUnsignedByteArray):
        (WebCore::WebGLArray::isShortArray):
        (WebCore::WebGLArray::isUnsignedShortArray):
        (WebCore::WebGLArray::isIntArray):
        (WebCore::WebGLArray::isUnsignedIntArray):
        (WebCore::WebGLArray::isFloatArray):
        (WebCore::WebGLArray::buffer):
        (WebCore::WebGLArray::baseAddress):
        (WebCore::WebGLArray::byteOffset):
        * html/canvas/WebGLArray.idl:
        * html/canvas/WebGLArrayBuffer.cpp:
        (WebCore::WebGLArrayBuffer::create):
        (WebCore::WebGLArrayBuffer::WebGLArrayBuffer):
        (WebCore::WebGLArrayBuffer::data):
        (WebCore::WebGLArrayBuffer::byteLength):
        (WebCore::WebGLArrayBuffer::~WebGLArrayBuffer):
        * html/canvas/WebGLArrayBuffer.h:
        * html/canvas/WebGLByteArray.cpp:
        (WebCore::WebGLByteArray::create):
        (WebCore::WebGLByteArray::byteLength):
        (WebCore::WebGLByteArray::slice):
        (WebCore::WebGLByteArray::set):
        * html/canvas/WebGLByteArray.h:
        (WebCore::WebGLByteArray::isByteArray):
        (WebCore::WebGLByteArray::data):
        (WebCore::WebGLByteArray::set):
        (WebCore::WebGLByteArray::get):
        (WebCore::WebGLByteArray::item):
        * html/canvas/WebGLByteArray.idl:
        * html/canvas/WebGLFloatArray.cpp:
        (WebCore::WebGLFloatArray::create):
        (WebCore::WebGLFloatArray::WebGLFloatArray):
        (WebCore::WebGLFloatArray::length):
        (WebCore::WebGLFloatArray::byteLength):
        (WebCore::WebGLFloatArray::slice):
        (WebCore::WebGLFloatArray::set):
        * html/canvas/WebGLFloatArray.h:
        (WebCore::WebGLFloatArray::isFloatArray):
        (WebCore::WebGLFloatArray::data):
        (WebCore::WebGLFloatArray::set):
        (WebCore::WebGLFloatArray::get):
        (WebCore::WebGLFloatArray::item):
        * html/canvas/WebGLFloatArray.idl:
        * html/canvas/WebGLIntArray.cpp:
        (WebCore::WebGLIntArray::create):
        (WebCore::WebGLIntArray::WebGLIntArray):
        (WebCore::WebGLIntArray::length):
        (WebCore::WebGLIntArray::byteLength):
        (WebCore::WebGLIntArray::slice):
        (WebCore::WebGLIntArray::set):
        * html/canvas/WebGLIntArray.h:
        (WebCore::WebGLIntArray::isIntArray):
        (WebCore::WebGLIntArray::data):
        (WebCore::WebGLIntArray::set):
        (WebCore::WebGLIntArray::get):
        (WebCore::WebGLIntArray::item):
        * html/canvas/WebGLIntArray.idl:
        * html/canvas/WebGLShortArray.cpp:
        (WebCore::WebGLShortArray::create):
        (WebCore::WebGLShortArray::WebGLShortArray):
        (WebCore::WebGLShortArray::length):
        (WebCore::WebGLShortArray::byteLength):
        (WebCore::WebGLShortArray::slice):
        (WebCore::WebGLShortArray::set):
        * html/canvas/WebGLShortArray.h:
        (WebCore::WebGLShortArray::isShortArray):
        (WebCore::WebGLShortArray::data):
        (WebCore::WebGLShortArray::set):
        (WebCore::WebGLShortArray::get):
        (WebCore::WebGLShortArray::item):
        * html/canvas/WebGLShortArray.idl:
        * html/canvas/WebGLUnsignedByteArray.cpp:
        (WebCore::WebGLUnsignedByteArray::create):
        (WebCore::WebGLUnsignedByteArray::WebGLUnsignedByteArray):
        (WebCore::WebGLUnsignedByteArray::length):
        (WebCore::WebGLUnsignedByteArray::byteLength):
        (WebCore::WebGLUnsignedByteArray::slice):
        (WebCore::WebGLUnsignedByteArray::set):
        * html/canvas/WebGLUnsignedByteArray.h:
        (WebCore::WebGLUnsignedByteArray::isUnsignedByteArray):
        (WebCore::WebGLUnsignedByteArray::data):
        (WebCore::WebGLUnsignedByteArray::set):
        (WebCore::WebGLUnsignedByteArray::get):
        (WebCore::WebGLUnsignedByteArray::item):
        * html/canvas/WebGLUnsignedByteArray.idl:
        * html/canvas/WebGLUnsignedIntArray.cpp:
        (WebCore::WebGLUnsignedIntArray::create):
        (WebCore::WebGLUnsignedIntArray::WebGLUnsignedIntArray):
        (WebCore::WebGLUnsignedIntArray::length):
        (WebCore::WebGLUnsignedIntArray::byteLength):
        (WebCore::WebGLUnsignedIntArray::slice):
        (WebCore::WebGLUnsignedIntArray::set):
        * html/canvas/WebGLUnsignedIntArray.h:
        (WebCore::WebGLUnsignedIntArray::isUnsignedIntArray):
        (WebCore::WebGLUnsignedIntArray::data):
        (WebCore::WebGLUnsignedIntArray::set):
        (WebCore::WebGLUnsignedIntArray::get):
        (WebCore::WebGLUnsignedIntArray::item):
        * html/canvas/WebGLUnsignedIntArray.idl:
        * html/canvas/WebGLUnsignedShortArray.cpp:
        (WebCore::WebGLUnsignedShortArray::create):
        (WebCore::WebGLUnsignedShortArray::WebGLUnsignedShortArray):
        (WebCore::WebGLUnsignedShortArray::length):
        (WebCore::WebGLUnsignedShortArray::byteLength):
        (WebCore::WebGLUnsignedShortArray::slice):
        (WebCore::WebGLUnsignedShortArray::set):
        * html/canvas/WebGLUnsignedShortArray.h:
        (WebCore::WebGLUnsignedShortArray::isUnsignedShortArray):
        (WebCore::WebGLUnsignedShortArray::data):
        (WebCore::WebGLUnsignedShortArray::set):
        (WebCore::WebGLUnsignedShortArray::get):
        (WebCore::WebGLUnsignedShortArray::item):
        * html/canvas/WebGLUnsignedShortArray.idl:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):

2009-11-16  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * platform/network/cf/SocketStreamHandleCFNet.cpp: Declare constants as extern "C".

2009-11-15  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Oliver Hunt.

        Enable support for webkit-box-shadow in Cairo builds.
        https://bugs.webkit.org/show_bug.cgi?id=26102.

        Covered by existing fast/box-shadow tests.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:  Add
          support for fillRect shadows.

2009-11-16  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * platform/network/cf/SocketStreamHandleCFNet.cpp: Don't try to include a file that's not
        in WebKitSupportLibrary.

2009-11-16  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=31494
        Add unauthenticated proxy support to SocketStreamHandleCFNet

        Cannot be tested in DRT.

        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::chooseProxy): Fetch proxy information from OS.
        (WebCore::SocketStreamHandle::createStreams): Apply it to the newly created streams.

2009-11-14  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Antti Koivisto.

        [Qt] Broken back/forward after using ErrorPageExtension to set error page
        https://bugs.webkit.org/show_bug.cgi?id=30573

        Make FrameLoader::checkLoadCompleteForThisFrame method
        to check for any working DocumentLoader instance (through
        activeDocumentLoader()) instead of only checking for
        'm_provisionalDocumentLoader' in order to decide to if
        it is going to reset of not the back and forward history.
        after an error page has been loaded.

        Test: LayoutTests/fast/history/back-forward-reset-after-error-handling.html

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

2009-11-14  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Need to implement ARIA role="directory"
        https://bugs.webkit.org/show_bug.cgi?id=31516

        Test: platform/mac/accessibility/aria-directory.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::isOrderedList):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::createARIARoleMap):

2009-11-15  Dave Tapuska  <dtapuska@rim.com>

        Reviewed by George Staikos.
        
        Compare UChars single unit at a time as opposed to the uint32_t
        approach as casting to unaligned addresses may cause a bus failure
        on ARMv5 and below. This change replicates the same defines that
        exists in AtomicString.cpp

        https://bugs.webkit.org/show_bug.cgi?id=31475
        
        * platform/text/StringHash.h:
        (WebCore::StringHash::equal):

2009-11-15  Evan Martin  <evan@chromium.org>

        Reviewed by Adam Barth.

        Wrap some SVG code in V8DOMWrapper with an ENABLE(SVG) test.

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

        * bindings/v8/V8DOMWrapper.cpp:

2009-11-15  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Adam Barth.

        [Haiku] Build fix. The FileChooser constructor doesn't need to be redefined.

        * platform/haiku/FileChooserHaiku.cpp:

2009-11-15  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Adam Barth.

        [Haiku] Build fix. ColorSpace name had a wrong CamelCase.

        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeColor):

2009-11-15  Daniel Bates  <dbates@webkit.org>

        No review, rolling out r50999.
        http://trac.webkit.org/changeset/50999

        Need to fix some issues in the Windows build. Missed some places where
        RenderTextControl::isEdited is called.

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _isEdited]):
        (-[DOMHTMLTextAreaElement _isEdited]):
        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        (WebCore::RenderTextControl::setInnerTextValue):
        (WebCore::RenderTextControl::setUserEdited):
        (WebCore::RenderTextControl::subtreeHasChanged):
        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::isEdited):
        (WebCore::RenderTextControl::setEdited):
        (WebCore::RenderTextControl::isUserEdited):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::defaultEventHandler):

2009-11-15  Daniel Bates  <dbates@webkit.org>

        Reviewed by Darin Adler.

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

        Renames RenderTextControl::m_edited and RenderTextControl::m_userEdited to
        m_wasChangedSinceLastChangeEvent and m_lastChangeWasUserEdit, respectively.
        These are more descriptive names so as to clear an ambiguity surrounding
        their usage. Also, renames associated setters and getters so that they
        coincide with the renamed fields.

        No functionality was changed. So, no tests were included.

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _isEdited]):
        (-[DOMHTMLTextAreaElement _isEdited]):
        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        (WebCore::RenderTextControl::setInnerTextValue):
        (WebCore::RenderTextControl::setLastChangeWasUserEdit): Formerly named setUserEdited.
        (WebCore::RenderTextControl::subtreeHasChanged):
        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::wasChangedSinceLastChangeEvent): Formerly named isEdited.
        (WebCore::RenderTextControl::setChangedSinceLastChangeEvent): Formerly named setEdited.
        (WebCore::RenderTextControl::lastChangeWasUserEdit): Formerly named setUserEdited.
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::defaultEventHandler):

2009-11-14  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/6946165> Would like to be able to specify the number of visible lines when using -webkit-line-clamp

        Test: fast/overflow/line-clamp.html

        * css/CSSComputedStyleDeclaration.cpp: (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Updated to handle different types of values.
        * css/CSSParser.cpp: (WebCore::CSSParser::parseValue): ditto.
        * css/CSSStyleSelector.cpp: (WebCore::CSSStyleSelector::applyProperty): ditto.

        * rendering/RenderFlexibleBox.cpp: (WebCore::RenderFlexibleBox::layoutVerticalBox):
        Use the line count value if available.  Otherwise, convert the percentage to the line count, as we did before.  Also,
        if there is anchor as the last child box, still allow adding the ellipsis.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollByRecursively): Call isNone on the LineClampValue to see if the line-clamp property has been set.
        (WebCore::RenderLayer::scrollRectToVisible): ditto.

        * WebCore.xcodeproj/project.pbxproj: Added LineClampValue.h
        * rendering/style/LineClampValue.h: Added.
        (WebCore::LineClampValue::LineClampValue):
        (WebCore::LineClampValue::value):
        (WebCore::LineClampValue::isPercentage):
        (WebCore::LineClampValue::isNone):
        (WebCore::LineClampValue::operator==):
        (WebCore::LineClampValue::operator!=):
        * rendering/style/RenderStyleConstants.h: (WebCore::): Define ELineClampType enum for percentage or line count.

        * rendering/style/RenderStyle.h: Use LineClampValue.
        (WebCore::InheritedFlags::lineClamp):
        (WebCore::InheritedFlags::setLineClamp):
        (WebCore::InheritedFlags::initialLineClamp):
        * rendering/style/StyleRareNonInheritedData.h:

2009-11-14  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/7287487> 
        Do not use QuickTime version to detect media controller theme

        * WebCore.base.exp: Export wkMediaControllerThemeAvailable
        * platform/mac/WebCoreSystemInterface.h: Ditto.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

        * rendering/RenderThemeMac.mm:
        (WebCore::mediaControllerTheme): Use wkMediaControllerThemeAvailable instead of the
        QuickTime version to see if it is possible to use MediaControllerThemeQuickTime.

2009-11-14  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        - Recognizes date/datetime/datetime-local/month/time/week types of INPUT element.
          They have no dedicated UI and no type validation for now.
        - Clean up setInputType() and formControlType() of HTMLInputElement.
        https://bugs.webkit.org/show_bug.cgi?id=29004

        Test: fast/forms/input-type-change3.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::valueMissing):
        (WebCore::HTMLInputElement::patternMismatch):
        (WebCore::HTMLInputElement::tooLong):
        (WebCore::createTypeMap):
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::createFormControlTypes):
        (WebCore::HTMLInputElement::formControlType):
        (WebCore::HTMLInputElement::saveFormControlState):
        (WebCore::HTMLInputElement::restoreFormControlState):
        (WebCore::HTMLInputElement::accessKeyAction):
        (WebCore::HTMLInputElement::rendererIsNeeded):
        (WebCore::HTMLInputElement::createRenderer):
        (WebCore::HTMLInputElement::appendFormData):
        (WebCore::HTMLInputElement::isTextField):
        (WebCore::HTMLInputElement::valueWithDefault):
        (WebCore::HTMLInputElement::storesValueSeparateFromAttribute):
        (WebCore::HTMLInputElement::defaultEventHandler):
        (WebCore::HTMLInputElement::isRequiredFormControl):
        (WebCore::HTMLInputElement::dataList):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::):

2009-11-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        WAI-ARIA: checkbox does not determine its label from text content
        https://bugs.webkit.org/show_bug.cgi?id=31456

        Test: accessibility/aria-checkbox-text.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::title):

2009-11-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Fix build to catch up with http://trac.webkit.org/changeset/50973.
        This is just enough changes to unbreak the port.

        * bindings/v8/ScriptController.cpp:
        (WebCore::mainThreadNormalWorld):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::initContextIfNeeded):
        * loader/FrameLoaderClient.h:

2009-11-13  Aaron Boodman  <aa@chromium.org>

        Unreviewed fix for Chromium build.

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::dispatchDidClearWindowObjectInWorld):
        Provide an empty implementation of this method because I don't know
        what it is supposed to do on Chromium.

2009-11-13  Aaron Boodman  <aa@chromium.org>

        Unreviewed fix for Chromium build.

        * loader/FrameLoader.h: Make dispatchDidClearWindowObjectsInAllWorlds()
        public, as Chromium's V8Proxy calls it.

2009-11-13  Aaron Boodman  <aa@chromium.org>

        Unreviewed fix to Chromium build.

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

2009-11-13  Aaron Boodman  <aa@chromium.org>

        Unreviewed fix for Chromium build.

        * platform/text/TextBoundaries.cpp: Use longer path to refer to Unicode.h.

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

        Unreviewed partial build fix for Chromium.  Should fix failure #4.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::getAllWorlds):
        * bindings/v8/ScriptController.h:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::initContextIfNeeded):

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

        Unreviewed partial build fix for Chromium.

        * bindings/v8/ScriptController.h:
        (WebCore::ScriptController::getAllWorlds):

2009-11-13  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        Fix Windows and Chromium builds after http://trac.webkit.org/changeset/50977.

        Unify TextBoundaries implementations by only relying on WTF Unicode abstractions
        https://bugs.webkit.org/show_bug.cgi?id=31468

        * WebCore.gypi: Rename TextBoundariesICU -> TextBoundaries
        * WebCore.vcproj/WebCore.vcproj: Rename TextBoundariesICU -> TextBoundaries

2009-11-12  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dmitry Titov.

        LocalStorage quota should include key sizes in its count
        https://bugs.webkit.org/show_bug.cgi?id=31451

        * storage/StorageMap.cpp:
        (WebCore::StorageMap::setItem):
            Count keys in the quota when adding a new item.
        (WebCore::StorageMap::removeItem):
            Remove the key's length from the quota if we're removing the item.
        (WebCore::StorageMap::importItem):
            Assume that we're adding things for the first time.
            Count keys in the quota.

2009-11-13  Dominik Röttsches  <dominik.roettsches@access-company.com>

        Reviewed by Eric Seidel.

        Unify TextBoundaries implementations by only relying on WTF Unicode abstractions
        https://bugs.webkit.org/show_bug.cgi?id=31468

        Moving TextBoundariesICU.cpp to TextBoundaries.cpp
        by removing the direct ICU dependency and replacing it
        with WTF functions and WebCore's own TextBreakIterator
        abstractions.

        * GNUmakefile.am:
        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        * platform/text/TextBoundaries.cpp: Added.
        (WebCore::findNextWordFromIndex):
        (WebCore::findWordBoundary):
        * platform/text/TextBoundariesICU.cpp: Removed.
        * platform/text/TextBreakIterator.h:
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::textBreakLast):
        (WebCore::textBreakPrevious):

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

        Reviewed by Darin Adler.

        WebCore::externalRepresentation should update layout before getting render object
        https://bugs.webkit.org/show_bug.cgi?id=31459

        * rendering/RenderTreeAsText.cpp:
        (WebCore::externalRepresentation):

2009-11-13  Adam Roben  <aroben@apple.com>

        Tell FrameLoaderClient when window objects in isolated worlds are
        cleared

        Fixes <http://webkit.org/b/31124> Tell the WebFrameLoadDelegate when
        window objects in isolated worlds are cleared

        Test: http/tests/security/isolatedWorld/didClearWindowObject.html

        Reviewed by Dave Hyatt.

        * bindings/js/JSDOMBinding.h:
        (WebCore::WebCoreJSClientData::getAllWorlds): Added. Copies all the
        worlds in m_worldSet to the passed-in Vector.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::getAllWorlds): Added. Calls through to
        WebCoreJSClientData.
        (WebCore::ScriptController::initScript): Changed to call
        FrameLoader::dispatchDidClearWindowObjectInWorld.

        * bindings/js/ScriptController.h: Added getAllWorlds.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::dispatchDidClearWindowObjectInWorld):
        Updated for FrameLoaderClient change.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::begin):
        Changed to call dispatchDidClearWindowObjectsInAllWorlds.

        (WebCore::FrameLoader::dispatchDidClearWindowObjectsInAllWorlds):
        Added. Retrieves all the worlds, then calls through to
        dispatchDidClearWindowObjectInWorld for each one.
        (WebCore::FrameLoader::dispatchDidClearWindowObjectInWorld): Replaces
        dispatchWindowObjectAvailable. Calls up to the client, then, if the
        world is the mainThreadNormalWorld(), tells the Inspector about it,
        too.

        * loader/FrameLoader.h: Replaced dispatchWindowObjectAvailable with
        dispatchDidClearWindowObjectInWorld. Added
        dispatchDidClearWindowObjectsInAllWorlds.

        * loader/FrameLoaderClient.h: Replaced windowObjectCleared with
        dispatchDidClearWindowObjectForWorld.

2009-11-13  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix SVG context assignment for pod types.
        https://bugs.webkit.org/show_bug.cgi?id=31497

        I broke this in r50958.

        Tested by svg/custom/viewport-update2.svg.

        * bindings/scripts/CodeGeneratorV8.pm:

2009-11-13  Andrei Popescu  <andreip@google.com>

        Reviewed by Dmitry Titov.

        Bring the platform/android files inline with Android 2.0
        https://bugs.webkit.org/show_bug.cgi?id=31423

        No new tests required: these are all Android-specific files.

        * platform/android/ClipboardAndroid.cpp:
        (WebCore::ClipboardAndroid::files):
        * platform/android/ClipboardAndroid.h:
        * platform/android/FileChooserAndroid.cpp:
        (WebCore::FileChooser::basenameForWidth):
        (WebCore::fileButtonChooseFileLabel):
        * platform/android/KeyEventAndroid.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/android/LocalizedStringsAndroid.cpp:
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagTextDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagRightToLeft):
        (WebCore::mediaElementLoadingStateText):
        (WebCore::mediaElementLiveBroadcastStateText):
        (WebCore::searchableIndexIntroduction):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        * platform/android/RenderThemeAndroid.cpp:
        (WebCore::RenderTheme::themeForPage):
        (WebCore::RenderThemeAndroid::baselinePosition):
        (WebCore::RenderThemeAndroid::paintButton):
        (WebCore::adjustMenuListStyleCommon):
        (WebCore::RenderThemeAndroid::paintCombo):
        * platform/android/ScreenAndroid.cpp:
        * platform/android/ScrollViewAndroid.cpp:
        (WebCore::ScrollView::platformOffscreenContentRectangle):
        * platform/android/TemporaryLinkStubs.cpp:
        (JSC::Bindings::dispatchJNICall):
        * platform/android/WidgetAndroid.cpp:
        (WebCore::Widget::setFrameRect):

2009-11-13  Norbert Leser  <norbert.leser&nokia.com>

        Reviewed by Eric Seidel.

        Added macros for USERINCLUDE paths within symbian blocks
        to guarantee inclusion of respective header files from local path
        first (to avoid clashes with same names of header files in system include path).

        * WebCore.pro:

2009-11-13  Hironori Bono  <hbono@chromium.org>

        Reviewed by Oliver Hunt.

        Implement composition events introduced in DOM Level 3.
        This change adds a new IDL which defines the composition events, adds a class which
        implements the composition events, and sends the composition events according to
        the specification.
        https://bugs.webkit.org/show_bug.cgi?id=26310

        Test: fast/events/ime-composition-events-001.html

        * DerivedSources.make: Added CompositionEvent so we can compile "CompositionEvent.idl".
        * GNUmakefile.am: Added "CompositionEvent.{cpp,h,idl}".
        * WebCore.gypi: ditto.
        * WebCore.pro: ditto
        * WebCore.vcproj/WebCore.vcproj: ditto.
        * WebCore.xcodeproj/project.pbxproj: Added "CompositionEvent.{cpp,h,idl}" and "JSCompositionEvent.{cpp,h}".
        * WebCoreSources.bkl: Added "JSCompositionEvent.{cpp,h}".
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS): Call isCompositionEvent() to create the CompositionEvent wrapper.
        * bindings/v8/DOMObjectsInclude.h: Added "JSCompositionEvent.h".
        * bindings/v8/DerivedSourcesAllInOne.cpp: Added "JSCompositionEvent.cpp".
        * bindings/v8/V8DOMWrapper.cpp: Call isCompositionEvent() to identify an event as a CompositionEvent.
        (WebCore::V8DOMWrapper::convertEventToV8Object):
        * bindings/v8/V8Index.cpp: Added "V8CompositionEvent.h".
        * bindings/v8/V8Index.h: Added V8Index::COMPOSITIONEVENT.
        * dom/CompositionEvent.cpp: Implements the CompositionEvent class.
        (WebCore::CompositionEvent::CompositionEvent):
        (WebCore::CompositionEvent::~CompositionEvent):
        (WebCore::CompositionEvent::initCompositionEvent):
        (WebCore::CompositionEvent::isCompositionEvent):
        * dom/CompositionEvent.h: Declares the CompositionEvent class.
        (WebCore::CompositionEvent::create):
        (WebCore::CompositionEvent::data):
        * dom/CompositionEvent.idl: Added the IDL of DOM CompositionEvent.
        * dom/Event.cpp:
        (WebCore::Event::isCompositionEvent): Added a method to identify an event is a CompositionEvent.
        * dom/Event.h:
        * dom/EventNames.h: Added composition{start,update,end} to eventNames.
        * editing/Editor.cpp:
        (WebCore::Editor::confirmComposition): Sent a CompositionEnd event.
        (WebCore::Editor::setComposition): Sent a Composition{Start,Update,End} event.

2009-11-13  Jens Alfke  <snej@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix a link error in unofficial GCC 4.4 builds on Linux.
        https://bugs.webkit.org/show_bug.cgi?id=31477

        * bindings/v8/V8Binding.cpp:  Add explicit instantiations of v8StringToWebCoreString template.

2009-11-13  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        Fix Debug build after http://trac.webkit.org/changeset/50960.

        The CounterNode class does not support all methods necessary to efficiently update the counter tree as needed per CSS2.1
        https://bugs.webkit.org/show_bug.cgi?id=31213

        * rendering/CounterNode.cpp:
        (WebCore::showTreeAndMark):
        * rendering/RenderCounter.cpp:
        (WebCore::destroyCounterNodeChildren):

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

        Reviewed by Gustavo Noronha.

        [CAIRO] shadow support for Canvas and SVG
        [https://bugs.webkit.org/show_bug.cgi?id=30960]

        We currently fill a path with solid color instead of filling
        a clipping path. This causes problems on some composite operators,
        since Cairo modifies the area outside the path.
        This fixes the behavior of WebKitGtk on fast/canvas/canvas-composite-alpha.html

        Thanks to Benjamin Otte for tracking the bug down.

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

2009-11-12  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Adding Chromium's DatabaseTracker implementation.

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

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * storage/DatabaseTracker.h:
        * storage/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):
        * storage/chromium/QuotaTracker.cpp:
        (WebCore::QuotaTracker::updateDatabaseSize):
        * storage/chromium/QuotaTracker.h:

2009-11-13  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Darin Adler.

        The CounterNode class is missing some basic tree navigation methods common in other WebKit trees such as the rendering tree
        https://bugs.webkit.org/show_bug.cgi?id=31213
        Added tree navigation methods that permit full implementation of CSS2.1
        counter feature without using recursion proportional to the counter
        tree depth.
        No new tests because I did not find any bug that is fixed by this
        commit yet, this just reduces the size of the patch for 11031 and
        helps respond to some concerns regarding that patch.

        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::CounterNode):

        (WebCore::CounterNode::nextInPreOrderAfterChildren):
        (WebCore::CounterNode::nextInPreOrder):
        Added to support non-recursive tree traversal necessary for
        efficient full implementation of CSS2.1 counters.

        (WebCore::CounterNode::lastDescendant):
        (WebCore::CounterNode::previousInPreOrder):
        Moved this methods such that they occupy a place similar to that of
        identically named methods on the render tree. This allows for their
        broader use needed in full implementation of CSS2.1 counters.

        (WebCore::CounterNode::resetRenderer):
        (WebCore::CounterNode::resetRenderers):
        (WebCore::CounterNode::recount):
        (WebCore::CounterNode::insertAfter):
        (WebCore::CounterNode::removeChild):
        Changed such that insertion/removal of a counter, triggers not only
        recalculation of PrefixWidths, but also reassesment of values in
        counter nodes. This is the basis full implementation of CSS2.1
        counters. It does not change current behavior by much because of
        changes needed to the recalculation algorithm, but those are comming
        in the patch for 11031.
        (WebCore::showTreeAndMark):
        * rendering/CounterNode.h:
        * rendering/RenderCounter.cpp:
        (WebCore::counter):
        Only changed argument type to prepare for implementation of Darin
        Adler's recommendation for the patch to 11031.

        (WebCore::RenderCounter::invalidate):
        (WebCore::destroyCounterNodeChildren):
        (WebCore::RenderCounter::destroyCounterNodes):
        * rendering/RenderCounter.h:
        * rendering/RenderObjectChildList.cpp:
        (WebCore::invalidateCountersInContainer):
        (WebCore::RenderObjectChildList::invalidateCounters):
        * rendering/RenderObjectChildList.h:
        Added the ability to restrict invalidation to counters with a given
        identifier.
        Also invalidated counters that are on the child container itself
        which were missed by the previous algorithm, but were a valid case.

2009-11-13  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Protect SVG animated properties from destruction in bindings.
        https://bugs.webkit.org/show_bug.cgi?id=31474

        See http://crbug.com/26719.

        Tested by LayoutTests/svg/custom/js-update-transform-addition.svg
        under Valgrind.

        Made sure we keep a reference to SVG properties while setting a
        context:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::withSVGContext):

2009-11-13  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Alexey Proskuryakov.

        [CAIRO] shadow support for Canvas and SVG.
        [https://bugs.webkit.org/show_bug.cgi?id=30960]

        Incorporate Benjamin Otte's recommendations to avoid
        a buffer overrun, and small performance improvement.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::copyContextProperties): Correctly size output
         storage for cairo_get_dash to avoid buffer overrun.
        (WebCore::drawPathShadow): Prefer cairo_fill_extents
         to slower cairo_stroke_extents when not drawing shadows.

2009-11-13  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Do not register Chromium's HTML5 DB VFS as the default
        VFS. Otherwise, other sqlite DB users in the same process will
        stop working.

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

        * platform/sql/chromium/SQLiteFileSystemChromium.cpp:
        (WebCore::SQLiteFileSystem::openDatabase):
        * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:
        (WebCore::SQLiteFileSystem::registerSQLiteVFS):
        * platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp:
        (WebCore::SQLiteFileSystem::registerSQLiteVFS):

2009-11-13  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix

        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::SocketStreamHandle): Explicitly cast "-1" to CFOptionFlags,
        avoiding a sign mismatch warning.

2009-11-13  Alexey Proskuryakov  <ap@apple.com>

        Release build fix.

        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::readStreamCallback):
        (WebCore::SocketStreamHandle::writeStreamCallback):
        Use ASSERT_UNUSED for unused stream parameter.

2009-11-12  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=31441
        Implement SocketStreamHandleCFNet

        Existing WebSocket tests now pass on Mac. No proxy support yet.

        * platform/network/SocketStreamHandleClient.h:
        * platform/network/cf/SocketStreamHandle.h:
        (WebCore::SocketStreamHandle::shouldUseSSL):
        (WebCore::SocketStreamHandle::refAuthenticationClient):
        (WebCore::SocketStreamHandle::derefAuthenticationClient):
        (WebCore::SocketStreamHandle::):
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        (WebCore::SocketStreamHandle::chooseProxy):
        (WebCore::SocketStreamHandle::createStreams):
        (WebCore::SocketStreamHandle::copyCFStreamDescription):
        (WebCore::SocketStreamHandle::readStreamCallback):
        (WebCore::SocketStreamHandle::writeStreamCallback):
        (WebCore::SocketStreamHandle::~SocketStreamHandle):
        (WebCore::SocketStreamHandle::platformSend):
        (WebCore::SocketStreamHandle::platformClose):
        (WebCore::SocketStreamHandle::receivedCredential):
        (WebCore::SocketStreamHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::SocketStreamHandle::receivedCancellation):

2009-11-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: preload status bar button glyphs
        in order to prevent them from flickering (take 2).

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

        * inspector/front-end/inspector.js:
        (preloadImages):

2009-11-13  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Adam Barth.

        Chromium: [REGRESSION] Crash while stopping on a breakpoint.
        Rolling back r50890.

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

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::canAccessPrivate):

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

        Reviewed by Gustavo Noronha.

        [CAIRO] shadow support for Canvas and SVG
        [https://bugs.webkit.org/show_bug.cgi?id=30960]
        
        This is the fix of a regression, caused by the shadow patch
        from the bug above. Reinserted the save and restore calls
        that were accidently removed by the previous patch.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::setPlatformFill):
        (WebCore::setPlatformStroke):

2009-11-13  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Reverting r50908 since it makes inspector tests
        time out.

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

        * inspector/front-end/inspector.js:

2009-11-13  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Enable 'console.profile()' and 'console.profileEnd()'
        regardless of JAVASCRIPT_DEBUGGER.

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

        * WebCore.gypi:
        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::profile):
        (WebCore::JSConsole::profileEnd):
        * bindings/v8/custom/V8ConsoleCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8CustomBinding.h:
        * page/Console.idl:

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

        Reviewed by NOBODY.

        Chromium build fix.

        * bindings/v8/ScriptController.h:
        (WebCore::ScriptController::evaluateInWorld): Add a dummy
         method which isn't called in chromium to make things compile.

2009-11-12  Anantanarayanan G Iyengar  <ananta@chromium.org>

        Reviewed by Adam Barth.
        
        The document-open.html test was flaky at times. The test invokes the layout test plugin
        which in its destroy stream handler opens a new document. This basically tears down the
        stream and the associated plugin instance, which causes a crash when the plugin stream
        dereferences an invalid m_client pointer which points to the PluginView instance which
        is invalid at this time. Fix is to set the m_client pointer to NULL in the stop function
        and check for the same.
       
        https://bugs.webkit.org/show_bug.cgi?id=31067

        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::stop):
        (WebCore::PluginStream::destroyStream):

2009-11-12  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Renaming some parameters passed to DB-related methods to better
        indicate their purpose.

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

        * platform/chromium/ChromiumBridge.h:

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

        Reviewed by Dan Bernstein.

        Transformed reflected elements are clipped inside element with opacity
        https://bugs.webkit.org/show_bug.cgi?id=30957
        
        transparencyClipBox() attemped to minimize the size of the transparency layer by mapping
        each clip rect into painting space before taking the unions. This, however, did not work
        correctly with combinations of reflections and transforms. Fixed by unioning the
        clipRect and mapping through transforms along the way.
        
        Also leave some #ifdeffed code in beginTransparencyLayers() that makes it easy to see
        where the transparency layers are.

        Test: fast/reflections/opacity-reflection-transform.html

        * rendering/RenderLayer.cpp:
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::transparencyClipBox):
        (WebCore::RenderLayer::beginTransparencyLayers):

2009-11-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        Improve SecurityOrigin::toString comment
        https://bugs.webkit.org/show_bug.cgi?id=31041

        * page/SecurityOrigin.h:

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

        Reviewed by Darin Adler.

        externalRepresentation should take Frame as the argument
        https://bugs.webkit.org/show_bug.cgi?id=31393

        No new tests as this is just a refactoring.

        * WebCore.base.exp:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::externalRepresentation):
        * rendering/RenderTreeAsText.h:

2009-11-12  Ben Murdoch  <benm@google.com>

        Reviewed by Dimitri Glazkov.

        [Android] The Android specific files in page/Android are out of date.
        https://bugs.webkit.org/show_bug.cgi?id=31437

        No tests required.

        * page/android/DragControllerAndroid.cpp:
        (WebCore::DragController::dragOperation): Added.
        (WebCore::DragController::cleanupAfterSystemDrag):
        * page/android/EventHandlerAndroid.cpp:
        (WebCore::EventHandler::accessKeyModifiers): Added.
        * page/android/InspectorControllerAndroid.cpp: Removed.

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

        Reviewed by Simon Fraser.

        [CAIRO] shadow support for Canvas and SVG.
        [https://bugs.webkit.org/show_bug.cgi?id=30960]

        Implement Canvas/SVG shadow support for Cairo.  This patch
        uses the filter code from SVG Filters.  That means that it is
        necessary to activate filters to see the shadows.

        Test: fast/canvas/canvas-shadow.html

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj: Add new ImageBufferFilter files.
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (GraphicsContext::calculateShadowBufferDimensions): New helper routine.
        (WebCore::setPlatformFill):
        (WebCore::setPlatformStroke):
        (WebCore::copyContextProperties):
        (WebCore::drawPathShadow):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::createPlatformShadow):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw): Add filter effect.
        * platform/graphics/filters/Filter.h: Correct 'const' signatures.
        * platform/graphics/filters/ImageBufferFilter.cpp: Added.
        * platform/graphics/filters/ImageBufferFilter.h: Added.
        * svg/graphics/filters/SVGFilter.cpp: Correct 'const' signatures.
        * svg/graphics/filters/SVGFilter.h: Correct 'const' signatures.

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

        Reviewed by Alexey Proskuryakov.

        Add postTaskToMainThread to ScriptExecutionContext.
        Move the code to post task to the main thread into a new method on ScriptExecutionContext,
        to use as a helper implementation of the virtual ScriptExecutionContext::postTask(Task) in
        contexts that live on the main thread.
        https://bugs.webkit.org/show_bug.cgi?id=31427

        No new tests - simply moving the code.

        * dom/Document.cpp:
        (WebCore::Document::postTask):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContextTaskTimer::ScriptExecutionContextTaskTimer):
        (WebCore::ScriptExecutionContextTaskTimer::fired):
        (WebCore::PerformTaskData::PerformTaskData):
        (WebCore::PerformTaskData::performTask):
        (WebCore::ScriptExecutionContext::postTaskToMainThread):
        * dom/ScriptExecutionContext.h:

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

        Reviewed by Darin Adler.

        Fix crash when removing compositing layers when GC is enabled
        https://bugs.webkit.org/show_bug.cgi?id=31429

        Workaround <rdar://problem/7390716> by special-casing the removal
        of all sublayers when GC is enabled.

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::safeSetSublayers):
        (WebCore::GraphicsLayerCA::updateSublayerList):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):

2009-11-12  Jens Alfke  <snej@chromium.org>

        Reviewed by Dimitri Glazkov.

        The last of the V8 binding optimizations.
        - Replace string-valued element accessors with a shared getter/setter function.
        - Change error handling flow of control to avoid extra branches and function calls.
        https://bugs.webkit.org/show_bug.cgi?id=31443
        
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Binding.cpp:
        (WebCore::getElementStringAttr):  Body of string-valued Element getter function.
        (WebCore::setElementStringAttr):  Body of string-valued Element setter function.
        * bindings/v8/V8Binding.h:

2009-11-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix for <rdar://problem/7267951>
        Canvas methods should reject uses of NaN and Infinity.

        Test: fast/canvas/canvas-with-illegal-args.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::scale):
        (WebCore::CanvasRenderingContext2D::rotate):
        (WebCore::CanvasRenderingContext2D::translate):
        (WebCore::CanvasRenderingContext2D::transform):
        (WebCore::CanvasRenderingContext2D::setTransform):

2009-11-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: profile timeline panel, fix obvious problems.

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

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype.updateGraphDividersIfNeeded):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._setWindowPosition):
        (WebInspector.TimelineCalculator):
        (WebInspector.TimelineCalculator.prototype.get minimumBoundary):
        (WebInspector.TimelineCalculator.prototype.get maximumBoundary):
        (WebInspector.TimelineCalculator.prototype.reset):
        (WebInspector.TimelineCalculator.prototype.updateBoundaries):
        (WebInspector.TimelineCalculator.prototype.formatValue):
        (WebInspector.TimelineGraph):
        (WebInspector.TimelineGraph.prototype.refresh):
        * inspector/front-end/utilities.js:
        (Element.prototype.hasStyleClass):

2009-11-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: preload status bar button glyphs
        in order to prevent them from flickering.

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

        * inspector/front-end/inspector.js:
        (preloadImages):

2009-11-12  Adam Roben  <aroben@apple.com>

        Replace worldIDs with world objects

        Part of <http://webkit.org/b/31414> Implement new SPI for dealing with
        user scripts/stylesheets and isolated worlds

        Reviewed by Sam Weinig.

        Covered by existing tests.

        * WebCore.base.exp: Update exported symbols to match what now exists
        and is needed by WebKit.

        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute): Updated for function rename.

        * bindings/js/ScriptController.cpp: Removed code that dealt with
        worldIDs.
        (WebCore::ScriptController::createWorld): Added. Returns a new world
        suitable for use on the main thread.
        (WebCore::ScriptController::executeScriptInWorld): Renamed from
        executeScriptInIsolatedWorld, since this works just fine with a
        "normal" world.

        * bindings/js/ScriptController.h: Added createWorld, removed functions
        that took worldIDs, renamed executeScriptInIsolatedWorld to
        executeScriptInWorld.

        * page/Frame.cpp:
        (WebCore::Frame::injectUserScripts):
        (WebCore::Frame::injectUserScriptsForWorld):
        Updated for changes to UserScriptMap and ScriptController.

        * page/Frame.h: Changed injectUserScriptsForWorld to take a
        DOMWrapperWorld* instead of a worldID.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserScriptToWorld):
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        (WebCore::PageGroup::removeUserScriptFromWorld):
        (WebCore::PageGroup::removeUserStyleSheetFromWorld):
        (WebCore::PageGroup::removeUserScriptsFromWorld):
        (WebCore::PageGroup::removeUserStyleSheetsFromWorld):
        * page/PageGroup.h:
        Changed these functions to take a DOMWrapperWorld* instead of a
        worldID. Also updated for changes to UserScript and UserStyleSheet.

        * page/UserScript.h:
        * page/UserStyleSheet.h: Changed not to hold a worldID, since it was
        never used.

        * page/UserScriptTypes.h:
        * page/UserStyleSheetTypes.h: Changed UserScriptMap and
        UserStyleSheetMap to use a RefPtr<DOMWrapperWorld> instead of a
        worldID as their key type.


2009-11-12  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Tim Hatcher.

        Fixes <http://webkit.org/b/31260>.
        Web Inspector: Main Resources Other than HTML are mis-detected.
        
        Even if the resource is a main resource, look at its CachedResource type, 
        because it might be an image, stylesheet, or JavaScript file, and we
        want to show them all correctly.

        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::cachedResourceType): Move this method out so it can be called in multiple places.
        (WebCore::InspectorResource::type): 
        * inspector/InspectorResource.h:

2009-11-12  Jens Alfke  <snej@chromium.org>

        Reviewed by Dimitri Glazkov.

        Table-driven setup for V8 binding template callback functions. 100k in code savings.
        https://bugs.webkit.org/show_bug.cgi?id=31420

        * bindings/scripts/CodeGeneratorV8.pm:  Change generated ConfigureXXXTemplate fn
            to call configureTemplate().
        * bindings/v8/V8Binding.cpp:
        (WebCore::configureTemplate):  New function; does all the standard configuration work.
        (WebCore::createCallback):  De-inlined wrapper for FunctionTemplate creation.
        * bindings/v8/V8Binding.h:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::batchConfigureAttributes):  Just wrapped the very long fn parameter list.
        (WebCore::batchConfigureCallbacks):  New function, used by configureTemplate.
        (WebCore::batchConfigureConstants):  Just wrapped the very long fn parameter list.
        * bindings/v8/V8Proxy.h:

2009-11-12  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, fix Chromium build after http://trac.webkit.org/changeset/50876.

        * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:

2009-11-12  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7388969> Add DOM API for fullscreen video
        
        DOM API for fullscreen <video>.

        Tests: media/media-fullscreen-inline.html
               media/media-fullscreen-not-in-document.html

        * dom/EventNames.h:
            Add webkitbeginfullscreen and webkitendfullscreen.

        * html/HTMLAttributeNames.in:
            Add onwebkitbeginfullscreen and onwebkitendfullscreen.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseMappedAttribute):
            Deal with onwebkitbeginfullscreen and onwebkitendfullscreen.
        (WebCore::HTMLMediaElement::enterFullscreen):
            Schedule webkitbeginfullscreenEvent event, don't set m_isFullscreen unless we
            actually do enter fullscreen.
        (WebCore::HTMLMediaElement::exitFullscreen):
            Schedule webkitendfullscreenEvent event.
        (WebCore::HTMLMediaElement::webkitEnterFullScreen):
        (WebCore::HTMLMediaElement::webkitExitFullScreen):
        (WebCore::HTMLMediaElement::webkitSupportsFullscreen):
        (WebCore::HTMLMediaElement::webkitDisplayingFullscreen):
            New, access to fullscreen properties and methods.

        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
            Declare methods needed for fullscreen API.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::supportsFullscreen):
            Return false if a movie does not have video.

        * page/DOMWindow.h:
            Add webkitbeginfullscreen and webkitendfullscreen.

2009-11-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] Sify compose button alerts error
        https://bugs.webkit.org/show_bug.cgi?id=31394

        Test: http/tests/security/calling-versus-current.html

        We're supposed to use the calling context for security checks.  In JSC
        land, this is the lexicalGlobalObject.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::canAccessPrivate):

2009-11-12  Daniel Bates  <dbates@webkit.org>

        Reviewed by Darin Adler.

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

        Fixes an issue where the returned drop effect is incorrect when
        effectAllowed == "uninitialized".

        According to section 7.9.2 of the HTML 5 spec.
        <http://dev.w3.org/html5/spec/Overview.html#the-dragevent-and-datatransfer-interfaces>
        when effectAllowed = "uninitialized" the resulting dropEffect should be the
        user-specified dropEffect (i.e. "copy", "move", "link") and "none" for any
        other case.
        
        No test cases are included because we have an existing test case from
        bug #24731.

        * dom/Clipboard.cpp:
        (WebCore::dragOpFromIEOp): Added case for op == "uninitialized".

2009-11-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Do not highlight node on refresh.

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

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.reset):

2009-11-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Minor timeline fixes.

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

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._getRecordDetails):
        (WebInspector.TimelineRecordTreeElement.prototype.onattach):
        (WebInspector.TimelineRecordTreeElement.prototype._updateDetails):
        (WebInspector.TimelineRecordTreeElement.prototype.refresh):

2009-11-12  Alexey Proskuryakov  <ap@apple.com>

        SnowLeopard build fix.

        Renamed initWithClient to initWithAuthenticationClient.

        * platform/network/mac/AuthenticationMac.mm:
        (-[WebCoreAuthenticationClientAsChallengeSender initWithAuthenticationClient:]):
        (WebCore::AuthenticationChallenge::setAuthenticationClient):

2009-11-12  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        ARIA: add alert type roles
        https://bugs.webkit.org/show_bug.cgi?id=31392

        Test: platform/mac/accessibility/aria-alerts.html

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/mac/AccessibilityObjectWrapper.mm:

2009-11-11  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=31386
        Make Mac AuthenticationChallenge usable from cross-platform code

        No change in behavior, so no tests.

        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::clearAuthentication):
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        Don't store m_currentCFChallenge, which was only used for a single assertion. Unlike the
        NSURLConnection case, CF challenge doesn't carry a sender with it, so the copy in web challenge
        is identical.

        * platform/network/cf/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::setAuthenticationClient): Added a setter to match the new
        Mac interface. Previously, one had to create a new AuthenticationChallenge to replace client.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Fixed assertions after removal
        of m_currentCFChallenge. Also, there is no need to set client now, as it's guaranteed to
        be already set.

        * platform/network/mac/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::m_sender): Explained the existence of this member to the
        best of my understanding.
        (WebCore::AuthenticationChallenge::m_nsChallenge): Renamed from m_macChallenge to prevent
        confusion with "mac" and "web" challenges in ResourceHandleInternal.

        * platform/network/mac/AuthenticationMac.mm:
        (WebCoreAuthenticationClientAsChallengeSender): Added a Obj-C wrapper for AuthenticationClient,
        making it possible to use the latter with NSURLAuthenticationChallenge.
        (WebCore::AuthenticationChallenge::AuthenticationChallenge): Updated for m_macChallenge ->
        m_nsChallenge renaming.
        (WebCore::AuthenticationChallenge::setAuthenticationClient): Wrap the client in Obj-C and
        set it as sender (or unset, if client is null).

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCoreResourceHandleAsDelegate) WebCoreResourceHandleAsDelegate no longer doubles as
        authentication challenge sender.
        (WebCore::ResourceHandle::~ResourceHandle): A navigation can happen underneath an
        authentication sheet.
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Form m_currentWebChallenge
        using the new setAuthenticationClient() method.
        (WebCore::ResourceHandle::didCancelAuthenticationChallenge): Fixed an incorrect assertion.
        Since didCancelAuthenticationChallenge is called by connection, the passed challenge is
        the original Mac one, not the one we created for use with authentication sheet. I don't
        know when a connection would cancel authentication in practice, so I haven't tested this.

2009-11-12  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: breakpoint sidebar entries should allow click over entire list item
        https://bugs.webkit.org/show_bug.cgi?id=31411

        No new tests; no new functionality, small usability change. 

        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane.prototype._appendBreakpointElement):
        (WebInspector.BreakpointsSidebarPane.prototype._appendBreakpointElement.breakpointClicked):

2009-11-12  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: breakpoints in named evals are not restored after a reload
        https://bugs.webkit.org/show_bug.cgi?id=31375

        Manual test added

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.addScript):
        * manual-tests/inspector/bp-in-named-eval-after-reload.html: Added.

2009-11-12  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Custom printing shrink factors
        https://bugs.webkit.org/show_bug.cgi?id=29042

        This reverts commit r49769. The public API for this needs to be reviewed
        before its inclusion in Qt.

        * page/PrintContext.cpp:
        (WebCore::PrintContext::begin):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:

2009-11-12  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Resource errors/warnings not shown in the Resource tree.

        Error/Warning bubbles are not displayed next to the resource in the 
        Resources panel if those occur before the resource is attached to the tree.
        https://bugs.webkit.org/show_bug.cgi?id=31404

        Test: manual-tests/inspector/styled-error-bubbles-in-scripts.html

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype.removeItem):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.onattach):

2009-11-12  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=31047
        [GTK] Failing test media/video-played-ranges-1.html

        Follow-up of r50726, don't block the UI thread when calling
        gst_element_get_state(). Also fixed a compilation warning and some
        static casts.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::playbackPosition):
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::setRate):

2009-11-12  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=31047
        [GTK] Failing test media/video-played-ranges-1.html

        don't pause pipeline if already paused, same for play()

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::pause):

2009-11-12  Kinuko Yasuda  <kinuko@google.com>

        Reviewed by David Levin.

        Support Gtk scrollwheel behavior for horizontal scrollbars on Linux
        Chromium too.
        https://bugs.webkit.org/show_bug.cgi?id=31292

        No new tests. (Corresponding test for Gtk+ is
        platform/gtk/scrollbars/overflow-scrollbar-horizontal-wheel-scroll.html)

        * page/EventHandler.cpp:
        * page/chromium/EventHandlerChromium.cpp:

2009-11-12  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Eric Seidel.

        Prevent text inside a multi-column block from being split into columns.
        
        If the tentative height of a multi-column block was too small, we need to
        expand the block height and try to layout again, in order to prevent text
        from being split into different columns.

        CSS Multicolumn text is split awkwardly
        https://bugs.webkit.org/show_bug.cgi?id=22249

        Test: fast/multicol/single-line.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutColumns):
        * rendering/RenderBlock.h:
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint):
        * rendering/RenderView.h:
        (WebCore::RenderView::setTruncatedAt):
        (WebCore::RenderView::setMinimumColumnHeight):
        (WebCore::RenderView::minimumColumnHeight):

2009-11-11  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Fix a bug that RenderFileUploadControl isn't initialized with multiple files.
        https://bugs.webkit.org/show_bug.cgi?id=31195

        Test: fast/forms/input-file-re-render.html

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::RenderFileUploadControl):

2009-11-09  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fixing Chromium's POSIX VFS implementation, by adding the required
        "used file descriptors" logic.

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

        * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:

2009-11-11  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        need to implement aria tree roles
        https://bugs.webkit.org/show_bug.cgi?id=31284

        Tests: platform/mac/accessibility/aria-multiselectable.html
               platform/mac/accessibility/aria-tree.html

        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::accessibilityIsIgnored):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::ariaTreeRows):
        (WebCore::AccessibilityObject::ariaTreeItemContent):
        (WebCore::AccessibilityObject::ariaTreeItemDisclosedRows):
        * accessibility/AccessibilityObject.h:
        (WebCore::):
        (WebCore::AccessibilityObject::isTree):
        (WebCore::AccessibilityObject::isTreeItem):
        (WebCore::AccessibilityObject::setIsExpanded):
        (WebCore::AccessibilityObject::canSetExpandedAttribute):
        (WebCore::AccessibilityObject::hierarchicalLevel):
        (WebCore::AccessibilityObject::setSelectedRows):
        (WebCore::AccessibilityObject::performDefaultAction):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::hierarchicalLevel):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::isExpanded):
        (WebCore::AccessibilityRenderObject::setElementAttributeValue):
        (WebCore::AccessibilityRenderObject::elementAttributeValue):
        (WebCore::AccessibilityRenderObject::setIsExpanded):
        (WebCore::AccessibilityRenderObject::isSelected):
        (WebCore::AccessibilityRenderObject::setSelected):
        (WebCore::AccessibilityRenderObject::setSelectedRows):
        (WebCore::createARIARoleMap):
        (WebCore::AccessibilityRenderObject::canSetExpandedAttribute):
        (WebCore::AccessibilityRenderObject::ariaTreeSelectedRows):
        (WebCore::AccessibilityRenderObject::ariaListboxSelectedChildren):
        (WebCore::AccessibilityRenderObject::selectedChildren):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (RoleEntry::):
        (-[AccessibilityObjectWrapper subrole]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilityIsAttributeSettable:]):
        (-[AccessibilityObjectWrapper accessibilityPerformShowMenuAction]):
        (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        (-[AccessibilityObjectWrapper accessibilityArrayAttributeCount:]):
        * html/HTMLAttributeNames.in:

2009-11-11  Brent Fulgham  <bfulgham@webkit.org>

        Build fix after @r50760 with ENABLE_FILTERS.

        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::apply): Supply ColorSpace to fillRect.
        * svg/graphics/filters/SVGFEFlood.cpp: Supply ColorSpace argument
          to fillRect.

2009-11-11  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix WebSocket frame parser of frame_type with high-order bit set.
        https://bugs.webkit.org/show_bug.cgi?id=30668

        If buffer is smaller than frame's length, it should break the loop
        instead of reading next byte.

        Tests: websocket/tests/frame-length-longer-than-buffer.html
               websocket/tests/frame-length-skip.html

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didReceiveData):

2009-11-11  Yusuke Sato  <yusukes@chromium.org>

        Reviewed by Adam Barth.

        [chromium] Remove t2embed.dll functions from FontCustomPlatformData.cpp for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=31345

        Remove dependency on t2embed.dll so that Chromium for Windows can start even if t2embed.dll cannot be accessed.

        * platform/graphics/chromium/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData): Remove TTDeleteEmbeddedFont() call. Always use RemoveFontMemResourceEx().
        (WebCore::FontCustomPlatformData::fontPlatformData): Remove TTGetNewFontName() call.
        (WebCore::createFontCustomPlatformData): Remove TTLoadEmbeddedFont() call. Always use AddFontMemResourceEx() via renameAndActivateFont() in opentype/OpenTypeUtility.h. Remove EOTStream class as well.

2009-11-11  Beth Dakin  <bdakin@apple.com>

        Build fix. No review needed.

        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::Font::drawComplexText):

2009-11-11  Beth Dakin  <bdakin@apple.com>

        Build fix. No review needed.

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):

2009-11-11  Beth Dakin  <bdakin@apple.com>

        Windows build fix. No review needed. 

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs):

2009-11-11  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=31382
        Make -webkit-color-correction work with shadows

        From canvas, just send DeviceColorSpace to setShadow() for now. 
        Will fix soon when I address https://bugs.webkit.org/show_bug.cgi?id=31319
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setShadow):
        (WebCore::CanvasRenderingContext2D::applyShadow):

        setShadow() and setPlatformShadow() now take a ColorSpace.
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setShadow):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::createCGColorWithColorSpace): New helper to create a 
        color in a ColorSpace.
        (WebCore::setCGFillColor): Call new helper.
        (WebCore::setCGStrokeColor): Call new helper.
        (WebCore::GraphicsContext::setPlatformShadow): Call new helper.
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):

        Send appropriate ColorSpace to setShadow().
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintTextDecorations):
        * rendering/InlineTextBox.cpp:
        (WebCore::paintTextWithShadows):
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintCharacters):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):

        Attempt to keep ports building.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):

2009-11-11  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Print the file text of a file upload control in DumpRenderTree for ease of tests.
        https://bugs.webkit.org/show_bug.cgi?id=31195

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        (WebCore::RenderFileUploadControl::fileTextValue):
        * rendering/RenderFileUploadControl.h:
        (WebCore::RenderFileUploadControl::isFileUploadControl):
        (WebCore::toRenderFileUploadControl):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isFileUploadControl):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::operator<<):

2009-11-11  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        DOM Wrappers for some nodes may not be marked.
        https://bugs.webkit.org/show_bug.cgi?id=31380

        Some markChildren methods are calling getCachedDOMNodeWrapper, which will find
        the wrapper for the current world only.  This means that wrappers may be GC'ed
        prematurely, and properties lost.

        Move to a model more like markDOMObjectWrapper, mark wrappers for all worlds.

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::markChildren):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::markDOMNodeWrapper):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::markChildren):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::markChildren):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::markChildren):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::JSStyleSheet::markChildren):

2009-11-11  Ben Murdoch  <benm@google.com>

        Reviewed by Darin Adler.

        bindings/js/ScriptObject.cpp is missing and ENABLE(INSPECTOR) guard.
        https://bugs.webkit.org/show_bug.cgi?id=31384

        No functionality change so no tests required.

        * bindings/js/ScriptObject.cpp: Add ENABLE(INSPECTOR) guard around the JSInspectorBackend.h include.

2009-11-11  Jens Alfke  <snej@chromium.org>

        Reviewed by Dimitri Glazkov.

        The Big De-Inlining. 450k code size reduction (32-bit x86.)
        - Various inline functions in V8Binding.h made non-inline.
        - Some renaming for consistency.
        - New function createRawTemplate().
        https://bugs.webkit.org/show_bug.cgi?id=31383

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Binding.cpp:
        (WebCore::v8DOMWrapperToNative):
        (WebCore::v8ValueToWebCoreString):
        (WebCore::v8ValueToAtomicWebCoreString):
        (WebCore::toInt32):
        (WebCore::toWebCoreString):
        (WebCore::toWebCoreStringWithNullCheck):
        (WebCore::toAtomicWebCoreStringWithNullCheck):
        (WebCore::toWebCoreStringWithNullOrUndefinedCheck):
        (WebCore::isUndefinedOrNull):
        (WebCore::v8Boolean):
        (WebCore::v8UndetectableString):
        (WebCore::v8StringOrNull):
        (WebCore::v8StringOrUndefined):
        (WebCore::v8StringOrFalse):
        (WebCore::v8StringToWebCoreString):
        (WebCore::v8ExternalString):
        (WebCore::createRawTemplate):  New function.
        * bindings/v8/V8Binding.h:
        (WebCore::v8DOMWrapperTo):
        (WebCore::v8DOMWrapperToNode):
        (WebCore::v8StringToWebCoreString):
        (WebCore::v8StringToAtomicWebCoreString):

2009-11-11  Jens Alfke  <snej@chromium.org>

        Reviewed by Dimitri Glazkov.

        More V8 de-inlining (outlining?) Abstracted a chunk of boilerplate code from every
        event-listener setter into a new subroutine transferHiddenDependency().
        https://bugs.webkit.org/show_bug.cgi?id=31377

        * bindings/scripts/CodeGeneratorV8.pm:  Replace boilerplate with call to transferHiddenDependency().
        * bindings/v8/V8Utilities.cpp:
        (WebCore::transferHiddenDependency):  New.
        * bindings/v8/V8Utilities.h:  Declaration of transferHiddenDependency.

2009-11-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Beth Dakin.

        If we are on Windows, don't try and get the kCGColorSpaceSRGB ColorSpace,
        because there is a CG bug preventing this from working.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::sRGBColorSpaceRef):

2009-11-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Check that if Storage panel exists before calling its methods

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

        * inspector/front-end/inspector.js:
        (WebInspector.addDatabase):
        (WebInspector.addCookieDomain):
        (WebInspector.addDOMStorage):
        (WebInspector.updateDOMStorage):

2009-11-11  Jens Alfke  <snej@chromium.org>

        Reviewed by Dimitri Glazkov.

        De-inline convertNodeToV8Object(), which expands to a lot of asm code and is inlined 136
        times in the generated V8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=31368

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertNodeToV8Object):  Moved body here from .h file
        * bindings/v8/V8DOMWrapper.h:  Removed inline method body.

2009-11-11  Jessie Berlin  <jberlin@webkit.org>

        Reviewed by Timothy Hatcher.

        Display the correct summary in the web inspector for the shorthands
        border-color, border-width, border-style, margin, and padding.
        https://bugs.webkit.org/show_bug.cgi?id=7987

        Test: fast/css/shorthands-four-values.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::get4Values):
        Display the summary information in the same way the shorthand would be
        specified in a css rule.

2009-11-11  Jens Alfke  <snej@chromium.org>

        Reviewed by Dimitri Glazkov.

        Make V8 bindings return NULL handles instead of calling v8::Undefined(). This has equivalent
        meaning to the caller, saves code, and appears to save a few cycles at runtime too.
        https://bugs.webkit.org/show_bug.cgi?id=31367

        * bindings/scripts/CodeGeneratorV8.pm: Change "v8::Undefined()" to "v8::Handle<v8::Value>()"

2009-11-11  Jens Alfke  <snej@chromium.org>

        Reviewed by Dimitri Glazkov.

        Optimize V8 getDOMNodeMap(), a hot function in Dromaeo DOM tests, by increasing inlining.

        * bindings/v8/DOMData.cpp:
        (WebCore::DOMData::getCurrent):  Moved getCurrentMainThread to MainThreadDOMData::getCurrent
            so it can be inlined by its caller.
        * bindings/v8/DOMData.h:
        * bindings/v8/MainThreadDOMData.cpp:
        (WebCore::MainThreadDOMData::getCurrent):  Moved here from DOMData.cpp.
        (WebCore::MainThreadDOMData::getMainThreadStore):  Added UNLIKELY macro to improve codegen.
        (WebCore::MainThreadDOMData::getCurrentMainThreadStore):  Combination of getCurrentMainThread
            and getStore, which inline both calls together.
        * bindings/v8/MainThreadDOMData.h:
        (WebCore::MainThreadDOMData::getStore):  Broke out nonvirtual getMainThreadStore for inlineability.
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::getDOMNodeMap):  Call new getCurrentMainThreadStore, which is faster.

2009-11-11  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add methods to KURLGoogle.cpp declared in http://trac.webkit.org/changeset/50784 but not defined when using KURLGoogle.

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

        * platform/KURLGoogle.cpp:
        (WebCore::isSchemeFirstChar):
        (WebCore::isSchemeChar):
        (WebCore::KURL::hasPort):
        (WebCore::KURL::removePort):
        (WebCore::protocolIsValid):

2009-11-11  Brent Fulgham  <bfulgham@webkit.org>

        Build fix, no reviewed.

        Correct setPlatformFillColor and setPlatformStrokeColor calls
        to match new ColorSpace-supporting signatures.

        * platform/graphics/win/GraphicsContextCairoWin.cpp:  Add the
          color space to the set[...]Color calls.

2009-11-10  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=31327
        Clean up SocketStreamHandleClient interface

        No change in behavior.

        * platform/network/SocketStreamHandleClient.h: Removed willOpenStream and willSendData.
        (WebCore::SocketStreamHandleClient::willOpenStream): Removed. This is currently not used by
        the only client (WebSocketChannel), and it's not clear what this callback's semantics
        should be.
        (WebCore::SocketStreamHandleClient::willSendData): Ditto.
        (WebCore::SocketStreamHandleClient::receivedCancellation): Removed, because it was misplaced.
        For ResourceHandle, this method is called when the user cancels authentication sheet,
        not when something happens with the stream.

        * websockets/WebSocketChannel.h: Some WebSocketChannel methods were virtual without any
        reason. Also, added didReceiveAuthenticationChallenge/didCancelAuthenticationChallenge.

        * websockets/WebSocketChannel.cpp: Adjusted for the above change. Authentication-related
        callbacks have no real implementation yet.

2009-11-11  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Eric Seidel.

        Allow custom memory allocation control for the part of page directory in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=31350

        Inherits the following classes from Noncopyable because these are instantiated
        by 'new' and these are no need to be copyable:

        class DragController         - instantiated at: WebCore/page/Page.cpp:107
        class FocusController        - instantiated at: WebCore/page/Page.cpp:109
        class Settings               - instantiated at: WebCore/page/Page.cpp:116
        class PluginHalter           - instantiated at: WebCore/page/Page.cpp:160
        struct ScheduledEvent        - instantiated at: WebCore/page/FrameView.cpp:1275
        class UserScript             - instantiated at: WebCore/page/PageGroup.cpp:208
        struct EventHandlerDragState - instantiated at: WebCore/page/EventHandler.cpp:182
        class XSSAuditor             - instantiated at: WebCore/bindings/js/ScriptController.cpp:70
        class UserStyleSheet         - instantiated at: WebCore/page/PageGroup.cpp:222

        Inherits PropertyWrapperBase class from Noncopyable because (its child class) 
        PropertyWrapper is instantiated by 'new' in 
        WebCore/page/animation/AnimationBase.cpp:564 it is no need to be copyable.

        * page/DragController.h:
        * page/EventHandler.h:
        * page/FocusController.h:
        * page/FrameView.cpp:
        * page/PluginHalter.h:
        * page/Settings.h:
        * page/UserScript.h:
        * page/UserStyleSheet.h:
        * page/XSSAuditor.h:
        * page/animation/AnimationBase.cpp:

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

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=31323
        Fix a few compiler warnings

        No new tests as there is no new functionality.

        * editing/htmlediting.cpp:
        (WebCore::isRenderedAsNonInlineTableImageOrHR): Use explicit
        parentheses to silence gcc 4.4 -Wparentheses warnings

2009-11-11  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Mark Rowe.

        Set m_hasPendingGeometryChange to true by default, so that
        at least one call to NPP_SetWindow is executed, which is
        needed by the DRT plugin testing framework.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):

2009-11-11  Csaba Osztrogonác  <ossy@webkit.org>

        Rubber-stamped by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=31348
        [Qt] Remove unnecessary LUT creator from WebCore.pro

        * WebCore.pro:

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

        Reviewed by Tor Arne Vestbø.

        Introduce a function for querying the input method status
        in QWebPageClient.

        * platform/qt/QWebPageClient.h:

2009-11-11  Benjamin Otte  <otte@gnome.org>

        Reviewed by Jan Alonzo.

        [GTK] Black artifacts in youtube.com/html5

        Paint the video to the given size. It's the job of the callers to keep
        track of aspect ratio. RenderVideo.cpp does it for the <video>
        element.
        https://bugs.webkit.org/show_bug.cgi?id=30925

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::paint):

2009-11-11  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=30901
        [Gtk] Need to de-lint the Atk a11y code

        Cleaned up some missed capitalization style-guideline violations.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-11-11  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Make the default style background color valid.
        Currently the color is transparent but invalid, this causes
        list boxes in QtWebKit to be drawn with a black background
        since r49242.
        https://bugs.webkit.org/show_bug.cgi?id=31295

        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::initialBackgroundColor):
        * rendering/style/StyleBackgroundData.cpp:
        (WebCore::StyleBackgroundData::StyleBackgroundData):

2009-11-10  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Simplify the ownership model for worlds - rather than having a pair of weak references
        between DOMWrapperWorld and ScriptController/ScriptCachedFrameData, give the latter an
        ref pointer to the former.  This reduces complexity & cost of the caching entries in the
        back forward cache.

        * WebCore.base.exp:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMWrapperWorld::forgetDocument):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):
        (WebCore::ScriptCachedFrameData::clear):
        * bindings/js/ScriptCachedFrameData.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::~ScriptController):
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::initScript):
        (WebCore::ScriptController::updateDocument):
        * bindings/js/ScriptController.h:

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

        Reviewed by Darin Adler.

        rename counter to makeCounterNode in RenderCounter.cpp
        https://bugs.webkit.org/show_bug.cgi?id=31289

        No new test because this is just a small refactoring.

        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):
        (WebCore::makeCounterNode):
        (WebCore::RenderCounter::originalText):

2009-11-10  Daniel Bates  <dbates@webkit.org>

        Reviewed by Oliver Hunt.

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

        Patch 2 of 2.

        Removed method EventHandler::dragSourceMovedTo, since it is no longer
        needed. This method fired a drag event whenever the mouse moved, but
        section 7.9.4 of the HTML 5 spec. defines the drag-and-drop processing
        model independent of when the mouse moves. See "Among other changes..."
        in the change log for patch 1 for more details.

        * WebCore.DragSupport.exp:
        * page/EventHandler.cpp: Removed method EventHandler::dragSourceMovedTo.
        (WebCore::EventHandler::handleDrag): Updated comment about reentrancy issue.
        * page/EventHandler.h:

2009-11-10  Daniel Bates  <dbates@webkit.org>

        Reviewed by Oliver Hunt.

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

        Patch 1 of 2.

        As per Section 7.9.4 of the HTML 5 spec. <http://dev.w3.org/html5/spec/Overview.html#drag-and-drop-processing-model>,
        the drag event should always fire before the dragover event.

        In fixing this bug, this patch also makes our drag processing model
        conform to the HTML 5 spec.

        Among the changes, this patch ensures that the drag event isn't fired outside
        of the drag-and-drop processing loop, WebCore::EventHandler::updateDragAndDrop.
        Currently, the drag event is fired whenever the mouse button is down and the OS
        detects the mouse moved. But, as per the spec, the drag event should
        fire approx. every 350ms so long as the mouse button is down.

        Test: fast/events/drag-and-drop-fire-drag-dragover.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::canHandleDragAndDropForTarget): Formerly named handleDragAndDropForTarget.
        Modified to determine when we are in the correct instance of EventHandler to service the drag
        and drop operation.
        (WebCore::EventHandler::updateDragAndDrop): Moved code from WebCore::EventHandler::dragSourceMovedTo
        into this method.
        (WebCore::EventHandler::cancelDragAndDrop):
        (WebCore::EventHandler::performDragAndDrop):
        (WebCore::EventHandler::clearDragState):
        * page/EventHandler.h: Added field m_shouldOnlyFireDragOverEvent to determine whether
        we should fire both drag and dragover events or only the dragover event.

2009-11-10  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix crash in V8CustomXPathNSResolver (http://crbug.com/26726).
        https://bugs.webkit.org/show_bug.cgi?id=31301

        Tested by new fast/xpath/xpath-detached-iframe-resolver-crash.html.

        Allowed passing V8Proxy for the calling JS context:
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::getXPathNSResolver):
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::create):
        (WebCore::V8CustomXPathNSResolver::V8CustomXPathNSResolver):
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):
        * bindings/v8/custom/V8CustomXPathNSResolver.h:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-11-10  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Timothy Hatcher.

        Implement URL decomposition IDL attributes for HTMLAnchorElement.
        https://bugs.webkit.org/show_bug.cgi?id=29972.

        Add methods for setting different parts of the URL in href attribute.

        Tests: fast/dom/HTMLAnchorElement/set-href-attribute-hash.html
               fast/dom/HTMLAnchorElement/set-href-attribute-host.html
               fast/dom/HTMLAnchorElement/set-href-attribute-hostname.html
               fast/dom/HTMLAnchorElement/set-href-attribute-pathname.html
               fast/dom/HTMLAnchorElement/set-href-attribute-port.html
               fast/dom/HTMLAnchorElement/set-href-attribute-protocol.html
               fast/dom/HTMLAnchorElement/set-href-attribute-search.html

        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::setPort):
        * html/HTMLAnchorElement.cpp:
        (WebCore::parsePortFromStringPosition):
        (WebCore::HTMLAnchorElement::setHash):
        (WebCore::HTMLAnchorElement::setHost):
        (WebCore::HTMLAnchorElement::setHostname):
        (WebCore::HTMLAnchorElement::setPathname):
        (WebCore::HTMLAnchorElement::setPort):
        (WebCore::HTMLAnchorElement::setProtocol):
        (WebCore::HTMLAnchorElement::setSearch):
        * html/HTMLAnchorElement.h:
        * html/HTMLAnchorElement.idl:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::iconURL):
        * platform/KURL.cpp:
        (WebCore::KURL::removePort):
        (WebCore::KURL::setPort):
        (WebCore::KURL::prettyURL):
        (WebCore::protocolIsValid):
        * platform/KURL.h:
        (WebCore::KURL::canSetHostOrPort):
        (WebCore::KURL::canSetPathname):
        (WebCore::KURL::hasPort):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::):

2009-11-10  Nate Chapin  <japhet@chromium.org>

        Unreviewed, fix Chromium build after http://trac.webkit.org/changeset/50760.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::paintBorder):
        (WebCore::PopupListBox::paint):
        (WebCore::PopupListBox::paintRow):
        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::setupLayerForWhiteLayer):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaSlider):
        (WebCore::paintMediaVolumeSlider):
        (WebCore::paintMediaTimelineContainer):
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::paintMenuListButton):

2009-11-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Repro crash saving pcmag.com article as a webarchive.
        <rdar://problem/7381219> and https://webkit.org/b/31322

        Test: http/tests/webarchive/cross-origin-stylesheet-crash.html

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::addSubresourceStyleURLs): Walk the stylesheet itself instead
          of creating a CSSRuleList (and subjecting ourselves to the security origin check)

2009-11-10  Beth Dakin  <bdakin@apple.com>

        Attempt 2 to fix Tiger build. No review needed.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::deviceRGBColorSpaceRef):
        (WebCore::sRGBColorSpaceRef):

2009-11-10  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Changes needed after r50760.

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

2009-11-10  Alexey Proskuryakov  <ap@apple.com>

        Qt build fix.

        * platform/network/ResourceHandle.h: Only inherit from AuthenticationClient on platforms
        that use ResourceHandle as a delegate (Mac, CFNetwork, Curl).

2009-11-10  Beth Dakin  <bdakin@apple.com>

        Tiger build fix. No review needed.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::sRGBColorSpaceRef):

2009-11-10  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=31312
        Decouple authentication panel callbacks from ResourceHandle

        No change in functionality.

        SocketStreamHandle also needs to request credentials, so it's not appropriate to store
        ResourceHandle as delegate.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/network/AuthenticationClient.h: Added.
        Added a new interface for listening to authentication panel notifications.

        * WebCore.xcodeproj/project.pbxproj: Added AuthenticationClient.h. Let Visual Studio do what
        it wants with the project file.

        (WebCore::AuthenticationClient::ref): Using our usual method of exposing refcounting on an
        interface class.
        (WebCore::AuthenticationClient::deref): Ditto.

        * platform/network/ResourceHandle.h:
        (WebCore::ResourceHandle::refAuthenticationClient): Ditto.
        (WebCore::ResourceHandle::derefAuthenticationClient): Ditto.

        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::AuthenticationChallenge::platformCompare):
        * platform/network/cf/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::authenticationClient):
        * platform/network/chromium/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::authenticationClient):
        * platform/network/curl/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::authenticationClient):
        Keeping a reference to AuthenticationClient, not to ResourceHandle.

2009-11-10  Beth Dakin  <bdakin@apple.com>

       Second attempted gtk build fix. No review needed.

        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):


2009-11-10  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Fix back/forwards cache with JSC isolated worlds.
        https://bugs.webkit.org/show_bug.cgi?id=31310
        <rdar://problem/7328111> Cached back navigation doesn't restore global object in extension isolated world

        Store the global object for all worlds, not just the normal world.
        Also maintain bidirectional weak references between the ScriptCachedFrameData and the DOMWrapperWorld,
        so we can forget global objects if a world goes away.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMWrapperWorld::rememberScriptCachedFrameData):
        (WebCore::DOMWrapperWorld::forgetScriptCachedFrameData):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::forgetWorld):
        (WebCore::ScriptCachedFrameData::domWindow):
        (WebCore::ScriptCachedFrameData::restore):
        (WebCore::ScriptCachedFrameData::clear):
        * bindings/js/ScriptCachedFrameData.h:
        * bindings/js/ScriptController.h:

2009-11-10  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix after r50760.

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

2009-11-10  Beth Dakin  <bdakin@apple.com>

        Attempted build fix. (No review needed.)

        * GNUmakefile.am: Adding ColorSpace.h

2009-11-10  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by NOBODY - Build Fix.

        Updated function calls to take a ColorSpace argument, passing
        in DeviceColorSpace for now - this should be fixed. Also added
        ColorSpace.h to WebCore project.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint):
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuListButton):

2009-11-10  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Adler.

        Optimizations to Element::getAttribute
        https://bugs.webkit.org/show_bug.cgi?id=30926

        * dom/Element.cpp:
        (WebCore::Element::getAttribute):  User case-insensitive compare instead of lowercasing the name.
        * dom/NamedAttrMap.cpp:
        (WebCore::NamedNodeMap::getAttributeItem):  Avoid redundant compares, and do fast/likely compares first.
        * platform/text/PlatformString.h:
        (WebCore::equalPossiblyIgnoringCase):  New inline method, used by both of the above.

2009-11-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/7059710> 
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=31196 Implement -webkit-
        color-correction for CSS colors

        New exported symbol for GraphicsContext::fillColor() which now 
        accepts a ColorSpace as an optional parameter.
        * WebCore.base.exp:

        Added a new file, ColorSpace.h, to define the ColorSpace enum.
        * WebCore.xcodeproj/project.pbxproj:

        Computed Style for -webkit-color-correction
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

        Parse -webkit-color-correction
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):

       Map CSS identifiers to the appropriate values of the ColorSpace enum
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ColorSpace):

        New property -webkit-color-correction
        * css/CSSPropertyNames.in:

        Map -webkit-color-correction into the RenderStyle.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

        Add new value sRGB.
        * css/CSSValueKeywords.in:

        Comment out the reference to sRGB since it will now be inherited as 
        a value from CSSValueKeywords.
        * css/SVGCSSValueKeywords.in:

        Definition of the ColorSpace enum.
        * platform/graphics/ColorSpace.h: Added.
        (WebCore::):

        These functions all now take a ColorSpace as a parameter.
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setStrokeColor):
        (WebCore::GraphicsContext::setFillColor):
        (WebCore::GraphicsContext::drawHighlightForText):

        Return the appropriate ColorSpace.
        (WebCore::GraphicsContext::strokeColorSpace):
        (WebCore::GraphicsContext::fillColorSpace):

        These functions all call other functions which require a ColorSpace 
        as a parameter.
        (WebCore::GraphicsContext::setStrokePattern):
        (WebCore::GraphicsContext::setFillPattern):
        (WebCore::GraphicsContext::setStrokeGradient):
        (WebCore::GraphicsContext::setFillGradient):

        All of the GraphicsContext functions that take a Color should now 
        also take a ColorSpace.
        * platform/graphics/GraphicsContext.h:

        Added new member variables stokeColorSpace and fillColorSpace.
        * platform/graphics/GraphicsContextPrivate.h:
        (WebCore::GraphicsContextState::GraphicsContextState):

        Attempt to keep the Cairo port building with all of the massive 
        changes to GraphicsContext.        
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::fillRoundedRect):

        
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::sRGBColorSpaceRef): New static function that returns a 
        CGColorSpaceRef for the sRGB color space.
        (WebCore::deviceRGBColorSpaceRef): New static function that returns 
        a CGColorSpaceRef for the device RGB color space.

        (WebCore::setCGFillColor): Now takes a ColorSpace parameter and 
        sets the fill color to the specified color in the given ColorSpace.
        (WebCore::setCGStrokeColor): Same, but for stroke.

        (WebCore::setCGFillColorSpace): New static to set the 
        CGFillColorSpace to the given ColorSpace
        (WebCore::setCGStrokeColorSpace): Same, but for stroke.

        Send ColorSpaces when appropriate, set ColorSpaces when 
        appropriate, and check ColorSpaces when appropriate.
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformFillColor):

        Attempt to keep Haiku building.
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformFillColor):

        Attempt to keep QT building.
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformFillColor):

        Attempt to keep Wince building.
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::setPlatformShadow):

        Attempt to keep WX building.
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformFillColor):

        Added functions colorSpace() and setColorSpace()
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::colorSpace):
        (WebCore::InheritedFlags::setColorSpace):

        The ColorSpace is stored here.
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:

        All of these call sites call GraphicsContext functions which now 
        require ColorSpaces.
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::paintCaret):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        * inspector/InspectorController.cpp:
        (WebCore::drawOutlinedQuad):
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::paintScrollCorner):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paintScrollCorner):
        * platform/graphics/Image.cpp:
        (WebCore::Image::fillWithSolidColor):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::paint):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintTextDecorations):
        * rendering/InlineTextBox.cpp:
        (WebCore::updateGraphicsContext):
        (WebCore::paintTextWithShadows):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::fillHorizontalSelectionGap):
        (WebCore::RenderBlock::fillVerticalSelectionGap):
        (WebCore::RenderBlock::fillLeftSelectionGap):
        (WebCore::RenderBlock::fillRightSelectionGap):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paintColumnBorder):
        (WebCore::RenderFrameSet::paintRowBorder):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintScrollCorner):
        (WebCore::RenderLayer::paintResizer):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        (WebCore::RenderObject::drawArcForBoxSide):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::paintScrollCorner):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButton):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintSelection):
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::setup):
        * svg/graphics/SVGPaintServerSolid.cpp:
        (WebCore::SVGPaintServerSolid::setup):

2009-11-10  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Speed up syntax highlighter
        https://bugs.webkit.org/show_bug.cgi?id=31291

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._loaded):
        (WebInspector.SourceSyntaxHighlighter.prototype.process.moveToNextLine): Replace the line content node.
        (WebInspector.SourceSyntaxHighlighter.prototype.process):
        (WebInspector.SourceSyntaxHighlighter.prototype.appendNonToken):
        (WebInspector.SourceSyntaxHighlighter.prototype.syntaxHighlightNode):
        (WebInspector.CSSSourceSyntaxHighlighter):
        (WebInspector.JavaScriptSourceSyntaxHighlighter):

2009-11-09  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Eric Seidel.

        Remove session storage setting
        https://bugs.webkit.org/show_bug.cgi?id=31279

        Remove session storage from Settings.  It was added temporarily so we could
        disable it by default at runtime in Chromium.  We now disable these things in a
        different way, so it's time to remove it.  Qt also depended on this setting for
        a short period of time, but after talking to them we agreed that it should be
        removed.

        This bug is the second half of https://bugs.webkit.org/show_bug.cgi?id=30602

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:

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

        Reviewed by Eric Carlson and Darin Adler.

        WebCore part of making full-screen video pause during scrubbing.

        * WebCore.Video.exp: Sorted and added HTMLMediaElement::beginScrubbing()
        and HTMLMediaElement::endScrubbing().

2009-11-10  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Reapply 50562 reverted by 50588 due to issues with sandboxing (should be fine now).
        https://bugs.webkit.org/show_bug.cgi?id=31051

        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::gcEpilogue):
        (WebCore::V8GCController::checkMemoryUsage):
        * bindings/v8/V8GCController.h:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluate):
        (WebCore::V8Proxy::runScript):
        (WebCore::V8Proxy::callFunction):

2009-11-10  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for the part of loader directory in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=31161

        Inherits the following classes from Noncopyable because these are instantiated
        by 'new' and these are no need to be copyable:

        class Request - WebCore/loader/loader.cpp:100
        struct ScheduledRedirection - WebCore/loader/RedirectScheduler.cpp:164
        class ApplicationCacheStorage - WebCore/loader/appcache/ApplicationCacheStorage.cpp:1121
        class ApplicationCacheHost -  WebCore/loader/DocumentLoader.cpp:151
        class ImageEventSender - WebCore/loader/ImageLoader.cpp:54
        struct ProgressItem - WebCore/loader/ProgressTracker.cpp:169

        Inherits ThreadableLoaderClient class from Noncopyable because (its child class) 
        MainThreadBridge is instantiated by 'new' in 
        WebCore/loader/WorkerThreadableLoader.cpp:59 it is no need to be copyable.

        ThreadableLoaderClient's inheriting has been changed to public.

        * loader/ImageLoader.cpp:
        * loader/ProgressTracker.cpp:
        * loader/RedirectScheduler.cpp:
        * loader/Request.h:
        * loader/ThreadableLoaderClient.h:
        * loader/WorkerThreadableLoader.h:
        * loader/appcache/ApplicationCacheHost.h:
        * loader/appcache/ApplicationCacheStorage.h:

2009-11-10  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=31047
        [GTK] Failing test media/video-played-ranges-1.html

        WebKit coding style fixes.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateMessageCallback):
        (WebCore::MediaPlayerPrivate::naturalSize):
        (WebCore::MediaPlayerPrivate::paint):
        (WebCore::mimeTypeCache):

2009-11-10  Oliver Hunt  <oliver@apple.com>

        Remove build failure introduced by earlier build fix.

        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:

2009-11-10  Oliver Hunt  <oliver@apple.com>

        Is this the last build fix? grep tells me yes.

        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-11-10  Oliver Hunt  <oliver@apple.com>

        Hopefully the last one.  Why aren't these autogenerated?

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setIndexedPropertiesToExternalArray):
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8DOMWrapper::convertToV8Object):

2009-11-10  Oliver Hunt  <oliver@apple.com>

        Another chrome build fix.

        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-11-10  Oliver Hunt  <oliver@apple.com>

        Yet another chrome buildfix

        * bindings/v8/custom/V8WebGLArrayBufferCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WebGLArrayCustom.h:
        (WebCore::constructCanvasArray):
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):

2009-11-10  Oliver Hunt  <oliver@apple.com>

        Chrome build fix.

        * bindings/v8/V8Index.h:

2009-11-10  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=30901
        [Gtk] Need to de-lint the Atk a11y code

        Removal of various and sundry style-violating nits.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-11-10  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=31047
        [GTK] Failing test media/video-played-ranges-1.html

        Fix playback rate setter by remembering the rate was changed. Also
        correctly handle reverse playback by doing a seek from end to
        beginning of the media.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::currentTime):
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::hasAudio):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::setRate):
        (WebCore::MediaPlayerPrivate::updateStates):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2009-11-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Rename 3D Canvas related classes to use WebGL prefix
        https://bugs.webkit.org/show_bug.cgi?id=29095

        Automatic rename of all WebGL related types from Canvas* to
        WebGL* per more recent version of the WebGL spec.

        Due to the automatic rename I've removed the 600+ line change list.

2009-11-09  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        SVG feDisplacementMap is not implemented
        [https://bugs.webkit.org/show_bug.cgi?id=31255]

        This is the implementation of the SVG filter effect
        feDisplacementMap. 

        Test: svg/filters/feDisplacementMap.svg

        * svg/graphics/filters/SVGFEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::apply):

2009-11-09  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Add a comment about null strings and hash functions.
        https://bugs.webkit.org/show_bug.cgi?id=29118

        * platform/text/StringHash.h:

2009-11-09  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Darin Adler.

        Compiler warnings in InspectorResource.h
        https://bugs.webkit.org/show_bug.cgi?id=29231

        Fix compilation warnings by removing addition operation on an enum type.

        * inspector/InspectorResource.h:
        (WebCore::InspectorResource::):
        (WebCore::InspectorResource::Changes::hasChange):
        (WebCore::InspectorResource::Changes::set):
        (WebCore::InspectorResource::Changes::setAll):

2009-11-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler and Dan Bernstein.

        <rdar://problem/7328395>
        https://bugs.webkit.org/show_bug.cgi?id=31277

        When an object tag's style changes (for example when child nodes are added/removed),
        reuse its Frame (if it has one) instead of creating multiple Frames.

        Test: fast/dom/HTMLObjectElement/children-changed.html

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

2009-11-09  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Moved macro MMP_RULES (LINKEROPTION) into symbian instead of symbian-sbsv2,
        since adjustment of RW-section base address will be needed for all new symbian
        tool chains, specifically for arm and gcc compilation targets.
        Also, change target address to 0xE00000 to be sufficient for all targets.

        * WebCore.pro:

2009-11-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Crash when inspecting
        WebCore\manual-tests\inspector\dom-mutation.html

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

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::handleEvent):

2009-11-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Few classes have virtual functions but non-virtual destructor
        https://bugs.webkit.org/show_bug.cgi?id=31269

        No new tests as there is no functional change.

        * platform/qt/QWebPageClient.h:
        (QWebPageClient::~QWebPageClient): Add virtual destructor.

2009-11-09  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Allow setting HTTP headers with empty value in XMLHTTPRequest
        https://bugs.webkit.org/show_bug.cgi?id=31140

        QtNetwork interprets null string as request to remove the header, not add it.
        Replace null values with empty values before passing them to QtNetwork.

        Test: http/tests/xmlhttprequest/xmlhttprequest-setrequestheader-no-value.html

        * platform/network/qt/ResourceRequestQt.cpp:
        (WebCore::ResourceRequest::toNetworkRequest):

2009-11-09  Vadim Zeitlin  <vadim@wxwidgets.org>

        Reviewed by Kevin Ollivier.

        [wx] Fix handling of alpha channel when using wxWidgets 2.9: it was
        simply ignored before resulting in transparent areas being black in PNG
        images for example.
        
        https://bugs.webkit.org/show_bug.cgi?id=30823

        * platform/image-decoders/wx/ImageDecoderWx.cpp:
        (WebCore::RGBA32Buffer::asNewNativeImage):

2009-11-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Use explicit parentheses to silence gcc 4.4 -Wparentheses warnings
        https://bugs.webkit.org/show_bug.cgi?id=31040

        No new tests as there is no functional change.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyleSelector):
        * editing/TextIterator.cpp:
        (WebCore::pushFullyClippedState):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::appendTrailingWhitespace):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::mustLockBackForwardList):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontPlatformDataCacheKey::computeHash):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::handleRunInChild):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcHeight):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::nodeAtPoint):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * svg/SVGAnimateElement.cpp:
        (WebCore::parseNumberValueAndUnit):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::startedActiveInterval):
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::getCTM):

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

        Reviewed by Dimitri Glazkov.

        Win chromium is slow to draw transparent texts
        https://bugs.webkit.org/show_bug.cgi?id=31258

        Clip graphics context to reduce calculation.

        No new tests because this change only affects performance.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::initializeForGDI):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::~TransparencyAwareFontPainter):

2009-11-09  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Darin Adler.

        showTree(CounterNode*) generates too little info and has too many spaces.
        https://bugs.webkit.org/show_bug.cgi?id=31212

        No new tests as the change has no functional effect it is just for
        improved debugging.

        * rendering/CounterNode.cpp:
        (WebCore::showTreeAndMark):
        Changed to also show addresses of parent, next and previous
        siblings.

2009-11-09  Stuart Morgan  <stuartmorgan@chromium.org>

        Reviewed by Darin Adler.

        Moves Mac implementation of setUseSecureKeyboardEntry to Frame.cpp and
        enables it PLATFORM(CHROMIUM) in addition to PLATFORM(MAC).

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

        No new tests; implementation is unchanged.

        * page/Frame.cpp:
        (WebCore::Frame::setUseSecureKeyboardEntry):
        * page/mac/FrameMac.mm:

2009-11-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Jan Alonzo.

        Make XP_UNIX tests consistent
        https://bugs.webkit.org/show_bug.cgi?id=31250

        No new tests as there is no functional change.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::setFrameRect): Test if XP_UNIX is defined
        instead of the value of the macro

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded): Test if the XP_UNIX is
        defined instead of using the PLATFORM macro to be consistent
        (WebCore::PluginView::getValue): Ditto.

2009-11-09  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Darin Adler.

        Thunk to the main thread from ~Database to deref Database's m_document.

        If the Database was the Document's last referrer, then ~Document occurs on the
        Database thread, and ASSERT(!m_styleRecalcTimer.isActive()) hits a main thread
        ASSERT in debug builds.

        * storage/Database.cpp:
        (WebCore::derefDocument):
        (WebCore::Database::~Database):

2009-11-09  Mark Mentovai  <mark@chromium.org>

        Reviewed by Dan Bernstein.

        Track "can have scrollbar" state within FrameView independently of the
        individual scrollbar states in ScrollView.

        rdar://problem/7215132, https://bugs.webkit.org/show_bug.cgi?id=29167
        REGRESSION (r48064): mint.com loses scrollbars after coming out of
        edit mode.

        rdar://problem/7314421, https://bugs.webkit.org/show_bug.cgi?id=30517
        REGRESSION (r48064): Extra scroll bars in GarageBand Lesson Store.

        Test: fast/overflow/scrollbar-restored.html

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::resetScrollbars):
        (WebCore::FrameView::setCanHaveScrollbars):
        (WebCore::FrameView::updateCanHaveScrollbars):
        (WebCore::FrameView::layout):
        * page/FrameView.h:
        * platform/ScrollView.h:

2009-11-09  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: CSS syntax highlighter doesn't recognize negative numbers
        https://bugs.webkit.org/show_bug.cgi?id=31257

        * inspector/front-end/SourceFrame.js:

2009-11-09  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Debugger shortcuts (F8, F10, F11) have no effect if the Console view is open
        https://bugs.webkit.org/show_bug.cgi?id=31252

        Route F1-F12 keypresses in the Console view to the current panel if there is one.

        Test: manual-tests/inspector/debugger-shortcuts-with-console-opened.html

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._promptKeyDown):
        * inspector/front-end/utilities.js:
        ():
        * manual-tests/inspector/debugger-shortcuts-with-console-opened.html: Added.

2009-11-09  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Pass credentials provided by XMLHTTPRequest to the network request.
        https://bugs.webkit.org/show_bug.cgi?id=31208

        After r42483, the credentials are no longer passed to the network request
        in the URL of the request.
        Pass the credentials from XMLHTTPRequest to the network request, the same
        way that other ports do.

        After this patch LayoutTests/http/xmlhttprequest/basic-auth.html passes.

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

2009-11-09  Zoltan Horvath  <zoltan@webkit.org>

        Unreviewed.

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

        Roll back r50657 because it breaks the MAC builds.

        * loader/ImageLoader.cpp:
        * loader/ProgressTracker.cpp:
        * loader/RedirectScheduler.cpp:
        * loader/Request.h:
        * loader/ThreadableLoaderClient.h:
        * loader/WorkerThreadableLoader.h:
        * loader/appcache/ApplicationCacheHost.h:
        * loader/appcache/ApplicationCacheStorage.h:
        * loader/icon/IconDatabaseClient.h:

2009-11-09  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for the part of loader directory in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=31161

        Inherits the following classes from Noncopyable because these are instantiated
        by 'new' and these are no need to be copyable:

        class Request - WebCore/loader/loader.cpp:100
        struct ScheduledRedirection - WebCore/loader/RedirectScheduler.cpp:164
        class IconDatabaseClient - WebCore/loader/icon/IconDatabase.cpp:89
        class ApplicationCacheStorage - WebCore/loader/appcache/ApplicationCacheStorage.cpp:1121
        class ApplicationCacheHost -  WebCore/loader/DocumentLoader.cpp:151
        class ImageEventSender - WebCore/loader/ImageLoader.cpp:54
        struct ProgressItem - WebCore/loader/ProgressTracker.cpp:169

        Inherits ThreadableLoaderClient class from Noncopyable because (its child class) 
        MainThreadBridge is instantiated by 'new' in 
        WebCore/loader/WorkerThreadableLoader.cpp:59 it is no need to be copyable.

        ThreadableLoaderClient's inheriting has been changed to public.

        * loader/ImageLoader.cpp:
        * loader/ProgressTracker.cpp:
        * loader/RedirectScheduler.cpp:
        * loader/Request.h:
        * loader/ThreadableLoaderClient.h:
        * loader/WorkerThreadableLoader.h:
        * loader/appcache/ApplicationCacheHost.h:
        * loader/appcache/ApplicationCacheStorage.h:
        * loader/icon/IconDatabaseClient.h:

2009-11-09  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's DocLoader
        https://bugs.webkit.org/show_bug.cgi?id=31163

        Inherits DocLoader class from Noncopyable because it is
        instantiated by 'new' in WebCore/dom/Document.cpp:370 and 
        it is no need to be copyable.

        * loader/DocLoader.h:

2009-11-09  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's Tokenizer
        https://bugs.webkit.org/show_bug.cgi?id=31162

        Inherits Tokenizer class from Noncopyable because (its child class)
        ImageTokenizer instantiated by 'new' in WebCore/loader/ImageDocument.cpp:178 
        and it is no need to be copyable.

        * dom/Tokenizer.h:

2009-11-09  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's DeleteButtonController
        https://bugs.webkit.org/show_bug.cgi?id=31105

        Inherits DeleteButtonController class from Noncopyable because it is 
        instantiated by 'new' in WebCore/editing/Editor.cpp:919 and
        it is no need to be copyable.  

        * editing/DeleteButtonController.h:

2009-11-09  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Jan Alonzo.

        [GTK] Expose Page::tabKeyCyclesThroughElements in the API
        https://bugs.webkit.org/show_bug.cgi?id=30482

        Expose Page::tabKeyCyclesThroughElements as a property of
        WebKitWebView.

        No new tests; fast/events/keypress-insert-tab.html is no longer skipped.

        * platform/gtk/KeyEventGtk.cpp: Correct m_text for tab key presses.
        (WebCore::singleCharacterString):

2009-11-09  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

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

        Fix a crasher that occurred with text which included newline
        chars in the markup.

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

2009-11-05  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Holger Freyther.

        [Qt] The XML tokenizer reports a parse error twice if it occurs before the document element is found.
        https://bugs.webkit.org/show_bug.cgi?id=31144

        XMLTokenizer::doEnd() uses an additional logic to report a parse failure in
        documents that end prematurely but are not considered invalid by QXmlStream.
        This is to stay compatible with the libxml2 implementation.
        However, that code path would be also hit in situations when it should not,
        i.e. the error would have already been caught and handled. As a result, the
        same error would be reported twice.

        No new tests, because the problem is already covered by
        fast/parser/xml-declaration-missing-ending-mark.html.

        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::doEnd):

2009-11-08  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Inspector should support copy() in the command line
        https://bugs.webkit.org/show_bug.cgi?id=31238

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::copyText): Added.
        * inspector/InspectorBackend.h: Added copyText
        * inspector/InspectorBackend.idl: Added copyText
        * inspector/front-end/InjectedScript.js:
        (InjectedScript._copy): Added.
        (InjectedScript._ensureCommandLineAPIInstalled):

2009-11-08  Drew Wilson  <atwilson@chromium.org>

        Reviewed by Dimitri Glazkov.

        V8 WorkerContextExecutionProxy does not handle SharedWorkers
        https://bugs.webkit.org/show_bug.cgi?id=31226

        Now checks to see what type of context is active and creates the
        appropriate wrapper (DEDICATEDWORKERCONTEXT vs SHAREDWORKERCONTEXT).

        Added support for converting to SharedWorkers and SharedWorkerContexts.

        Test: Existing layout tests cover this case (start passing in Chrome).

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):
        Now generates the right type of DOMWrapper for SharedWorkerContexts.
        (WebCore::WorkerContextExecutionProxy::convertToV8Object):
        Added support for SHAREDWORKERCONTEXT.
        (WebCore::WorkerContextExecutionProxy::convertEventTargetToV8Object):
        Added support for SharedWorker and SharedWorkerContext.

2009-11-08  Johnny Ding  <johnnyding.webkit@gmail.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=31224
        [V8] Return StyleSheet object instead of HTMLStyleElement w/document.styleSheets named property getter.

        Test: fast/dom/StyleSheet/get-stylesheet-byname.html

        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):

2009-11-08  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: "Search again" on scripts panel switches
        to the script this search started with.

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

        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.jumpToNextSearchResult):

2009-11-08  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Simplify Icon interface.
        https://bugs.webkit.org/show_bug.cgi?id=31154

        - Remove Icon::createIconForFile().  createIconForFiles() covers
          createIconForFile()'s role.
        - Remove FileChooser::chooseIcon()
        - Change the parameter types of FileChooser constructor and the
          factory method, String -> const Vector<String>&, in order to
          support initialization with multiple files.
        - Remove the icon loading code in IconChromiumWin.cpp, which
          doesn't work because of the sandbox.

        No tests because it's just a refactoring.

        * platform/FileChooser.cpp:
        (WebCore::FileChooser::FileChooser):
        (WebCore::FileChooser::create):
        (WebCore::FileChooser::chooseFile):
        (WebCore::FileChooser::chooseFiles):
        * platform/FileChooser.h:
        * platform/graphics/Icon.h:
        * platform/graphics/chromium/IconChromiumLinux.cpp:
        * platform/graphics/chromium/IconChromiumMac.cpp:
        * platform/graphics/chromium/IconChromiumWin.cpp:
        (WebCore::Icon::createIconForFiles):
        * platform/graphics/gtk/IconGtk.cpp:
        (WebCore::Icon::createIconForFiles):
        * platform/graphics/haiku/IconHaiku.cpp:
        * platform/graphics/mac/IconMac.mm:
        (WebCore::Icon::createIconForFiles):
        * platform/graphics/qt/IconQt.cpp:
        (WebCore::Icon::createIconForFiles):
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::createIconForFiles):
        * platform/graphics/wx/IconWx.cpp:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::RenderFileUploadControl):

2009-11-08  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

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

        Allows same-origin plugin-based content to load.

        Test: http/tests/security/xssAuditor/object-src-inject.html

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc): Modified to call XSSAuditor::isSameOriginResource.
        (WebCore::XSSAuditor::canLoadObject): Ditto.
        (WebCore::XSSAuditor::canSetBaseElementURL): Ditto. 
        (WebCore::XSSAuditor::isSameOriginResource): Added.
        * page/XSSAuditor.h:

2009-11-08  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (chromium build fix).

        * platform/network/HTTPParsers.cpp:
        (WebCore::parseDate): Changed this to not
        use a date parser that needs ExecState passed.
        
2009-11-08  David Levin  <levin@chromium.org>

        Unreviewed build fix for chromium.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):

2009-11-08  David Levin  <levin@chromium.org>

        Unreviewed build fix for chromium.

        Build fix for https://bugs.webkit.org/show_bug.cgi?id=31219
        Clean up GraphicsContext's current concept of ColorSpace

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):

2009-11-08  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: [REGRESSION] committing style edit
        clears elements panel selection.

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

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.update):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.):
        (WebInspector.StylePropertyTreeElement.prototype):

2009-11-08  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Holger Freyther.

        ResourceRequest to be class instead of struct
        https://bugs.webkit.org/show_bug.cgi?id=30670

        Started as a compilation fix for Symbian where the compiler makes a distinction between
        class and struct in function argument signatures.
        Changed all forward declarations of ResourceRequest to have class in the forward
        declaration instead of struct and changed the definition of ResourceRequest to be class
        and added access qualifiers where missing. Additionally two references of friend
        struct ResourceRequestBase changed to class instead.

        * history/HistoryItem.h:
        * inspector/InspectorController.h:
        * inspector/InspectorResource.h:
        * loader/DocumentThreadableLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.h:
        * loader/ResourceLoadNotifier.h:
        * loader/SubresourceLoader.h:
        * loader/SubresourceLoaderClient.h:
        * loader/ThreadableLoader.h:
        * loader/WorkerThreadableLoader.h:
        * loader/appcache/ApplicationCache.h:
        * loader/appcache/ApplicationCacheHost.h:
        * platform/CrossThreadCopier.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/ResourceRequestBase.h:
        * platform/network/cf/ResourceRequest.h:
        * platform/network/cf/ResourceRequestCFNet.h:
        * platform/network/chromium/ResourceRequest.h:
        * platform/network/curl/ResourceRequest.h:
        * platform/network/qt/ResourceRequest.h:
        * platform/network/soup/ResourceRequest.h:
        * xml/XMLHttpRequest.h:

2009-11-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7363434> Crash inside RenderObject::localToAbsolute
        below FrameView::layout
        https://bugs.webkit.org/show_bug.cgi?id=31093

        Test: fast/block/positioning/relative-positioned-inline-container.html

        In <http://trac.webkit.org/changeset/19148>, setStaticY() was changed
        to mark the object for layout, doing so without marking its ancestors.
        However, RenderBlock::skipLeadingWhitespace and
        RenderBlock::skipTrailingWhitespace() call setStaticY() on a relative-
        positioned inline container, causing it to be marked for layout without
        ever going back to give it layout, and thus layout could end with a
        dirty object still in the tree, leading to all sorts of badness.

        The fix is to revert setStaticY() to not marking the object dirty, and
        instead do it in the call sites that require it, which are in
        RenderBlock and RenderFlexibleBox.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustPositionedBlock):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::setStaticY):

2009-11-07  Daniel Bates  <dbates@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=20780
        
        Fixes an issue where the onchange event handler is not fired when the 
        input field is autocompleted.
        
        We cannot test this using DRT since DRT cannot emulate autocompletion.
        So, a manual-test is included.

        Tests: manual-tests/autocompletion-fire-onchange.html

        * manual-tests/autocompletion-fire-onchange.html: Added.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setInnerTextValue):

2009-11-07  Benjamin Otte  <otte@gnome.org>

        Reviewed by Holger Freyther.

        Mark redrawn areas on image surfaces as dirty.

        This is required to conform to the Cairo API, but is currently only
        used by debugging tools like cairo-trace.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::platformTransformColorSpace):
        (WebCore::putImageData):

2009-11-07  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=30878
        [Gtk] atk_text_get_text() fails in entries when the end_offset is -1

        If the end_offset is -1, use the String length as the end_offset.

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

2009-11-06  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adele Peterson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=31219 Clean up 
        GraphicsContext's current concept of ColorSpace

        ColorSpace is now called ColorType. The variables on the state we 
        appropriately re-named as well. I removed strokeColorSpace() and 
        fillColorSpace() from GraphicsContext since they were never called. 

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setStrokeColor):
        (WebCore::GraphicsContext::setFillColor):
        (WebCore::GraphicsContext::setStrokePattern):
        (WebCore::GraphicsContext::setFillPattern):
        (WebCore::GraphicsContext::setStrokeGradient):
        (WebCore::GraphicsContext::setFillGradient):
        * platform/graphics/GraphicsContext.h:
        (WebCore::):
        * platform/graphics/GraphicsContextPrivate.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::calculateDrawingMode):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokeRect):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRect):

2009-11-06  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Tim Hatcher.

        Fixes <http://webkit.org/b/31177>.
        Web Inspector: Bind backspace to delete cookies and DOM Storage.
        
        Refactor editing code from DOMStorageDataGrid to DataGrid, so other
        places in the inspector can use editing in DataGrid (added a FIXME for
        some stuff that needs to be generalized).
        
        Also added deleting functionality to DataGrid, and implemented it for
        Cookies and DOM Storage. The reason this patch is so big is because of
        the refactoring of editing code, which won't be used yet in a cross-datagrid
        way, but should be able to.
        
        Additionally, moved the callbacks members from DOMStorageDataGrid to
        DOMStorageItemsView, which allowed us to delete DOMStorageDataGrid, to 
        make the architecture of DOM Storage look a lot more like the Cookies view.
        
        Lastly, added a preventDefault call in ElementsTreeOutline to prevent the 
        inspector from beeping at you when you delete an element.

        * WebCore.gypi: Removed DOMStorageDataGrid.
        * WebCore.vcproj/WebCore.vcproj: Removed DOMStorageDataGrid.
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype.dataGridForCookies):
        (WebInspector.CookieItemsView.prototype._deleteButtonClicked):
        (WebInspector.CookieItemsView.prototype._deleteCookieCallback):
        * inspector/front-end/DOMStorageDataGrid.js: Removed.
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype._dataGridForDOMStorageEntries):
        (WebInspector.DOMStorageItemsView.prototype._deleteButtonClicked):
        (WebInspector.DOMStorageItemsView.prototype._refreshButtonClicked):
        (WebInspector.DOMStorageItemsView.prototype._editingCallback):
        (WebInspector.DOMStorageItemsView.prototype.deleteSelectedRow):
        (WebInspector.DOMStorageItemsView.prototype._deleteCallback):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid):
        (WebInspector.DataGrid.prototype._ondblclick): Moved from DOMStorageDataGrid to DataGrid + Refactoring.
        (WebInspector.DataGrid.prototype._startEditingColumnOfDataGridNode): Ditto.
        (WebInspector.DataGrid.prototype._startEditing): Ditto.
        (WebInspector.DataGrid.prototype._editingCommitted.moveToNextIfNeeded): Ditto.
        (WebInspector.DataGrid.prototype._editingCommitted): Ditto.
        (WebInspector.DataGrid.prototype._editingCancelled): Ditto.
        (WebInspector.DataGrid.prototype.handleKeyEvent): Added case for delete/backspace.
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.handleKeyEvent): Added preventDefault call.
        * inspector/front-end/WebKit.qrc: Removed DOMStorageDataGrid.
        * inspector/front-end/inspector.html: Removed DOMStorageDataGrid.

2009-11-06  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix: added an ExecState parameter.

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

2009-11-06  Geoffrey Garen  <ggaren@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=31197
        Implemented a timezone cache not based on Mac OS X's notify_check API.

        Updated for JavaScriptCore internal API change.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):
        (JSC::Bindings::convertQVariantToValue): Updated for namespace change.

        * platform/network/HTTPParsers.cpp:
        (WebCore::parseDate): Pass 0 for ExecState, since we don't have one.
        (This function probably shouldn't be using a JavaScript date parser
        to begin with, but oh well.)

2009-11-06  Anantanarayanan G Iyengar  <ananta@chromium.org>

        Reviewed by Adam Barth.

        The associated webkit bug is https://bugs.webkit.org/show_bug.cgi?id=31067,
        which affects Chromium only.
        
        Changes to V8HTMLDocumentCustom.cpp are as below:-
        1. The HTMLDocumentOpen function would cause a crash in Chromium if
           there was no calling javascript context. We now check for this case
           and pass in NULL to the HTMLDocument::open function which can handle
           a NULL document parameter.
        2. The other functions like HTMLDocumentWrite, HTMLDocumentWriteln, etc
           had ASSERTS for a NULL caller frame, which was bogus as it would crash
           anyway. We now check for this case and return a failure.
           
        Changes to V8DOMWindowCustom.cpp are as below:-
        1. Instead of failing the window.open call made by NPAPI for lack of a
           calling javascript context, we now use the entered context as the calling
           context.

        Tests: plugins/document-open.html
               plugins/window-open.html

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-11-06  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        Geolocation error code UNKNOWN_ERROR is deprecated.
        https://bugs.webkit.org/show_bug.cgi?id=31184

        Remove this error code from PositionError, both for use from C++ code and from the JS object.

        Updated fast/dom/Geolocation/error.html to test this.

        * page/PositionError.h: Modified.
        (WebCore::PositionError::): Remove ErrorCode::UNKNOWN_ERROR.
        * page/PositionError.idl: Modified. Remove UNKNOWN_ERROR constant.
        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::startRequest): Replace UNKNOWN_ERROR with POSITION_UNAVAILABLE.
        * platform/gtk/GeolocationServiceGtk.cpp: Modified.
        (WebCore::GeolocationServiceGtk::startUpdating): Replace UNKNOWN_ERROR with POSITION_UNAVAILABLE.

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

        Reviewed by Nikolas Zimmermann.

        feMorphology filter is not implemented
        [https://bugs.webkit.org/show_bug.cgi?id=5863]

        The Implementation of feMorphology.
        
        Test: We have allready a test for feMorphology
              svg/W3C-SVG-1.1/filters-morph-01-f.svg

        * svg/graphics/filters/SVGFEMorphology.cpp:
        (WebCore::FEMorphology::apply):

2009-11-06  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        V8DOMWindowCustom.cpp is missing WEB_SOCKETS guard on include.
        https://bugs.webkit.org/show_bug.cgi?id=31209

        Build fix only. No new tests possible.

        * bindings/v8/custom/V8DOMWindowCustom.cpp: Modified. Added WEB_SOCKETS guard on inclue of WebSockets.h.

2009-11-06  Drew Wilson  <atwilson@chromium.org>

        Reviewed by David Levin.

        V8 bindings do not support SharedWorkers as event targets
        https://bugs.webkit.org/show_bug.cgi?id=31199

        No new tests because existing layout tests suffice (they currently
        crash on Chromium)

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        Added clause to create a DOM wrapper for SharedWorkers.

2009-11-06  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Do not unnecessarly synchronzie in weak reference callbacks.
        https://bugs.webkit.org/show_bug.cgi?id=31191

        * bindings/v8/DOMData.h:
        (WebCore::DOMData::handleWeakObject):

2009-11-06  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Fix resource content search.
        https://bugs.webkit.org/show_bug.cgi?id=31202

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype.refresh):
        (WebInspector.AbstractTimelinePanel.prototype.removeItem):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelineGraph.prototype.refresh):

2009-11-05  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Eric Seidel.

        Fix ASSERT(currentStyle = renderStyle()).
        https://bugs.webkit.org/show_bug.cgi?id=31152

        * dom/Element.cpp:
        (WebCore::Element::pseudoStyleCacheIsInvalid): We should have used "==" instead of "=".

2009-11-05  Alpha Lam  <hclam@chromium.org>

        Revert 50562 because it broke Chromium. Not reviewed since this is a build fix and revert.

        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::gcEpilogue):
        * bindings/v8/V8GCController.h:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluate):
        (WebCore::V8Proxy::runScript):
        (WebCore::V8Proxy::callFunction):

2009-11-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Cross-domain access to stylesheet text should not be allowed
        https://bugs.webkit.org/show_bug.cgi?id=20527

        Check whether whether the current document can read the cssRules from
        the style sheet.  Firefox throws a security error here, but we return
        null instead because that's what we usually do in these cases.

        Test: http/tests/security/cannot-read-cssrules-redirect.html
              http/tests/security/cannot-read-cssrules.html

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::cssRules):

2009-11-05  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        If the Geolocation service fails to start, invoke the error callback asynchronously.
        https://bugs.webkit.org/show_bug.cgi?id=28276

        All Geolocation callbacks must be invoked asynchronously.
        See http://www.w3.org/TR/geolocation-API/#geolocation_interface

        No new tests possible with current LayoutTestController.

        * page/Geolocation.cpp:
        (WebCore::Geolocation::getCurrentPosition): Modified. Asserts that startRequest returned a notifier.
        (WebCore::Geolocation::watchPosition): Modified. Asserts that startRequest returned a notifier.
        (WebCore::Geolocation::startRequest): Modified. If the Geolocation service fails to start, set a fatal error on the notifier.

2009-11-05  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by Eric Seidel.

        Removed the "this is part of the KDE project" comments from 
        all *.h, *.cpp, *.idl, and *.pm files.
        
        https://bugs.webkit.org/show_bug.cgi?id=31167
        
        The maintenance and architecture page in the project wiki lists
        this as a task.
        
        This change includes no changes or additions to test cases 
        since the change affects only comments.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/IDLParser.pm:
        * bindings/scripts/IDLStructure.pm:
        * css/CSSInheritedValue.cpp:
        * css/CSSInitialValue.cpp:
        * css/CSSMediaRule.cpp:
        * css/CSSNamespace.h:
        * css/CSSProperty.cpp:
        * css/CSSProperty.h:
        * css/CSSRuleList.cpp:
        * css/CSSRuleList.h:
        * css/CSSSelector.h:
        * css/CSSValueList.cpp:
        * css/FontValue.cpp:
        * css/MediaFeatureNames.cpp:
        * css/MediaFeatureNames.h:
        * css/Pair.h:
        * css/SVGCSSStyleSelector.cpp:
        * css/ShadowValue.cpp:
        * css/StyleSheet.cpp:
        * css/StyleSheetList.cpp:
        * css/maketokenizer:
        * dom/BeforeUnloadEvent.cpp:
        * dom/BeforeUnloadEvent.h:
        * dom/CSSMappedAttributeDeclaration.cpp:
        * dom/EventNames.cpp:
        * dom/EventTarget.cpp:
        * dom/MappedAttributeEntry.h:
        * dom/MouseRelatedEvent.h:
        * dom/RangeException.h:
        * dom/StyleElement.h:
        * dom/Tokenizer.h:
        * html/HTMLHeadElement.h:
        * html/HTMLHeadingElement.cpp:
        * html/HTMLHeadingElement.h:
        * html/HTMLHtmlElement.h:
        * html/HTMLImageLoader.h:
        * html/HTMLMetaElement.h:
        * html/HTMLModElement.cpp:
        * html/HTMLModElement.h:
        * html/HTMLOptionsCollection.cpp:
        * html/HTMLPlugInElement.cpp:
        * html/HTMLPreElement.cpp:
        * html/HTMLPreElement.h:
        * html/HTMLTableCellElement.cpp:
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.cpp:
        * html/HTMLTableColElement.h:
        * html/HTMLTablePartElement.cpp:
        * html/HTMLTablePartElement.h:
        * html/HTMLTitleElement.h:
        * page/MouseEventWithHitTestResults.h:
        * platform/StaticConstructors.h:
        * platform/text/AtomicStringImpl.h:
        * platform/text/qt/TextBreakIteratorQt.cpp:
        * rendering/AutoTableLayout.h:
        * rendering/CounterNode.cpp:
        * rendering/EllipsisBox.cpp:
        * rendering/EllipsisBox.h:
        * rendering/FixedTableLayout.cpp:
        * rendering/FixedTableLayout.h:
        * rendering/HitTestRequest.h:
        * rendering/HitTestResult.h:
        * rendering/InlineRunBox.h:
        * rendering/PointerEventsHitRules.cpp:
        * rendering/PointerEventsHitRules.h:
        * rendering/RenderBR.cpp:
        * rendering/RenderBR.h:
        * rendering/RenderButton.cpp:
        * rendering/RenderButton.h:
        * rendering/RenderFieldset.cpp:
        * rendering/RenderFrameSet.cpp:
        * rendering/RenderListItem.cpp:
        * rendering/RenderTableRow.cpp:
        * rendering/RenderView.h:
        * rendering/RootInlineBox.h:
        * rendering/SVGInlineTextBox.cpp:
        * rendering/SVGInlineTextBox.h:
        * rendering/TableLayout.h:
        * rendering/break_lines.h:
        * rendering/style/SVGRenderStyle.cpp:
        * rendering/style/SVGRenderStyle.h:
        * rendering/style/SVGRenderStyleDefs.cpp:
        * rendering/style/SVGRenderStyleDefs.h:
        * svg/GradientAttributes.h:
        * svg/LinearGradientAttributes.h:
        * svg/PatternAttributes.h:
        * svg/RadialGradientAttributes.h:
        * svg/SVGAElement.cpp:
        * svg/SVGAngle.idl:
        * svg/SVGAnimateColorElement.cpp:
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateElement.cpp:
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimatedPathData.cpp:
        * svg/SVGAnimatedPathData.h:
        * svg/SVGAnimatedPoints.cpp:
        * svg/SVGAnimatedPoints.h:
        * svg/SVGAnimationElement.cpp:
        * svg/SVGCircleElement.cpp:
        * svg/SVGClipPathElement.cpp:
        * svg/SVGColor.cpp:
        * svg/SVGColor.idl:
        * svg/SVGComponentTransferFunctionElement.cpp:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.cpp:
        * svg/SVGDefsElement.cpp:
        * svg/SVGDescElement.cpp:
        * svg/SVGDescElement.h:
        * svg/SVGDocument.idl:
        * svg/SVGElement.idl:
        * svg/SVGElementInstanceList.cpp:
        * svg/SVGElementInstanceList.h:
        * svg/SVGEllipseElement.cpp:
        * svg/SVGExternalResourcesRequired.cpp:
        * svg/SVGFEBlendElement.cpp:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEFloodElement.cpp:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEFuncAElement.cpp:
        * svg/SVGFEFuncAElement.h:
        * svg/SVGFEFuncBElement.cpp:
        * svg/SVGFEFuncBElement.h:
        * svg/SVGFEFuncGElement.cpp:
        * svg/SVGFEFuncGElement.h:
        * svg/SVGFEFuncRElement.cpp:
        * svg/SVGFEFuncRElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFEMergeElement.cpp:
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMergeNodeElement.cpp:
        * svg/SVGFEOffsetElement.cpp:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFETileElement.cpp:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp:
        * svg/SVGGElement.cpp:
        * svg/SVGGradientElement.cpp:
        * svg/SVGHKernElement.idl:
        * svg/SVGLangSpace.cpp:
        * svg/SVGLangSpace.h:
        * svg/SVGLength.cpp:
        * svg/SVGLength.h:
        * svg/SVGLength.idl:
        * svg/SVGLengthList.cpp:
        * svg/SVGLengthList.h:
        * svg/SVGLineElement.cpp:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGList.h:
        * svg/SVGListTraits.h:
        * svg/SVGLocatable.h:
        * svg/SVGMaskElement.cpp:
        * svg/SVGMatrix.idl:
        * svg/SVGMetadataElement.cpp:
        * svg/SVGMetadataElement.h:
        * svg/SVGMetadataElement.idl:
        * svg/SVGNumber.idl:
        * svg/SVGNumberList.cpp:
        * svg/SVGNumberList.h:
        * svg/SVGPaint.cpp:
        * svg/SVGPathElement.cpp:
        * svg/SVGPathSeg.h:
        * svg/SVGPathSegArc.cpp:
        * svg/SVGPathSegArc.h:
        * svg/SVGPathSegClosePath.cpp:
        * svg/SVGPathSegClosePath.h:
        * svg/SVGPathSegCurvetoCubic.cpp:
        * svg/SVGPathSegCurvetoCubic.h:
        * svg/SVGPathSegCurvetoCubicSmooth.cpp:
        * svg/SVGPathSegCurvetoCubicSmooth.h:
        * svg/SVGPathSegCurvetoQuadratic.cpp:
        * svg/SVGPathSegCurvetoQuadratic.h:
        * svg/SVGPathSegCurvetoQuadraticSmooth.cpp:
        * svg/SVGPathSegCurvetoQuadraticSmooth.h:
        * svg/SVGPathSegLineto.cpp:
        * svg/SVGPathSegLineto.h:
        * svg/SVGPathSegLinetoHorizontal.cpp:
        * svg/SVGPathSegLinetoHorizontal.h:
        * svg/SVGPathSegLinetoVertical.cpp:
        * svg/SVGPathSegLinetoVertical.h:
        * svg/SVGPathSegMoveto.cpp:
        * svg/SVGPathSegMoveto.h:
        * svg/SVGPatternElement.cpp:
        * svg/SVGPoint.idl:
        * svg/SVGPointList.cpp:
        * svg/SVGPointList.h:
        * svg/SVGPolyElement.cpp:
        * svg/SVGPolygonElement.cpp:
        * svg/SVGPolygonElement.h:
        * svg/SVGPolylineElement.cpp:
        * svg/SVGPolylineElement.h:
        * svg/SVGPreserveAspectRatio.cpp:
        * svg/SVGPreserveAspectRatio.h:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRect.idl:
        * svg/SVGRectElement.cpp:
        * svg/SVGRenderingIntent.h:
        * svg/SVGSVGElement.idl:
        * svg/SVGScriptElement.cpp:
        * svg/SVGSetElement.cpp:
        * svg/SVGSetElement.h:
        * svg/SVGStopElement.cpp:
        * svg/SVGStringList.cpp:
        * svg/SVGStringList.h:
        * svg/SVGStylable.cpp:
        * svg/SVGStylable.h:
        * svg/SVGStyleElement.cpp:
        * svg/SVGStyleElement.h:
        * svg/SVGStyledElement.h:
        * svg/SVGStyledLocatableElement.cpp:
        * svg/SVGStyledLocatableElement.h:
        * svg/SVGStyledTransformableElement.cpp:
        * svg/SVGStyledTransformableElement.h:
        * svg/SVGSwitchElement.cpp:
        * svg/SVGSymbolElement.cpp:
        * svg/SVGTRefElement.cpp:
        * svg/SVGTSpanElement.cpp:
        * svg/SVGTSpanElement.h:
        * svg/SVGTests.h:
        * svg/SVGTextElement.cpp:
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.cpp:
        * svg/SVGTextPositioningElement.cpp:
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTitleElement.cpp:
        * svg/SVGTitleElement.h:
        * svg/SVGTransform.cpp:
        * svg/SVGTransform.h:
        * svg/SVGTransform.idl:
        * svg/SVGTransformList.cpp:
        * svg/SVGTransformList.h:
        * svg/SVGTransformable.h:
        * svg/SVGURIReference.h:
        * svg/SVGUnitTypes.h:
        * svg/SVGUseElement.cpp:
        * svg/SVGViewElement.cpp:
        * svg/SVGZoomAndPan.cpp:
        * svg/SVGZoomAndPan.h:
        * svg/SVGZoomEvent.cpp:

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

        Reviewed by Dimitri Glazkov.

        REGRESSION Clean up security origin usage in DOM Storage.
        https://bugs.webkit.org/show_bug.cgi?id=31188

        Clean up security origin usage in DOM Storage.  This fixes a bug in my
        refactoring here: https://bugs.webkit.org/show_bug.cgi?id=31149

        Instead of having StorageAreaSync's constructor (which is called in the
        constructor for StorageAreaImpl) calling a method on StoargeAreaImpl to get the
        database identifier, simply have StorageAreaImpl pass the identifier into
        StorageAreaSync.

        No test because there's no change in externally observable behavior.

        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::StorageAreaImpl):
        * storage/StorageAreaImpl.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::create):
        (WebCore::StorageAreaSync::StorageAreaSync):
        * storage/StorageAreaSync.h:

2009-11-05  Scott Violet  <sky@google.com>

        Reviewed by Dimitri Glazkov.

        Need notification of scrolling frame
        https://bugs.webkit.org/show_bug.cgi?id=31145

        Adds FrameLoaderClient::didChangeScrollOffset that is called when
        the frame scrolls. This will be used to know when history state
        needs to be updated.

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::didChangeScrollOffset):
        * page/FrameView.cpp:
        (WebCore::FrameView::valueChanged):

2009-11-05  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        [V8] Update bindings to use new API for external arrays
        https://bugs.webkit.org/show_bug.cgi?id=31181

        No new tests; covered by existing WebGL tests.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setIndexedPropertiesToExternalArray):
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8DOMWrapper::convertToV8Object):
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/custom/V8CanvasArrayCustom.h:
        (WebCore::constructCanvasArray):

2009-11-05  Alpha Lam  <hclam@chromium.org>

        Not reviewed, Chromium build fix.

        50561 introduces a custom method for SVGMatrix, we need to implement
        this in V8.

        * bindings/v8/custom/V8CustomBinding.h:
        Adding definition for V8SVGMatrixMultiply.
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        Implement V8SVGMatrixMultiply according to the same method in JSC.

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

        Revert 50569 since it broke QT.  Build fix and just a revert, so no review.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setSessionStorageEnabled):
        * page/Settings.h:
        (WebCore::Settings::sessionStorageEnabled):

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

        Reviewed by Timothy Hatcher.

        REGRESSION: Web Inspector doesn't show CSS rules properly for iframes

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

        Test: inspector/styles-iframe.html

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.getStyles):
        (InjectedScript.getComputedStyle):
        (InjectedScript.addStyleSelector):
        * inspector/front-end/TestController.js:
        (WebInspector.TestController.prototype.notifyDone):
        (WebInspector.TestController.prototype.runAfterPendingDispatches):
        (WebInspector.evaluateForTestInFrontend.invokeMethod):
        (WebInspector.evaluateForTestInFrontend):

2009-11-05  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Geoffrey Garen and Dimitri Glazkov.

        Rehashing of EventListenerMap leads to loss of EvenListenerList.
        https://bugs.webkit.org/show_bug.cgi?id=31027

        Tested by new fast/events/event-listener-map-rehash-crash.html.

        EventListenerMap modified to store pointers to listener vectors:
        * dom/EventTarget.cpp:
        (WebCore::EventTargetData::~EventTargetData):
        (WebCore::EventTarget::addEventListener):
        (WebCore::EventTarget::removeEventListener):
        (WebCore::EventTarget::fireEventListeners):
        (WebCore::EventTarget::getEventListeners):
        (WebCore::EventTarget::removeAllEventListeners):
        * dom/EventTarget.h:

        Usages updated after interface changes:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::transferEventListenersToShadowTree):

2009-11-05  Dan Kegel  <dank@chromium.org>

        Reviewed by Dmitri Titov.

        Add missing initialization for m_createdByParser.
        https://bugs.webkit.org/show_bug.cgi?id=31089

        Test: fast/dom/beforeload/pi-before-load.xhtml in Valgrind

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::ProcessingInstruction):

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

        Reviewed by Adam Barth.

        DOM Storage runtime flag changes
        https://bugs.webkit.org/show_bug.cgi?id=30602

        Part 2/2.

        Revert my changes to Settings and instead implement DOM Storage enabling via
        the methods agreed upon in https://bugs.webkit.org/show_bug.cgi?id=30240

        This stuff was (intentionally) never exposed to web pages or DRT, so there's no
        LayoutTest visible changes and thus no tests.

        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):
        * page/DOMWindow.idl:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        * storage/Storage.cpp:
        (WebCore::Storage::setLocalStorageAvailable):
        (WebCore::Storage::localStorageAvailable):
        (WebCore::Storage::setSessionStorageAvailable):
        (WebCore::Storage::sessionStorageAvailable):
        * storage/Storage.h:

2009-11-05  Jian Li  <jianli@chromium.org>

        Reviewed by Pavel Feldman.

        Bug 31108 - [V8] REGRESSION: Pause on exception is broken
        https://bugs.webkit.org/show_bug.cgi?id=31108

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::reportException):

2009-11-05  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitri Titov.

        We should not bubble up events if we drag something to an iframe that
        has an invalid source.
        https://bugs.webkit.org/show_bug.cgi?id=30469

        Test: http/tests/misc/bubble-drag-events.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleDragAndDropForTarget):
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::cancelDragAndDrop):
        (WebCore::EventHandler::performDragAndDrop):
        * page/EventHandler.h:
        (WebCore::EventHandler::):

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

        Reviewed by Timothy Hatcher.

        Web Inspector: speed up Timelines Clear by a factor of thousands.

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

        * inspector/front-end/utilities.js:
        (Element.prototype.removeChildren):

2009-11-05  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        If high memory usage is detected, hint to V8 that it might be due
        to external objects retained by V8 objects.
        https://bugs.webkit.org/show_bug.cgi?id=31051

        * bindings/v8/V8GCController.cpp:
        (WebCore::GetMemoryUsageInMB):
        (WebCore::V8GCController::gcEpilogue):
        (WebCore::V8GCController::checkMemoryUsage):
        * bindings/v8/V8GCController.h:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluate):
        (WebCore::V8Proxy::runScript):
        (WebCore::V8Proxy::callFunction):

2009-11-05  Jeff Schiller  <codedread@gmail.com>

        Reviewed by Simon Fraser.

        Correct order of matrix multiplication for SVGMatrix.
        https://bugs.webkit.org/show_bug.cgi?id=16062

        Test: svg/dom/SVGMatrix-interface.xhtml

        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::multiply):
        * svg/SVGMatrix.idl:

2009-11-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Make resource-related records in timeline
        actually take some time.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelinePanel.prototype._getRecordDetails):
        (WebInspector.TimelinePanel.prototype.reset):

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

        Reviewed by Darin Fisher.

        Simplify LocalStorageThread
        https://bugs.webkit.org/show_bug.cgi?id=30935

        This is a re-submit of 50519.  LocalStorageTask should have never been ref
        counted.  I've removed that and switched a PassRefPtr over to a PassOwnPtr.

        On LocalStoragethread: Remove reference counting. Get rid of locking. Make some
        of the method names a bit more clear. Assert proper thread usage. Join rather
        than detaching the thread and doing an ad-hoc form of join. Avoid touching
        variables on the background thread when simple to do so.  Also create a generic
        scheduleTask function rather than one for each task.

        No behavior should have changed.

        * storage/LocalStorageTask.h:
        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::create):
        (WebCore::LocalStorageThread::LocalStorageThread):
        (WebCore::LocalStorageThread::~LocalStorageThread):
        (WebCore::LocalStorageThread::start):
        (WebCore::LocalStorageThread::threadEntryPointCallback):
        (WebCore::LocalStorageThread::threadEntryPoint):
        (WebCore::LocalStorageThread::scheduleTask):
        (WebCore::LocalStorageThread::terminate):
        (WebCore::LocalStorageThread::performTerminate):
        * storage/LocalStorageThread.h:
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::StorageSyncManager):
        (WebCore::StorageSyncManager::~StorageSyncManager):
        (WebCore::StorageSyncManager::scheduleImport):
        (WebCore::StorageSyncManager::scheduleSync):
        * storage/StorageSyncManager.h:

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

        Reviewed by Darin Fisher.

        Calling databaseIdentifier on LocalStorage's background thread is not safe.
        https://bugs.webkit.org/show_bug.cgi?id=31149

        Calling SecurityOrigin::databaseIdentifier on LocalStorage's background thread
        is not safe.  databaseIdentifier does a bunch of string concatenation which
        ref-counts StringImpls in some cases.  This was caught by valgrind thread
        sanitizer: http://code.google.com/p/chromium/issues/detail?id=25645

        There's no way to test for such racyness, unfortunately.

        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):
        (WebCore::StorageAreaSync::performImport):
        * storage/StorageAreaSync.h:
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::fullDatabaseFilename):
        * storage/StorageSyncManager.h:

2009-11-03  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Clean up StorageAreaSync
        https://bugs.webkit.org/show_bug.cgi?id=31100

        Major fixes: Break the ref count cycle for StorageArea on the main
        thread, not the background thread since the latter is not safe.
        Length() needs to block on the import completing.

        Small fixes: setItem needs to handle the copy on write case even if it
        has an exception.  setItem and removeItem should just bail from the
        the function if the value hasn't changed rather than wrapping the end
        in an if block.  Clear should only send an event if it wasn't already
        cleared.  StorageAreaSync should assert that the final sync was
        scheduled.

        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::length):
          Forgot to block on the import.
        (WebCore::StorageAreaImpl::key):
        (WebCore::StorageAreaImpl::setItem):
          Handle the copy on write case even when there's an exception.
        (WebCore::StorageAreaImpl::removeItem):
        (WebCore::StorageAreaImpl::clear):
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::~StorageAreaSync):
        (WebCore::StorageAreaSync::scheduleFinalSync):
        (WebCore::StorageAreaSync::performImport):
        (WebCore::StorageAreaSync::markImported):
        (WebCore::StorageAreaSync::blockUntilImportComplete):
        * storage/StorageAreaSync.h:

2009-11-05  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Eric Seidel.

        Allow custom memory allocation control for WebCore's CachedResource
        https://bugs.webkit.org/show_bug.cgi?id=31114

        Inherits CachedResource class from Noncopyable because its (its child
        class) CachedCSSStyleSheet instantiated by 'new' in WebCore/loader/Cache.cpp:75 
        and it is no need to be copyable.

        * loader/CachedResource.h:

2009-11-04  Mark Mentovai  <mark@chromium.org>

        Reviewed by Mark Rowe.

        Separate the difference between HAVE(CGINTERPOLATION_MEDIUM), which
        is true when building on 10.6 or later, and USE(CGINTERPOLATION_MEDIUM)
        which is true when targeting 10.6 or later.

        HAVE(CGINTERPOLATION_MEDIUM) indicates that kCGInterpolationMedium
        is present in the CGInterpolationQuality enum, and must be handled
        by a switch that has cases for each enumerated value.

        USE(CGINTERPOLATION_MEDIUM) indicates that the product will only run
        on 10.6 or later, and that CoreGraphics will understand when
        InterpolationMedium is mapped to kCGInterpolationMedium at runtime.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::imageInterpolationQuality):

2009-11-04  Dan Kegel  <dank@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix buffer overrun in WebCore::Page::userStyleSheetLocationChanged()
        https://bugs.webkit.org/show_bug.cgi?id=31138

        Test: LayoutTests/platform/mac/fast/loader/user-stylesheet-fast-path.html in Valgrind

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

2009-11-04  Timothy Hatcher  <timothy@apple.com>

        Update the Web Inspector Timeline panel to better match the mock-up.

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

        Reviewed by Pavel Feldman.

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._getRecordDetails):
        (WebInspector.TimelinePanel.prototype._dragWindow):
        (WebInspector.TimelinePanel.prototype._resizeWindowLeft):
        (WebInspector.TimelinePanel.prototype._resizeWindowRight):
        (WebInspector.TimelineCategoryTreeElement.prototype.onattach):
        (WebInspector.TimelineRecordTreeElement.prototype.onattach):
        (WebInspector.TimelineRecordTreeElement.prototype.refresh):
        (WebInspector.TimelineCategoryGraph):
        * inspector/front-end/inspector.css:

2009-11-05  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=25439
        Deleting when in front of a block image removes character from previous paragraph

        Added editing/deleting/25439-{1,2,3}.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs): Block images, tables and HRs cannot 
        be made inline with other content.  Instead of merging, just move the caret to just before 
        the selection we deleted.
        * editing/htmlediting.cpp:
        (WebCore::firstInSpecialElement): Added a FIXME.  This function begins iterating up from pos.node(), which 
        doesn't necessarily contain pos (suppose pos was [img, 0]).
        (WebCore::lastInSpecialElement): Ditto.
        (WebCore::isRenderedAsNonInlineTableImageOrHR): Moved from visible_units.cpp.  Added a check for non-inline images.
        * editing/htmlediting.h:
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph): Use moved/renamed function.  Removed FIXME.  The problem causing 
        5027702 is now squarely in first/lastInSpecialElement
        (WebCore::endOfParagraph): Ditto.
        
2009-11-04  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        Hang in Mail on attempting to change indent level.
        <rdar://problem/7131805>
        https://bugs.webkit.org/show_bug.cgi?id=31127

        The hang was caused by an infinite loop inside outdentRegion.
        The code did not account for the fact that, when a list item
        contains multiple paragraphs, outdent moves all paragraphs at
        once, invalidating some of the positions we keep track of in the loop.
        Some code refactoring has also been done to minimize duplicated code.
        
        Test: editing/execCommand/outdent-multiparagraph-list.html

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentRegion): Moved code in common with
        outdentRegion to doApply.
        (WebCore::IndentOutdentCommand::outdentRegion): Fixed endless loop.
        (WebCore::IndentOutdentCommand::doApply): Some code refactoring.
        * editing/IndentOutdentCommand.h: Added VisiblePosition parameters to
        indentRegion and outdentRegion.

2009-11-04  Alpha Lam  <hclam@chromium.org>

        Reviewed by Eric Carlson.

        Volume slider doesn't have a thumb
        https://bugs.webkit.org/show_bug.cgi?id=31135

        Fixed an incorrect if statement that prevents volume slider
        being updated.

        The statement checks if the slider value equals to the current
        volume value of the media control to avoid updating the volume
        slider. Updating the volume slider control shouldn't be within
        this condition because we explicitly set them to be equals
        during creation of the controls and also when mouse events are
        received on the volume control.

        No new tests because existing code breaks:
        LayoutTests/media/video-volume-slider.html

        It should now start passing on Chromium.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlVolumeSliderElement::update):
        Update the volume slider regardless of the current volume value
        of the media control.

2009-11-04  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by David Levin.

        Need to properly disable applicationCache at runtime
        https://bugs.webkit.org/show_bug.cgi?id=30417

        Adding applicationCacheEnabled bit to V8 RuntimeEnabledFeatures.

        No new exposed functionality, so no new tests.

        * bindings/v8/RuntimeEnabledFeatures.cpp:
        * bindings/v8/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setApplicationCacheEnabled):
        (WebCore::RuntimeEnabledFeatures::applicationCacheEnabled):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * page/DOMWindow.idl:

2009-11-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=31143
        Assertion failure in CredentialStorage::set() when proxy credentials are being set

        No test, cannot test proxy behavior.

        * platform/network/CredentialStorage.cpp: (WebCore::CredentialStorage::set): Account for the
        possibility of null url. Release mode changes are likely inconsequential - e.g. we used to
        add "://" to origin set, which is weird, but safe.

2009-11-04  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Leftover Breakpoints in the Sidebar Pane
        https://bugs.webkit.org/show_bug.cgi?id=30659

        No new tests.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.addScript):

2009-11-04  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Timothy Hatcher.

        WebInspector: Use a different method to identify the webkit port in
        InspectorBackent::platform().
        This corrects the inspector expected behavior with Qt on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=31116

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::platform):
        (WebCore::InspectorBackend::port):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/front-end/InspectorControllerStub.js:
        (.WebInspector.InspectorControllerStub.prototype.port):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.toolbarDragStart):

2009-11-04  Benjamin Otte  <otte@gnome.org>

        Reviewed by Gustavo Noronha.

        Update Cairo requirement to 1.6.

        Also remove all conditional code and workarounds for older versions of
        Cairo.
        In particular, gain image quality by removing the use of
        CAIRO_FILTER_NEAREST when rendering images and use the default
        bilinear filter instead.
        https://bugs.webkit.org/show_bug.cgi?id=19266

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clipOut):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::drawPattern):
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::isEmpty):
        (WebCore::Path::boundingRect):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::paintMozWidget):

2009-11-04  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Restore removed string conversion after cleanup.

        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::computeHash):

2009-11-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Need to implement ARIA role="combobox"
        https://bugs.webkit.org/show_bug.cgi?id=31096

        Test: accessibility/aria-combobox.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isComboBox):
        (WebCore::AccessibilityObject::isExpanded):
        (WebCore::AccessibilityObject::expandObject):
        (WebCore::AccessibilityObject::increment):
        (WebCore::AccessibilityObject::decrement):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::expandObject):
        (WebCore::AccessibilityRenderObject::isExpanded):
        (WebCore::createARIARoleMap):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilityPerformShowMenuAction]):
        * html/HTMLAttributeNames.in:

2009-11-04  Kelly Norton  <knorton@google.com>

        Reviewed by Pavel Feldman.

        Fixes naming inconsistencies in TimelineRecordFactory.
        https://bugs.webkit.org/show_bug.cgi?id=31132

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::willChangeXHRReadyState):
        (WebCore::InspectorTimelineAgent::willLoadXHR):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::willSendResourceRequest):
        (WebCore::InspectorTimelineAgent::didReceiveResourceResponse):
        (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createXHRReadyStateChangeRecord):
        (WebCore::TimelineRecordFactory::createXHRLoadRecord):
        (WebCore::TimelineRecordFactory::createEvaluateScriptRecord):
        (WebCore::TimelineRecordFactory::createMarkTimelineRecord):
        (WebCore::TimelineRecordFactory::createResourceSendRequestRecord):
        (WebCore::TimelineRecordFactory::createResourceReceiveResponseRecord):
        (WebCore::TimelineRecordFactory::createResourceFinishRecord):
        (WebCore::TimelineRecordFactory::createPaintRecord):
        * inspector/TimelineRecordFactory.h:

2009-11-04  Eric Z. Ayers  <zundel@google.com>

        Reviewed by Pavel Feldman.

        Followon to bug 31080, which protects Timeline
        instrumentation in the case where InspectorTimelineAgent
        is enabled or disabled during an event dispatch.
        
        https://bugs.webkit.org/show_bug.cgi?id=31121

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluate):
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * dom/Node.cpp:
        (WebCore::Node::dispatchGenericEvent):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::write):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::inspectorTimelineAgent):
        (WebCore::DOMWindow::dispatchEvent):
        * page/DOMWindow.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::paintContents):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):

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

        Revert 50519 while I work out what went wrong.

        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::create):
        (WebCore::LocalStorageThread::LocalStorageThread):
        (WebCore::LocalStorageThread::start):
        (WebCore::LocalStorageThread::localStorageThreadStart):
        (WebCore::LocalStorageThread::localStorageThread):
        (WebCore::LocalStorageThread::scheduleImport):
        (WebCore::LocalStorageThread::scheduleSync):
        (WebCore::LocalStorageThread::terminate):
        (WebCore::LocalStorageThread::performTerminate):
        * storage/LocalStorageThread.h:
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::StorageSyncManager):
        (WebCore::StorageSyncManager::~StorageSyncManager):
        (WebCore::StorageSyncManager::scheduleImport):
        (WebCore::StorageSyncManager::scheduleSync):
        * storage/StorageSyncManager.h:

2009-11-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add basic support for resource events and marks.
        Couple of drive-by fixes. Enabling the panel!

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelinePanel.prototype._getRecordDetails):
        (WebInspector.TimelinePanel.prototype.reset):
        (WebInspector.TimelineCategoryTreeElement.prototype._onCheckboxClicked):
        (WebInspector.TimelineRecordTreeElement.prototype.onattach):
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):

2009-11-03  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Simplify LocalStorageThread
        https://bugs.webkit.org/show_bug.cgi?id=30935

        On LocalStoragethread: Remove reference counting. Get rid of locking. Make some
        of the method names a bit more clear. Assert proper thread usage. Join rather
        than detaching the thread and doing an ad-hoc form of join. Avoid touching
        variables on the background thread when simple to do so.  Also create a generic
        scheduleTask function rather than one for each task.

        No behavior should have changed.

        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::create):
        (WebCore::LocalStorageThread::LocalStorageThread):
        (WebCore::LocalStorageThread::~LocalStorageThread):
        (WebCore::LocalStorageThread::start):
        (WebCore::LocalStorageThread::threadEntryPointCallback):
        (WebCore::LocalStorageThread::threadEntryPoint):
        (WebCore::LocalStorageThread::scheduleTask):
        (WebCore::LocalStorageThread::terminate):
        (WebCore::LocalStorageThread::performTerminate):
        * storage/LocalStorageThread.h:
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::StorageSyncManager):
        (WebCore::StorageSyncManager::~StorageSyncManager):
        (WebCore::StorageSyncManager::scheduleImport):
        (WebCore::StorageSyncManager::scheduleSync):
        * storage/StorageSyncManager.h:

2009-11-04  Vadim Zeitlin  <vadim@wxwidgets.org>

        Reviewed by Eric Seidel.

        [wx] Small cleanup: avoid unnecessary wxString::mb_str() calls.

        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::computeHash):

2009-11-04  Kelly Norton  <knorton@google.com>

        Reviewed by Pavel Feldman.

        Adds lightweight network resources to InspectorTimelineAgent.
        https://bugs.webkit.org/show_bug.cgi?id=31065

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willSendResourceRequest):
        (WebCore::InspectorTimelineAgent::didReceiveResourceResponse):
        (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createResourceSendRequestTimelineRecord):
        (WebCore::TimelineRecordFactory::createResourceReceiveResponseTimelineRecord):
        (WebCore::TimelineRecordFactory::createResourceFinishTimelineRecord):
        * inspector/TimelineRecordFactory.h:
        * inspector/front-end/TimelineAgent.js:

2009-11-04  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] ASSERT failure when receiving 401 HTTP Authentication response.
        https://bugs.webkit.org/show_bug.cgi?id=31077

        Allow sending the response body under the same conditions that we
        allow it to finish without reporting an error.

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

2009-11-04  Adam Roben  <aroben@apple.com>

        Sort WebCore.base.exp

        Rubber-stamped by Dan Bernstein.

        * WebCore.base.exp: Sorted.

2009-11-04  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed rollout.

        Revert r50496 because it broke all layout tests on QtBuildBot.

        * WebCore.pro:
        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::fontCache):
        (WebCore::FontCache::FontCache):
        (WebCore::FontCache::getTraitsInFamily):
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::isHashTableDeletedValue):
        (WebCore::FontPlatformDataCacheKey::):
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::FontPlatformDataCacheKey::hash):
        (WebCore::FontPlatformDataCacheKey::computeHash):
        (WebCore::FontPlatformDataCacheKey::hashTableDeletedSize):
        (WebCore::FontPlatformDataCacheKeyHash::hash):
        (WebCore::FontPlatformDataCacheKeyHash::equal):
        (WebCore::FontPlatformDataCacheKeyTraits::emptyValue):
        (WebCore::FontPlatformDataCacheKeyTraits::constructDeletedValue):
        (WebCore::FontPlatformDataCacheKeyTraits::isDeletedValue):
        (WebCore::FontCache::getCachedFontPlatformData):
        (WebCore::FontCache::getCachedFontData):
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::FontCache::releaseFontData):
        (WebCore::FontCache::purgeInactiveFontData):
        (WebCore::FontCache::addClient):
        (WebCore::FontCache::removeClient):
        (WebCore::FontCache::invalidate):
        * platform/graphics/qt/FontFallbackListQt.cpp: Added.
        (WebCore::FontFallbackList::FontFallbackList):
        (WebCore::FontFallbackList::invalidate):
        (WebCore::FontFallbackList::releaseFontData):
        (WebCore::FontFallbackList::determinePitch):
        (WebCore::FontFallbackList::fontDataAt):
        (WebCore::FontFallbackList::fontDataForCharacters):
        (WebCore::FontFallbackList::setPlatformFont):
        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformData::pixelSize):
        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2009-11-04  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=31044
        [Gtk] assertion when webkit_accessible_get_index_in_parent attempts to get parent of the web view

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkParentOfWebView):
        (webkit_accessible_get_index_in_parent):
        (webkit_accessible_get_parent):

2009-11-04  Dominik Röttsches  <dominik.roettsches@access-company.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=15914
        [GTK] Implement Unicode functionality using GLib

        Initial version of this patch by Jürg Billeter and Naiem Shaik.
        Patch 2/4 - Moving TextCodecs to GLib
        
        Added probing for a hard-coded lists of text encodings.
        The basis of this list is taken from the encodings supported by iconv,
        then extended by e.g. tis-620, windows-1251, euc-kr, windows-1253 and
        a number of Chinese ones.

        Probing is necessary with the current design of text codecs
        as iconv/GLib do not support enumerating available encodings.

        * GNUmakefile.am:
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::~ThreadGlobalData):
        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::encode):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):
        (WebCore::extendTextCodecMaps):
        * platform/text/gtk/TextCodecGtk.cpp: Added.
        (WebCore::):
        (WebCore::newTextCodecGtk):
        (WebCore::TextCodecGtk::isEncodingAvailable):
        (WebCore::TextCodecGtk::registerEncodingNames):
        (WebCore::TextCodecGtk::registerCodecs):
        (WebCore::TextCodecGtk::registerBaseEncodingNames):
        (WebCore::TextCodecGtk::registerBaseCodecs):
        (WebCore::TextCodecGtk::registerExtendedEncodingNames):
        (WebCore::TextCodecGtk::registerExtendedCodecs):
        (WebCore::TextCodecGtk::TextCodecGtk):
        (WebCore::TextCodecGtk::~TextCodecGtk):
        (WebCore::TextCodecGtk::releaseIConv):
        (WebCore::TextCodecGtk::createIConvDecoder):
        (WebCore::TextCodecGtk::createIConvEncoder):
        (WebCore::TextCodecGtk::decode):
        (WebCore::TextCodecGtk::encode):
        * platform/text/gtk/TextCodecGtk.h: Added.

2009-11-04  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Jan Alonzo.

        [GTK] Enable DOM clipboard and drag-and-drop access
        https://bugs.webkit.org/show_bug.cgi?id=30623

        Unify redudant methods which will always return the same value.

        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeSelection):
        * platform/gtk/PasteboardHelper.h:

2009-11-04  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=31035
        [GTK] some accessibility tests hitting assertion in debug builds

        Removes the assertions in webkit_accessible_ref_child; adds sanity checks.
        Any app or AT can attempt to ref a child at a bogus index.

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

2009-11-04  Benjamin Otte  <otte@gnome.org>

        Reviewed by Jan Alonzo.

        [gtk] Use gst_element_class_set_details_simple()

        Cosmetic change, just code simplification

        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_base_init):
2009-11-04  Kelly Norton  <knorton@google.com>

        Reviewed by Timothy Hatcher.

        Adds paint rectangle information to TimelineAgent's didPaint callback.
        https://bugs.webkit.org/show_bug.cgi?id=31087

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willPaint):
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createPaintTimelineRecord):
        * inspector/TimelineRecordFactory.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):

2009-11-04  Jaime Yap  <jaimeyap@google.com>

        Reviewed by Timothy Hatcher.

        This patch adds API to the console object for annotating the
        inspector timeline. This allows developers to mark logical
        checkpoints in their apps and have them overlaid in the event
        record tree.

        tests updated: LayoutTests/fast/dom/Window/window-properties.html
        https://bugs.webkit.org/show_bug.cgi?id=31082


        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::markTimeline):
        * inspector/InspectorController.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didMarkTimeline):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createMarkTimelineRecord):
        * inspector/TimelineRecordFactory.h:
        * inspector/front-end/TimelineAgent.js:
        * page/Console.cpp:
        (WebCore::Console::markTimeline):
        * page/Console.h:
        * page/Console.idl:

2009-11-03  Simon Hausmann  <hausmann@webkit.org>

        Unreviewed build fix for WebInspector with Qt build.

        Simply re-generate the Qt resource file by running
        WebKitTools/Scripts/generate-qt-inspector-resource

        * inspector/front-end/WebKit.qrc:

2009-11-02  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Handle fonts like the other ports

        Remove FontFallbackListQt and rely on the common FontFallbackList
        to handle the fonts. FontCache and FontPlatformData have been
        updated to work with the common FontFallbackList.

        In the previous implementation, FontPlatformDataCacheKey
        was a clone of FontPlatformData with the hashing
        capabilities added in order to use it as a key in the cache's
        hashmap. FontPlatformData has been modified to handle the hashing
        function directly so the data are not copied twice in memory.

        FontFallbackList::fontDataAt() from FontFallbackListQt was a copy of
        code from FontCache::getFontData() and FontFallbackList::fontDataAt().
        The behavior is similar except currFamily->family().length() was
        not tested and the fallback fonts selector were not used.

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

        Test: svg/text/text-font-invalid.html

        * WebCore.pro:
        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontCache::platformInit):
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::FontCache::getTraitsInFamily):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/qt/FontFallbackListQt.cpp:
        Removed. We now use the implementation from FontFallbackList.cpp
        * platform/graphics/qt/FontPlatformData.h:
        Add hashing capabilities to be able to use the data with the FontCache.
        This was previously done in FontCacheQt.cpp
        (WebCore::FontPlatformData::FontPlatformData):
        Added a boolean to identify deleted value in the hash table.
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

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

        Leopard build fix

        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::mac):
        (WebCore::core):

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

        Reviewed by Alexey Proskuryakov.

        Fix an assertion failure in core(NSURLProtectionSpace *) by handling NTLM
        authentication in AuthenticationMac

        * platform/network/mac/AuthenticationMac.mm:

2009-11-03  Eric Z. Ayers  <zundel@google.com>

        Reviewed by Timothy Hatcher.

        Fixes a problem where the timeline instrumentation crashes if
        timeline profiling is enabled or disabled in the middle of an
        event dispatch.

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

        Test: inspector/timeline-trivial.html

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::processingUserGestureEvent):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::fired):

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

        Reviewed by Dave Hyatt.

        Allow a frame to go back to copy-on-scroll when it ceases being overlapped

        The code was not testing slow-scrolling frames for overlappedness, thinking the answer
        would not matter. That is not the case if the only reason for the slow-scrolling is
        being overlapped.

        * page/FrameView.cpp:
        (WebCore::FrameView::useSlowRepaintsIfNotOverlapped): Added. Returns whether there is any
        reason besides being overlapped that the frame would need to fully repaint on scroll.
        * page/FrameView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint): Use useSlowRepaintsIfNotOverlapped().

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

        Not reviewed, Qt build fix.

        Need to use right capitalization for include file.

        * page/Navigator.cpp:

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

        Reviewed by Timothy Hatcher.

        Web Inspector: Migrate from top bar filters to check boxes in Timeline.

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

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype.showCategory):
        (WebInspector.AbstractTimelinePanel.prototype.hideCategory):
        (WebInspector.AbstractTimelinePanel.prototype.filter):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelineCategoryTreeElement.prototype.onattach):
        (WebInspector.TimelineCategoryTreeElement.prototype._onCheckboxClick):
        (WebInspector.TimelineCategoryGraph.prototype.clearChunks):
        (WebInspector.TimelineCategoryGraph.prototype.set dimmed):
        * inspector/front-end/inspector.css:

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

        Reviewed by Timothy Hatcher.

        Web Inspector: clear overview on Clear action and panel reset.

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

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._getRecordDetails):
        (WebInspector.TimelinePanel.prototype.reset):

2009-11-03  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Dimitri Glazkov.

        Imported action and rules python files that WebCore.gyp depends on. 
        These files used to live in chromium.org and deal mostly with auto-generation
        of code by wrapping existing webkit perl scripts.

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

        * WebCore.gyp/WebCore.gyp: Fixed paths in actions and rules.
        * WebCore.gyp/scripts/action_csspropertynames.py: Added.
        * WebCore.gyp/scripts/action_cssvaluekeywords.py: Added.
        * WebCore.gyp/scripts/action_makenames.py: Added.
        * WebCore.gyp/scripts/action_maketokenizer.py: Added.
        * WebCore.gyp/scripts/action_useragentstylesheets.py: Added.
        * WebCore.gyp/scripts/rule_binding.py: Added.
        * WebCore.gyp/scripts/rule_bison.py: Added.
        * WebCore.gyp/scripts/rule_gperf.py: Added.

2009-11-03  Bradley Green  <brg@chromium.org>

        Reviewed by Dmitry Titov.

        Implement window.navigator.registerProtocolHandler in webkit,
        https://bugs.webkit.org/b/29651

        Also implemented its sister API window.navigator.registerContentHandler.

        These methods are as described in the HTML5 specification which can be
        found here,
        http://dev.w3.org/html5/spec/Overview.html#dom-navigator-registerprotocolhandler
        http://dev.w3.org/html5/spec/Overview.html#dom-navigator-registercontenthandler

        As specified in the document, the behavior of the browser is determined
        by the current registered handler.  The state of a registered handler
        can change at any time, with the user clearing a registered handler,
        registering a different page as handler, or deferring the hander to the
        OS.  If webkit was to track the state of the currently registered
        handlers, it would need more APIs and complexity to keep in sync with
        user actions reported to webkit from the UA.  For simplicity, the state
        of protocol handlers should be kept isolated from webkit and webkit only
        notifies the UA that a page has made the call.  The UA is then
        responsible for correctly handling the registerProtocolHandler call and
        the redirects which result from registration.

        We do however follow the specification in insuring that the reserved
        schemes and mimeTypes are not passed to the UA as custom handler
        registration tests.  We also insure that the "%s" token is present as
        required by the specification.

        Updated test expectations for window.clientInformation and navigator
        objects.

        Tests: fast/dom/registerContentHandler.html
               fast/dom/registerProtocolHandler.html

        * page/Chrome.cpp:
        (WebCore::Chrome::registerProtocolHandler):
        (WebCore::Chrome::registerContentHandler):
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::registerProtocolHandler):
        (WebCore::ChromeClient::registerContentHandler):
        * page/Navigator.cpp:
        (WebCore::verifyCustomHandlerURL):
        (WebCore::verifyProtocolHandlerScheme):
        (WebCore::Navigator::registerProtocolHandler):
        (WebCore::verifyProtocolHandlerMimeType):
        (WebCore::Navigator::registerContentHandler):
        * page/Navigator.h:
        * page/Navigator.idl:

2009-11-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=31079 - Remove #include "Page.h" from Document.h

        No new tests. (No change in functionality)

        * dom/Document.cpp:
        (WebCore::Document::inspectorTimelineAgent): Moved from Document.h
        * dom/Document.h:

        Include "Page.h" directly:
        * html/HTMLVideoElement.cpp:
        * loader/RedirectScheduler.cpp:
        * page/History.cpp:
        * rendering/MediaControlElements.cpp:
        * storage/StorageAreaImpl.cpp:

2009-11-03  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: hover over JS "things" in source and see their values
        https://bugs.webkit.org/show_bug.cgi?id=30913

        * inspector/front-end/SourceFrame.js:

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

        Reviewed by Timothy Hatcher.

        Web Inspector: update timeline content boundaries on timer.

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

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.refresh):
        (WebInspector.TimelinePanel.prototype._setWindowPosition):

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

        Reviewed by Anders Carlsson and Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=31070
        Fix <rdar://problem/7194735> Crashes at RenderText::RenderText()
        Fix <rdar://problem/6937089> Crashes at RenderWidget::destroy()

        Tests: plugins/attach-during-destroy.html
               plugins/destroy-reentry.html

        These crashes were caused by plug-in code running during detach(),
        causing re-entry into RenderWidget::destroy() in one case and a call
        into attach() in the other. The fix is to prevent plug-in code from
        being called at certain unsafe times (during attach(), detach(), and
        recalcStyle()) by deferring changes to the widget hierarchy.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle): Suspend widget hierarchy updates
            during style recalculation.

        * dom/Element.cpp:
        (WebCore::Element::attach): Suspend widget hierarchy updates during
            attach().
        (WebCore::Element::detach): Suspend widget hierarchy updates during
            detach().

        * rendering/RenderWidget.cpp:
        (WebCore::widgetNewParentMap): Returns a static map of pending changes
            to the widget hierarchy.
        (WebCore::RenderWidget::suspendWidgetHierarchyUpdates): Increments the
            suspend count.
        (WebCore::RenderWidget::resumeWidgetHierarchyUpdates): Decrements the
            suspend count. If the count is going to be zero, updates the widget
            hierarchy by executing the pending changes stored in the map.
        (WebCore::moveWidgetToParentSoon): Updates the widget hierarchy
            immediately or makes or updates an entry in the map, depending on
            whether updates are suspended.
        (WebCore::RenderWidget::destroy): Removed earlier bandaid fix for
            <rdar://problem/6937089>.
        (WebCore::RenderWidget::setWidgetGeometry): Assert that widget updates
            are not suspended, because this function updates the widget’s
            bounds, which can result in arbitrary native and JavaScript code
            execution. I think this assertion is true thanks to some deferred-
            update mechanisms that have already been deployed in other places
            in the code.
        (WebCore::RenderWidget::setWidget): Call moveWidgetToParentSoon instead
            of changing the widget hierarchy directly.
        * rendering/RenderWidget.h: Declared suspendWidgetHierarchyUpdates()
            and resumeWidgetHierarchyUpdates().

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

        Reviewed by Timothy Hatcher.

        Web Inspector: only show timeline records that contribute
        to the current window.

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

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.refresh):
        (WebInspector.TimelineGraph):
        (WebInspector.TimelineGraph.prototype.refresh):

2009-11-03  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Watch expression editor should stay open after Add button was clicked
        https://bugs.webkit.org/show_bug.cgi?id=31049

        No new tests, was a regression, use existing manual test.

        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):
        (WebInspector.WatchExpressionsSection.prototype.addExpression):

2009-11-03  Evan Martin  <evan@chromium.org>

        Reviewed by Darin Adler.

        Fix an off-by-one in the CSS lexer that causes memory corruption in
        hard-to-trigger circumstances.

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

        Test: fast/css/end-of-buffer-crash.html

        * css/maketokenizer: Add comments, fix off-by-one.

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

        Reviewed by Dan Bernstein.

        Crash due to double-destroy related to CSS run-in property
        https://bugs.webkit.org/show_bug.cgi?id=31034
        rdar://problem/7328458

        Test: fast/css/run-in-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::destroy): Reorder destruction so the
        continuation is destroyed after anonymous children. See comment
        in the code for more details of why this is right.
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::destroy): Ditto.

2009-11-03  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Fix exception in ElementsPanel.js when moving pointer out of crumbs and window

        There might be no new node under mouse if the pointer is moved out of the window
        in which case we get an exception.
        https://bugs.webkit.org/show_bug.cgi?id=31061

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._mouseMovedOutOfCrumbs):

2009-11-03  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for the dom directory of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=31053

        Inherits the following classes from Noncopyable because these are
        instantiated by 'new' and these are no need to be copyable:

        class EventNames - 'new' call: WebCore/platform/ThreadGlobalData.cpp:73
        struct PerformTaskContext - 'new' call: WebCore/dom/Document.cpp:4581
        class EventData - 'new' call: WebCore/dom/MessagePortChannel.cpp:38
        struct NodeListsNodeData - 'new' call: WebCore/dom/NodeRareData.h:51 
        struct EventTargetData - 'new' call: WebCore/dom/NodeRareData.h:100
        class NodeRareData - 'new' call: WebCore/dom/Node.cpp:552

        Inherits QualifiedName class from FastAllocBase because it is
        instantiated by 'new' in WebCore/editing/markup.cpp:319

        * dom/Document.cpp:
        * dom/EventNames.h:
        * dom/EventTarget.h:
        * dom/MessagePortChannel.h:
        * dom/NodeRareData.h:
        * dom/QualifiedName.h:

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

        Reviewed by Timothy Hatcher.

        Web Inspector: Implement timeline summary panel.

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

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._createOverview):
        (WebInspector.TimelinePanel.prototype.refresh):
        (WebInspector.TimelineCategoryGraph):
        (WebInspector.TimelineCategoryGraph.prototype.get graphElement):
        (WebInspector.TimelineCategoryGraph.prototype.addChunk):
        (WebInspector.TimelineCategoryGraph.prototype.clearChunks):
        (WebInspector.TimelineGraph.prototype.refresh):
        * inspector/front-end/inspector.css:

2009-11-03  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Toggle off 'Search for node' when the Inspector window is closing

        Searching for node should be toggled off when the Inspector window is closed,
        in a platform-independent manner.
        https://bugs.webkit.org/show_bug.cgi?id=31059

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible):

2009-11-03  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Prepare for heap profiles upstreaming:
        - pass profile type id from InspectorController;
        - this makes WebInspector.CPUProfile redundant---removed;
        - support multiple profile types when populating profiles.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::createProfileHeader):
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileView.profileCallback):
        (WebInspector.CPUProfileView):
        (WebInspector.CPUProfileView.prototype._sortData):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        * inspector/front-end/inspector.js:
        (WebInspector.addProfileHeader):

2009-11-03  Dan Kegel  <dank@chromium.org>

        Reviewed by Dimitri Glazkov.

        UMR in WebCore::AccessibilityRenderObject::children(); m_childrenDirty uninitialized in constructor
        https://bugs.webkit.org/show_bug.cgi?id=31063

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):

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

        Reviewed by Timothy Hatcher.

        Web Inspector: Implement Timeline Window, wire it to the bottom timeline.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype.get items):
        (WebInspector.AbstractTimelinePanel.prototype.createInterface):
        (WebInspector.AbstractTimelinePanel.prototype.updateGraphDividersIfNeeded):
        (WebInspector.AbstractTimelinePanel.prototype._updateDividersLabelBarPosition):
        (WebInspector.AbstractTimelinePanel.prototype.invalidateAllItems):
        (WebInspector.AbstractTimelinePanel.prototype.refresh):
        (WebInspector.AbstractTimelinePanel.prototype.adjustScrollPosition):
        (WebInspector.AbstractTimelinePanel.prototype.addExtraDivider):
        (WebInspector.TimelineGrid):
        (WebInspector.TimelineGrid.prototype.get itemsGraphsElement):
        (WebInspector.TimelineGrid.prototype.updateDividers):
        (WebInspector.TimelineGrid.prototype.addExtraDivider):
        (WebInspector.TimelineGrid.prototype.setScrollAndDividerTop):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.updateGraphDividersIfNeeded):
        (WebInspector.ResourcesPanel.prototype.get _resources):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.get categories):
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelinePanel.prototype.reset):
        (WebInspector.TimelinePanel.prototype._createOverview):
        (WebInspector.TimelinePanel.prototype.setSidebarWidth):
        (WebInspector.TimelinePanel.prototype.updateMainViewWidth):
        (WebInspector.TimelinePanel.prototype.updateGraphDividersIfNeeded):
        (WebInspector.TimelinePanel.prototype.refresh):
        (WebInspector.TimelinePanel.prototype._resizeWindow):
        (WebInspector.TimelinePanel.prototype._windowResizeDragging):
        (WebInspector.TimelinePanel.prototype._dragWindow):
        (WebInspector.TimelinePanel.prototype._windowDragging):
        (WebInspector.TimelinePanel.prototype._resizeWindowLeft):
        (WebInspector.TimelinePanel.prototype._resizeWindowRight):
        (WebInspector.TimelinePanel.prototype._setWindowPosition):
        (WebInspector.TimelinePanel.prototype._endWindowDragging):
        (WebInspector.TimelineCategoryTreeElement):
        (WebInspector.TimelineCategoryTreeElement.prototype.onattach):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.TimelineCalculator.prototype.get minimumBoundary):
        (WebInspector.TimelineCalculator.prototype.get maximumBoundary):
        (WebInspector.TimelineCalculator.prototype.reset):
        (WebInspector.TimelineCalculator.prototype.updateBoundaries):
        (WebInspector.TimelineCalculator.prototype.formatValue):
        * inspector/front-end/inspector.css:

2009-11-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Make QWebPluginDatabase private API for now.

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

        * WebCore.pro:

2009-11-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Extended the conversion of the WebCore ResourceRequest to the
        QNetworkRequest with a mandatory originating object argument,
        which is meant to be the QWebFrame the request belongs to.

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

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/ResourceRequest.h:
        * platform/network/qt/ResourceRequestQt.cpp:
        (WebCore::ResourceRequest::toNetworkRequest):

2009-11-03  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Pavel Feldman.

        Web Inspector: monitorEvent should be monitorEvents
        https://bugs.webkit.org/show_bug.cgi?id=31042

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

2009-11-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Rubber-stamped by Antti Koivisto.

        [Qt] Build fix for Windows CE

        * plugins/PluginDatabase.cpp:

2009-11-02  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Levin.

        fix accessibility webkit-style-check errors
        https://bugs.webkit.org/show_bug.cgi?id=29672

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::platformGenerateAXID):
        (WebCore::AXObjectCache::removeAXID):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::enableAccessibility):
        (WebCore::AXObjectCache::enableEnhancedUserInterfaceAccessibility):
        (WebCore::AXObjectCache::accessibilityEnabled):
        (WebCore::AXObjectCache::accessibilityEnhancedUserInterfaceEnabled):
        (WebCore::AXObjectCache::isIDinUse):
        (WebCore::AXObjectCache::objectFromAXID):
        (WebCore::AXObjectCache::):
        (WebCore::AXObjectCache::handleActiveDescendantChanged):
        (WebCore::AXObjectCache::handleAriaRoleChanged):
        (WebCore::AXObjectCache::detachWrapper):
        (WebCore::AXObjectCache::attachWrapper):
        (WebCore::AXObjectCache::selectedChildrenChanged):
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        (WebCore::AXObjectCache::handleScrolledToAnchor):
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::cellForColumnAndRow):
        * accessibility/AccessibilityAllInOne.cpp:
        * accessibility/AccessibilityImageMapLink.cpp:
        * accessibility/AccessibilityList.h:
        (WebCore::AccessibilityList::isList):
        * accessibility/AccessibilityListBox.cpp:
        * accessibility/AccessibilityListBox.h:
        (WebCore::AccessibilityListBox::isListBox):
        * accessibility/AccessibilityListBoxOption.cpp:
        * accessibility/AccessibilityListBoxOption.h:
        (WebCore::AccessibilityListBoxOption::isListBoxOption):
        * accessibility/AccessibilityMediaControls.h:
        (WebCore::AccessibilityMediaControl::~AccessibilityMediaControl):
        (WebCore::AccessibilityMediaTimeline::~AccessibilityMediaTimeline):
        (WebCore::AccessibilityMediaTimeline::isMediaTimeline):
        (WebCore::AccessibilityMediaControlsContainer::~AccessibilityMediaControlsContainer):
        (WebCore::AccessibilityMediaControlsContainer::roleValue):
        (WebCore::AccessibilityMediaControlsContainer::accessibilityIsIgnored):
        (WebCore::AccessibilityMediaTimeDisplay::~AccessibilityMediaTimeDisplay):
        (WebCore::AccessibilityMediaTimeDisplay::roleValue):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::parentObjectUnignored):
        (WebCore::AccessibilityObject::rightLineVisiblePositionRange):
        (WebCore::replacedNodeNeedsCharacter):
        (WebCore::AccessibilityObject::stringForVisiblePositionRange):
        (WebCore::AccessibilityObject::lengthForVisiblePositionRange):
        (WebCore::AccessibilityObject::actionVerb):
        * accessibility/AccessibilityObject.h:
        (WebCore::PlainTextRange::isNull):
        (WebCore::AccessibilityObject::isAccessibilityRenderObject):
        (WebCore::AccessibilityObject::isAnchor):
        (WebCore::AccessibilityObject::isAttachment):
        (WebCore::AccessibilityObject::isHeading):
        (WebCore::AccessibilityObject::isLink):
        (WebCore::AccessibilityObject::isImage):
        (WebCore::AccessibilityObject::isNativeImage):
        (WebCore::AccessibilityObject::isImageButton):
        (WebCore::AccessibilityObject::isPasswordField):
        (WebCore::AccessibilityObject::isTextControl):
        (WebCore::AccessibilityObject::isNativeTextControl):
        (WebCore::AccessibilityObject::isWebArea):
        (WebCore::AccessibilityObject::isCheckboxOrRadio):
        (WebCore::AccessibilityObject::isListBox):
        (WebCore::AccessibilityObject::isFileUploadButton):
        (WebCore::AccessibilityObject::isProgressIndicator):
        (WebCore::AccessibilityObject::isSlider):
        (WebCore::AccessibilityObject::isControl):
        (WebCore::AccessibilityObject::isList):
        (WebCore::AccessibilityObject::isDataTable):
        (WebCore::AccessibilityObject::isTableRow):
        (WebCore::AccessibilityObject::isTableColumn):
        (WebCore::AccessibilityObject::isTableCell):
        (WebCore::AccessibilityObject::isFieldset):
        (WebCore::AccessibilityObject::isGroup):
        (WebCore::AccessibilityObject::isChecked):
        (WebCore::AccessibilityObject::isEnabled):
        (WebCore::AccessibilityObject::isSelected):
        (WebCore::AccessibilityObject::isFocused):
        (WebCore::AccessibilityObject::isHovered):
        (WebCore::AccessibilityObject::isIndeterminate):
        (WebCore::AccessibilityObject::isLoaded):
        (WebCore::AccessibilityObject::isMultiSelect):
        (WebCore::AccessibilityObject::isOffScreen):
        (WebCore::AccessibilityObject::isPressed):
        (WebCore::AccessibilityObject::isReadOnly):
        (WebCore::AccessibilityObject::isVisited):
        (WebCore::AccessibilityObject::isRequired):
        (WebCore::AccessibilityObject::canSetFocusAttribute):
        (WebCore::AccessibilityObject::canSetTextRangeAttributes):
        (WebCore::AccessibilityObject::canSetValueAttribute):
        (WebCore::AccessibilityObject::hasIntValue):
        (WebCore::AccessibilityObject::accessibilityShouldUseUniqueId):
        (WebCore::AccessibilityObject::accessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::parentObjectIfExists):
        (WebCore::AccessibilityRenderObject::parentObject):
        (WebCore::AccessibilityRenderObject::isMenuRelated):
        (WebCore::AccessibilityRenderObject::accessibilityDescription):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::isFocused):
        (WebCore::AccessibilityRenderObject::visiblePositionRangeForLine):
        (WebCore::AccessibilityRenderObject::setSelectedVisiblePositionRange):
        (WebCore::AccessibilityRenderObject::doAXRangeForLine):
        (WebCore::AccessibilityRenderObject::doAXStringForRange):
        (WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest):
        (WebCore::AccessibilityRenderObject::determineAriaRoleAttribute):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::isPresentationalChildOfAriaRole):
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):
        (WebCore::AccessibilityRenderObject::canHaveChildren):
        (WebCore::AccessibilityRenderObject::actionVerb):
        (WebCore::shouldReturnTagNameAsRoleForMSAA):
        * accessibility/AccessibilityRenderObject.h:
        (WebCore::AccessibilityRenderObject::isAccessibilityRenderObject):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::orientation):
        * accessibility/AccessibilitySlider.h:
        (WebCore::AccessibilitySlider::~AccessibilitySlider):
        (WebCore::AccessibilitySlider::roleValue):
        (WebCore::AccessibilitySlider::accessibilityIsIgnored):
        (WebCore::AccessibilitySlider::isSlider):
        (WebCore::AccessibilitySlider::canSetValueAttribute):
        (WebCore::AccessibilitySliderThumb::~AccessibilitySliderThumb):
        (WebCore::AccessibilitySliderThumb::roleValue):
        (WebCore::AccessibilitySliderThumb::accessibilityIsIgnored):
        (WebCore::AccessibilitySliderThumb::setParentObject):
        (WebCore::AccessibilitySliderThumb::parentObject):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        * accessibility/AccessibilityTableColumn.cpp:
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::addChildren):
        * accessibility/AccessibilityTableRow.cpp:
        * accessibility/mac/AccessibilityObjectWrapper.h:

2009-11-02  Darin Fisher  <darin@chromium.org>

        Fixing JSC build bustage.

        * bindings/js/ScriptController.cpp: Added missing #include

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

        Reviewed by Adam Barth.

        Give the FrameLoaderClient the ability to override Settings::isJavaScriptEnabled.
        https://bugs.webkit.org/show_bug.cgi?id=30967

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::isEnabled):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::isEnabled):
        * bindings/v8/V8Proxy.cpp: Move implementation of isEnabled to ScriptController
        * bindings/v8/V8Proxy.h: Ditto
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::allowJavaScript):
        * platform/chromium/ChromiumBridge.h: Delete uiResourceProtocol function

2009-11-02  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Mark Rowe.

        Fix a typo in Mark's last commit.

        * loader/archive/ArchiveFactory.cpp:
        (WebCore::archiveMIMETypes):

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

        Rubber-stamped by Brady Eidson.

        Re-enable support for web archives on Windows.  It was mistakenly disabled in r50438.

        * loader/archive/ArchiveFactory.cpp:
        (WebCore::archiveMIMETypes):

2009-11-02  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        PLATFORM(CF) should be set when building for Qt on Darwin
        https://bugs.webkit.org/show_bug.cgi?id=23671

        * WebCore.pro: Add SharedBufferCF.cpp and SmartReplaceCF.cpp
        to the Darwin build.
        * loader/archive/ArchiveFactory.cpp: Change the support for 
        legacy WebArchive from all CF platforms to Mac and Chromium 
        CF platforms.
        (WebCore::archiveMIMETypes):
        * platform/text/AtomicString.h: Remove PLATFORM(QT) &&
        PLATFORM(DARWIN) test as it is redundant now.
        * platform/text/PlatformString.h: Ditto.
        * platform/text/StringImpl.h: Ditto.
        * platform/text/cf/StringCF.cpp: Ditto.
        * platform/text/cf/StringImplCF.cpp: Ditto.

2009-11-02  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        [Chromium] Actually declare getPluginMimeTypeFromExtension in a header.
        https://bugs.webkit.org/show_bug.cgi?id=30985

        Our current code does not conform to our style guide.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/MIMETypeRegistryChromium.cpp:
        * plugins/chromium/PluginDataChromium.cpp:
        * plugins/chromium/PluginDataChromium.h: Added.

2009-11-02  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/7038305> REGRESSION (Safari 4.0.2 - ToT): After navigating back to a known phishy page, the "Ignore warning" button appears highlighted (along with the "Go Back" button)

        This bug is timing dependent, and not always reproducible.  I could not think of a way to add a 
        layout test that would demonstrate the problem and fix.

        * platform/mac/ThemeMac.mm:
        (WebCore::checkbox): Update style.
        (WebCore::paintCheckbox): ditto.
        (WebCore::radio): ditto.
        (WebCore::paintRadio): ditto.
        (WebCore::setupButtonCell): Added convenience method.
        (WebCore::button): Use a separate NSButtonCell for defaultButtons and regular buttons.
        (WebCore::paintButton): Don't check for the key window here.  Consider that when deciding if the button should have the default style in RenderTheme.
        * rendering/RenderTheme.cpp: (WebCore::RenderTheme::isDefault): Only consider a button to be default if the page is active.  This fixes 
        a problem I noticed where the button would flicker crazily if the page with the default button was in the background.

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

        Reviewed by Anders Carlsson.

        Minor RenderWidget clean-up in preparation for deferring widget tree
        mutation when it is not safe.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::RenderWidget): Initialize m_refCount to 1
        instead of calling ref().
        (WebCore::RenderWidget::destroy): Call setWidget(0) instead of
        repeating what it does.
        (WebCore::RenderWidget::setWidgetGeometry): Now returns a boolean
        indicating whether the bounds have changed.
        (WebCore::RenderWidget::setWidget): Replaced all-encompassing if
        statement with an early return.
        (WebCore::RenderWidget::updateWidgetPosition): Call setWidgetGeometry().
        * rendering/RenderWidget.h:

2009-11-02  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Adding Chromium's DatabaseTracker and SQLTransactionClient
        implementations.

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

        * storage/chromium: Added.
        * storage/chromium/DatabaseObserver.h: Added.
        * storage/chromium/DatabaseTrackerChromium.cpp: Added.
        * storage/chromium/QuotaTracker.cpp: Added.
        * storage/chromium/QuotaTracker.h: Added.
        * storage/chromium/SQLTransactionClientChromium.cpp: Added.

2009-11-02  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson and Dan Bernstein.

        Safari crashes when calling execCommand on formatted html in special case
        <rdar://problem/7318656>
        https://bugs.webkit.org/show_bug.cgi?id=31023

        Test: editing/execCommand/align-in-span.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock): Modified comment on containingBlock returning NULL.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setSelectionState): Added check for NULL return from containingBlock,
        since it is possible when dealing with orphaned trees.

2009-11-02  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Exception checks were being too aggressive
        https://bugs.webkit.org/show_bug.cgi?id=31005

        Several calls in CanvasRenderingContext3D are allowed to
        have a null value passed, which indicated that the 
        object is being unbound. Handle this case and the corresponding
        null handling in GraphicsContext3DMac.

        * html/canvas/CanvasRenderingContext3D.cpp:
        (WebCore::CanvasRenderingContext3D::bindBuffer):
        (WebCore::CanvasRenderingContext3D::bindFramebuffer):
        (WebCore::CanvasRenderingContext3D::bindRenderbuffer):
        (WebCore::CanvasRenderingContext3D::bindTexture):
        (WebCore::CanvasRenderingContext3D::framebufferRenderbuffer):
        (WebCore::CanvasRenderingContext3D::framebufferTexture2D):
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::framebufferTexture2D):

2009-11-02  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Each JS execution in console adds extra item into "scripts" combo
        https://bugs.webkit.org/show_bug.cgi?id=30212

        Added manual test

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        * manual-tests/inspector/hidden-evals.html: Added.

2009-11-02  Kelly Norton  <knorton@google.com>

        Reviewed by Timothy Hatcher.

        Adds a missed case for InspectorTimeline, DOMWindow dispatch of DOM events.
        https://bugs.webkit.org/show_bug.cgi?id=31030

        * dom/Node.cpp:
        (WebCore::eventHasListeners): Checks DOMWindow for listeners.
        (WebCore::Node::dispatchGenericEvent):

2009-11-02  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Remove threadsafe refcounting from tasks used with WTF::MessageQueue.
        https://bugs.webkit.org/show_bug.cgi?id=30612

        No new tests since no new functionality. Storage, MessagePorts and Workers tests cover this.

        There are a lot of files but most changes are simply replace RefPtr and PassRefPtr with
        OwnPtr and PassOwnPtr when dealing with Tasks.

        ScriptExecutionContext::Task, DatabaseTask and WorkerRunLoop::Task are no longer
        threadsafe refcounted, but simply Noncopyable.

        * dom/Document.cpp:
        (WebCore::ScriptExecutionContextTaskTimer::ScriptExecutionContextTaskTimer):
        (WebCore::PerformTaskContext::PerformTaskContext):
        (WebCore::Document::postTask):
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ProcessMessagesSoonTask::create):
        * dom/ScriptExecutionContext.h:
        * dom/default/PlatformMessagePortChannel.cpp:
        (WebCore::PlatformMessagePortChannel::tryGetMessageFromRemote):
        * dom/default/PlatformMessagePortChannel.h:
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::tryGetMessage):
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::appendAndCheckEmpty):
        * loader/FrameLoader.cpp:
        (WebCore::HashChangeEventTask::create):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::CallCacheListenerTask::create):
        * storage/Database.cpp:
        (WebCore::Database::openAndVerifyVersion):
        (WebCore::Database::markAsDeletedAndClose):
        (WebCore::Database::scheduleTransaction):
        (WebCore::Database::scheduleTransactionStep):
        (WebCore::Database::tableNames):
        * storage/DatabaseTask.h:
        (WebCore::DatabaseOpenTask::create):
        (WebCore::DatabaseCloseTask::create):
        (WebCore::DatabaseTransactionTask::create):
        (WebCore::DatabaseTableNamesTask::create):
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::databaseThread):
        (WebCore::DatabaseThread::scheduleTask):
        (WebCore::DatabaseThread::scheduleImmediateTask):
        (WebCore::SameDatabasePredicate::operator()):
        * storage/DatabaseThread.h:
        * storage/LocalStorageTask.h:
        (WebCore::LocalStorageTask::createImport):
        (WebCore::LocalStorageTask::createSync):
        (WebCore::LocalStorageTask::createTerminate):
        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::localStorageThread):
        * storage/LocalStorageThread.h:
        * websockets/WebSocket.cpp:
        (WebCore::ProcessWebSocketEventTask::create):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::postTaskToLoader):
        (WebCore::SharedWorkerProxy::postTaskForModeToWorkerContext):
        (WebCore::SharedWorkerConnectTask::create):
        * workers/GenericWorkerTask.h:
        (WebCore::GenericWorkerTask1::create):
        (WebCore::GenericWorkerTask2::create):
        (WebCore::GenericWorkerTask3::create):
        (WebCore::GenericWorkerTask4::create):
        (WebCore::GenericWorkerTask5::create):
        (WebCore::GenericWorkerTask6::create):
        (WebCore::GenericWorkerTask7::create):
        (WebCore::GenericWorkerTask8::create):
        (WebCore::createCallbackTask):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::postTask):
        * workers/WorkerContext.h:
        * workers/WorkerLoaderProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerContextTask::create):
        (WebCore::MessageWorkerTask::create):
        (WebCore::WorkerExceptionTask::create):
        (WebCore::WorkerContextDestroyedTask::create):
        (WebCore::WorkerTerminateTask::create):
        (WebCore::WorkerThreadActivityReportTask::create):
        (WebCore::WorkerMessagingProxy::postTaskForModeToWorkerContext):
        (WebCore::WorkerMessagingProxy::postTaskToLoader):
        (WebCore::WorkerMessagingProxy::workerThreadCreated):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerRunLoop.cpp:
        (WebCore::ModePredicate::operator()):
        (WebCore::WorkerRunLoop::runInMode):
        (WebCore::WorkerRunLoop::postTask):
        (WebCore::WorkerRunLoop::postTaskForMode):
        (WebCore::WorkerRunLoop::Task::create):
        (WebCore::WorkerRunLoop::Task::performTask):
        (WebCore::WorkerRunLoop::Task::Task):
        * workers/WorkerRunLoop.h:
        (WebCore::WorkerRunLoop::Task::~Task):
        (WebCore::WorkerRunLoop::Task::mode):

2009-11-02  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Jan Alonzo.

        [GTK] Failing media/video-played-reset.html
        https://bugs.webkit.org/show_bug.cgi?id=30589

        new m_seekTime attribute to keep track of the seek position

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::currentTime):
        (WebCore::MediaPlayerPrivate::seek):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2009-11-02  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        [GTK] Remove Referer when redirecting to non-secure site
        https://bugs.webkit.org/show_bug.cgi?id=31021

        Remove referer from HTTP headers when redirecting to a non-secure
        site.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):

2009-11-02  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=18539
        multipart/form-data not being parsed correctly on server due to '+' in boundary string

        No test - the characters that the boundary is made of are not deterministic.

        * platform/network/FormDataBuilder.cpp: (WebCore::FormDataBuilder::generateUniqueBoundaryString):
        Don't ever put a '+' in boundary string, either. Removed a FIXME to bring '/' back once
        GMail is fixed - I don't think we'll ever want to allow non-alphanumeric characters, as
        they cause problems on many web sites.

2009-10-30  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=30969
        A no-prefix XPath node test should not match no-namespace elements in HTML document

        Test: fast/xpath/null-namespace-in-html.html

        * xml/XPathStep.cpp: (WebCore::XPath::nodeMatchesBasicTest): Special case non-HTML elements
        in HTML documents (as these are the ones that can have null namespace).

2009-11-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: [REGRESSION] No timeline marks on resources panel.

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

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype.updateGraphDividersIfNeeded):

2009-11-02  David Levin  <levin@chromium.org>

        Reviewed by Dan Bernstein.

        Possible crash in RenderSlider::layout.
        https://bugs.webkit.org/show_bug.cgi?id=31016

        Fix out of place line of code.

        Test: scrollbars/overflow-scrollbar-combinations.html
        This crash only seems to repro when WebKit draws the play controls,
        so the crash repros in chromium running this test but not WebKit
        nightlies which use QuickTime to draw the controls.

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::layout):

2009-11-02  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Fix Qt build on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=30905

        * WebCore.pro:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::create):

2009-11-02  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Adam Barth.

        QWebView crash fix.

        The QWebView should not crash if the stop() method is called from
        a function triggered by the loadProgress signal.

        A null pointer protection was added in the ProgressTracker::incrementProgress.

        New autotest was created.

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

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::incrementProgress):

2009-11-02  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Fix a leftover from profiles panel generalization.

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

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.get searchableViews):

2009-11-02  Kai Koehne  <kai.koehne@nokia.com>

        Reviewed by Holger Freyther.

        Remove implementation of ImageDecocerQt::clearFrameBufferCache.
        The implementation was buggy, and will visually break repeating
        animations anyway.

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

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::clearFrameBufferCache):

2009-11-02  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=30964
        [Gtk] Implemment AtkDocument

        Provides access to the reported content language.

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

2009-11-02  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Rewrite CSSSourceSyntaxHighlighter so it shares more code
        https://bugs.webkit.org/show_bug.cgi?id=30907

        Test: inspector/css-syntax-highlight.html

        * inspector/front-end/ElementsTreeOutline.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.syntaxHighlightCSS):
        (WebInspector.SourceSyntaxHighlighter):
        (WebInspector.SourceSyntaxHighlighter.prototype.process.processChunk):
        (WebInspector.SourceSyntaxHighlighter.prototype.process.moveToNextLine):
        (WebInspector.SourceSyntaxHighlighter.prototype.process):
        (WebInspector.SourceSyntaxHighlighter.prototype.lex):
        (WebInspector.SourceSyntaxHighlighter.prototype.appendNonToken):
        (WebInspector.SourceSyntaxHighlighter.prototype.syntaxHighlightNode):
        (WebInspector.CSSSourceSyntaxHighlighter):
        * inspector/front-end/inspectorSyntaxHighlight.css:

2009-11-02  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Support ARIA "tab" roles
        https://bugs.webkit.org/show_bug.cgi?id=30842

        Implement support for ARIA "tab", "tabpanel" and "tablist".
        As a consequence, we also needed to implement aria-selected
        and aria-controls.

        Tests: accessibility/aria-controls-with-tabs.html
               accessibility/aria-tab-roles.html

        * accessibility/AXObjectCache.cpp:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        * html/HTMLAttributeNames.in:

2009-10-27  Stephen White  <senorblanco@chromium.org>

        Reviewed by Dmitry Titov.

        This is the WebKit-side change needed to fix canvas.getImageData() for
        Chromium.  The unpremultiply code in Skia assumes that unpremultiplied
        values should be rounded, while CG does not.  In addition, the fixed
        point inversion used by Skia introduces slight inaccuracies that make
        us fail this test.  This change brings Chromium in line with
        the CG path.
        https://bugs.webkit.org/show_bug.cgi?id=30825

        Covered by LayoutTests/fast/canvas/canvas-getImageData.html

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):

2009-11-01  Kelly Norton  <knorton@google.com>

        Reviewed by Timothy Hatcher.

        Adds window event dispatches to InspectorTimelineAgent.
        https://bugs.webkit.org/show_bug.cgi?id=31002

        * English.lproj/localizedStrings.js:
        * dom/Node.cpp: Updated call site to willDispatchEvent and didDispatchEvent.
        (WebCore::Node::dispatchGenericEvent):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willDispatchEvent): Renamed.
        (WebCore::InspectorTimelineAgent::didDispatchEvent): Renamed.
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createEventDispatchRecord): Renamed.
        * inspector/TimelineRecordFactory.h:
        * inspector/front-end/TimelineAgent.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelinePanel.prototype._getRecordDetails):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchEvent):

2009-11-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Convert script tag event into a more generic
        script eval event in timeline.

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

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluate):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptExecution):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::didEvaluateScript):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createEvaluateScriptTimelineRecord):
        * inspector/TimelineRecordFactory.h:
        * inspector/front-end/TimelineAgent.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelinePanel.prototype._getRecordDetails):

2009-11-01  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by Mark Rowe.

        Fix for loop to use an size_t instead of unsigned and some spacing
        style fixes.

        * dom/Node.cpp:
        (WebCore::eventHasListeners):

2009-11-01  Kelly Norton  <knorton@google.com>

        Reviewed by Timothy Hatcher.

        Does not send DOM dispatches to the InspectorTimelineAgent if there
        are no event listeners.
        https://bugs.webkit.org/show_bug.cgi?id=30995

        * dom/Node.cpp:
        (WebCore::eventHasListeners):
        (WebCore::Node::dispatchGenericEvent):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):

2009-11-01  Roland Steiner  <rolandsteiner@chromium.org>

        No review (build fix).

        Add missing files for Ruby implementation to WebCore.vcproj
        (Fix build break after 50397)
        https://bugs.webkit.org/show_bug.cgi?id=31001

        No new tests. (No functional change)

        * WebCore.vcproj/WebCore.vcproj:

2009-11-02  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dave Hyatt.

        Bug 28420 -  Implement HTML5 <ruby> rendering
        (https://bugs.webkit.org/show_bug.cgi?id=28420)

        First rudimentary implementation of HTML5 ruby rendering support.

        Following the HTML 5 spec, the box object model for a <ruby> element allows several runs of ruby
        bases with their respective ruby texts looks as follows:

        1 RenderRuby object, corresponding to the whole <ruby> HTML element
             1+ RenderRubyRun (anonymous)
                 0 or 1 RenderRubyText - shuffled to the front in order to re-use existing block layouting
                     0-n inline object(s)
                 0 or 1 RenderRubyBase - contains the inline objects that make up the ruby base
                     1-n inline object(s)

        Note: <rp> elements are defined as having 'display:none' and thus normally are not assigned a renderer.
        
        New layout tests will be committed in a follow-up patch under fast/ruby.

        Makefiles, etc.
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:

        CSS
        * css/html.css: Added <ruby> and <rt>

        Existing render files:
        * rendering/RenderBlock.cpp: make moveChild a member function moveChildTo
        (WebCore::RenderBlock::moveChildTo):
        (WebCore::RenderBlock::makeChildrenNonInline):
        (WebCore::RenderBlock::removeChild):
        * rendering/RenderBlock.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject): instantiate ruby renderers based on element name
        * rendering/RenderObject.h: add query methods for ruby renderers
        (WebCore::RenderObject::isRuby):
        (WebCore::RenderObject::isRubyBase):
        (WebCore::RenderObject::isRubyRun):
        (WebCore::RenderObject::isRubyText):

        New ruby renderers:
        * rendering/RenderRuby.cpp: Added.
        (WebCore::lastRubyRun):
        (WebCore::findRubyRunParent):
        (WebCore::RenderRubyAsInline::RenderRubyAsInline):
        (WebCore::RenderRubyAsInline::~RenderRubyAsInline):
        (WebCore::RenderRubyAsInline::isChildAllowed):
        (WebCore::RenderRubyAsInline::addChild):
        (WebCore::RenderRubyAsInline::removeChild):
        (WebCore::RenderRubyAsBlock::RenderRubyAsBlock):
        (WebCore::RenderRubyAsBlock::~RenderRubyAsBlock):
        (WebCore::RenderRubyAsBlock::isChildAllowed):
        (WebCore::RenderRubyAsBlock::addChild):
        (WebCore::RenderRubyAsBlock::removeChild):
        * rendering/RenderRuby.h: Added.
        (WebCore::RenderRubyAsInline::renderName):
        (WebCore::RenderRubyAsInline::isRuby):
        (WebCore::RenderRubyAsBlock::renderName):
        (WebCore::RenderRubyAsBlock::isRuby):
        * rendering/RenderRubyBase.cpp: Added.
        (WebCore::RenderRubyBase::RenderRubyBase):
        (WebCore::RenderRubyBase::~RenderRubyBase):
        (WebCore::RenderRubyBase::isChildAllowed):
        (WebCore::RenderRubyBase::splitToLeft):
        (WebCore::RenderRubyBase::mergeWithRight):
        * rendering/RenderRubyBase.h: Added.
        (WebCore::RenderRubyBase::renderName):
        (WebCore::RenderRubyBase::isRubyBase):
        * rendering/RenderRubyRun.cpp: Added.
        (WebCore::RenderRubyRun::RenderRubyRun):
        (WebCore::RenderRubyRun::~RenderRubyRun):
        (WebCore::RenderRubyRun::hasRubyText):
        (WebCore::RenderRubyRun::hasRubyBase):
        (WebCore::RenderRubyRun::isEmpty):
        (WebCore::RenderRubyRun::rubyText):
        (WebCore::RenderRubyRun::rubyBase):
        (WebCore::RenderRubyRun::rubyBaseSafe):
        (WebCore::RenderRubyRun::firstLineBlock):
        (WebCore::RenderRubyRun::updateFirstLetter):
        (WebCore::RenderRubyRun::isChildAllowed):
        (WebCore::RenderRubyRun::addChild):
        (WebCore::RenderRubyRun::removeChild):
        (WebCore::RenderRubyRun::createRubyBase):
        (WebCore::RenderRubyRun::staticCreateRubyRun):
        * rendering/RenderRubyRun.h: Added.
        (WebCore::RenderRubyRun::renderName):
        (WebCore::RenderRubyRun::isRubyRun):
        * rendering/RenderRubyText.cpp: Added.
        (WebCore::RenderRubyText::RenderRubyText):
        (WebCore::RenderRubyText::~RenderRubyText):
        (WebCore::RenderRubyText::isChildAllowed):
        * rendering/RenderRubyText.h: Added.
        (WebCore::RenderRubyText::renderName):
        (WebCore::RenderRubyText::isRubyText):

2009-11-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=30992
        Node.isDefaultNamespace doesn't convert empty strings to null

        Test: fast/dom/Node/default-namespace-empty-argument.html

        * dom/Node.cpp: (WebCore::Node::isDefaultNamespace): Per DOM 3 Core, treat empty input
        as null.

2009-11-01  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Don't add '/' to the URL path if the it does not include '/' after the protocol component
        https://bugs.webkit.org/show_bug.cgi?id=30971

        Match IE8 behaviour, that does not add '/' if there is none after the protocol component.

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

2009-10-31  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Fix layering violations in GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=30986

        Remove uses of HTMLImageElement and HTMLCanvasElement

        * html/canvas/CanvasRenderingContext3D.cpp:
        (WebCore::CanvasRenderingContext3D::texImage2D):
        (WebCore::CanvasRenderingContext3D::texSubImage2D):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::texSubImage2D):

2009-11-01  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=30964
        [Gtk] Implemment AtkDocument

        Provides access to expected document attributes.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (documentAttributeValue):
        (webkit_accessible_document_get_document_attribute_value):
        (webkit_accessible_document_get_document_attributes):

2009-11-03  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=30964
        [Gtk] Implemment AtkDocument

        Implements what has been implemented in AT-SPI.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (GetAtkInterfaceTypeFromWAIType):
        (getInterfaceMaskFromObject):
        (atk_document_interface_init):
        (webkit_accessible_document_get_document_attribute_value):
        (webkit_accessible_document_get_document_attributes):
        (webkit_accessible_document_get_locale):

2009-11-01  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Turn on warnings for QtWebKit for gcc
        https://bugs.webkit.org/show_bug.cgi?id=30958

        No new tests as there is no functional change.

        * platform/image-decoders/qt/RGBA32BufferQt.cpp:
        (WebCore::RGBA32Buffer::RGBA32Buffer): Reorder 
        initialization list to fix compiler warnings.


2009-11-01  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Pavel Feldman.

        [Regression] monitorEvent doesn't work

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

2009-11-01  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Pavel Feldman.

        Fix Web Inspector: Bug with Message Bubble in Syntax Highlighter
        https://bugs.webkit.org/show_bug.cgi?id=30990

        * inspector/front-end/SourceFrame.js:

2009-10-31  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=30982
        createHTMLDocument doesn't escape ampersand and less-than in title

        Test: fast/dom/DOMImplementation/createHTMLDocument-title.html

        * dom/DOMImplementation.cpp: (WebCore::DOMImplementation::createHTMLDocument):
        Set document title after creating the document, avoiding parser intricacies.

2009-11-01  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Double clicking on a breakpoints should not select text
        https://bugs.webkit.org/show_bug.cgi?id=30950

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._documentMouseDown):

2009-11-01  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Darin Adler.

        Fix assertion falure in RenderObjectChildList::updateBeforeAfterContent().

        [Crash (debug)] Combination of list-item and :after causes assertion failure
        https://bugs.webkit.org/show_bug.cgi?id=30944

        Test: fast/css/list-item-pseudo-nocrash.html

        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):

2009-11-01  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=30586
        [GTK] Failing test media/video-src-empty.html

        Correctly set network/ready state depending on GStreamer errors
        received on the bus.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateMessageCallback):

2009-10-31  Oliver Hunt  <oliver@apple.com>

        Build fix

        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::attachShader):

2009-10-31  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Remove obsolete null checks from CanvasRenderingContext3DMac
        https://bugs.webkit.org/show_bug.cgi?id=30983

        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::attachShader):
        (WebCore::GraphicsContext3D::bindAttribLocation):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::detachShader):
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::framebufferTexture2D):
        (WebCore::GraphicsContext3D::linkProgram):
        (WebCore::GraphicsContext3D::shaderSource):
        (WebCore::GraphicsContext3D::useProgram):
        (WebCore::GraphicsContext3D::validateProgram):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getShaderi):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        (WebCore::GraphicsContext3D::getUniformLocation):

2009-10-31  Oliver Hunt  <oliver@apple.com>

        Reviewed by Jon Honeycutt.

        WebGL allows objects to be used with the wrong context
        https://bugs.webkit.org/show_bug.cgi?id=30981

        Simply add null checks and a few context guards to ensure we don't
        deref null or attempt to use an object from a different context.

        Tests: fast/canvas/webgl/incorrect-context-object-behaviour.html
               fast/canvas/webgl/null-object-behaviour.html

        * html/canvas/CanvasRenderingContext3D.cpp:
        (WebCore::CanvasRenderingContext3D::attachShader):
        (WebCore::CanvasRenderingContext3D::bindAttribLocation):
        (WebCore::CanvasRenderingContext3D::bindBuffer):
        (WebCore::CanvasRenderingContext3D::bindFramebuffer):
        (WebCore::CanvasRenderingContext3D::bindRenderbuffer):
        (WebCore::CanvasRenderingContext3D::bindTexture):
        (WebCore::CanvasRenderingContext3D::compileShader):
        (WebCore::CanvasRenderingContext3D::detachShader):
        (WebCore::CanvasRenderingContext3D::framebufferRenderbuffer):
        (WebCore::CanvasRenderingContext3D::framebufferTexture2D):
        (WebCore::CanvasRenderingContext3D::getProgrami):
        (WebCore::CanvasRenderingContext3D::getProgramiv):
        (WebCore::CanvasRenderingContext3D::getProgramInfoLog):
        (WebCore::CanvasRenderingContext3D::getShaderi):
        (WebCore::CanvasRenderingContext3D::getShaderiv):
        (WebCore::CanvasRenderingContext3D::getShaderInfoLog):
        (WebCore::CanvasRenderingContext3D::getShaderSource):
        (WebCore::CanvasRenderingContext3D::getUniformf):
        (WebCore::CanvasRenderingContext3D::getUniformfv):
        (WebCore::CanvasRenderingContext3D::getUniformi):
        (WebCore::CanvasRenderingContext3D::getUniformiv):
        (WebCore::CanvasRenderingContext3D::getUniformLocation):
        (WebCore::CanvasRenderingContext3D::isBuffer):
        (WebCore::CanvasRenderingContext3D::linkProgram):
        (WebCore::CanvasRenderingContext3D::shaderSource):
        * html/canvas/CanvasRenderingContext3D.h:
        * html/canvas/CanvasRenderingContext3D.idl:

2009-10-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's MediaQueryResult
        https://bugs.webkit.org/show_bug.cgi?id=30857

        Inherits MediaQueryResult class from Noncopyable because it is
        instantiated by 'new' in WebCore/css/CSSStyleSelector.cpp:5984 and
        it is no need to be copyable.

        * css/CSSStyleSelector.h:

2009-10-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's MediaQueryEvaluator
        https://bugs.webkit.org/show_bug.cgi?id=30854

        Inherits MediaQueryEvaluator class from Noncopyable because it is
        instantiated by 'new' in WebCore/css/CSSStyleSelector.cpp:401 and   
        it is no need to be copyable.

        * css/MediaQueryEvaluator.h:

2009-10-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's CSSRuleSet
        https://bugs.webkit.org/show_bug.cgi?id=30852

        Inherits CSSRuleSet class from Noncopyable because it is
        instantiated by 'new' in WebCore/css/CSSStyleSelector.cpp:455 and
        it is no need to be copyable.

        * css/CSSStyleSelector.cpp:

2009-10-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's CSSRuleData
        https://bugs.webkit.org/show_bug.cgi?id=30851

        Inherits CSSRuleData class from Noncopyable because it is
        instantiated by 'new' in WebCore/css/CSSStyleSelector.h:320 and
        it is no need to be copyable.

        * css/CSSStyleSelector.h:

2009-10-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's CSSRuleDataList
        https://bugs.webkit.org/show_bug.cgi?id=30850

        Inherits CSSRuleDataList class from Noncopyable because it has been
        instantiated by 'new' in WebCore/css/CSSStyleSelector.cpp:2715 and
        it is no need to be copyable.

        * css/CSSStyleSelector.h:

2009-10-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's CSSNamespace
        https://bugs.webkit.org/show_bug.cgi?id=30849

        Inherits CSSNamespace struct from Noncopyable because it is
        instantiated by 'new' in WebCore/css/CSSStyleSheet.cpp:141 and
        it is no need to be copyable.

        * css/CSSNamespace.h:

2009-10-30  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Refactor DatabaseTask in preparation for removing threadsafe refcounting from it.
        Move the synchronizer object out of the DatabaseTask so there is no need to keep
        the pointer to Databasetask around after passing it to MessageQueue.
        Also pass the references to return parameters to the task so it can update them.
        https://bugs.webkit.org/show_bug.cgi?id=30941

        No new tests, since this is just moving the code around, no change in functionality.

        * storage/Database.cpp:
        (WebCore::Database::Database):
        (WebCore::Database::openAndVerifyVersion): Use new DatabaseTaskSynchronizer to wait for task completion.
        (WebCore::Database::markAsDeletedAndClose): Ditto.
        (WebCore::Database::tableNames): Ditto.
        (WebCore::Database::stop): Use the boolean flag rather then 'killed' flag built into MessageQueue.
        (WebCore::Database::scheduleTransaction): Transaction queue is a Deque now, change the way to fetch the transaction.
        * storage/Database.h: Change the SQLTransaction queue to be a Deque rather then a MessageQueue.
        * storage/DatabaseTask.cpp:
        (WebCore::DatabaseTaskSynchronizer::DatabaseTaskSynchronizer):
        (WebCore::DatabaseTaskSynchronizer::waitForTaskCompletion):
        (WebCore::DatabaseTaskSynchronizer::taskCompleted):
        (WebCore::DatabaseTask::DatabaseTask): Ctor takes DatabaseTaskSynchronizer which can be 0.
        (WebCore::DatabaseTask::performTask): Signal completion. m_synchronizer should still be around since main thread is waiting on it.
        (WebCore::DatabaseOpenTask::DatabaseOpenTask): Pass synchronizer and return parameters via constructor.
        (WebCore::DatabaseCloseTask::DatabaseCloseTask): Ditto.
        (WebCore::DatabaseTransactionTask::DatabaseTransactionTask): Ditto.
        (WebCore::DatabaseTableNamesTask::DatabaseTableNamesTask): Ditto.
        * storage/DatabaseTask.h:
        (WebCore::DatabaseOpenTask::create):
        (WebCore::DatabaseCloseTask::create):
        (WebCore::DatabaseTransactionTask::create):
        (WebCore::DatabaseTableNamesTask::create):

2009-10-30  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: In Mail, Undo does not restore some characters I have deleted at the end of a line
        https://bugs.webkit.org/show_bug.cgi?id=30955
        <rdar://problem/7067033>
        
        When the command is deleteWordBackward or deleteWordForward
        we should not add to the open typing command, but
        create a new one.
        
        Test: editing/undo/undo-deleteWord.html

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed): Always start a new command if the granularity is
        not CharacterGranularity. 
        (WebCore::TypingCommand::forwardDeleteKeyPressed): Always start a new command if the granularity is
        not CharacterGranularity. 

2009-10-30  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Make MediaPlayer constructor private
        https://bugs.webkit.org/show_bug.cgi?id=30965

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource): 
        (WebCore::HTMLMediaElement::finishParsingChildren): Use MediaPlayer::create.

        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayer::create): New.

2009-10-29  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Accessibility of headings is not correct

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

        Reviewed by Alice Liu.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::stringRoleForMSAA):
        (WebCore::AccessibilityObject::descriptionForMSAA):

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::shouldReturnTagNameAsRoleForMSAA):
        If the element's tag name is one of h1, h2, h3, h4, h5, h6, return
        true.
        (WebCore::AccessibilityRenderObject::stringRoleForMSAA):
        If the element should return its tag name as the role, return the tag
        name.
        (WebCore::AccessibilityRenderObject::positionalDescriptionForMSAA):
        If the object is a heading, return the string "L" followed by the
        heading level.
        (WebCore::AccessibilityRenderObject::descriptionForMSAA):
        If the object has a positional description, return it. Otherwise, get
        the accessibility description, and prefix it with "Description" so that
        MSAA clients know that it's not a positional description.

        * accessibility/AccessibilityRenderObject.h:

2009-10-29  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Accessibility of links is wrong

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

        Reviewed by Darin Adler.

        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::stringValueForMSAA):
        Return the URL.
        (WebCore::AccessibilityImageMapLink::nameForMSAA):
        Return the alt text.

        * accessibility/AccessibilityImageMapLink.h:
        (WebCore::AccessibilityImageMapLink::isLinked):
        Return true.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isLinked):
        (WebCore::AccessibilityObject::stringValueForMSAA):
        (WebCore::AccessibilityObject::nameForMSAA):

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::isLinkable):
        Return true if the element is considered "linkable" with respect to
        accessibility.
        (WebCore::AccessibilityRenderObject::stringValueForMSAA):
        If the element is linkable, check whether it has a parent anchor
        element. If so, return the anchor element's href.
        (WebCore::AccessibilityRenderObject::isLinked):
        Return true if the element is linkable and if it's parent anchor tag's
        href is non-empty.
        (WebCore::AccessibilityRenderObject::nameForMSAA):
        For text nodes, return the text.

        * accessibility/AccessibilityRenderObject.h:

2009-10-30  Evan Stade  <estade@chromium.org>

        Reviewed by David Levin.

        Notify the chrome when the focused node has changed.
        https://bugs.webkit.org/show_bug.cgi?id=30832

        This is similar to AX code that is already in place, except that this also informs the
        chrome when there stops being a focused node. This is needed for a browser to show the
        anchor for links that have keyboard focus.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::focusedNodeChanged):
        * page/Chrome.cpp:
        (WebCore::Chrome::focusedNodeChanged):
        * page/Chrome.h:
        * page/ChromeClient.h:

2009-10-30  Ben Murdoch  <benm@google.com>

        Reviewed by David Kilzer.

        openDatabase() with empty version sets db version up incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=28417

        Test: storage/open-database-set-empty-version.html

        * storage/Database.cpp:
        (WebCore::Database::performOpenAndVerify): Raise an exception if the current database version does not match the expected version when the current version is the empty string.

2009-10-30  John Gregg  <johnnyg@google.com>

        Reviewed by David Levin.

        Need to turn off notifications properly at runtime
        https://bugs.webkit.org/show_bug.cgi?id=30409

        Moving the notificationsEnabled bit from NotificationCenter
        to the new V8 RuntimeEnabledFeatures object.

        Just moving a bit around, so no new tests.

        * bindings/v8/RuntimeEnabledFeatures.cpp:
        * bindings/v8/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setNotificationsEnabled):
        (WebCore::RuntimeEnabledFeatures::notificationsEnabled):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * notifications/NotificationCenter.cpp:
        * notifications/NotificationCenter.h:

2009-10-30  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] More cleanup after r49949: remove ListenerGuard.
        ListenerGuard is no longer needed since EventListeners do not depend on frame or v8 context.
        https://bugs.webkit.org/show_bug.cgi?id=30943

        Covered by fast/events/add-event-without-document.html which will now pass in Chromium.

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::V8AbstractEventListener):
        (WebCore::V8AbstractEventListener::handleEvent):
        * bindings/v8/V8AbstractEventListener.h:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getEventListener):
        * bindings/v8/V8EventListenerList.h:
        (WebCore::V8EventListenerList::findOrCreateWrapper):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::V8Proxy):
        (WebCore::V8Proxy::disconnectFrame):
        (WebCore::V8Proxy::clearForNavigation):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::V8WorkerContextEventListener):
        (WebCore::V8WorkerContextEventListener::handleEvent):
        (WebCore::V8WorkerContextEventListener::reportError):
        * bindings/v8/V8WorkerContextEventListener.h:
        (WebCore::V8WorkerContextEventListener::create):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::WorkerContextExecutionProxy):
        (WebCore::WorkerContextExecutionProxy::dispose):
        (WebCore::WorkerContextExecutionProxy::findOrCreateEventListener):
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::V8EventListener):
        * bindings/v8/custom/V8CustomEventListener.h:
        (WebCore::V8EventListener::create):

2009-10-30  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        counterValueForElementById should return space-separated string for multiple counters
        https://bugs.webkit.org/show_bug.cgi?id=30939

        Test: fast/css/counters/counterValueForElementById.html

        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeCounterValuesFromChildren):
        (WebCore::counterValueForElement):

2009-10-30  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::paint):
        Add some comments to explain what is happening here.

2009-10-30  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Fix Web Inspector crash on the errors/warnings counter click

        RenderObject::createVisiblePosition(const Position& position)
        understands "null Positions", so we can construct such a Position manually.

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

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

2009-10-30  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25534
        [GTK] Objects of ROLE_TABLE should implement the accessible table interface

        Third part of the implementation of AtkTable.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (nameFromChildren):
        (webkit_accessible_get_name):
        New convenience function to construct an object's name using the name(s) of
        any children it has.

        (atk_table_interface_init):
        (webkit_accessible_table_get_column_description):
        (webkit_accessible_table_get_row_description):
        Implemented.

        (webkit_accessible_table_get_column_header):
        Stub function added so that webkit_accessible_table_get_column_description
        could be implemented in the meantime.

2009-10-30  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25534
        [GTK] Objects of ROLE_TABLE should implement the accessible table interface

        Second part of the implementation of AtkTable.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (cellAtIndex):
        (webkit_accessible_table_get_column_at_index):
        (webkit_accessible_table_get_row_at_index):
        (webkit_accessible_table_get_caption):
        (atk_table_interface_init):

2009-10-30  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add TimelinePanel into the panels enum.

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

        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::showPanel):
        * inspector/front-end/inspector.js:
        (WebInspector.showTimelinePanel):

2009-10-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Holger Hans Peter Freyther.

        If the owner widget of the page has a palette set, we
        should use that one. This was only working when the
        owner was a QWebView. This patch fixes that.

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

2009-10-30  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: Wire CookieJarChromium to the cookies
        backend. This is a final step of a 3-steps raw cookies
        access implementation in Chromium.

        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):

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

        Reviewed by Pavel Feldman.

        Fix Chromium crash in console.log in "deeply recursive" function 

        Check that result of 'frameSourceName' is not null handle
        before casting it to String. 
      
        Allow V8Proxy::sourceName/sourceLineNumber() to report
        that they have failed due to JavaScript stack overflow.

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

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::create):
        (WebCore::ScriptCallStack::ScriptCallStack):
        * bindings/v8/ScriptCallStack.h:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::sourceLineNumber):
        (WebCore::V8Proxy::sourceName):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-10-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's MediaQuery
        https://bugs.webkit.org/show_bug.cgi?id=30856

        Inherits MediaQuery class from Noncopyable because it is
        instantiated by 'new' in WebCore/css/CSSParser.cpp:4905 and
        it is no need to be copyable.

        * css/CSSStyleSelector.h:

2009-10-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's MediaQueryExp
        https://bugs.webkit.org/show_bug.cgi?id=30855

        Inherits MediaQueryExp class from FastAllocBase because it is
        instantiated by 'new' in WebCore/css/CSSParser.cpp:4874.

        * css/MediaQueryExp.h:

2009-10-30  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Eric Seidel.

        Remove ENABLE_RUBY guards as discussed with Dave Hyatt and Maciej Stachowiak.

        Bug 28420 -  Implement HTML5 <ruby> rendering
        (https://bugs.webkit.org/show_bug.cgi?id=28420)

        No new tests (no functional change).

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/build-generated-files.sh:

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

        Reviewed by Adele Peterson.

        Removed test for an impossible condition (a glyph in a right-to-left run not having
        the RTL flag 0x800)

        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::overrideLayoutOperation):

2009-10-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Out-of-memory crash in isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=30906

        We need to handle the fact that creating a V8:Context might fail.  I
        don't know how to test this change because creating a context usually
        only fails when V8 decides it's using too much memory.

        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::V8IsolatedWorld):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        (WebCore::V8Proxy::evaluateInNewContext):

2009-10-29  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Eric Seidel.

        Make links mouse focusable only on GTK and QT.

        Links are now always mouse focusable on GTK and QT. On other platforms
        the link needs a tabIndex or it needs to be contentEditable.

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

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isMouseFocusable):

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

        Reviewed by Sam Weinig.

        Complete the fix for hit-testing and selection highlighting in ligatures for the ATSUI
        code path.

        * platform/graphics/mac/ComplexTextController.h: Added m_ltr member to ComplexTextRun.
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::overrideLayoutOperation): Skip over deleted
        glyphs, but update indexes and advances correctly.
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Initialize m_ltr.

2009-10-29  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        REGRESSION(3.2.3 - 4.0.2): Message composing: when I undo a color change to text in Mail, undo/redo behaves strangely
        <rdar://problem/7115041>
        https://bugs.webkit.org/show_bug.cgi?id=30892

        This problem shows in any scenario where it is necessary to split a text
        node to apply a style. SplitElementCommand and WrapContentsInDummySpanCommand both
        have member variables initialized in the constructor to keep reference to elements
        they need to operate upon. These reference are not updated when reapplying the command.
        For this reason it is necessary to guarantee that unapply doesn not delete the references
        and that these commands implement doReapply to correctly reuse the existing
        elements.

        Test: editing/undo/redo-style.html

        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::executeApply): Added.
        (WebCore::SplitElementCommand::doApply): Modified to call executeApply. 
        (WebCore::SplitElementCommand::doUnapply): Doesn't release m_element1.
        (WebCore::SplitElementCommand::doReapply): Added.
        * editing/SplitElementCommand.h: Added doReapply and executeApply.
        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::executeApply): Added.
        (WebCore::WrapContentsInDummySpanCommand::doApply): Modified to call executeApply.
        (WebCore::WrapContentsInDummySpanCommand::doUnapply): Doesn't release m_dummySpan.
        (WebCore::WrapContentsInDummySpanCommand::doReapply): Added.
        * editing/WrapContentsInDummySpanCommand.h: Added doReapply and executeApply.

2009-10-29  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        DOM Storage's condition variable needs to handle spurious wakeups
        https://bugs.webkit.org/show_bug.cgi?id=30920

        Add a boolean to keep track of whether it's been terminated.  Clean
        up the locking code a tiny bit to make it easier to read.  There's
        no way to reproduce this reliably in a LayoutTest.

        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::LocalStorageThread):
        (WebCore::LocalStorageThread::terminate):
        (WebCore::LocalStorageThread::performTerminate):
        * storage/LocalStorageThread.h:

2009-10-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Include ComplextTextController into Chromium Mac project.

        * WebCore.gyp/WebCore.gyp: Added include rule for ComplextText* files.

2009-10-29  Timothy Hatcher  <timothy@apple.com>

        Fix tabbing through element attributes in the Web Insector.

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

        Reviewed by Pavel Feldman.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted): Don't call _updateTitle,
        it is called for us when removeAttribute succeeds in the back-end.
        (WebInspector.ElementsTreeElement.prototype._textNodeEditingCommitted): Ditto except for nodeValue.
        (WebInspector.ElementsTreeElement.prototype._editingCancelled): Don't call _updateTitle, editing code reverts.
        (WebInspector.ElementsTreeElement.prototype._updateTitle): Return early if we are editing.

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

        Reviewed by Sam Weinig.

        Problem editing or selecting text containing ligatures
        https://bugs.webkit.org/show_bug.cgi?id=30025

        Test: platform/mac/fast/text/ligature-subdivision.html

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController): Initialize
        m_characterInCurrentGlyph.
        (WebCore::ComplexTextController::offsetForPosition): If the hit glyph spans multiple
        characters, compute the hit character based on dividing the glyph’s total advance into
        a number of equal intervals equal to the number of characters and assigning the hit to the
        character corresponding to the hit interval.
        (WebCore::ComplexTextController::advance): If the final offset occurs mid-glyph, advance
        by a fraction of the glyph’s total advance.
        * platform/graphics/mac/ComplexTextController.h: Added m_characterInCurrentGlyph.

2009-10-29  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <http://webkit.org/b/30918>.
        Web Inspector: Datagrid Rows on Windows not properly aligned.
        
        Use line-height for the table rows to make sure the height
        of our text and the height of the table rows are consistent.

        * inspector/front-end/inspector.css:

2009-10-29  Adam Barth  <abarth@webkit.org>

        No review, rolling out r50296.
        http://trac.webkit.org/changeset/50296

        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::V8IsolatedWorld):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        (WebCore::V8Proxy::evaluateInNewContext):

2009-10-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Out-of-memory crash in isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=30906

        We need to handle the fact that creating a V8:Context might fail.  I
        don't know how to test this change because creating a context usually
        only fails when V8 decides it's using too much memory.

        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::V8IsolatedWorld):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        (WebCore::V8Proxy::evaluateInNewContext):

2009-10-29  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Remove build warning introduced by r50284.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::duration):

2009-10-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        [V8] Remove random crashes by removing retrieval of V8 context during garbage collection.

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

        Unfortunately, I haven't been able to trigger this crash explicitly, so no test :(.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::jsWrapperForDOMObject): Added new "assume-it's-there" getter.
        * bindings/v8/V8DOMWrapper.h: Added getter decl.
        * bindings/v8/V8GCController.cpp:
        (WebCore::GCPrologueVisitor::visitDOMWrapper): Changed to use explicit getter.

2009-10-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Adjust the project files to sync up with
        http://trac.webkit.org/changeset/50259

        * WebCore.gypi: Renamed and added files.

2009-10-29  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Implement DELETE HTTP method for XmlHttpRequest
        https://bugs.webkit.org/show_bug.cgi?id=30894

        No new tests as this functionality is already tested by the 
        xmlhttprequest LayoutTests. As this patch depends on an unreleased
        version of the dependent QtNetwork library and the tests will be
        enabled later once the dependent library is released (and the
        buildbot is updated).

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

2009-10-29  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Part of <http://webkit.org/b/30483>.
        Web Inspector: Always show the Local and Session Storage Views.
        
        Even if the length of the DOM Storage entry array is 0, still
        generate the Datagrid because users can add things storage items
        through the UI, so we should allow them to even if there isn't
        anything there currently.

        * English.lproj/localizedStrings.js: Removed "This Storage is Empty".
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype._showDOMStorageEntries):

2009-10-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add TimelinePanel into the panels enum.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::specialPanelForJSName):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::):

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

        Reviewed by Oliver Hunt.

        [GTK] Threading problems with some of the tests
        https://bugs.webkit.org/show_bug.cgi?id=30814

        Create strings shared among threads with crossThreadString
        constructor method.

        * storage/Database.cpp:
        (WebCore::Database::Database):

2009-10-29  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=30308
        
        Add support for ARGB videos.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::paint):
        Create the Cairo image surface for ARGB32 or RGB24
        depending on the buffer's caps.
        
        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_timeout_func):
        (webkit_video_sink_render):
        Handle ARGB video and convert GStreamer's ARGB to
        Cairo's for displaying.

2009-10-29  Anton Muhin  <antonm@chromium.org>

        Reviewed by David Levin.

        [chromium] expose a method to access memory usage information in ChromiumBridge
        Declare a static method to be implemented by http://codereview.chromium.org/332010/
        https://bugs.webkit.org/show_bug.cgi?id=30829

        * platform/chromium/ChromiumBridge.h:

2009-10-29  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25679
        [Gtk] Improve accessibility of focusable lists

        Implements the AtkSelection interface and enables the corresponding
        (and expected) object:selection-changed event.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (optionFromList):
        (optionFromSelection):
        (atk_selection_interface_init):
        (webkit_accessible_selection_add_selection):
        (webkit_accessible_selection_clear_selection):
        (webkit_accessible_selection_ref_selection):
        (webkit_accessible_selection_get_selection_count):
        (webkit_accessible_selection_is_child_selected):
        (webkit_accessible_selection_remove_selection):
        (webkit_accessible_selection_select_all_selection):
        (GetAtkInterfaceTypeFromWAIType):
        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (AXObjectCache::postPlatformNotification):

2009-10-29  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Adler.

        Bug 30655 - Only plain text should be copied to clipboard for TextArea.
        https://bugs.webkit.org/show_bug.cgi?id=30655

        * editing/Editor.cpp:
        (WebCore::nodeIsInTextFormControl):
        (WebCore::Editor::cut):
        (WebCore::Editor::copy):

2009-10-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: hide timeline for now - not yet ready.

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

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

2009-10-29  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: deploy Web Inspector's images in WebCore.gypi.

        * WebCore.gypi:

2009-10-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: get rid of timelineProfilerEnabled method.

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

        * inspector/InspectorBackend.cpp:
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible):
        * inspector/InspectorController.h:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._toggleTimelineButtonClicked):

2009-10-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Darin Fisher.

        Create stub methods for raw cookies access in ChromiumBridge.h

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

        * platform/chromium/ChromiumBridge.h:

2009-10-29  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's RareData
        https://bugs.webkit.org/show_bug.cgi?id=30858

        Inherits RareData struct from Noncopyable because it is
        instantiated by 'new' in WebCore/css/CSSSelector.h:259 and 
        it is no need to be copyable.

        * css/CSSSelector.h:

2009-10-29  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's ShorthandScope
        https://bugs.webkit.org/show_bug.cgi?id=30859

        Inherits ShorthandScope class from FastAllocBase because it is 
        instantiated by 'new' in WebCore/css/CSSParser.cpp:902 and 
        it is no need to be copyable.        

        * css/CSSParser.h:

2009-10-29  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's AXObjectCache
        https://bugs.webkit.org/show_bug.cgi?id=30848

        Inherits AXObjectCache class from FastAllocBase because it is
        instantiated by 'new' in WebCore/dom/Document.cpp:1537 and                                
        it is no need to be copyable.

        * accessibility/AXObjectCache.h:

2009-10-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Don't run JavaScript URLs in view source mode
        https://bugs.webkit.org/show_bug.cgi?id=30881

        Just say no.

        Test: http/tests/security/view-source-no-javascript-url.html

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):

2009-10-29  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Fixes style problems pointed out by Evan Martin.

        * platform/gtk/Language.cpp:
        (WebCore::defaultLanguage):

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

        Rubber-stamped by Mark Rowe.

        64-bit Leopard build fix after r50259
        
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        Declared ATSUTextInserted in 64-bit.
        (WebCore::fontHasMirroringInfo): Use %d format and cast to int.
        (WebCore::disableLigatures): Ditto.
        (WebCore::initializeATSUStyle): Ditto.
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters): Ditto.

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

        Tiger build fix after r50259

        * platform/graphics/mac/ComplexTextController.h:
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:

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

        Attempted Tiger build fix after r50259

        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:

2009-10-28  Steve Falkenburg  <sfalken@apple.com>

        Rubber stamped by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=30899
        WebKit fails to build release on 32-bit Windows systems

        * WebCore.vcproj/WebCore.vcproj: Excluded files from project.
        * bindings/js/JSBindingsAllInOne.cpp: Added.

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

        Reviewed by Jon Honeycutt.

        Fixed typos in color names.

        * inspector/front-end/Color.js:

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

        Reviewed by Sam Weinig.

        Share code between the ATSUI- and Core Text-based Font implementations by doing the
        following:
        - Generalize CoreTextController as ComplexTextController, keeping the Core Text-specific
          parts in ComplexTextControllerCoreText.cpp.
        - Generalize FontMacCoreText as FontComplexTextMac using ComplexTextController
        - Implement ATSUI-specific parts of ComplexTextController in ComplexTextControllerATSUI.
        - Remove FontMacATSUI.

        * WebCore.xcodeproj/project.pbxproj: Removed CoreTextController.{cpp,h}, FontMacATSUI.mm,
        and FontMacCoreText.cpp, and added ComplexTextController.{cpp,h},
        ComplexTextControllerATSUI.cpp, ComplexTextControllerCoreText.cpp, and
        FontComplexTextMac.cpp.

        * platform/graphics/mac/ComplexTextController.cpp: Copied from CoreTextController.cpp and
        kept the non-Core Text-specific bits.
        (WebCore::ComplexTextController::ComplexTextController): Updated for renames, including
        its own.
        (WebCore::ComplexTextController::offsetForPosition): Updated for renames and for
        m_complexTextRuns holding references instead of objects.
        (WebCore::ComplexTextController::collectComplexTextRuns): Updated for renames, including
        its own.
        (WebCore::ComplexTextController::advance): Updated for renames.
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances): Updated for renames and for
        m_complexTextRuns holding references instead of objects, and changed to use the glyphs()
        and advances() accessors.

        * platform/graphics/mac/ComplexTextController.h: Copied from CoreTextController.h and
        renamed CoreTextController to ComplexTextController and CoreTextRun to ComplexTextRun. Made
        the latter RefCounted, added ATSUI-specific members to it, and made some other members
        Core Text-specific. Renamed m_coreTextRuns to m_complexTextRuns and made it hold references
        rather than objects.
        (WebCore::ComplexTextController::ComplexTextRun::create):
        (WebCore::ComplexTextController::ComplexTextRun::glyphs):
        (WebCore::ComplexTextController::ComplexTextRun::advances):

        * platform/graphics/mac/ComplexTextControllerATSUI.cpp: Added. Includes ATSUI-specific
        parts of the ComplexTextController implementation. 
        (WebCore::ComplexTextController::ComplexTextRun::overrideLayoutOperation): This ATSUI
        callback populates the ComplexTextRun’s glyphs, advances and indices vectors. It is invoked
        when the ComplexTextRun constructor calls ATSUGetGlyphBounds().
        (WebCore::isArabicLamWithAlefLigature): Helper function, copied from FontMacATSUI.mm.
        (WebCore::shapeArabic): Helper function, adapted from FontMacATSUI.mm.
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Sets up the
        ATSUTextLayout, substituting the text buffer if necessary for things like shaping Arabic,
        mirroring glyphs or directionality overrides, then calls ATSUGetGlyphBounds() in order to
        get the glyphs, advances and indices vectors populated.
        (WebCore::fontHasMirroringInfo): Helper function, copied from FontMacATSUI.mm.
        (WebCore::disableLigatures): Ditto.
        (WebCore::initializeATSUStyle): Ditto, somewhat cleaned up and simplified.
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters): Constructs
        ComplexTextRuns, either missing-glyphs ones or ATSUTextLayout-based ones.

        * platform/graphics/mac/ComplexTextControllerCoreText.cpp: Copied from
        CoreTextController.cpp and kept the Core Text-specific bits.
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Updated for renames,
        including its own, and moved the code to initialize m_glyphs and m_advances here. Previously
        this was done in adjustGlyphsAndAdvances().
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters): Updated for renames,
        including its own.
        * platform/graphics/mac/CoreTextController.cpp: Removed.
        * platform/graphics/mac/CoreTextController.h: Removed.
        * platform/graphics/mac/FontComplexTextMac.cpp: Renamed FontMacCoreText.cpp to this.
        (WebCore::Font::selectionRectForComplexText): Changed to use ComplexTextController instead
        of CoreTextController.
        (WebCore::Font::drawComplexText): Ditto.
        (WebCore::Font::floatWidthForComplexText): Ditto.
        (WebCore::Font::offsetForPositionForComplexText): Ditto.
        * platform/graphics/mac/FontMacATSUI.mm: Removed.
        * platform/graphics/mac/FontMacCoreText.cpp: Removed.

2009-10-27  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        WAI-ARIA: add support for 'option' role
        https://bugs.webkit.org/show_bug.cgi?id=30843

        Test: accessibility/aria-option-role.html

        * accessibility/AccessibilityListBoxOption.h:
        (WebCore::AccessibilityListBoxOption::canHaveChildren):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::RoleEntry::):
        (WebCore::AccessibilityRenderObject::canHaveChildren):

2009-10-28  Jens Alfke  <snej@chromium.org>

        Reviewed by Eric Seidel.

        Fix GCC compiler warnings in WebCore, and enable -Wall and -Werror for Chromium build.
        https://bugs.webkit.org/show_bug.cgi?id=30716

        * WebCore.gyp/WebCore.gyp:  Enable "chromium_code" flag, just on Mac build for now.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::createARIARoleMap):  Fix struct visibiity warning.
        * bindings/v8/ScriptCallStack.h:  Fix out-of-order member initialization warning.
        * bindings/v8/V8Collection.h:
        (WebCore::getV8Object):  Function in header should not be 'static' (fixes unused-static warning.)
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertNewNodeToV8Object):  Fix signed/unsigned comparison warning.
        * bindings/v8/V8GCController.cpp:
        (WebCore::ObjectGrouperVisitor::applyGrouping):  Fix unused-variable warning.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):  Enable ListButtonPart case to avoid
            warning about missing cases in 'switch' statement.
        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap):  Fix struct visibiity warning.
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::State::State):  Fix out-of-order member initialization warning.
        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::RenderMediaControlsChromium::shouldRenderMediaControlPart):  Add empty 'default' case in
            'switch' statement to avoid missing-case warning.
        (WebCore::RenderMediaControlsChromium::paintMediaControlsPart):  Ditto.
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::createFunctionMap):  Fix struct visibiity warning.

2009-10-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION: crashes in WebCore::RedirectScheduler::timerFired(WebCore::Timer<WebCore::RedirectScheduler>*)
        https://bugs.webkit.org/show_bug.cgi?id=30839

        Added null check for the case when the frame is detached from the page.

        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::timerFired):

2009-10-28  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=30817
        Use parentObjectUnignored instead of parentObject in webkit_accessible_get_parent

        Also removes the hack I had originally added to solve bug 25411, because
        the fix here is what I should have done in the first place.

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

2009-10-28  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=30805
        Add MessageQueue::removeIf(Predicate&) to remove certain tasks without pulling them from the queue.
        Existing Database tests cover this, no change in functionality.

        * storage/DatabaseThread.cpp:
        (WebCore::SameDatabasePredicate::SameDatabasePredicate): Added predicate that flags the tasks belonging to a specified database.
        (WebCore::SameDatabasePredicate::operator()):
        (WebCore::DatabaseThread::unscheduleDatabaseTasks): changed to use the new removeIf method.

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

        Reviewed by Timothy Hatcher.

        Web Inspector: Glue subsequent timeline records with same category
        and title together.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.addRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelineRecordTreeElement.prototype.onattach):
        (WebInspector.TimelineRecordTreeElement.prototype.refresh):

2009-10-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Fails new test fast/js/navigator-language.html
        https://bugs.webkit.org/show_bug.cgi?id=30440

        Reimplement WebCore::defaultLanguage to account for changes in
        locale done by setLocale.

        Already existing test: fast/js/navigator-language.html

        * platform/gtk/Language.cpp:
        (WebCore::defaultLanguage):

2009-10-28  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7303145> 
        Can't exit full screen mode or restart movie after pressing command -R.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::removedFromDocument):
        (WebCore::HTMLMediaElement::documentWillBecomeInactive):
            Exit from fullscreen if necessary.
        * html/HTMLMediaElement.h:

2009-10-28  Alexey Proskuryakov  <ap@apple.com>

        Unreviewed - a trivial fix to get Windows bots running.

        https://bugs.webkit.org/show_bug.cgi?id=30841
        <rdar://problem/7342730> WebKit should not pass Referer header through a redirect to a non-secure site

        * platform/network/cf/ResourceRequestCFNet.cpp: (WebCore::setHeaderFields): Don't try to
        access empty vector's data.

2009-10-28  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25897
        [Gtk] Extraneous object of ROLE_PANEL in hierarchy for entries

        Remove the extraneous object of ROLE_PANEL.

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (AccessibilityObject::accessibilityPlatformIncludesObject):

2009-10-28  Jonathan Dixon  <joth@chromium.org>

        Reviewed by Eric Seidel.

        Bug 30547: (Chromium) searchbox not rendered properly due to the css property -webkit-border-radius
        https://bugs.webkit.org/show_bug.cgi?id=30547

        Test: fast/css/text-input-with-webkit-border-radius.html

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::paintTextFieldInternal):
          Implemented rounded border rendering in Chromium Windows theme renderer.

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

        Reviewed by Timothy Hatcher.

        Web Inspector: Pull items collections from resources panel and
        timeline panel into AbstractTimelinePanel.

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

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel):
        (WebInspector.AbstractTimelinePanel.prototype.populateSidebar):
        (WebInspector.AbstractTimelinePanel.prototype.createItemTreeElement):
        (WebInspector.AbstractTimelinePanel.prototype.createItemGraph):
        (WebInspector.AbstractTimelinePanel.prototype._showCategory):
        (WebInspector.AbstractTimelinePanel.prototype._hideCategory):
        (WebInspector.AbstractTimelinePanel.prototype.filter):
        (WebInspector.AbstractTimelinePanel.prototype._createGraph):
        (WebInspector.AbstractTimelinePanel.prototype.updateMainViewWidth):
        (WebInspector.AbstractTimelinePanel.prototype.refresh):
        (WebInspector.AbstractTimelinePanel.prototype.reset):
        (WebInspector.AbstractTimelinePanel.prototype.get calculator):
        (WebInspector.AbstractTimelinePanel.prototype.set calculator):
        (WebInspector.AbstractTimelinePanel.prototype.addItem):
        (WebInspector.AbstractTimelinePanel.prototype.removeItem):
        (WebInspector.AbstractTimelinePanel.prototype.refreshItem):
        (WebInspector.AbstractTimelinePanel.prototype.revealAndSelectItem):
        (WebInspector.AbstractTimelinePanel.prototype.sortItems):
        (WebInspector.AbstractTimelinePanel.prototype.adjustScrollPosition):
        (WebInspector.AbstractTimelineCategory):
        (WebInspector.AbstractTimelineCategory.prototype.toString):
        * inspector/front-end/ResourceCategory.js:
        (WebInspector.ResourceCategory):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.createItemTreeElement):
        (WebInspector.ResourcesPanel.prototype.createItemGraph):
        (WebInspector.ResourcesPanel.prototype.isCategoryVisible):
        (WebInspector.ResourcesPanel.prototype.populateSidebar):
        (WebInspector.ResourcesPanel.prototype.get searchableViews):
        (WebInspector.ResourcesPanel.prototype.get searchResultsSortFunction.sortFuction):
        (WebInspector.ResourcesPanel.prototype.get searchResultsSortFunction):
        (WebInspector.ResourcesPanel.prototype.searchMatchFound):
        (WebInspector.ResourcesPanel.prototype.searchCanceled):
        (WebInspector.ResourcesPanel.prototype.performSearch):
        (WebInspector.ResourcesPanel.prototype.refresh):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype.removeResource):
        (WebInspector.ResourcesPanel.prototype.addMessageToResource):
        (WebInspector.ResourcesPanel.prototype.clearMessages):
        (WebInspector.ResourcesPanel.prototype.refreshResource):
        (WebInspector.ResourcesPanel.prototype.recreateViewForResourceIfNeeded):
        (WebInspector.ResourcesPanel.prototype.showResource):
        (WebInspector.ResourcesPanel.prototype._sortResourcesIfNeeded):
        (WebInspector.ResourcesPanel.prototype._toggleLargerResources):
        (WebInspector.ResourcesPanel.prototype._toggleResourceTracking):
        (WebInspector.ResourcesPanel.prototype.get _resources):
        (WebInspector.ResourceTimeCalculator.prototype._upperBound):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.get categories):
        (WebInspector.TimelinePanel.prototype.populateSidebar):
        (WebInspector.TimelinePanel.prototype.addRecordToTimeline):
        (WebInspector.TimelinePanel.prototype.createItemTreeElement):
        (WebInspector.TimelinePanel.prototype.createItemGraph):
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelineCategory):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:

2009-10-28  Kelly Norton  <knorton@google.com>

        Reviewed by Pavel Feldman.

        Resets InspectorFrontend in InspectorTimelineAgent instead of removing it so
        that it remains active on refreshs and page transitions.
        https://bugs.webkit.org/show_bug.cgi?id=30874

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setFrontendProxyObject):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::resetFrontendProxyObject):
        * inspector/InspectorTimelineAgent.h:

2009-10-27  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Provide a way to get counter values with layoutTestContoller
        https://bugs.webkit.org/show_bug.cgi?id=30555

        Expose WebCore::counterValueForElement as a WebCore API.

        * WebCore.base.exp:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeCounterValuesFromChildren):
        (WebCore::counterValueForElement):
        * rendering/RenderTreeAsText.h:

2009-10-28  Nate Chapin  <japhet@chromium.org>

        Unreviewed, Chromium build fix for r50225.

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

2009-10-28  Eric Z. Ayers  <zundel@google.com>

        Reviewed by Pavel Feldman.

        Adds InspectorTimelineAgent  instrumentation for encountering a
        <SCRIPT> tag when parsing an HTML document. 

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

        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::startLine):
        (WebCore::ScriptSourceCode::url):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):
        (WebCore::HTMLTokenizer::scriptExecution):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willLoadXHR):
        (WebCore::InspectorTimelineAgent::willScriptTag):
        (WebCore::InspectorTimelineAgent::didScriptTag):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createScriptTagTimelineRecord):
        * inspector/TimelineRecordFactory.h:
        * inspector/front-end/TimelineAgent.js:

2009-10-28  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Makes sure that Geolocation watch IDs remain positive on overflow.
        https://bugs.webkit.org/show_bug.cgi?id=30122

        No new tests possible.

        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::watchPosition): Modified. Reset the watch ID to 1 on overflow.

2009-10-28  George Staikos  <george.staikos@torchmobile.com>

        Attempt to fix the Mac debug build after 50225.

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

2009-10-28  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=30841
        <rdar://problem/7342730> WebKit should not pass Referer header through a redirect to a non-secure site

        Tests: http/tests/ssl/referer-301.html
               http/tests/ssl/referer-303.html

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):
        Remove Referer header if redirecting from https to another protocol.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::clearHTTPReferrer): Update request counterparts, as it is
        always done when changing or adding header fields.
        (WebCore::ResourceRequestBase::clearHTTPOrigin): Ditto.

        * platform/network/ResourceRequestBase.h: clearHTTPReferrer() and clearHTTPOrigin() are
        no longer inline, since they have non-trivial implementations.

        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Fixed to synchronize header field removals.
        (WebCore::ResourceRequest::doUpdateResourceRequest): Ditto.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::setHeaderFields):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        Match Mac changes.
        
2009-10-28  Joe Mason  <jmason@rim.com>

        Reviewed by Adam Treat.

        Add FrameLoader::defaultObjectContentType, containing common code for
        implementing FrameLoaderClient::objectContentType.  (Currently the gtk
        and win ports have copied this code, and the qt port uses similar code
        with a few extra clauses.  Moving this to a utility function cuts down
        on copied code.)   This causes no behavioural change.

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

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

2009-10-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] QWebHistory::saveState() is inconsistent with the Qt API
        https://bugs.webkit.org/show_bug.cgi?id=30710

        Enforce the versioning, by ignoring any version different
        from 1.

        * history/qt/HistoryItemQt.cpp:
        (WebCore::HistoryItem::restoreState):
        (WebCore::HistoryItem::saveState):

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

        Not reviewed: follow up fix to InspectorControllerStub.
        Define it after inspector.js due to namespace

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

        * inspector/front-end/inspector.html:

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

        Reviewed by Timothy Hatcher.

        Web Inspector: Add InspectorController stub in order to
        support opening in standalone mode.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/InspectorControllerStub.js: Added.
        (.WebInspector.InspectorControllerStub):
        (.WebInspector.InspectorControllerStub.prototype.wrapCallback):
        (.WebInspector.InspectorControllerStub.prototype.isWindowVisible):
        (.WebInspector.InspectorControllerStub.prototype.platform):
        (.WebInspector.InspectorControllerStub.prototype.closeWindow):
        (.WebInspector.InspectorControllerStub.prototype.attach):
        (.WebInspector.InspectorControllerStub.prototype.detach):
        (.WebInspector.InspectorControllerStub.prototype.storeLastActivePanel):
        (.WebInspector.InspectorControllerStub.prototype.clearMessages):
        (.WebInspector.InspectorControllerStub.prototype.searchingForNode):
        (.WebInspector.InspectorControllerStub.prototype.search):
        (.WebInspector.InspectorControllerStub.prototype.toggleNodeSearch):
        (.WebInspector.InspectorControllerStub.prototype.setAttachedWindowHeight):
        (.WebInspector.InspectorControllerStub.prototype.moveByUnrestricted):
        (.WebInspector.InspectorControllerStub.prototype.addResourceSourceToFrame):
        (.WebInspector.InspectorControllerStub.prototype.addSourceToFrame):
        (.WebInspector.InspectorControllerStub.prototype.getResourceDocumentNode):
        (.WebInspector.InspectorControllerStub.prototype.highlightDOMNode):
        (.WebInspector.InspectorControllerStub.prototype.hideDOMNodeHighlight):
        (.WebInspector.InspectorControllerStub.prototype.inspectedWindow):
        (.WebInspector.InspectorControllerStub.prototype.loaded):
        (.WebInspector.InspectorControllerStub.prototype.localizedStringsURL):
        (.WebInspector.InspectorControllerStub.prototype.windowUnloading):
        (.WebInspector.InspectorControllerStub.prototype.hiddenPanels):
        (.WebInspector.InspectorControllerStub.prototype.debuggerEnabled):
        (.WebInspector.InspectorControllerStub.prototype.enableResourceTracking):
        (.WebInspector.InspectorControllerStub.prototype.disableResourceTracking):
        (.WebInspector.InspectorControllerStub.prototype.resourceTrackingEnabled):
        (.WebInspector.InspectorControllerStub.prototype.enableDebugger):
        (.WebInspector.InspectorControllerStub.prototype.disableDebugger):
        (.WebInspector.InspectorControllerStub.prototype.addBreakpoint):
        (.WebInspector.InspectorControllerStub.prototype.removeBreakpoint):
        (.WebInspector.InspectorControllerStub.prototype.updateBreakpoint):
        (.WebInspector.InspectorControllerStub.prototype.pauseInDebugger):
        (.WebInspector.InspectorControllerStub.prototype.pauseOnExceptions):
        (.WebInspector.InspectorControllerStub.prototype.setPauseOnExceptions):
        (.WebInspector.InspectorControllerStub.prototype.resumeDebugger):
        (.WebInspector.InspectorControllerStub.prototype.profilerEnabled):
        (.WebInspector.InspectorControllerStub.prototype.enableProfiler):
        (.WebInspector.InspectorControllerStub.prototype.disableProfiler):
        (.WebInspector.InspectorControllerStub.prototype.startProfiling):
        (.WebInspector.InspectorControllerStub.prototype.stopProfiling):
        (.WebInspector.InspectorControllerStub.prototype.getProfileHeaders):
        (.WebInspector.InspectorControllerStub.prototype.getProfile):
        (.WebInspector.InspectorControllerStub.prototype.takeHeapSnapshot):
        (.WebInspector.InspectorControllerStub.prototype.databaseTableNames):
        (.WebInspector.InspectorControllerStub.prototype.stepIntoStatementInDebugger):
        (.WebInspector.InspectorControllerStub.prototype.stepOutOfFunctionInDebugger):
        (.WebInspector.InspectorControllerStub.prototype.stepOverStatementInDebugger):
        (.WebInspector.InspectorControllerStub.prototype.setSetting):
        (.WebInspector.InspectorControllerStub.prototype.dispatchOnInjectedScript):
        (.WebInspector.InspectorControllerStub.prototype.releaseWrapperObjectGroup):
        (.WebInspector.InspectorControllerStub.prototype.setting):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.UIString):

2009-10-28  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25897
        [Gtk] Extraneous object of ROLE_PANEL in hierarchy for entries

        Expands upon the new funtionality which allows platforms to indicate
        that a particular object should not be ignored, so that they can
        specify that an object should be ignored or that it should be left up
        to the default handling to decide.

        * accessibility/AccessibilityObject.h:
        * accessibility/chromium/AccessibilityObjectChromium.cpp:
        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        * accessibility/mac/AccessibilityObjectMac.mm:
        * accessibility/qt/AccessibilityObjectQt.cpp:
        * accessibility/win/AccessibilityObjectWin.cpp:
        * accessibility/wx/AccessibilityObjectWx.cpp:
        (AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (AccessibilityRenderObject::accessibilityIsIgnored):


2009-10-28  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25534
        [GTK] Objects of ROLE_TABLE should implement the accessible table interface

        Expose the table summary as the accessible description because there is no summary object.

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

2009-10-28  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        Adds ScriptController::intializeThreading(), with both JSC and V8 implementations.
        https://bugs.webkit.org/show_bug.cgi?id=30678

        This new method is used from common code, rather than calling JSC::initializeThreading() (or the V8 equivalent) directly.

        Build fix, no new tests required.

        * bindings/js/ScriptController.cpp: Modified.
        (WebCore::ScriptController::initializeThreading): Added.
        * bindings/js/ScriptController.h: Modified. Adds ScriptController::initializeThreading().
        * bindings/v8/ScriptController.cpp: Modified.
        (WebCore::ScriptController::initializeThreading): Added.
        * bindings/v8/ScriptController.h: Modified. Adds ScriptController::initializeThreading().
        * loader/icon/IconDatabase.cpp: Modified.
        (WebCore::iconDatabase): Call ScriptController::initializeThreading(), rather than JSC::initializeThreading().
        * storage/Database.cpp: Modified.
        (WebCore::Database::Database): Call ScriptController::initializeThreading(), rather than JSC::initializeThreading().

2009-10-26  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        Document a feature of the m_liveDecodedResources list.
        https://bugs.webkit.org/show_bug.cgi?id=30209

        The code made the assumption that the list is sorted by
        the m_lastDecodedAccessTime property of the CachedResource.
        The above is not true when CachedResource::setDecodedSize
        is called and the item is inserted the first time. In this
        case the m_lastDecodedAccessTime is still zero and the
        m_liveDecodedResources list becomes unsorted.

        It is impossible that Cache::pruneLiveResources will
        stop to process the list too early due this feature and
        the alternatives of updating m_lastDecodedAccessTime in
        CachedResource::setDecodedSize or changing the insert
        to search the right position have a negative impact on
        performance. The best solution for now is to document
        this feature.

        * loader/Cache.cpp:
        (WebCore::Cache::pruneLiveResources):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::setDecodedSize):

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

        Reviewed by Jan Alonzo.

        [Gtk] Extraneous object of ROLE_PANEL in hierarchy for entries
        https://bugs.webkit.org/show_bug.cgi?id=25897

        Make text controls always implement the text interface, and the
        editable text interface when they are not read only. This is what
        ATK-users expect.

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

2009-10-27  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Fraser.

        Change HitTestResult methods to use (3d) transformation aware methods
        https://bugs.webkit.org/show_bug.cgi?id=27347

        The current HitTestResult methods are not using the (3d)
        transformation aware routines. This can lead to an assertion
        SVGRenderBase::mapLocalToContainer method.

        Change HitTestResult::imageRect to use the (3d) transformation
        aware RenderBox::absoluteContentQuad to avoid running into
        an assertion with SVG content.

        Remove HitTestResult::boundingBox() as it is only used in
        two places and conceptually doesn't belong into a HitTest
        which is operating on points.

        A classic test case is not possible as the methods are not excercised
        from within HTML/SVG but from the WebKit API Layer. A unittest
        for Qt/Gtk+/Mac would need to be written but Qt/Gtk+ currently
        do not support 3d transformations making it impossible to write
        a reliable test case and the Mac port is currently not doing
        unit testing.


        * rendering/HitTestResult.cpp: Remove boundingBox() method
        (WebCore::HitTestResult::imageRect): Use transformation aware method
        * rendering/HitTestResult.h: Remove boundingBox()

2009-10-26  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Eric Seidel.

        [Qt] Custom Cursor doesn't use hotspot.
        https://bugs.webkit.org/show_bug.cgi?id=30820

        Cursors loaded from a QPixmap didn't specifiy the
        hotspot. Take the hotspot values from the mac
        implementation.

        * platform/qt/CursorQt.cpp:

2009-10-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Initial revision of the Timeline grid.

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

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype.populateSidebar):
        (WebInspector.AbstractTimelinePanel.prototype.refresh):
        (WebInspector.AbstractTimelineCalculator):
        * inspector/front-end/Images/timelineBarBlue.png: Added.
        * inspector/front-end/Images/timelineBarGray.png: Added.
        * inspector/front-end/Images/timelineBarGreen.png: Added.
        * inspector/front-end/Images/timelineBarOrange.png: Added.
        * inspector/front-end/Images/timelineBarPurple.png: Added.
        * inspector/front-end/Images/timelineBarRed.png: Added.
        * inspector/front-end/Images/timelineBarYellow.png: Added.
        * inspector/front-end/Images/timelineCheckmarks.png: Added.
        * inspector/front-end/Images/timelineDots.png: Added.
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceTimeCalculator):
        (WebInspector.ResourceTransferSizeCalculator):
        * inspector/front-end/TimelineAgent.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.get statusBarItems):
        (WebInspector.TimelinePanel.prototype.get categories):
        (WebInspector.TimelinePanel.prototype.populateSidebar):
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype.addItemToTimeline):
        (WebInspector.TimelinePanel.prototype.refresh):
        (WebInspector.TimelinePanel.prototype._toggleTimelineButtonClick):
        (WebInspector.TimelinePanel.prototype.reset):
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelinePanel.prototype.showCategory):
        (WebInspector.TimelinePanel.prototype.hideCategory):
        (WebInspector.TimelineRecordTreeElement):
        (WebInspector.TimelineRecordTreeElement.prototype.onattach):
        (WebInspector.TimelineCalculator):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.TimelineCalculator.prototype.computePercentageFromEventTime):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphLabels):
        (WebInspector.TimelineCalculator.prototype.updateBoundaries):
        (WebInspector.TimelineCalculator.prototype.formatValue):
        (WebInspector.TimelineGraph):
        (WebInspector.TimelineGraph.prototype.get graphElement):
        (WebInspector.TimelineGraph.prototype.refreshLabelPositions):
        (WebInspector.TimelineGraph.prototype.refresh):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):

2009-10-27  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Move runAfterPendingDispatches to TestController for Clarity
        https://bugs.webkit.org/show_bug.cgi?id=30844

        * inspector/front-end/TestController.js:
        (WebInspector.TestController.prototype.runAfterPendingDispatches):
        * inspector/front-end/inspector.js: moved runAfterPendingDispatches

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

        Reviewed by Dimitri Glazkov.

        Add missing forward declaration of FramelessScrollView.
        https://bugs.webkit.org/show_bug.cgi?id=30824

        * platform/chromium/FramelessScrollViewClient.h:

2009-10-27  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Adele Peterson.

        WAI-ARIA: add support for 'presentation' role
        https://bugs.webkit.org/show_bug.cgi?id=30806

        Test: accessibility/aria-presentational-role.html

        * accessibility/AccessibilityObject.h:
        (WebCore::):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::RoleEntry::):

2009-10-27  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        ARIA menu/menu item need AXRoleDescription
        https://bugs.webkit.org/show_bug.cgi?id=30804

        Make sure that role descriptions will default to the system's first, before
        returning an unknown role.

        Test: platform/mac/accessibility/aria-menu-role-descriptions.html

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper roleDescription]):

2009-10-27  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix: migrated away from API that no longer exists.

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

2009-10-27  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix: migrated away from API that no longer exists.

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

2009-10-27  Oliver Hunt  <oliver@apple.com>

        Fix wording in comment.

        * bridge/objc/objc_instance.mm:
        (allocateAutoReleasePool):

2009-10-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Crash occurs after launching Newsfire 1.6 for the first time
        https://bugs.webkit.org/show_bug.cgi?id=30807

        We allocate an autorelease pool but then store it off the stack. In a
        GC environment this led to it being collected, and thus caused badness
        to ensue.  To work around this we simply avoid using a pool at all in
        a GC environment as it would be a no-op anyway.

        * bridge/objc/objc_instance.mm:
        (allocateAutoReleasePool):
        (ObjcInstance::virtualBegin):

2009-10-27  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        When a Geolocation method is called, immediately calls the error calback asynchronously if permissions
        have already been denied.
        https://bugs.webkit.org/show_bug.cgi?id=27944.

        Tests: fast/dom/Geolocation/permission-denied-already-error.html
               fast/dom/Geolocation/permission-denied-already-success.html

        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::GeoNotifier::GeoNotifier): Modified. GeoNotifier takes Geolocation object as constructor argument.
        (WebCore::Geolocation::GeoNotifier::setFatalError): Added. Sets a fatal error for this notifier, causing it to terminate immediately and call the error callback asynchronously.
        (WebCore::Geolocation::GeoNotifier::timerFired): Added. Used to call the error callback asynchronously on fatal error.
        (WebCore::Geolocation::getCurrentPosition): Modified. Calls startRequest.
        (WebCore::Geolocation::watchPosition): Modified. Calls startRequest.
        (WebCore::Geolocation::startRequest): Added. Common functionality for starting a one-shot or watch request. Sets a fatal error on the notifier if permissions have already been denied.
        (WebCore::Geolocation::fatalErrorOccurred): Added. Registers that a notifier has encountered a fatal error and should be destroyed.
        (WebCore::Geolocation::setIsAllowed): Modified. Uses a standard error message for the error callback when permissions are denied.
        * page/Geolocation.h: Modified.
        (WebCore::Geolocation::isDenied): Added. Determines whether permissions have been denied.

2009-10-27  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Fixed a bug where I was using the wrong Canvas pointer to do a cross-domain check
        https://bugs.webkit.org/show_bug.cgi?id=30840

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

2009-10-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGStyledElement::getPresentationAttribute() can return a shared CSSValue (some SVG tests randomly fail on the bot, and in release builds)
        https://bugs.webkit.org/show_bug.cgi?id=29620

        SVG was modifying CSSValues cached of off CSSMappedAttributeDeclarations.
        This patch fixes the check to make sure that a new CSSMappedAttributeDeclaration is
        created before returning a CSSValue that JavaScript can modify.

        Test: svg/dom/getPresentationAttribute-cache-corruption.svg

        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute):

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

        Reviewed by Simon Fraser.

        Incomplete repaint of text field in relative positioned inline at imdb.com
        https://bugs.webkit.org/show_bug.cgi?id=30047

        Test: fast/repaint/inline-relative-positioned.html

        Implemented offsetFromContainer(), mapLocalToContainer() and
        mapAbsoluteToLocalPoint() in RenderInline.

        * rendering/RenderBox.h: Fixed argument names in the declaration of
        mapLocalToContainer().
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::offsetFromContainer):
        (WebCore::RenderInline::mapLocalToContainer):
        (WebCore::RenderInline::mapAbsoluteToLocalPoint):
        * rendering/RenderInline.h:

2009-10-27  Jeremy Orlow  <jorlow@chromium.org>

        Speculative build fix for Chromium.

        * platform/graphics/GraphicsContext3D.h:

2009-10-27  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.
        
        Make WebGL context failure more robust and make it succeed in more cases
        https://bugs.webkit.org/show_bug.cgi?id=30349

        Bubble a failure to get a CGLContext up to HTMLContextElement so it can
        return null from getContext. Also added a more robust pixel format choosing 
        mechanism and can render correctly when a SW renderer is chosen.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * html/canvas/CanvasRenderingContext.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasRenderingContext3D.cpp:
        * html/canvas/CanvasRenderingContext3D.h:
        (WebCore::CanvasRenderingContext3D::graphicsContext3D):
        (WebCore::CanvasRenderingContext3D::cleanupAfterGraphicsCall):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/Canvas3DLayer.mm:
        (-[Canvas3DLayer copyCGLPixelFormatForDisplayMask:]):
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::setPixelFormat):
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::ensureContext):

2009-10-27  Geoffrey Garen  <ggaren@apple.com>

        Mac build fix: a forwarding header.

        * ForwardingHeaders/wtf/DateInstanceCache.h: Added.

2009-10-27  Ryosuke Niwa  <rniwa@webkit.org>

        No Review.

        Making fontWeightIsBold static to fix Snow Leopard build.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::fontWeightIsBold):

2009-10-27  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        WebKit cannot remove nested bold tags
        https://bugs.webkit.org/show_bug.cgi?id=30784

        This patch modifies getPropertiesNotInComputedStyle so that it compares font-weight
        more flexibly. Instead of comparing cssText, it uses fontWeightIsBold which converts
        all font weights to either bold or unbold state.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::fontWeightIsBold):
        (WebCore::getPropertiesNotInComputedStyle): Removes font-weight property
        if two style have the same value under getFontWeightValue

2009-10-27  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Darin Adler.

        Give an ability to WebKit to free statically allocated pointers
        before quit.
        https://bugs.webkit.org/show_bug.cgi?id=27980

        No new tests for this as the change does not affect WebKit
        functionality, but only memory usage.

        * JavaScriptCore/wtf/StdLibExtras.h:
        Allowed for the override of DEFINE_STATIC_LOCAL via compiler 
        commandline options or elsewhere in the code. Useful for 
        implementing custom builds that free resources allocated via
        DEFINE_STATIC_LOCAL.

2009-10-27  Dumitru Daniliuc  <dumi@chromium.org>

        Build fix, no review needed.

        Fixing the BUILD. m_estimatedSize in Database.h should be of type
        'unsigned long' instead of 'unsigned long long'.

        No tests required.

        * storage/Database.h:

2009-10-27  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Refactoring the Database class to not depend on
        OriginQuotaManager. Also, adding a SecurityOrigin copy to each
        Database instance, that is safe to use on the file
        thread. Finally, adding new simple fields and getters to the
        Database object for storing/getting the display name and estimated
        size specified by the user in the openDatabase() call.

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

        * page/SecurityOrigin.h:
        * storage/Database.cpp:
        (WebCore::Database::openDatabase): Storing the display name and
        the estimated size in the Database object.
        (WebCore::Database::Database): Storing the display name and the
        estimated size in the Database object, as well as a SecurityOrigin
        instance that is safe to use on the DB thread.
        (WebCore::Database::maximumSize): Delegate the call to
        DatabaseTracker::getMaxSizeForDatabase().
        (WebCore::Database::databaseThreadSecurityOrigin): Return the
        SecurityOrigin instance that's safe to use on the DB thread.
        (WebCore::Database::threadSafeSecurityOrigin): Return the
        SecurityOrigin instance that's safe to use on the current thread.
        (WebCore::Database::displayName): Return the display name
        specified by the user in the openDatabase() call.
        (WebCore::Database::estimatedSize): Return the estimated size
        specified by the user in the openDatabase() call.
        (WebCore::Database::fileName): Return the name of the file where
        the current Database is tored.
        * storage/Database.h:
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::getMaxSizeForDatabase): Returns the
        maximum size for a DB file based on the current size of that file
        and the space available for that origin.
        * storage/DatabaseTracker.h:
        * storage/SQLTransaction.cpp:
        * storage/SQLTransactionClient.cpp:
        (WebCore::SQLTransactionClient::didCommitTransaction): Use the
        correct SecurityOrigin instance.

2009-10-27  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Pretty Print all HTML Collection Types like we do for NodeList
        https://bugs.webkit.org/show_bug.cgi?id=30709

        Test: inspector/console-format-collections.html

        * inspector/front-end/InjectedScript.js:
        (Object.type): check for instances of HTMLCollection like we do for NodeList
        * inspector/front-end/inspector.js: added WebInspector.pendingDispatches counter
        (WebInspector.dispatch): increment and decrement dispatch counter
        (WebInspector.runAfterPendingDispatches): run when there are no more dispatches

2009-10-27  Kelly Norton  <knorton@google.com>

        Reviewed by Timothy Hatcher.

        Adds XMLHttpRequest support to InspectorTimelineAgent.
        https://bugs.webkit.org/show_bug.cgi?id=30578

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willChangeXHRReadyState):
        (WebCore::InspectorTimelineAgent::didChangeXHRReadyState):
        (WebCore::InspectorTimelineAgent::willLoadXHR):
        (WebCore::InspectorTimelineAgent::didLoadXHR):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createXHRReadyStateChangeTimelineRecord):
        (WebCore::TimelineRecordFactory::createXHRLoadTimelineRecord):
        * inspector/TimelineRecordFactory.h:
        * inspector/front-end/TimelineAgent.js:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):

2009-10-27  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION (Safari 4.0.3-ToT): After pressing Shift-PageDown, pressing Shift-Up 
        extends the top of the selection upwards (but should shrink the selection instead)
        <rdar://problem/7269075>
        https://bugs.webkit.org/show_bug.cgi?id=29981

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modify): Added setting m_lastChangeWasHorizontalExtension.

2009-10-27  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by Tim Hatcher.
        
        Removed an extra console.log from ElementsTreeOutline.

        * inspector/front-end/ElementsTreeOutline.js:

2009-10-27  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Rewrote JavaScriptSourceSyntaxHighlighter to be more accurate
        https://bugs.webkit.org/show_bug.cgi?id=27147

        Tests: LayoutTests/inspector/javascript-syntax-highlight.html

        * inspector/front-end/ElementsTreeOutline.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.JavaScriptSourceSyntaxHighlighter.process): Added. Processes 100 tokens at a time.
        (WebInspector.JavaScriptSourceSyntaxHighlighter.lex): Added. Scans for a token.
        (WebInspector.JavaScriptSourceSyntaxHighlighter.appendNonToken): Added. Appends the non-token characters that lex ignored.
        (WebInspector.JavaScriptSourceSyntaxHighlighter.syntaxHighlightNode): Added. To syntax highlight node in ElementsTreeOutline.

2009-10-27  Mads Ager  <ager@chromium.org>

        Reviewed by Adam Barth.

        [V8] Missing null check after string conversion in error reporting
        https://bugs.webkit.org/show_bug.cgi?id=30774

        Add null check after string conversion in error reporting code.
        ToString conversion can fail for instance when an exception is
        thrown during conversion.

        Test: fast/dom/error-to-string-stack-overflow.html

        * bindings/v8/V8Utilities.cpp:
        (WebCore::reportException):

2009-10-27  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Use a pair of maps to store Geolocation watchers.
        https://bugs.webkit.org/show_bug.cgi?id=29178

        The pair of maps allows us to look up a watcher either by its ID or by its GeoNotifier object.
        The ability to look up by a watcher by its GeoNotifier object will be required when implementing
        Geolocation::fatalErrorOccurred. See https://bugs.webkit.org/show_bug.cgi?id=27944

        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::Watchers::set): Added. Adds a watcher with the given ID.
        (WebCore::Geolocation::Watchers::remove): Added. Removes a watcher by ID.
        (WebCore::Geolocation::Watchers::remove): Added. Removes a watcher by GeoNotifier object.
        (WebCore::Geolocation::Watchers::clear): Added. Removes all watchers.
        (WebCore::Geolocation::Watchers::isEmpty): Added. Determines if there are no watchers.
        (WebCore::Geolocation::Watchers::getNotifiersVector): Added. Gets a vector of the GeoNotifier objects.
        (WebCore::Geolocation::watchPosition): Modified. Rename watcher identifier static variable.
        (WebCore::Geolocation::stopTimersForWatchers): Modified. Use Watchers::getNotifiersVector.
        (WebCore::Geolocation::handleError): Modified. Use Watchers::getNotifiersVector.
        (WebCore::Geolocation::makeSuccessCallbacks): Modified. Use Watchers::getNotifiersVector.
        * page/Geolocation.h: Modified. Adds Geolocation::Watchers class.

2009-10-27  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] DOM Storage runtime flag should default to on
        https://bugs.webkit.org/show_bug.cgi?id=30828

        The DOM Storage runtime flag was supposed to default to on.  I accidentally
        changed the logic to default to false when I moved the flag.

        * bindings/v8/RuntimeEnabledFeatures.cpp:

2009-10-27  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix crash found in chromium test_shell.
        https://bugs.webkit.org/show_bug.cgi?id=30808

        When WebSocket is deleted without close, webkit would crash
        when it handles didClose.

        Check scriptExecutionContext before post task for event.
        Use WebSocketChannel::disconnect() instead of close() in WebSocket
        destructor, so that WebSocketChannel should not call deleted WebSocket
        back in didClose().
        To make sure WebSocketChannel alive while it is processing WebSocket
        protocol over SocketStreamHandle, ref() in connect() and deref() in
        didClose().

        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::~WebSocket):
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didReceiveMessage):
        (WebCore::WebSocket::didClose):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        (WebCore::WebSocketChannel::disconnect):
        (WebCore::WebSocketChannel::didClose):
        (WebCore::WebSocketChannel::didReceiveData):
        * websockets/WebSocketChannel.h:

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

        Reviewed by Darin Adler.

        Updated Apple license

        * LICENSE-APPLE:

2009-10-27  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Sam Weinig.

        Re-enable the check that disallows pages with unload handlers in the page cache.

        <rdar://problem/7196485> and http://webkit.org/b/29021 

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::logCanCacheFrameDecision):

2009-10-27  Timothy Hatcher  <timothy@apple.com>

        Remove more empty files that didn't get removed earlier.

        * inspector/DOMDispatchTimelineItem.cpp: Removed.
        * inspector/DOMDispatchTimelineItem.h: Removed.

2009-10-27  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Tor Arne Vestbø.

        [Qt] Fix assertion crashes introduced by changes made in r50110.

        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::parseEndElement): only call popCurrentNode() if there are nodes left in the stack.

2009-10-27  Timothy Hatcher  <timothy@apple.com>

        Remove empty files that didn't get removed earlier.

        * inspector/TimelineItem.cpp: Removed.
        * inspector/TimelineItem.h: Removed.

2009-10-27  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25534
        [GTK] Objects of ROLE_TABLE should implement the accessible table interface

        First part of the implementation of AtkTable.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getCell):
        (getCellIndex):
        (webkit_accessible_table_ref_at):
        (webkit_accessible_table_get_index_at):
        (webkit_accessible_table_get_n_columns):
        (webkit_accessible_table_get_n_rows):
        (webkit_accessible_table_get_column_extent_at):
        (webkit_accessible_table_get_row_extent_at):
        (webkit_accessible_table_get_row_header):
        (atk_table_interface_init):
        (AtkInterfacesInitFunctions):
        (GetAtkInterfaceTypeFromWAIType):

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

        Reviewed by Lars Knoll.

        [Qt] Don't lose remainder when computing wheel event deltas

        * platform/qt/WheelEventQt.cpp:

2009-10-27  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Antti Koivisto.

        Fix QtWebKit build for WIN_OS if Netscape plug-in support
        is turned off and refactor some related code
        https://bugs.webkit.org/show_bug.cgi?id=30786

        No new tests as there is no new functionality introduced.

        * platform/FileSystem.h: Refactor to make sure that each different
        type definition is only repeated once.

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::compareFileVersion): Move it out from the
        ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH guard and combine it with the
        function body from PluginPackageWin.

        * plugins/win/PluginPackageWin.cpp: Remove compareFileVersion as
        it is now in PluginPackage.cpp.

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

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=27011
        [Gtk] Implement support for get_index_in_parent

        Implement atk_object_get_index_in_parent.

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

2009-10-27  Eric Seidel  <eric@webkit.org>

        No review, rolling out r50131.
        http://trac.webkit.org/changeset/50131

        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::ObjcInstance):
        (ObjcInstance::virtualEnd):

2009-10-26  Daniel Bates  <dbates@webkit.org>

        Reviewed by Darin Adler.

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

        Fixes an issue where pressing return/enter on the keyboard 
        in <isindex> does not submit it if is not within a <form>.

        According to the HTML 2.0 thru HTML 4.01 spec 
        (http://www.w3.org/MarkUp/html-spec/html-spec_7.html#SEC7.5), the 
        <isindex> element does not need to be within a <form> element in 
        order to submit it. It can submitted on its own. Also, if present,
        the href property of the <base> element will dictate where to submit
        the value of the <isindex> element (this is analogous to the action 
        property of the <form> element).

        Tests: http/tests/misc/isindex-with-no-form-base-href.html
               http/tests/misc/isindex-with-no-form.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler): Calls createTemporaryFormForIsIndex()
        to create a <form> if none is present and we are an <isindex> element.
        (WebCore::HTMLInputElement::createTemporaryFormForIsIndex): Added.
        * html/HTMLInputElement.h:

2009-10-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Crash occurs after launching Newsfire 1.6 for the first time
        https://bugs.webkit.org/show_bug.cgi?id=30807

        Use a RetainPtr in ObjcBinding to ensure that we adequately
        protect the autorelease pool from GC in GC'd applications.

        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::ObjcInstance):
        (ObjcInstance::virtualEnd):

2009-10-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        [Qt] Build fix for QtWebKit after r50125.

        * WebCore.pro: Rename TimelineItem to TimelineRecord.

2009-10-26  Matt Mueller  <mattm@chromium.org>

        Reviewed by Darin Adler.

        Refactor synchronizable property handling to store one shouldSynchronize flag per set of properties rather than one per property.

        Fixes reading uninitialized memory in SynchronizableProperty hash function as well as simplifying the code.

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

        Covered by running various svg tests under valgrind, ex:
        LayoutTests/svg/custom/js-late-mask-and-object-creation.svg

        * svg/SynchronizablePropertyController.cpp:
        (WebCore::SynchronizableProperties::addProperty):
        (WebCore::SynchronizableProperties::synchronize):
        (WebCore::SynchronizableProperties::startAnimation):
        (WebCore::SynchronizableProperties::stopAnimation):
        (WebCore::SynchronizablePropertyController::registerProperty):
        (WebCore::SynchronizablePropertyController::setPropertyNeedsSynchronization):
        (WebCore::SynchronizablePropertyController::synchronizeProperty):
        (WebCore::SynchronizablePropertyController::synchronizeAllProperties):
        (WebCore::SynchronizablePropertyController::startAnimation):
        (WebCore::SynchronizablePropertyController::stopAnimation):
        * svg/SynchronizablePropertyController.h:
        (WebCore::SynchronizableProperties::SynchronizableProperties):
        (WebCore::SynchronizableProperties::setNeedsSynchronization):

2009-10-26  Kelly Norton  <knorton@google.com>

        Reviewed by Timothy Hatcher.

        Renames TimelineItem to TimelineRecord and updates all call sites.
        https://bugs.webkit.org/show_bug.cgi?id=30785

        * GNUmakefile.am: 
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addRecordToTimeline):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willDispatchDOMEvent):
        (WebCore::InspectorTimelineAgent::didDispatchDOMEvent):
        (WebCore::InspectorTimelineAgent::willLayout):
        (WebCore::InspectorTimelineAgent::didLayout):
        (WebCore::InspectorTimelineAgent::willRecalculateStyle):
        (WebCore::InspectorTimelineAgent::didRecalculateStyle):
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::didPaint):
        (WebCore::InspectorTimelineAgent::willWriteHTML):
        (WebCore::InspectorTimelineAgent::didWriteHTML):
        (WebCore::InspectorTimelineAgent::didInstallTimer):
        (WebCore::InspectorTimelineAgent::didRemoveTimer):
        (WebCore::InspectorTimelineAgent::willFireTimer):
        (WebCore::InspectorTimelineAgent::didFireTimer):
        (WebCore::InspectorTimelineAgent::reset):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        (WebCore::InspectorTimelineAgent::RecordEntry::RecordEntry):
        * inspector/TimelineItemFactory.cpp: Removed.
        * inspector/TimelineItemFactory.h: Removed.
        * inspector/TimelineRecordFactory.cpp: Added.
        (WebCore::TimelineRecordFactory::createGenericRecord):
        (WebCore::TimelineRecordFactory::createDOMDispatchRecord):
        (WebCore::TimelineRecordFactory::createGenericTimerRecord):
        (WebCore::TimelineRecordFactory::createTimerInstallRecord):
        * inspector/TimelineRecordFactory.h: Added.
        (WebCore::TimelineRecordFactory::TimelineRecordFactory):
        * inspector/front-end/TimelineAgent.js:
        (WebInspector.addRecordToTimeline):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.addRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype.getRecordTypeName):
        (WebInspector.TimelineRecordTreeElement.prototype.onattach):

2009-10-26  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Antti Koivisto.

        [Qt] Windowless Plugins : Print preview shows only part of flash when view is scrolled
        
        When printing, QPrinter's preview mode uses a QPicture to capture the output. The
        QPicture holds a reference to the X Pixmap. As a result, the print preview would
        update itself when the X Pixmap changes. To prevent the print preview from updating
        whenever m_drawable is updated (i.e when the view updates), we create a copy.
        
        We require that a QPixmap::copy() result in a QPixmap backed by a XPixmap
        regardless of the graphicssystem. This is taken care of by
        commit d310f7c710ecb331a9689861f0551eabd38e946e in Qt (4.6)
        
        The beauty of this patch is that the newly created X Pixmap is managed by Qt and
        it will free the Pixmap whenever the user closes the print preview dialog and
        handles the case of displaying multiple preview dialogs nicely.
        
        All credit to Samuel Rødal for suggesting usage of QPixmap::copy().
        
        https://bugs.webkit.org/show_bug.cgi?id=30714

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

2009-10-26  Benjamin Otte  <otte@gnome.org>

        Reviewed by Gustavo Noronha.

        Don't store properties in the MediaPlayerPrivate class

        Access them via the MediaPlayer class instead.
        https://bugs.webkit.org/show_bug.cgi?id=30462

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::setRate):
        (WebCore::MediaPlayerPrivate::setVisible):
        (WebCore::MediaPlayerPrivate::paint):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2009-10-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <http://webkit.org/b/30801>.
        Web Inspector: Control + ]/[ on Windows doesn't change Panels.
        
        In my testing, Windows uses "U+00DB" and "U+00DD" to represent
        [ and ], so we should honor those as well.

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

2009-10-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Make .rc files compile on Windows without depending on MFC headers
        https://bugs.webkit.org/show_bug.cgi?id=30750

        * WebCore.vcproj/QTMovieWin.rc: Use winresrc.h because it exists 
        even when MFC is not installed, and is all that's needed here.

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

        Reviewed by Darin Adler.

        Build corrections for ENABLE_FILTERS in Windows.
        https://bugs.webkit.org/show_bug.cgi?id=30797

        Build correction for ENABLE_FILTERS feature.  No new tests needed.

        * platform/graphics/filters/FEColorMatrix.cpp: Use MathExtras.h and
          its piDouble constant.
        * platform/graphics/filters/FEGaussianBlur.cpp: Use MathExtras.h and
          its piDouble constant.  Remove unnecessary call to floor used in
          the division of an unsigned, converting to int.
        * platform/graphics/win/SimpleFontDataCairoWin.cpp: Correct include
          style for MathExtras.h.

2009-10-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7289467> and http://webkit.org/b/30798 - REGRESSION (r48687): www.myuhc.com doesn't load.

        Test: fast/loader/grandparent-completion-starts-redirect.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::completed): Notify all descendants that the load completed, not just direct children.

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

        Reviewed by Beth Dakin.

        Re-add CSSPropertyWebkitBackgroundSize in one more place

        Fixes transitions/multiple-background-size-transitions.html, transitions/background-transitions.html

        * page/animation/AnimationBase.cpp:
        (WebCore::FillLayersPropertyWrapper::FillLayersPropertyWrapper):

2009-10-26  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Tidy up the DOM Storage runtime flag stuff
        https://bugs.webkit.org/show_bug.cgi?id=30794

        Clean up the DOM Storage runtime flag stuff to match the new way of doing
        things.  No behavioral changes.

        * bindings/v8/RuntimeEnabledFeatures.cpp:
        * bindings/v8/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setDatabaseEnabled):
        (WebCore::RuntimeEnabledFeatures::databaseEnabled):
        (WebCore::RuntimeEnabledFeatures::setLocalStorageEnabled):
        (WebCore::RuntimeEnabledFeatures::localStorageEnabled):
        (WebCore::RuntimeEnabledFeatures::setSessionStorageEnabled):
        (WebCore::RuntimeEnabledFeatures::sessionStorageEnabled):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * storage/Storage.cpp:
        * storage/Storage.h:

2009-10-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7308952> and http://webkit.org/b/30424 - REGRESSION (r48687): Pages on ucas.com appear blank.

        Test: fast/loader/history-forward-in-head.html

        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::scheduleHistoryNavigation): Restore the moved canGoBackOrForward() check.
          This restores the side effect of an invalid history navigation canceling previous scheduled redirects
          and also fixes the bug of scheduling an invalid history navigation canceling parsing of the current document.
        (WebCore::RedirectScheduler::timerFired): Removed the canGoBackOrForward() check as it is now made before
          the redirect is scheduled.

2009-10-26  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=30049
        <rdar://problem/7286002> Manipulating DOM from a script while parsing XHTML can cause a crash

        Tests: fast/parser/remove-current-node-parent-x-2.xhtml
               fast/parser/remove-current-node-parent-x.xhtml

        * dom/XMLTokenizer.h: Store the whole stack of parent nodes - element.parentNode() is
        unreliable after DOM manipulation.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::pushCurrentNode): Push the new node onto stack.
        (WebCore::XMLTokenizer::popCurrentNode): This is now called instead of setCurrentNode when
        exiting a node.
        (WebCore::XMLTokenizer::clearCurrentNodeStack): We're aborting; or just done parsing. This
        replaces setCurrentNode(0).
        (WebCore::XMLTokenizer::enterText): Call pushCurrentNode().
        (WebCore::XMLTokenizer::exitText): Call popCurrentNode(), removing a long-standing FIXME
        (not sure if it was ever practical though - how can a parent become null while adding text?)

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::~XMLTokenizer): Call clearCurrentNodeStack().
        (WebCore::XMLTokenizer::startElementNs): Call pushCurrentNode().
        (WebCore::XMLTokenizer::endElementNs): Call popCurrentNode() to safely get to a parent. Also
        added a check fo script element still being in document - Firefox parses those that aren't,
        but doesn't execute them.

        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::~XMLTokenizer):
        (WebCore::XMLTokenizer::parseStartElement):
        (WebCore::XMLTokenizer::parseEndElement):
        Match libxml2 version changes.

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

        Reviewed by Beth Dakin.

        background-size: X treated as background-size: X X, not background-size: X auto
        https://bugs.webkit.org/show_bug.cgi?id=28440

        Updated fast/backgrounds/size/resources/parsing-background-size-values.js
        and fast/backgrounds/size/resources/parsing-inherit.js

        Reinstated -webkit-background-size and kept its behavior of filling in
        the second value with the first one; and changed background-size to have
        the behavior of filling in the second value with 'auto'.

        * css/CSSComputedStyleDeclaration.cpp:
        (computedProperties): Re-added CSSPropertyWebkitBackgroundSize.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Ditto.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Ditto.
        (WebCore::CSSParser::parseFillSize): Adapted for the new parsing rule.
        (WebCore::CSSParser::parseFillProperty): Re-added
        CSSPropertyWebkitBackgroundSize.
        (WebCore::cssPropertyID): Removed mapping of -webkit-background-size to
        background-size.
        * css/CSSParser.h:
        * css/CSSPropertyNames.in: Re-added -webkit-background-size.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Re-added
        CSSPropertyWebkitBackgroundSize.

2009-10-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Use "%lli" to format "long long" on WIN_OS to fix HTML5 WebDB crash
        https://bugs.webkit.org/show_bug.cgi?id=30777

        No new tests as the crash can be reproduced by existing storage
        LayoutTests (by hitting an assert in debug mode Webkit on WIN_OS).

        * platform/text/String.cpp:
        (WebCore::String::number): Qt's QString::vsprintf does not
        understand the "%I64u" format string. Always use the "%lli"
        format string for Qt port.

2009-10-26  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        Roll back r50073 because r50041-50043 were reverted.  r50073 was
        a chromium side fix for r50041.
        https://bugs.webkit.org/show_bug.cgi?id=30789

        * bindings/v8/V8Collection.h:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::getItem):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::getItem):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:

2009-10-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Dimitri Glazkov.

        Fixed https://bugs.webkit.org/show_bug.cgi?id=30765
        REGRESSION (r48701): Removing an event listener causes the one added just after it not to fire
        
        and related bugs.

        If the event listener being removed is prior to the current firing event
        iterator, we need to decrement the current firing event iterator in
        addition to the endpoint. (Otherwise, shrinking the event listener vector
        by one implicity moves the current firing event iterator forward by one.
        It's like relativity, only without the planets.)
        
        Also took the opportunity to change some pointers to references, since
        they can't be null.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::removeEventListener):
        (WebCore::EventTarget::removeAllEventListeners): Update iterator in addition
        to end, if need be.
        (WebCore::EventTarget::fireEventListeners): Updated for interface changes.
        Added a comment to explain a behavior that was implicit enough to be
        confusing.

        * dom/EventTarget.h:
        (WebCore::FiringEventIterator::FiringEventIterator):
        (WebCore::EventTarget::isFiringEventListeners): Updated for interface changes.

2009-10-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <http://webkit.org/b/30792>.
        Web Inspector: When changing resource scope, resource graph can get in weird state.
        
        If the user was scrolled down while looking at All resources, and then just
        selects Fonts, or something that doesn't have many resources, then the graph
        will stay scrolled down, even when there is no content there.
        
        When the filter is updated, scroll to the top of the graph view, so this won't
        happen.

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype._updateFilter):

2009-10-26  Sam Weinig  <sam@webkit.org>

        Fix mac clean build.

        * html/HTMLOptionsCollection.idl:

2009-10-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Extract AbstractTimelinePanel that will be a base
        class for ResourcesPanel and TimelinePanel.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/AbstractTimelinePanel.js: Added.
        (WebInspector.AbstractTimelinePanel):
        (WebInspector.AbstractTimelinePanel.prototype.get categories):
        (WebInspector.AbstractTimelinePanel.prototype.showCategory):
        (WebInspector.AbstractTimelinePanel.prototype.hideCategory):
        (WebInspector.AbstractTimelinePanel.prototype.createTimelinePanels):
        (WebInspector.AbstractTimelinePanel.prototype._createFilterPanel.createFilterElement):
        (WebInspector.AbstractTimelinePanel.prototype._createFilterPanel):
        (WebInspector.AbstractTimelinePanel.prototype.filter):
        (WebInspector.AbstractTimelinePanel.prototype._updateFilter):
        (WebInspector.AbstractTimelinePanel.prototype._createGraph):
        (WebInspector.AbstractTimelinePanel.prototype.updateGraphDividersIfNeeded):
        (WebInspector.AbstractTimelinePanel.prototype._updateSummaryGraph):
        (WebInspector.AbstractTimelinePanel.prototype._updateDividersLabelBarPosition):
        (WebInspector.AbstractTimelinePanel.prototype.get needsRefresh):
        (WebInspector.AbstractTimelinePanel.prototype.set needsRefresh):
        (WebInspector.AbstractTimelinePanel.prototype.refreshIfNeeded):
        (WebInspector.AbstractTimelinePanel.prototype.show):
        (WebInspector.AbstractTimelinePanel.prototype.resize):
        (WebInspector.AbstractTimelinePanel.prototype.updateMainViewWidth):
        (WebInspector.TimelineCalculator):
        (WebInspector.TimelineCalculator.prototype.computeSummaryValues):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphLabels):
        (WebInspector.TimelineCalculator.prototype.get boundarySpan):
        (WebInspector.TimelineCalculator.prototype.updateBoundaries):
        (WebInspector.TimelineCalculator.prototype.reset):
        (WebInspector.TimelineCalculator.prototype._value):
        (WebInspector.TimelineCalculator.prototype.formatValue):
        * inspector/front-end/ResourceCategory.js:
        (WebInspector.ResourceCategory):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.toolbarItemClass.get toolbarItemLabel):
        (WebInspector.ResourcesPanel.prototype.get statusBarItems):
        (WebInspector.ResourcesPanel.prototype.get categories):
        (WebInspector.ResourcesPanel.prototype.showCategory):
        (WebInspector.ResourcesPanel.prototype.hideCategory):
        (WebInspector.ResourcesPanel.prototype.isCategoryVisible):
        (WebInspector.ResourcesPanel.prototype.populateSidebar):
        (WebInspector.ResourcesPanel.prototype.createPanelEnabler):
        (WebInspector.ResourcesPanel.prototype.createStatusbarButtons):
        (WebInspector.ResourcesPanel.prototype.set mainResourceLoadTime):
        (WebInspector.ResourcesPanel.prototype.set mainResourceDOMContentTime):
        (WebInspector.ResourcesPanel.prototype.show):
        (WebInspector.ResourcesPanel.prototype.resize):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype.updateGraphDividersIfNeeded):
        (WebInspector.ResourcesPanel.prototype.updateMainViewWidth):
        (WebInspector.ResourceTimeCalculator):
        (WebInspector.ResourceTransferSizeCalculator):
        (WebInspector.ResourceTransferSizeCalculator.prototype.computeBarGraphLabels):
        * inspector/front-end/SummaryBar.js:
        (WebInspector.SummaryBar.prototype.update):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):

2009-10-26  Avi Drissman  <avi@google.com>

        Reviewed by Darin Adler.

        Use Helvetica in the Inspector as intended.
        https://bugs.webkit.org/show_bug.cgi?id=30787

        * inspector/front-end/inspector.css:

2009-10-26  Nate Chapin  <japhet@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Don't set window.opener to 0 for the current FrameLoader if a noreferrer link was clicked, only suppress opener in a new frame.
        https://bugs.webkit.org/show_bug.cgi?id=30781

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected): Don't suppress opener in the current frame for noreferrer navigations.

2009-10-26  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Data loss occurs when unbolding nested bold tags.
        https://bugs.webkit.org/show_bug.cgi?id=30083

        Fixes the loop in swapInNodePreservingAttributesAndChildren by saving nextSibling() of child
        to a temporary valuable.  It was originally calling nextSibling() after appending the child
        to new parent, in which case, nextSibling is always 0.

        Test: editing/style/unbolding-nested-b.html

        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::swapInNodePreservingAttributesAndChildren):

2009-10-21  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Adler.

        Storage events should use Document::url() rather than documentURI()
        https://bugs.webkit.org/show_bug.cgi?id=30535

        Storage events should use Document::url() rather than Document::documentURI()
        per http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-October/023703.html

        Test: storage/domstorage/documentURI.html

        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatch):

2009-10-26  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Darin Adler.

        Rollout r50041-50043.  The HTML5 spec changed to make HTMLOptionsCollection
        inherit from HTMLCollection.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::nameGetter):
        (WebCore::JSHTMLAllCollection::item):
        (WebCore::JSHTMLAllCollection::namedItem):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::callHTMLCollection):
        (WebCore::JSHTMLCollection::nameGetter):
        (WebCore::JSHTMLCollection::item):
        (WebCore::JSHTMLCollection::namedItem):
        (WebCore::toJS):
        * bindings/js/JSHTMLCollectionFunctions.h: Removed.
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::length):
        (WebCore::JSHTMLOptionsCollection::indexSetter):
        * bindings/objc/DOMHTML.mm:
        (kitClass):
        * bindings/objc/DOMUtility.mm:
        (JSC::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * html/HTMLCollection.idl:
        * html/HTMLOptionsCollection.idl:

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

        Reviewed by Adam Roben.

        Build fix for ENABLE_FILTERS under Windows.
        https://bugs.webkit.org/show_bug.cgi?id=30762

        Build correction for ENABLE_FILTERS feature.  No new tests needed.

        * WebCore.vcproj/WebCore.vcproj:  Make the following changes:
          (1) Create a new 'filters' sub-folder of the platform/graphics 
              folder to properly show the sources held in this directory.
          (2) Move the files that are currently shown in svn/graphics/filters
              to platform/graphics/filters (where they actually live on disk).
          (3) Add the missing SVGFilter, SVGFilterBuilder, and SVGFETile to
              the project so they are built.
          (4) Remove SVGFEFloodElement.cpp from the build, since it is already
              being compiled by SVGAllInOne.cpp.  Its presence as a separate
              entity is causing a linker warning for duplicate symbols.
          (5) Add ImageBuffer.cpp to the build to support color space
              calculations for non-CG builds.
        * WebCore.vcproj/WebCoreCommon.vsprops: Add the platform/graphics/filters
          path to the search paths in the project.

2009-10-26  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        console.assert should prefix messages with "Assertion failed: "
        https://bugs.webkit.org/show_bug.cgi?id=19135

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype.toMessageElement): Append "Assertion failed: " for AssertMessageType.
        (WebInspector.ConsoleMessage.prototype.toString):
        * page/Console.cpp:
        (WebCore::Console::assertCondition): Use AssertMessageType.
        * page/Console.h:
        (WebCore::MessageType): Added AssertMessageType.

2009-10-26  Rahul Kuchhal  <kuchhal@chromium.org>

        Reviewed by Eric Seidel.

        Prevent crash when optgroup element is empty by adding a NULL check.

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

        Test: fast/forms/select-empty-optgroup.html

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

2009-10-21  Steven Knight  <sgk@chromium.org>

        Reviewed by David Levin.

        Refactor gyp for separate webcore_bindings{,_sources} targets.

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

        Handle long link lines by building .idl-generated bindings in a
        separate webcore_bindings library target.  Avoid Visual Studio
        dependency issues by building additional generated .cpp and .h files
        in a separate webcore_bindings_sources target.

        Chrome should still build and test successfully.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2009-10-26  Mike Belshe  <mike@belshe.com>

        Reviewed by Darin Fisher.

        Make the number of connections for chromium controlled by
        chromium rather than by ResourceRequestBase.
        https://bugs.webkit.org/show_bug.cgi?id=30661

        * platform/network/ResourceRequestBase.cpp:
        * platform/network/chromium/ResourceRequest.cpp:

2009-10-26  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. make distcheck build fixes.

        * GNUmakefile.am:

2009-10-26  Anton Muhin  <antonm@chromium.org>

        Reviewed by Dimitri Glazkov.

        Unbreak Chromium build: that requires adding custom implementations
        for HTMLOptionsCollection's item and namedItem.  Keep v8 binding
        close to JSC bindings as well.
        https://bugs.webkit.org/show_bug.cgi?id=30780

        * bindings/v8/V8Collection.h:
        (WebCore::getNamedItemsFromCollection):
        (WebCore::getItemFromCollection):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-10-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Barth and Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=30723
        <rdar://problem/6189415> Input names added to multipart/form-data headers need to be escaped.

        Test: http/tests/security/escape-form-data-field-names.html

        * platform/network/FormDataBuilder.cpp:
        (WebCore::appendQuotedString):
        (WebCore::FormDataBuilder::beginMultiPartHeader):
        (WebCore::FormDataBuilder::addFilenameToMultiPartHeader):
        Percent-escape line breaks and quotation marks.

2009-10-26  Kelly Norton  <knorton@google.com>

        Reviewed by Pavel Feldman.

        Adds DOMTimer support to InspectorTimelineAgent.
        https://bugs.webkit.org/show_bug.cgi?id=30467

        * inspector/InspectorTimelineAgent.cpp: Added timer support and fixed some method names.
        (WebCore::InspectorTimelineAgent::didDispatchDOMEvent):
        (WebCore::InspectorTimelineAgent::didLayout):
        (WebCore::InspectorTimelineAgent::didRecalculateStyle):
        (WebCore::InspectorTimelineAgent::didPaint):
        (WebCore::InspectorTimelineAgent::didWriteHTML):
        (WebCore::InspectorTimelineAgent::didInstallTimer): Added.
        (WebCore::InspectorTimelineAgent::didRemoveTimer): Added.
        (WebCore::InspectorTimelineAgent::willFireTimer): Added.
        (WebCore::InspectorTimelineAgent::didFireTimer): Added.
        (WebCore::InspectorTimelineAgent::addItemToTimeline): Added.
        (WebCore::InspectorTimelineAgent::didCompleteCurrentTimelineItem): Renamed.
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        * inspector/TimelineItemFactory.cpp: Add methods for timer-related ScriptObjects.
        (WebCore::TimelineItemFactory::createGenericTimerTimelineItem):
        (WebCore::TimelineItemFactory::createTimerInstallTimelineItem):
        * inspector/TimelineItemFactory.h:
        * page/DOMTimer.cpp: Added instrumentation points.
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::removeById):
        (WebCore::DOMTimer::fired):

2009-10-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6988966> Hardware layers do not show up in page snapshots

        Add a method that gets called when snapshotting Canvas3DLayers for page snapshots,
        that allows the layer to return a CGImageRef of its contents.
        
        * platform/graphics/mac/Canvas3DLayer.h:
        * platform/graphics/mac/Canvas3DLayer.mm:
        (-[Canvas3DLayer copyImageSnapshotWithColorSpace:]):

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

        Reviewed by Pavel Feldman.

        Pass "console" as object group when evaluating selection.

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

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._evalSelectionInCallFrame):

2009-10-26  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Pavel Feldman.

        Fix for Console not showing repeat count when repeatedly logging an Event
        https://bugs.webkit.org/show_bug.cgi?id=30324

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToConsole):
        (WebCore::ConsoleMessage::updateRepeatCountInConsole): Added.
        * inspector/ConsoleMessage.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addConsoleMessage): Calls updateRepeatCountInConsole if it is a repeating message.
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addConsoleMessage): Renamed WebCore::InspectorFrontend::addMessageToConsole
        (WebCore::InspectorFrontend::updateConsoleMessageRepeatCount): Added. Called when repeatCount is incremented.
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.addMessage): Removed calls to msg.isEqual.
        (WebInspector.ConsoleView.prototype.updateMessageRepeatCount): Added.
        (WebInspector.ConsoleView.prototype._incrementErrorWarningCount): Added. Updates the error/warning count.
        (WebInspector.ConsoleView.prototype.clearMessages):
        (WebInspector.ConsoleMessage):
        (WebInspector.ConsoleMessage.prototype.toMessageElement): Use ConsoleMessage._updateRepeatCount
        (WebInspector.ConsoleMessage.prototype._updateRepeatCount):
        * inspector/front-end/inspector.js:
        (WebInspector.addConsoleMessage): Renamed WebInspector.addMessageToConsole.
        (WebInspector.updateConsoleMessageRepeatCount): Added.

2009-10-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        crash with AX on when an image map contains an anchor tag
        https://bugs.webkit.org/show_bug.cgi?id=30739

        Tests: accessibility/crashing-a-tag-in-map.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addChildren):

2009-10-26  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        Adds feature ENABLE guards to V8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=30697

        This adds guards for the following features to the V8 bindings,
        to allow builds with V8 to succeed when these features are not enabled.
        - DATABASE
        - WORKERS
        - SHARED_WORKERS
        - SVG
        - XPATH
        - XSLT
        - INSPECTOR

        This is a build fix only, no new tests required.

        * bindings/v8/DOMObjectsInclude.h: Modified.
        * bindings/v8/DerivedSourcesAllInOne.cpp: Modified.
        * bindings/v8/V8Index.cpp: Modified.
        * bindings/v8/V8Index.h: Modified.

2009-10-26  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25679
        [Gtk] Improve accessibility of focusable lists

        Fixes the issues with the Atk states exposed for ListBoxOption

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

2009-10-26  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=27085
        [Gtk] Incorrect rendering of list

        Adds a way for platforms to indicate that a particular object
        should not be ignored.

        * accessibility/AccessibilityObject.h:
        * accessibility/chromium/AccessibilityObjectChromium.cpp:
        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        * accessibility/mac/AccessibilityObjectMac.mm:
        * accessibility/qt/AccessibilityObjectQt.cpp:
        * accessibility/win/AccessibilityObjectWin.cpp:
        * accessibility/wx/AccessibilityObjectWx.cpp:
        (AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (AccessibilityRenderObject::accessibilityIsIgnored):

2009-10-26  Kinuko Yasuda  <kinuko@google.com>

        Reviewed by Jan Alonzo.

        Bug 30619: [Linux] Menu key doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=30619

        Test: manual-tests/keyboard-menukey-event.html
        No new layout tests: testing this will require changes in the test
        controller in a platform-specific way.

        * platform/chromium/KeyCodeConversionGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent): changed switch-case code for
        GDK_Menu to return VKEY_APPS instead of VKEY_MENU.
        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent): changed switch-case code for
        GDK_Menu to return V_APPS instead of VK_MENU.

2009-10-25  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Reuse already fetched proxy.
        https://bugs.webkit.org/show_bug.cgi?id=30747

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertNewNodeToV8Object):

2009-10-25  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed build fix.

        Build fix for WIN_OS if Netscape plugin support is turned off
        https://bugs.webkit.org/show_bug.cgi?id=30753

        * plugins/PluginDatabase.cpp:

2009-10-25  Hironori Bono  <hbono@chromium.org>

        Reviewed by Darin Adler.

        A quick fix for Bug 29103.
        Since String::startsWith() cannot fold non-ASCII characters, this change folds the prefix string
        and the option string before calling String::startsWith().
        https://bugs.webkit.org/show_bug.cgi?id=29103

        Tests: fast/forms/listbox-typeahead-cyrillic.html
               fast/forms/listbox-typeahead-greek.html

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

2009-10-25  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Expanding a node in the Console should not show the element in Elements panel
        https://bugs.webkit.org/show_bug.cgi?id=30749

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.onmousedown): Check if inside disclosure triangle.

2009-10-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=30751
        HTMLOptionsCollection should not inherit from HTMLCollection

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added JSHTMLCollectionFunctions.h

        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::nameGetter):
        (WebCore::JSHTMLAllCollection::item):
        (WebCore::JSHTMLAllCollection::namedItem):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::callHTMLCollection):
        (WebCore::JSHTMLCollection::nameGetter):
        (WebCore::JSHTMLCollection::item):
        (WebCore::JSHTMLCollection::namedItem):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::callHTMLCollection):
        (WebCore::JSHTMLOptionsCollection::getCallData):
        (WebCore::JSHTMLOptionsCollection::canGetItemsForName):
        (WebCore::JSHTMLOptionsCollection::nameGetter):
        (WebCore::JSHTMLOptionsCollection::indexSetter):
        (WebCore::JSHTMLOptionsCollection::item):
        (WebCore::JSHTMLOptionsCollection::namedItem):
        Refactor to use generic implementation of HTMLCollection bindings functions
        from JSHTMLCollectionFunctions.h

        * bindings/js/JSHTMLCollectionFunctions.h: Added.
        (WebCore::getCollectionNamedItems):
        (WebCore::getCollectionItems):
        (WebCore::callHTMLCollectionGeneric):
        Added generic functions that JSHTMLCollection, JSHTMLAllCollection and
        JSHTMLOptionsCollection can all use.

        * bindings/js/JSHTMLDocumentCustom.cpp: Add include of JSHTMLAllCollection.h
        for toJS on document.all.

        * bindings/objc/DOMHTML.mm:
        * bindings/objc/DOMUtility.mm:
        (JSC::createDOMWrapper):
        Remove special cases for HTMLOptionsCollection.

        * bindings/scripts/CodeGeneratorJS.pm:
        * html/HTMLAllCollection.idl:
        * html/HTMLCollection.idl:
        * html/HTMLOptionsCollection.idl:

2009-10-24  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        WebInspector: Fixed issue with IME inside console
        https://bugs.webkit.org/show_bug.cgi?id=30660

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._promptKeyDown):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._promptKeyDown):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.searchKeyDown): Moved performSearch here from WebInspector.searchKeyUp.
        (WebInspector.startEditing.element.handleKeyEvent):
        (WebInspector.startEditing):
        * inspector/front-end/utilities.js:
        (isEnterKey): Added. Check if in IME.

2009-10-24  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30752>.
        Web Inspector: Multiple Selection on Scope Bars by default Conflicts with other behavior on OSX.
        
        Have the scope bars select one scope by default, but if the multiple selection key
        is pressed, allow for multiple selection.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView):
        (WebInspector.ConsoleView.prototype._updateFilter):
        (WebInspector.ConsoleView.prototype.filter):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.filter):
        (WebInspector.ResourcesPanel.prototype._updateFilter):

2009-10-24  Timothy Hatcher  <timothy@apple.com>

        Make the scope bars in the Web Inspector match other scope bars in Mac OS X.
        Also cleans up the CSS to use classes instead of ID selectors.

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

        Reviewed by Dan Bernstein.

        * inspector/front-end/ResourcesPanel.js: Add the scope-bar class.
        * inspector/front-end/inspector.css: Lots of changes to make it look right.
        * inspector/front-end/inspector.html: Add the scope-bar class.

2009-10-24  Timothy Hatcher  <timothy@apple.com>

        Fix selecting Resources in the Web Inspector's Resources panel.

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

        Reviewed by Pavel Feldman.

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.isCategoryVisible): Added.
        (WebInspector.ResourceSidebarTreeElement.prototype.get selectable): Call
        isCategoryVisible on the ResourcesPanel.

2009-10-24  Timothy Hatcher  <timothy@apple.com>

        Fix the Scope Bar in the Web Inspector's Resource panel, so that selecting
        All will deselect the other filters.

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

        Reviewed by Pavel Feldman.

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.createFilterElement): Better syntax.
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.filter): Use a normal for loop,
        and the child variable instead of target in the loop. Other clean up.

2009-10-24  Timothy Hatcher  <timothy@apple.com>

        Make resizing the Web Inspector's Elements panel sidebar work again.
        Also makes Resources panel use the sidebar code in Panel.

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

        Reviewed by Pavel Feldman.

        * inspector/front-end/Panel.js:
        (WebInspector.Panel): Don't create the sidebar with an argument.
        (WebInspector.Panel.prototype.show): Call updateSidebarWidth.
        (WebInspector.Panel.prototype.handleKeyEvent): Call handleSidebarKeyEvent.
        (WebInspector.Panel.prototype.handleSidebarKeyEvent): Added.
        (WebInspector.Panel.prototype.createSidebar): Renamed from _createSidebar.
        (WebInspector.Panel.prototype._sidebarDragging): Call updateSidebarWidth.
        (WebInspector.Panel.prototype.updateSidebarWidth): Renamed from _updateSidebarWidth.
        (WebInspector.Panel.prototype.setSidebarWidth): Added. Called by updateSidebarWidth.
        (WebInspector.Panel.prototype.updateMainViewWidth): Renamed from setMainViewWidth.
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel): Call createSidebar.
        (WebInspector.ProfilesPanel.prototype.updateMainViewWidth): Renamed from setMainViewWidth.
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.show): Remove call to _updateSidebarWidth.
        (WebInspector.ResourcesPanel.prototype.showResource): Call updateSidebarWidth
        (WebInspector.ResourcesPanel.prototype.closeVisibleResource): Ditto.
        (WebInspector.ResourcesPanel.prototype.setSidebarWidth): Added.
        (WebInspector.ResourcesPanel.prototype.updateMainViewWidth): Added.
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel): Call createSidebar.
        (WebInspector.StoragePanel.prototype.updateMainViewWidth): Renamed from setMainViewWidth.
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel): Call createSidebar.
        (WebInspector.TimelinePanel.prototype.updateMainViewWidth): Renamed from setMainViewWidth.

2009-10-24  Timothy Hatcher  <timothy@apple.com>

        Call updateSelection() in a few places so hovering in the Web Inspector's
        Elements panel always has the correct row selection height.

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

        Reviewed by Pavel Feldman.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.toggleNewAttributeButton): Call updateSelection().
        (WebInspector.ElementsTreeElement.prototype._insertInLastAttributePosition): Ditto.
        * inspector/front-end/inspector.css: Prevent text wrapping in the middle of the add attribute text.

2009-10-24  Timothy Hatcher  <timothy@apple.com>

        Remove the re-root tree feature from the Web Inspector's
        Elements panel. This feature wasn't super useful and gets
        in the way of double-click to edit.

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

        Reviewed by Pavel Feldman.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.ondblclick):

2009-10-24  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Implements ReturnsNew hint for V8 bindings generation code.
        https://bugs.webkit.org/show_bug.cgi?id=30745

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::convertNewNodeToV8Object):

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

        Reviewed by Sam Weinig.

        Missing images at 350.org due to wrong URLs
        https://bugs.webkit.org/show_bug.cgi?id=30748

        Test: fast/dom/HTMLImageElement/parse-src.html

        * dom/Element.cpp:
        (WebCore::Element::getURLAttribute): Pass the attribute value through deprecateParseURL().
        This matches what the Objective-C bindings do, as well as what HTMLImageLoader::sourceURI()
        and SVGImageLoader::sourceURI() do.

2009-10-24  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        [Qt] Build fix for QtWebKit after r50013.

        * WebCore.pro:

2009-10-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [V8] Fix up to accommodate for HTMLAllCollection changes in
        http://trac.webkit.org/changeset/49998.

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:

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

        Reviewed by Alexey Proskuryakov.

        <rdar://problem/7294131> Assertion failure in AuthenticationMac at
        mac(const Credential&) after authenticating to MobileMe Gallery movie

        * platform/network/Credential.cpp:
        (WebCore::Credential::Credential): Initialize m_persistence.
        (WebCore::Credential::isEmpty): Made this method const.
        * platform/network/Credential.h:
        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::mac): Return nil if the Credential is empty.

2009-10-23  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30617>.
        Web Inspector: Resources Scope Bar Should Allow Combinations.
        
        Refactor the filtering in ResourcePanel to make it match ConsoleView,
        and add a divider between All, and the other choices of Resource types.

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.filter):
        (WebInspector.ResourcesPanel.prototype._updateFilter):
        * inspector/front-end/inspector.css:

2009-10-23  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Ignore the Refresh header if we're in view source mode.

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

        Test: http/tests/security/view-source-no-refresh.html

        * loader/FrameLoader.cpp: ignore Refresh in view-source mode.

2009-10-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=30734
        Remove XMLTokenizer::m_currentNodeIsReferenced

        No change in behavior, no tests.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::setCurrentNode):
        * dom/XMLTokenizer.h:
        Don't store a boolean for the current node being the document - we can always check for that.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        A fragment passed to XMLTokenizer is never null - in fact, the first thing we do is dereference
        it unconditionally, and then begin checking it for null, as if it could help.

2009-10-23  Beth Dakin  <bdakin@apple.com>

        No review since this is a build fix.

        Build fix for the Mac. (Build is only broken when SVG filters are 
        enabled.)

        Labelled these function static.
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::identity):
        (WebCore::table):
        (WebCore::discrete):
        (WebCore::linear):
        (WebCore::gamma):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::boxBlur):

2009-10-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Implement a Timeline panel.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/Images/timelineIcon.png: Added.
        * inspector/front-end/TimelineAgent.js:
        (WebInspector.addItemToTimeline):
        (WebInspector.timelineProfilerWasStarted):
        (WebInspector.timelineProfilerWasStopped):
        * inspector/front-end/TimelinePanel.js: Added.
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.toolbarItemClass.get toolbarItemLabel):
        (WebInspector.TimelinePanel.prototype.get statusBarItems):
        (WebInspector.TimelinePanel.prototype.handleKeyEvent):
        (WebInspector.TimelinePanel.prototype.timelineWasStarted):
        (WebInspector.TimelinePanel.prototype.timelineWasStopped):
        (WebInspector.TimelinePanel.prototype.addItemToTimeline):
        (WebInspector.TimelinePanel.prototype._innerAddItemToTimeline):
        (WebInspector.TimelinePanel.prototype._toggleTimelineButton):
        (WebInspector.TimelinePanel.prototype.setMainViewWidth):
        (WebInspector.TimelinePanel.prototype.getItemTypeName):
        (WebInspector.TimelineRecordTreeElement):
        (WebInspector.TimelineRecordTreeElement.prototype.onattach):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):

2009-10-23  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Clash Between Search's onkeyup and incremental search events
        https://bugs.webkit.org/show_bug.cgi?id=30731

        * inspector/front-end/inspector.js:
        (WebInspector.performSearch): prevent incremental search event from clobbering a forced search

2009-10-23  Kelly Norton  <knorton@google.com>

        Reviewed by Pavel Feldman.

        Removes the need for C++ Timeline types in InspectorTimelineAgent in favor
        of ScriptObjects.
        https://bugs.webkit.org/show_bug.cgi?id=30707

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/DOMDispatchTimelineItem.cpp: Removed.
        * inspector/DOMDispatchTimelineItem.h: Removed.
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::willDispatchDOMEvent):
        (WebCore::InspectorTimelineAgent::didDispatchDOMEvent):
        (WebCore::InspectorTimelineAgent::willLayout):
        (WebCore::InspectorTimelineAgent::didLayout):
        (WebCore::InspectorTimelineAgent::willRecalculateStyle):
        (WebCore::InspectorTimelineAgent::didRecalculateStyle):
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::didPaint):
        (WebCore::InspectorTimelineAgent::willWriteHTML):
        (WebCore::InspectorTimelineAgent::didWriteHTML):
        (WebCore::InspectorTimelineAgent::reset):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        (WebCore::InspectorTimelineAgent::pushCurrentTimelineItem):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::TimelineItemEntry::TimelineItemEntry):
        * inspector/TimelineItem.cpp: Removed.
        * inspector/TimelineItem.h: Removed.
        * inspector/TimelineItemFactory.cpp: Added.
        (WebCore::TimelineItemFactory::createGenericTimelineItem):
        (WebCore::TimelineItemFactory::createDOMDispatchTimelineItem):
        * inspector/TimelineItemFactory.h: Added.
        (WebCore::):
        (WebCore::TimelineItemFactory::TimelineItemFactory):

2009-10-23  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=30729
        Provide private API to request the global context for a specific world.
        Used to initialize parameters on the global object.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::globalObject):
        * bindings/js/ScriptController.h:

2009-10-23  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        Fixes style problems in Android-specific files.
        https://bugs.webkit.org/show_bug.cgi?id=30717

        Style changes only, no new tests possible.

        * page/android/EventHandlerAndroid.cpp: Modified.
        (WebCore::EventHandler::passMouseDownEventToWidget): Fixes whitespace in method signature.
        (WebCore::EventHandler::passSubframeEventToSubframe): Fixes whitespace in method signature.
        (WebCore::EventHandler::passWheelEventToWidget): Fixes whitespace in method signature.
        (WebCore::EventHandler::passMouseMoveEventToSubframe): Fixes whitespace in method signature.
        * platform/android/ClipboardAndroid.h: Modified. Fixes header include order and indenting.
        * platform/android/CursorAndroid.cpp: Modified. 
        (WebCore::grabCursor): Fixes function braces.
        (WebCore::grabbingCursor): Fixes function braces.
        * platform/android/FileChooserAndroid.cpp: Modified.
        (WebCore::FileChooser::basenameForWidth): Fixes braces on while statement, and updates String::copy to String::threadsafeCopy.
        * platform/android/FileSystemAndroid.cpp: Modified. Fixes header include order.
        (WebCore::unloadModule): Fixes zero test.
        (WebCore::writeToFile): Fixes if statement structure.
        * platform/android/KeyEventAndroid.cpp: Modified.
        (WebCore::windowsKeyCodeForKeyEvent): Fixes switch statement indenting.
        (WebCore::keyIdentifierForAndroidKeyCode): Fixes switch statement indenting.
        * platform/android/ScreenAndroid.cpp: Modified. Fixes header include order and switch statement indenting.
        * platform/android/TemporaryLinkStubs.cpp: Modified. Fixes header include order.

2009-10-23  Sam Weinig  <sam@webkit.org>

        Another shot at a fixed build.

        * DerivedSources.cpp:

2009-10-23  Sam Weinig  <sam@webkit.org>

        Another shot at a fixed build.

        * html/HTMLOptionsCollection.idl:

2009-10-23  Brady Eidson  <beidson@apple.com>

        50,000!

        * ChangeLog: Point out revision 50,000.

2009-10-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=30695
        Drop .tags() support from HTMLCollection

        - Make .tags() only work for HTMLAllCollections in JS. .tags() is still
          available for all HTMLCollection like objects in Objective-C since that
          is API.
        - Auto-generate HTMLAllCollection.

        Test: fast/dom/HTMLDocument/document-all.html

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLAllCollection.cpp: Removed.
        * bindings/js/JSHTMLAllCollection.h: Removed.
        * bindings/js/JSHTMLAllCollectionCustom.cpp: Added.
        (WebCore::getNamedItems):
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::getCallData):
        (WebCore::JSHTMLAllCollection::canGetItemsForName):
        (WebCore::JSHTMLAllCollection::nameGetter):
        (WebCore::JSHTMLAllCollection::item):
        (WebCore::JSHTMLAllCollection::namedItem):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Document.cpp:
        (WebCore::Document::all):
        * dom/Document.h:
        * dom/HTMLAllCollection.idl: Removed.
        * html/HTMLAllCollection.cpp: Added.
        (WebCore::HTMLAllCollection::create):
        (WebCore::HTMLAllCollection::HTMLAllCollection):
        (WebCore::HTMLAllCollection::~HTMLAllCollection):
        * html/HTMLAllCollection.h: Added.
        * html/HTMLAllCollection.idl: Added.
        * html/HTMLCollection.h:
        * html/HTMLCollection.idl:
        * html/HTMLDocument.idl:
        * page/DOMWindow.idl:

2009-10-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: pull basic sidebar implementation into the Panel.

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

        * inspector/front-end/Panel.js:
        (WebInspector.Panel):
        (WebInspector.Panel.prototype.jumpToPreviousSearchResult):
        (WebInspector.Panel.prototype.handleKeyEvent):
        (WebInspector.Panel.prototype._createSidebar):
        (WebInspector.Panel.prototype._startSidebarDragging):
        (WebInspector.Panel.prototype._sidebarDragging):
        (WebInspector.Panel.prototype._endSidebarDragging):
        (WebInspector.Panel.prototype._updateSidebarWidth):
        (WebInspector.Panel.prototype.setCenterViewWidth):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.setCenterViewWidth):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.setCenterViewWidth):

2009-10-23  Jens Alfke  <snej@chromium.org>

        Reviewed by Dimitri Glazkov.

        Slight optimizations to object returning and exception handling in generated V8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=30599

        * bindings/scripts/CodeGeneratorV8.pm: Generate better code
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::convertToV8Object): Added overload that takes a Ref<>
        * bindings/v8/custom/V8InspectorBackendCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Remove unnecessary template param to prevent compile error

2009-10-23  Alpha Lam  <hclam@chromium.org>

        Reviewed by Eric Carlson.

        Volume slider always starts at half volume
        https://bugs.webkit.org/show_bug.cgi?id=28322

        Sets the value attribute of volume slider to the volume attribute
        of the media element. Also update the value attribute of the
        input element for the volume slider when the volume attribute
        of the media element is updated.

        Test: media/video-volume-slider.html

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlVolumeSliderElement::update):
        Set the value attribute of the input element for the volume slider
        using the current volume of the media element.
        * rendering/MediaControlElements.h:
        Add method definition of update().
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::createVolumeSlider):
        Creates a volume slider with value attribute equals to the current
        volume attribute of the media element.

2009-10-23  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel.

        Chrome Linux: fix caret positioning in LTR complex languages
        The caret is positioned off by one in languages like Thai.

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

        A group of us spent a while trying various approaches to write a test
        for this; however, since it is only that the blinking cursor is
        displayed incorrectly, we concluded it can not be tested.

        (Patch by Hironori Bono.)

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::selectionRectForComplexText):

2009-10-23  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        Fix Chromium build after IsoldatedWorld change (r49963).
        https://bugs.webkit.org/show_bug.cgi?id=30719

        * bindings/ScriptControllerBase.cpp:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeScriptInIsolatedWorld):
        * bindings/v8/ScriptController.cpp:
        (WebCore::mainThreadNormalWorld):
        * bindings/v8/ScriptController.h:
        (WebCore::ScriptController::windowShell):
        (WebCore::ScriptController::existingWindowShell):
        * dom/Document.cpp:
        (WebCore::Document::createWrapperCache):
        * dom/ScriptExecutionContext.cpp:
        * dom/ScriptExecutionContext.h:
        * xml/XMLHttpRequest.cpp:
        * xml/XMLHttpRequest.h:

2009-10-23  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Sam Weinig.

        Fix caretRangeFromPoint()/elementFromPoint() returns wrong result 
        for a zoomed and scrolled page.
        https://bugs.webkit.org/show_bug.cgi?id=30689.

        The real cause is the wrong calculation of event.clientX/Y when
        page is zoomed and scolled.
        After Sam fixed the event.clientX/Y in r49551, the hit test point
        should be recalculated (revert r49490).

        Test: fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-zoom-and-scroll.html

        * dom/Document.cpp:
        (WebCore::Document::elementFromPoint): calculate the correct point
        relative to document when page is zoomed and scrolled.
        (WebCore::Document::caretRangeFromPoint): calculate the correct point
        relative to document when page is zoomed and scrolled.

2009-10-22  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dmitry Titov.

        Adding a class that allows us to enable/disable features at
        runtime. Adding a flag to enable database support.

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

        * WebCore.gypi:
        * bindings/v8/RuntimeEnabledFeatures.cpp: Added.
        * bindings/v8/RuntimeEnabledFeatures.h: Added.
        (WebCore::RuntimeEnabledFeatures::setDatabaseEnabled):
        (WebCore::RuntimeEnabledFeatures::databaseEnabled):
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * page/DOMWindow.idl:

2009-10-23  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector injects _inspectorCommandLineAPI into global object when opened
        https://bugs.webkit.org/show_bug.cgi?id=30675

        * inspector/front-end/InjectedScript.js:
        (InjectedScript.getCompletions):
        (InjectedScript._evaluateOn):
        (InjectedScript.addInspectedNode):
        (InjectedScript._ensureCommandLineAPIInstalled): Moved _inspectorCommandLineAPI from window to console.

2009-10-23  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] don't undef NULL in Symbian emulator

        npapi.h way of defining mwerks compiler,__intel__
        and win32 are all true for Symbian emulator.
        Changed the definions so that NULL won't be undefined
        when compiling for Symbian emulator nor target HW.

        * bridge/npapi.h:

2009-10-23  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Correct linking of sqlite3 for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=30569

        ".lib" will try to include library as static library
        causing the library to be searched from wrong directory and if found
        will be statically linked instead of the inteded dynamic linking.

        * WebCore.pro:

2009-10-23  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION: Copy is copying incorrect background-color
        <rdar://problem/7248529>
        https://bugs.webkit.org/show_bug.cgi?id=29697

        Test: editing/execCommand/indent-paragraphs.html

        This change removes the BackgroundColor from the list 
        of inheritable CSS properties and changes significantly
        the way we perform indentation.
        The new implementation of IndentOutdentCommand uses a new method
        defined in CompositeEditCommand called moveParagraphWithClones.
        This is an improved version of the original moveParagraph that
        is aimed at preserving the original markup of the paragraph being
        moved.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::): removed CSSPropertyBackgroundColor from editingStyleProperties.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::CompositeEditCommand): Removed trailing blanks.
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt): Removed trailing blanks.
        (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement): Added.
        (WebCore::CompositeEditCommand::cleanupAfterDeletion): Added.
        (WebCore::CompositeEditCommand::moveParagraphWithClones): Added.
        (WebCore::CompositeEditCommand::moveParagraphs): Modified to use cleanupAfterDeletion.
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem): Removed trailing blanks.
        (WebCore::CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph): Removed trailing blanks.
        (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary): Removed trailing blanks.
        * editing/CompositeEditCommand.h: Added three new methods.
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem): Changed to use moveParagraphWithClones.
        (WebCore::IndentOutdentCommand::indentIntoBlockquote): Changed to use moveParagraphWithClones.
        (WebCore::IndentOutdentCommand::indentRegion): Removed comment.
        * editing/IndentOutdentCommand.h: Removed prepareBlockquoteLevelForInsertion method.

2009-10-23  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        Adds missing UnusedParam.h includes, required when INSPECTOR is not enabled.
        https://bugs.webkit.org/show_bug.cgi?id=30677

        Build fix, no new tests required.

        * page/Console.cpp: Modified. Added UnusedParam.h include.
        * workers/WorkerContext.cpp: Modified. Added UnusedParam.h include.

2009-10-23  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Holger Freyther.

        [Qt] Plugins : Use window's winId() instead of the widget's.

        As per, https://developer.mozilla.org/en/NPN_GetValue
        NPNVnetscapeWindow on Unix/X11: "Gets the browser toplevel window in which the
        plug-in is displayed; returns Window".

        The issue was found because NPNVNetscapeWindow winId() ends up creating
        a native window resulting in flicker.

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

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

2009-10-23  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Holger Freyther.

        [Qt] Windowless Plugins : Don't use m_clipRect when painting.

        Though it works, it is not correct to use m_clipRect for painting
        in Windowless mode. Instead, the rect paramater that is passed
        as a part of PluginView::paint() must be used. This change will
        also result in some speedup since previously we used to paint all
        the visible parts of a windowless plugin (even if those parts were
        not dirty).

        Also, fix invalidateRect() to compute the correct width and height.

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

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

2009-10-21  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Holger Freyther.

        Plugins : Use test.swf in the plugins manual tests.

        They previously referenced youtube videos which among other things are
        cumbersome to use without internet connection. The old youtube link is
        just commented out so that testing with youtube can be done with
        little effort.

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

        * manual-tests/plugins/test.swf: Copied from LayoutTests/fast/replaced/resources/test.swf.
        * manual-tests/plugins/windowed.html:
        * manual-tests/plugins/windowless.html:
        * manual-tests/qt/plugin-sibling-frame-include.html:

2009-10-23  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Jon Honeycutt.

        Fix the Windows Release build by moving Accessibility files
        into all-in-one file and excluding them from the build.

        * WebCore.vcproj/WebCore.vcproj:
        * accessibility/AccessibilityAllInOne.cpp: Added.

2009-10-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig & Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=30696
        Add support for IsolatedWorlds to JSC bindings.

        An IsolatedWorld is basically a parallel, separate copy of the window shells and DOM wrapper objects for
        a given document.  To support isolation this patch:

            * Adds support to the ScriptController to track multiple window shells, one per world.
            * Adds support to Document to support multiple separate wrapper-maps, one per world.
            * Replaces the single global DOM wrapper map (on the WebCoreJSClientData) with separate maps,
              stored on the (new) IsolatedWorld objects.

        In addition to supporting separate copies of these objects, two other features are supported:

            * It is necessary to track the current world on entry into JSC, so that within callbacks out to WebCore
              we can determine which world (and as such, set of DOM bindings) we should be operating on.
            * EventListeners & Callbacks are run in the world they were registered in.
              This requires the handler to retain a reference to the world.

        No new tests. (Enabled existing isolated world layout tests.)

        * WebCore.base.exp:
        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::addEventListener):
        (WebCore::JSAbstractWorker::removeEventListener):
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCallbackData.h:
        (WebCore::JSCallbackData::JSCallbackData):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::removeWrappers):
        (WebCore::DOMObjectWrapperMap::get):
        (WebCore::DOMObjectWrapperMap::set):
        (WebCore::DOMObjectWrapperMap::remove):
        (WebCore::DOMObjectWrapperMap::take):
        (WebCore::IsolatedWorld::IsolatedWorld):
        (WebCore::IsolatedWorld::~IsolatedWorld):
        (WebCore::EnterIsolatedWorld::EnterIsolatedWorld):
        (WebCore::EnterIsolatedWorld::~EnterIsolatedWorld):
        (WebCore::JSGlobalDataWorldIterator::JSGlobalDataWorldIterator):
        (WebCore::JSGlobalDataWorldIterator::operator bool):
        (WebCore::JSGlobalDataWorldIterator::operator*):
        (WebCore::JSGlobalDataWorldIterator::operator->):
        (WebCore::JSGlobalDataWorldIterator::operator++):
        (WebCore::getCurrentWorld):
        (WebCore::getNormalWorld):
        (WebCore::commonNormalWorld):
        (WebCore::commonCurrentWorld):
        (WebCore::DOMObjectHashTableMap::mapFor):
        (WebCore::DOMObjectWrapperMap::mapFor):
        (WebCore::forgetDOMObject):
        (WebCore::getCachedDOMNodeWrapper):
        (WebCore::forgetDOMNode):
        (WebCore::cacheDOMNodeWrapper):
        (WebCore::forgetAllDOMNodesForDocument):
        (WebCore::forgetWorldOfDOMNodesForDocument):
        (WebCore::isObservableThroughDOM):
        (WebCore::markDOMNodesForDocument):
        (WebCore::markActiveObjectsForContext):
        (WebCore::takeWrappers):
        (WebCore::updateDOMNodeDocument):
        (WebCore::markDOMObjectWrapper):
        (WebCore::allowsAccessFromFrame):
        (WebCore::printErrorMessageForFrame):
        (WebCore::JSC_DebuggerCallFrame_evaluateInWorld):
        (WebCore::JSC_callInWorld):
        (WebCore::JSC_constructInWorld):
        (WebCore::JSC_evaluateInWorld):
        * bindings/js/JSDOMBinding.h:
        (WebCore::IsolatedWorld::rememberDocument):
        (WebCore::IsolatedWorld::forgetDocument):
        (WebCore::IsolatedWorld::rememberScriptController):
        (WebCore::IsolatedWorld::forgetScriptController):
        (WebCore::DOMObjectHashTableMap::~DOMObjectHashTableMap):
        (WebCore::DOMObjectHashTableMap::get):
        (WebCore::WebCoreJSClientData::WebCoreJSClientData):
        (WebCore::WebCoreJSClientData::currentWorld):
        (WebCore::WebCoreJSClientData::normalWorld):
        (WebCore::WebCoreJSClientData::rememberWorld):
        (WebCore::WebCoreJSClientData::forgetWorld):
        (WebCore::debuggerWorld):
        (WebCore::pluginWorld):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::createJSAttributeEventListener):
        (WebCore::toJSDOMGlobalObject):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::printErrorMessage):
        (WebCore::JSDOMWindowBase::commonJSGlobalData):
        (WebCore::toJS):
        (WebCore::toJSDOMWindow):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::createWindow):
        (WebCore::JSDOMWindow::open):
        (WebCore::JSDOMWindow::showModalDialog):
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::toJS):
        (WebCore::toJSDOMWindowShell):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSDesktopNotificationsCustom.cpp:
        (WebCore::JSNotification::addEventListener):
        (WebCore::):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::handleEvent):
        (WebCore::JSEventListener::reportError):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::create):
        * bindings/js/JSEventSourceCustom.cpp:
        (WebCore::JSEventSource::addEventListener):
        (WebCore::JSEventSource::removeEventListener):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::open):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSInspectorBackendCustom.cpp:
        (WebCore::JSInspectorBackend::databaseForId):
        (WebCore::JSInspectorBackend::inspectedWindow):
        (WebCore::JSInspectorBackend::nodeForId):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/JSLazyEventListener.h:
        (WebCore::JSLazyEventListener::create):
        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::markChildren):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::markChildren):
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        (WebCore::JSNode::markChildren):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::construct):
        (WebCore::JSQuarantinedObjectWrapper::call):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::JSSharedWorker::markChildren):
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocket::addEventListener):
        (WebCore::JSWebSocket::removeEventListener):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        (WebCore::JSWorkerContext::setTimeout):
        (WebCore::JSWorkerContext::setInterval):
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::constructXMLHttpRequest):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::markChildren):
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::markChildren):
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::executeFunctionInContext):
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScheduledAction.h:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::~ScriptController):
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::evaluate):
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::initScript):
        (WebCore::ScriptController::processingUserGestureEvent):
        (WebCore::ScriptController::attachDebugger):
        (WebCore::ScriptController::updateDocument):
        (WebCore::ScriptController::bindingRootObject):
        (WebCore::ScriptController::createRootObject):
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::jsObjectForPluginElement):
        * bindings/js/ScriptController.h:
        (WebCore::ScriptController::windowShell):
        (WebCore::ScriptController::existingWindowShell):
        (WebCore::ScriptController::globalObject):
        (WebCore::ScriptController::forgetWorld):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::windowScriptObject):
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call):
        (WebCore::ScriptFunctionCall::construct):
        * bindings/js/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * bindings/js/ScriptState.cpp:
        (WebCore::scriptStateFromNode):
        (WebCore::scriptStateFromPage):
        * bindings/js/ScriptState.h:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):
        (WebCore::WorkerScriptController::evaluate):
        * bindings/objc/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_Construct):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        * dom/Document.cpp:
        (WebCore::Document::createWrapperCache):
        * dom/Document.h:
        (WebCore::Document::wrapperCacheMap):
        (WebCore::Document::getWrapperCache):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        * inspector/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::evaluate):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchWindowObjectAvailable):
        * platform/network/mac/AuthenticationMac.mm:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::dropProtection):
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::create):

2009-10-22  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: EventListenersSidebarPane TODO No Longer Needed
        https://bugs.webkit.org/show_bug.cgi?id=30705

        * inspector/front-end/EventListenersSidebarPane.js:

2009-10-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Tim Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=30506
        <rdar://problem/7319845> Resources that the server sent as 304 not modified are not shown
        in the inspectors resource pane

        I don't know how to make a test for this.

        The issue here was that preloaded resources weren't added to DocLoader document resource set,
        but Web Inspector asked DocLoader to fetch data from CachedResource. Even when (if) document
        parser eventually requested the same resource for real and it got added to resource set, it
        was too late - the Inspector wasn't updated.

        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::cachedResource):
        (WebCore::InspectorResource::type):
        (WebCore::InspectorResource::resourceData):
        * inspector/InspectorResource.h:
        Fix the issue by trying to fetch corresponding CachedResource harder - also look in global
        cache. This seems safe, and easier than updating the Inspector on transitions between
        resource states (revalidate vs. revalidate done and preload vs. non-preload).

2009-10-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/6942706> ER: Add a CSS property that allows 
        shadows to work for SVG content
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=30479

        This patch adds a new SVG-specific CSS property called -webkit-
        shadow that has the same syntax as -webkit-box-shadow

        Add CSSPropertyWebkitShadow to the list of SVG CSS properties, and 
        make valueForShadow a member function rather than a static function 
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::valueForShadow):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSComputedStyleDeclaration.h:

        Call valueForShadow for CSSPropertyWebkitShadow
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):

        Do standard CSS stuff for CSSPropertyWebkitShadow
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * css/SVGCSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):

        Set the appropriate shadow on the paint context if we have one. 
        This seems to be all we have to do to have an SVG-shaped shadow.
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):

        Add shadow to SVGRenderStyle. I added a new macro that I don't like 
        just because that's the way things are done here right now.
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::SVGRenderStyle):
        (WebCore::SVGRenderStyle::operator==):
        * rendering/style/SVGRenderStyle.h:
        * rendering/style/SVGRenderStyleDefs.cpp:
        (StyleShadowSVGData::StyleShadowSVGData):
        (StyleShadowSVGData::operator==):
        * rendering/style/SVGRenderStyleDefs.h:
        (WebCore::StyleShadowSVGData::create):
        (WebCore::StyleShadowSVGData::copy):
        (WebCore::StyleShadowSVGData::operator!=):

2009-10-22  Joanmarie Diggs  <joanmarie.diggs@gmail.com>
 
        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25530
        [Gtk] Implement LABEL_FOR/LABELLED_BY relationship pair for labels

        Implements atk_object_ref_relation_set and LABEL_FOR/LABELLED_BY.
        Also causes the accessible name for labeled controls to be based on
        the label as expected, rather than based on the contents.

        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (correspondingLabelForControlElement):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (setAtkRelationSetFromCoreObject):
        (webkit_accessible_ref_relation_set):
        (webkit_accessible_class_init):
        (webkit_accessible_get_name):

2009-10-22  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: windowFocused and windowBlured Fail to Clear/Mark Inspector as "inactive"
        https://bugs.webkit.org/show_bug.cgi?id=30663

          Correctly handle focusing/blurring on inner <iframe>'s such as Source Frames.

        * inspector/front-end/inspector.js:
        (WebInspector.windowFocused): fix for inner iframes
        (WebInspector.windowBlurred): fix for inner iframes
        (WebInspector.addMainEventListeners): change useCapture to false

2009-10-22  Jaime Yap  <jaimeyap@google.com>

        Reviewed by Timothy Hatcher.

        Makes a page reload optional when activating resource monitoring in
        InspectorController. It leaves the default behavior as performing the reload.
        Reload is an optional param so callsites do not have to change.

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

        No new tests added.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::enableResourceTracking):
        * inspector/InspectorController.h:

2009-10-22  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Fix memory leak in QNetworkReplyHandler::abort().
        In QNetworkReplyHandler::release(), m_reply should no longer point to its parent
        after being released.
        https://bugs.webkit.org/show_bug.cgi?id=30167

        No layout test available as a non-functional fix.

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

2009-10-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Fix DOMAgent leak.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::releaseDOMAgent):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):

2009-10-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        [V8] Rework event listeners to not hold references to frame or V8 context.

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

        Covered by existing layout tests: fast/events/attribute-listener*

        * bindings/scripts/CodeGeneratorV8.pm: Added passing ScriptExecutionContext*
            to event listener handling code.
        * bindings/v8/DateExtension.cpp:
        (WebCore::DateExtension::setAllowSleep): Changed to use currentContext().
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener): Reworked to match JSC logic.
        (WebCore::getEventListenerHandlerBody): Added ScriptExecutionContext* param.
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::V8AbstractEventListener): Removed Frame* param
            and usage.
        (WebCore::V8AbstractEventListener::handleEvent): Chaged to use ScriptExecutionContext*.
        (WebCore::V8AbstractEventListener::invokeEventHandler): Ditto.
        * bindings/v8/V8AbstractEventListener.h:
        (WebCore::V8AbstractEventListener::getListenerObject): Ditto.
        (WebCore::V8AbstractEventListener::prepareListenerObject): Ditto.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventListenerToV8Object):  Added ScriptExecutionContext* param.
        (WebCore::V8DOMWrapper::getEventListener): Ditto.
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::convertEventListenerToV8Object): Ditto.
        * bindings/v8/V8EventListenerList.h:
        (WebCore::V8EventListenerList::findOrCreateWrapper): Removed ContextType* template param,
            because it's no longer needed.
        * bindings/v8/V8IsolatedWorld.h:
        (WebCore::V8IsolatedWorld::sharedContext): Renamed from shared_context.
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener): Removed Frame* param and usage.
        (WebCore::V8LazyEventListener::callListenerFunction): Added ScriptExecutionContext* param.
        (WebCore::V8LazyEventListener::prepareListenerObject): Ditto.
        * bindings/v8/V8LazyEventListener.h:
        (WebCore::V8LazyEventListener::create): Reordered params to match JSC impl.
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::V8Proxy): Adjusted formatting to match WebKit style.
        (WebCore::V8Proxy::evaluateInNewContext): Changed to use m_context directly.
        (WebCore::V8Proxy::setInjectedScriptContextDebugId): Ditto.
        (WebCore::V8Proxy::createWrapperFromCacheSlowCase): Ditto.
        (WebCore::V8Proxy::isContextInitialized): Ditto.
        (WebCore::V8Proxy::updateDocumentWrapperCache): Ditto.
        (WebCore::V8Proxy::clearDocumentWrapperCache): Ditto.
        (WebCore::V8Proxy::disposeContextHandles): Added explicit disposing of m_context. 
        (WebCore::V8Proxy::clearForClose): Changed to use m_context directly.
        (WebCore::V8Proxy::clearForNavigation): Ditto.
        (WebCore::V8Proxy::setSecurityToken): Ditto.
        (WebCore::V8Proxy::updateDocument): Ditto.
        (WebCore::V8Proxy::initContextIfNeeded): Ditto.
        (WebCore::V8Proxy::context): Changed to use v8::Local.
        (WebCore::V8Proxy::mainWorldContext): Changed to use m_context directly. 
        (WebCore::V8Proxy::setContextDebugId): Ditto.
        (WebCore::toV8Context):
        * bindings/v8/V8Proxy.h: Removed shared_context decl, changed to use straight
            v8::Persistent for m_context.
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::workerProxy): Added.
        (WebCore::V8WorkerContextEventListener::V8WorkerContextEventListener): Removed
            WorkerContextExecutionProxy* param.
        (WebCore::V8WorkerContextEventListener::handleEvent): Started using ScriptExecutionContext*.
        (WebCore::V8WorkerContextEventListener::reportError): Ditto.
        (WebCore::V8WorkerContextEventListener::callListenerFunction): Ditto.
        (WebCore::V8WorkerContextEventListener::getReceiverObject): Ditto.
        * bindings/v8/V8WorkerContextEventListener.h:
        (WebCore::V8WorkerContextEventListener::create): Removed
            WorkerContextExecutionProxy* param.
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::findOrCreateEventListener): Removed ContextType*
            template param.
        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::V8EventListener): Removed Frame* param.
        (WebCore::V8EventListener::getListenerFunction): Started using ScriptExecutionContext*.
        (WebCore::V8EventListener::callListenerFunction): Ditto.
        * bindings/v8/custom/V8CustomEventListener.h:
        (WebCore::V8EventListener::create): Removed Frame* param.

2009-10-14  Gaurav Shah  <gauravsh@google.com>

        Reviewed by Darin Fisher.

        Replaces temporary link stub for <keygen> tag handler for the Chromium
        browser with a call via the Chromium Bridge.

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

        * platform/SSLKeyGenerator.h:
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/SSLKeyGeneratorChromium.cpp:
        (WebCore::getSupportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/chromium/TemporaryLinkStubs.cpp:
        (WebCore::KURL::fileSystemPath):
        (WebCore::SharedBuffer::createWithContentsOfFile):

2009-10-22  Avi Drissman  <avi@chromium.org>

        Reviewed by Eric Seidel.

        Fixes Chromium Mac pasteboard handling to flow through the same code paths as other platforms.

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

        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeImage):

2009-10-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Make accelerated compositing debug indicators work in release builds
        https://bugs.webkit.org/show_bug.cgi?id=30588
        
        Allow some debug indicators, that show which page elements go into compositing layers,
        to work in release builds, when the runtime prefs are set.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        (WebCore::GraphicsLayer::setZPosition):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/mac/GraphicsLayerCA.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::clearBorderColor):
        (WebCore::GraphicsLayer::showRepaintCounter):
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::updateMasksToBounds):
        (WebCore::GraphicsLayerCA::updateLayerDrawsContent):
        (WebCore::GraphicsLayerCA::setDebugBorder):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        (WebCore::GraphicsLayerCA::setupContentsLayer):
        * platform/graphics/mac/WebLayer.mm:

2009-10-22  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Pavel Feldman.

        Inspector should support monitorEvents/un monitorEvents() in the command line
        https://bugs.webkit.org/show_bug.cgi?id=19879

        * inspector/front-end/EventListenersSidebarPane.js:
        (WebInspector.EventListenersSidebarPane.prototype.update.callback): Ignores event listeners generated by monitorEvent
        * inspector/front-end/InjectedScript.js:
        (InjectedScript._ensureCommandLineAPIInstalled): Added _inspectorCommandLineAPI._logEvent, _allEventTypes, 
        _normalizeEventTypes, monitorEvent, unmonitorEvent.

2009-10-21  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: windowFocused and windowBlurred Fail to Clear/Mark Inspector as "inactive"
        https://bugs.webkit.org/show_bug.cgi?id=30663

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

2009-10-22  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Error - requestContentType [undefined] is not an object
        https://bugs.webkit.org/show_bug.cgi?id=30666

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._refreshFormData):

2009-10-22  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Holger Freyther.

        [Haiku] Correction of the accented letter width (they were 2 characters long).
        https://bugs.webkit.org/show_bug.cgi?id=30629

        * platform/graphics/haiku/SimpleFontDataHaiku.cpp:
        (WebCore::SimpleFontData::platformWidthForGlyph):

2009-10-21  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/7270320> Screenshots of off-screen plug-ins are blank
        <rdar://problem/7270314> After halting a transparent PluginView on
        Windows, the transparency is applied twice

        Replace use of Frame::nodeImage() with a function that takes a snapshot
        of a PluginView.

        Reviewed by Dan Bernstein.

        * plugins/PluginView.h:
        Made paintWindowedPluginIntoContext() non-const, as it now calls
        paintIntoTransformedContext(). Declare paintIntoTransformedContext()
        and snapshot() for Windows platforms.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::paintIntoTransformedContext):
        Paints into the passed HDC without applying any coordinate translations.
        Code moved from paintWindowedPluginIntoContext() and paint(). Removed
        the memset() of windowpos in lieu of assignment.
        (WebCore::PluginView::paintWindowedPluginIntoContext):
        Code moved to paintIntoTransformedContext().
        (WebCore::PluginView::paint):
        Ditto.
        (WebCore::PluginView::snapshot):
        Create a context, and if the plug-in is windowless, translate it so the
        plug-in will draw at the correct location. Create a bitmap, and select
        it into the context. Paint the plug-in, and create a BitmapImage from
        the bitmap.
        (WebCore::PluginView::halt):
        Use snapshot().

2009-10-22  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix calculation of length in WebSocketChannel.cpp
        https://bugs.webkit.org/show_bug.cgi?id=30656

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didReceiveData):

2009-10-21  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Adding the ability to enable/disable functions in V8 at runtime.

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

        * bindings/scripts/CodeGeneratorV8.pm:

2009-10-21  Darin Adler  <darin@apple.com>

        Swedish search (and other languages as well) is broken while fixing Japanese search
        https://bugs.webkit.org/show_bug.cgi?id=30646

        Rolled Japanese tailoring out that was done to fix
        https://bugs.webkit.org/show_bug.cgi?id=30437 earlier.
        It was overriding the locale-specific tailoring.
        We'll land a fix once we figure out how to add the
        Japanese tailoring without removing anything.

        * editing/TextIterator.cpp: Rolled out r49924.

2009-10-21  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: chromium build fix - add missing image to gypi.

        * WebCore.gypi:

2009-10-21  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Eric Seidel.

        Fixes part of <http://webkit.org/b/30522>.
        Web Inspector: DOM Exceptions throughout the Inspector should be more human readable.

        Expose the description attribute that is now a member of
        ExceptionBase as of r49723, so when a user logs an exception, they
        can see the description in the Web Inspector.

        Test: fast/dom/dom-exception-description.html

        * dom/DOMCoreException.idl:
        * dom/EventException.idl:
        * dom/RangeException.idl:
        * svg/SVGException.idl:
        * xml/XMLHttpRequestException.idl:
        * xml/XPathException.idl:

2009-10-21  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30616>.
        REGRESSION (r49036): Web Inspector: Summary graph no longer switching to size summary.
        
        Add a check to make sure a function we need to calculate percentages is
        defined before we use it.

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

2009-10-21  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        REGRESSION: Clicking on nodes in the console should take you to the element in the DOM
        https://bugs.webkit.org/show_bug.cgi?id=27231

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._formatnode): Turns on ElementsTreeOutline.showInElementsPanelEnabled
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline): Added ElementsTreeOutline.showInElementsPanelEnabled
        (WebInspector.ElementsTreeElement.prototype.onmousedown): Reveals the node in the Elements panel if 
        treeOutline.showInElementsPanelEnabled is true.

2009-10-21  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=30637
        Fix a compiler warning in windows.

        * loader/ResourceLoadNotifier.h:

2009-10-21  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        Fix the crash when a node not in a document receives dispatchEvent.
        https://bugs.webkit.org/show_bug.cgi?id=30611

        Test: fast/events/dispatch-event-no-document.html

        * dom/EventTarget.cpp: Check for scriptExecutionContext() at the moment of dispatchEvent; do nothing if no context.
        (WebCore::EventTarget::dispatchEvent):

2009-10-21  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Chromium Linux: disable subpixel text on layers.

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

        With the addition of layers for drawing rounded corners in r49641,
        subpixel text on rounded rectangles broke. This is because the layer
        only contains a single alpha channel and this is insufficient to
        compose subpixel text correctly.

        On Windows, a large body of code in TransparencyWin.cpp exists to try
        to deal with this. Even then, in some cases, it downgrades to
        anti-aliased text. We need a fix for the grevious effects quickly thus
        this patch disables subpixel text when rendering into a layer.

        This would be covered by existing tests except that subpixel text is
        disabled for pixel tests on Chromium Linux.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::isCanvasMultiLayered):
        (WebCore::adjustTextRenderMode):
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):

2009-10-21  Kevin Ollivier  <kevino@theolliviers.com>

        wxMac 10.4 build fix, make sure we specify the Sqlite3 dependency correctly as otherwise
        it will use the sqlite3 system library rather than WebCoreSQLite3.

        * wscript:

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

        Reviewed by Sam Weinig.

        Fixed background-clip parsing regressions introduced in r46240.

        Test: fast/css/background-clip-text.html

        * css/CSSParser.cpp:
        (WebCore::parseBackgroundClip): Added this helper method.
        (WebCore::CSSParser::parseFillShorthand): Use parseBackgroundClip() to
        reparse the value. The old code called parseFillProperty() again, which
        didn’t work, because parseFillProperty() advances the value list.
        (WebCore::CSSParser::parseFillProperty): Changed to use
        parseBackgroundClip().
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator EFillBox): Added a case for
        CSSValueWebkitText.

2009-10-21  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Enable creation of custom SidebarTreeElements for different ProfileTypes

        ProfileTypes can now create sidebar tree elements of custom types.
        https://bugs.webkit.org/show_bug.cgi?id=30520

        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileType.prototype.setRecordingProfile):
        (WebInspector.CPUProfileType.prototype.createSidebarTreeElementForProfile):
        (WebInspector.CPUProfileType.prototype.createView):
        (WebInspector.CPUProfile.prototype.get head):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileType.prototype.buttonClicked):
        (WebInspector.ProfileType.prototype.viewForProfile):
        (WebInspector.ProfileType.prototype.createView):
        (WebInspector.ProfileType.prototype.createSidebarTreeElementForProfile):
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        (WebInspector.ProfilesPanel.prototype.showProfile):

2009-10-20  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Selectors in the Styles pane should trigger a search for that selector when clicked
        https://bugs.webkit.org/show_bug.cgi?id=17126

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.addNodesToSearchResult): only change focusedDOMNode on a manual search
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype._clickSelector): trigger a search
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._startEditing): correctly start editing attribute value instead of name

2009-10-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Fix DOM Agent leak.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::~InspectorController):

2009-10-21  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Holger Freyther.

        Plugins: Create manual tests for testing plugins
        
        Create two test files:
        1. windowed.html - Test plugin in windowed mode.
        2. windowless.html - Test plugin in windowless mode.

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

        * manual-tests/plugins/windowed.html: Added.
        * manual-tests/plugins/windowless.html: Added.

2009-10-21  Satoshi Nakagawa  <psychs@limechat.net>

        Reviewed by Darin Adler.

        Fixed Japanese text search problems.
        Treat small kana letters and kana letters as different characters in search.
        Do not ignore diacritic marks in search for Japanese texts.

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

        Test: fast/text/international/japanese-kana-letters.html

        * editing/TextIterator.cpp:
        (WebCore::createCollator):
        (WebCore::collator):
        (WebCore::createSearcher):

2009-10-20  Eric Z. Ayers  <zundel@google.com>

        Reviewed by Timothy Hatcher.

        Changes TimelineItems to be created with raw timestamps as opposed
        to a time relative to a start of session.  Normalized timestamps cause
        problems when monitoring a browsing session across multiple page
        transitions.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::willDispatchDOMEvent):
        (WebCore::InspectorTimelineAgent::willLayout):
        (WebCore::InspectorTimelineAgent::willRecalculateStyle):
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::willWriteHTML):
        (WebCore::InspectorTimelineAgent::reset):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        * inspector/InspectorTimelineAgent.h:

2009-10-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Fix leak of WebSocketChannel by adopting the newly-created reference.

        * websockets/WebSocketChannel.h:
        (WebCore::WebSocketChannel::create):

2009-10-20  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Adam Barth.

        DOM Storage runtime flag changes
        https://bugs.webkit.org/show_bug.cgi?id=30602

        Part 1/2.  Removing sessionStorageEnabled in next patch after the
        Chromium side of the changes lands.

        Revert my changes to Settings and instead implement DOM Storage enabling via
        the methods agreed upon in https://bugs.webkit.org/show_bug.cgi?id=30240

        This stuff was (intentionally) never exposed to web pages or DRT, so there's no
        LayoutTest visible changes and thus no tests.

        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * page/DOMWindow.idl:
        * storage/Storage.cpp:
        (WebCore::Storage::setLocalStorageAvailable):
        (WebCore::Storage::localStorageAvailable):
        (WebCore::Storage::setSessionStorageAvailable):
        (WebCore::Storage::sessionStorageAvailable):
        * storage/Storage.h:

2009-10-20  John Gregg  <johnnyg@google.com>

        Reviewed by David Levin.

        Need to turn off notifications properly at runtime
        https://bugs.webkit.org/show_bug.cgi?id=30409

        This code only affects chromium, and is all behind a compile time
        flag current turned off, so no new tests.

        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::setIsAvailable):
        (WebCore::NotificationCenter::isAvailable):
        * notifications/NotificationCenter.h:
        * page/DOMWindow.idl:
        * workers/WorkerContext.idl:

2009-10-20  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Fixes RefPtr initialization in the V8 implementation of WebCore::ScriptString to use the ::create() idiom and
        use adoptRef() properly.  I failed to read the RefPtr docs the first time through :(

        No new tests, error was caught by valgrind on the Chromium builders.

        * bindings/v8/ScriptString.h:
        (WebCore::ScriptString::ScriptString):
        (WebCore::ScriptString::operator=):
        * bindings/v8/ScriptStringImpl.h:
        (WebCore::ScriptStringImpl::create):

2009-10-20  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: populate child nodes before sorting them.

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

        * inspector/front-end/BottomUpProfileDataGridTree.js:
        (WebInspector.BottomUpProfileDataGridNode): Swapped with BottomUpProfileDataGridTree to be consistent with TopDownProfileDataGridNode.
        (WebInspector.BottomUpProfileDataGridNode.prototype._takePropertiesFromProfileDataGridNode):
        (WebInspector.BottomUpProfileDataGridNode.prototype._keepOnlyChild):
        (WebInspector.BottomUpProfileDataGridNode.prototype._exclude):
        (WebInspector.BottomUpProfileDataGridNode.prototype._merge):
        (WebInspector.BottomUpProfileDataGridNode.prototype._sharedPopulate):
        (WebInspector.BottomUpProfileDataGridTree.prototype.exclude):
        * inspector/front-end/ProfileDataGridTree.js:
        (WebInspector.ProfileDataGridNode.prototype.sort): Added missing parentheses.
        (WebInspector.ProfileDataGridNode.prototype.get _parent):
        (WebInspector.ProfileDataGridNode.prototype._populate):
        * inspector/front-end/TopDownProfileDataGridTree.js:
        (WebInspector.TopDownProfileDataGridNode.prototype._sharedPopulate):

2009-10-20  Jens Alfke  <snej@chromium.org>

        Reviewed by Eric Seidel.

        Remove redundant String ref/deref calls in generated V8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=30579

        * bindings/v8/V8Binding.h:
        (WebCore::toString): Fix return type of 'toString' to make it truly a no-op
            instead of constructing/destructing a String.

2009-10-20  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25411
        [GTK] ATK accessible ancestry broken

        Work around for the problem of bogus additional objects in the ancestry.
        We now set the parent when we ref the child, then ask the Atk child if
        it knows its parent. This solves the bulk of the cases. For those it
        doesn't, fall back to the existing logic.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_parent):
        (webkit_accessible_ref_child):

2009-10-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Alice Liu.

        Fixes <http://webkit.org/b/30421>.
        Web Inpsector: Local Files can show up on Cookies List with Cookies from other Domain.

        When a page like Google generates an about:blank, it shows up as a local file on
        the list of Cookie domains, but has all of the cookies of Google. When we are adding
        cookie domains to the inspector, we should only add the domain is the URL of the resource
        is in the HTTP protocol family or a file URL.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::didFinishLoading):

2009-10-20  Mark Mentovai  <mark@chromium.org>

        Reviewed by Darin Fisher.

        Use a version of libWebKitSystemInterface with global symbols marked
        private_extern for Chromium Mac.

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

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/mac: Added.
        * WebCore.gyp/mac/Empty.cpp: Added.
        * WebCore.gyp/mac/adjust_visibility.sh: Added.

2009-10-20  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Eric Seidel.

        Allow custom memory allocation control for WebCore's CSSProperty
        https://bugs.webkit.org/show_bug.cgi?id=30564

        Inherits CSSProperty class from FastAllocBase because it has been
        instantiated by 'new' in WebCore/css/CSSParser.cpp:367.

        * css/CSSProperty.h:

2009-10-20  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Seidel.

        Hide Chromium's media slider thumb if no source has been loaded.

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

        Covered by existing layout tests, notably:
            LayoutTests/media/controls-rendering.html
            LayoutTests/media/unsupported-tracks.html
            LayoutTests/media/video-src-none.html

        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::hasSource): Returns true if an HTMLMediaElement has a valid source set.
        (WebCore::paintMediaMuteButton): Refactored to use hasSource().
        (WebCore::paintMediaPlayButton): Ditto.
        (WebCore::paintMediaSliderThumb): Add call to hasSource() to determine if we should paint the thumb.

2009-10-20  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Added getter for FrameLoader:m_suppressOpenerInNewFrame.
        This will allow Chromium to more intelligently detect
        noreferrer links and therefore open them in a new process.

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

        * loader/FrameLoader.h:
        (WebCore::FrameLoader::suppressOpenerInNewFrame): Added.

2009-10-20  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's CSSParserFunction
        https://bugs.webkit.org/show_bug.cgi?id=30563

        Inherits CSSParserFunction struct from FastAllocBase because it has been
        instantiated by 'new' in WebCore/css/CSSParser.cpp:4827.

        * css/CSSProperty.h:

2009-10-20  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Watched Expressions Buttons Do Not Match Inspector Styles
        https://bugs.webkit.org/show_bug.cgi?id=30554

        * inspector/front-end/inspector.css: added style to pane buttons

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

        Reviewed by Pavel Feldman.

        Set debug id for contexts of isolated worlds to distinguish them in debugger.

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

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        (WebCore::V8Proxy::evaluateInNewContext):
        (WebCore::V8Proxy::setInjectedScriptContextDebugId):
        * bindings/v8/V8Proxy.h:

2009-10-20  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Unreviewed buildfix.
        [Qt] Add FEGaussianBlur.h and FEGaussianBlur.cpp which were refactored in r49778 to WebCore.pro.

        * WebCore.pro:

2009-10-20  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        Set EnabledAtRuntime for WebSocket in DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=29896

        Supported by chromium/v8 only.
        Add WebSocket::isAvailable()/setIsAvailable(bool) to control v8
        bindings.
        Remove Settings::experimentalWebSocketsEnabled() and
        setExperimentalWebSocketsEnabled(bool).

        * WebCore.base.exp:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::webSocket):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getConstructor):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * page/DOMWindow.idl:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::setIsAvailable):
        (WebCore::WebSocket::isAvailable):
        * websockets/WebSocket.h:

2009-10-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION: Dromaeo DOM test is 14% slower
        https://bugs.webkit.org/show_bug.cgi?id=30273

        Whoops, make prototype bindings actually use the StructureFlags.

        * bindings/scripts/CodeGeneratorJS.pm:

2009-10-19  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Better implementation of WebCore::ScriptString for the V8 bindings.

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

        WebCore::ScriptString is used for XMLHttpRequest's responseText attribute which is
        shared with JavaScript.  Thus, simply using a WebCore::String and copying the value
        is pretty inefficient, especially since responseText is built up with a sequence of
        operator+= calls.  JSC builds use a JSC::UString to share the buffer when possible,
        this patch adopts a similar approach for V8.

        No new tests, behavior is unchanged and covered by LayoutTests/http/tests/xmlhttprequest

        * WebCore.gypi:
        * bindings/v8/ScriptString.h:
        (WebCore::ScriptString::ScriptString):
        (WebCore::ScriptString::operator String):
        (WebCore::ScriptString::isNull):
        (WebCore::ScriptString::size):
        (WebCore::ScriptString::operator=):
        (WebCore::ScriptString::operator+=):
        (WebCore::ScriptString::v8StringOrNull):
        * bindings/v8/ScriptStringImpl.cpp: Added.
        (WebCore::ScriptStringImpl::ScriptStringImpl):
        (WebCore::ScriptStringImpl::~ScriptStringImpl):
        (WebCore::ScriptStringImpl::toString):
        (WebCore::ScriptStringImpl::isNull):
        (WebCore::ScriptStringImpl::size):
        (WebCore::ScriptStringImpl::append):
        * bindings/v8/ScriptStringImpl.h: Added.
        (WebCore::ScriptStringImpl::ScriptStringImpl):
        (WebCore::ScriptStringImpl::v8StringHandle):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::ACCESSOR_GETTER):

2009-10-19  Adam Barth  <abarth@webkit.org>

        No review, rolling out r49837.
        http://trac.webkit.org/changeset/49837

        * page/Settings.cpp:
        (WebCore::Settings::setStandardFontFamily):
        (WebCore::Settings::setFixedFontFamily):
        (WebCore::Settings::setSerifFontFamily):
        (WebCore::Settings::setSansSerifFontFamily):
        (WebCore::Settings::setCursiveFontFamily):
        (WebCore::Settings::setFantasyFontFamily):
        * page/Settings.h:
        (WebCore::Settings::standardFontFamily):
        (WebCore::Settings::fixedFontFamily):
        (WebCore::Settings::serifFontFamily):
        (WebCore::Settings::sansSerifFontFamily):
        (WebCore::Settings::cursiveFontFamily):
        (WebCore::Settings::fantasyFontFamily):
        * platform/text/UScriptCode.h: Removed.

2009-10-19  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        Check COMPILER(MSVC) instead of PLATFORM(WIN_OS) to avoid the use of vasprintf.
        https://bugs.webkit.org/show_bug.cgi?id=30473

        vasprintf is missing in MSVC. Use COMPILER(MSVC) guards instead of
        PLALTFORM(WIN_OS) guards.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::error):

2009-10-19  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Eric Seidel.

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

        Make generic font family getters/setters accept an additional
        argument (script code). It has a default value so that if an embedder
        does not have/want a per-script font family setting, call-sites
        don't have to be changed.
        This is to prepare for fixing bug 10874 (font selection is not
        language-dependent) and bug 18085.

        There should be no change in layout and no new layout test
        is added.

        * WebCore.base.exp:
        * page/Settings.cpp:
        * page/Settings.h:
        * platform/text/UScriptCode.h: Added. This is for ports that
          do not use ICU. the part of ICU's common/unicode/uscript.h
          that defines script code enum was copied. To keep enums compatible
          with those in ICU, we don't generate the list out of Scripts.txt
          of the Unicode Data base or CLDR's data.

2009-10-19  Evan Stade  <estade@chromium.org>

        Reviewed by Darin Adler.

        Clarify usage of SuddenTermination API. No code change.

        * platform/SuddenTermination.h:

2009-10-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        REGRESSION: Dromaeo DOM test is 14% slower
        https://bugs.webkit.org/show_bug.cgi?id=30273

        Make DOM bindings automatically inherit correct structure
        flags rather than being needlessly conservative.  This is
        done by making the bindings generator use the same model
        for TypeInfo flags that we now use in JSC.

        This gains us about 1% of this regression back.

        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWithGlobalPointer::createStructure):
        (WebCore::DOMConstructorObject::createStructure):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::createStructure):
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::createStructure):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        (WebCore::JSQuarantinedObjectWrapper::createStructure):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/objc/objc_runtime.h:
        (JSC::Bindings::ObjcFallbackObjectImp::createStructure):
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::createStructure):
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::createStructure):
        * bridge/runtime_object.h:
        (JSC::RuntimeObjectImp::createStructure):

2009-10-19  Robin Qiu  <robin.qiu@torchmobile.com.cn>

        Reviewed by Nikolas Zimmermann.

        Fixed a bug on nested SVG <use> elements.
        https://bugs.webkit.org/show_bug.cgi?id=26117
        When a <use> element refer to another <use> element which has
        child/children, the instance tree built for this <use> element
        is incorrect (more nodes than expected).

        Test: svg/dom/use-on-use-with-child.svg

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

2009-10-19  Oliver Hunt  <oliver@apple.com>

        Small changes to fully invalidate and update the JavaScriptCallFrame.

        <rdar://problem/7020755> JSDebugger crashes after reloading from a breakpoint
        https://bugs.webkit.org/show_bug.cgi?id=27146

        Reviewed by Timothy Hatcher.

        * inspector/JavaScriptCallFrame.h:
        (WebCore::JavaScriptCallFrame::invalidate):
        (WebCore::JavaScriptCallFrame::update):

2009-10-19  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dmitri Titov.

        Remove "source" from storage events
        https://bugs.webkit.org/show_bug.cgi?id=30536

        Remove "source" from storage events per
        http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-October/023703.html

        This was removed because it makes it introduces synchronous access that can
        cross the event loop boundry (since a storage event can fire from one process
        and be handled in another).

        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::handleEvent):
        * storage/StorageEvent.cpp:
        (WebCore::StorageEvent::create):
        (WebCore::StorageEvent::StorageEvent):
        (WebCore::StorageEvent::initStorageEvent):
        * storage/StorageEvent.h:
        (WebCore::StorageEvent::uri):
        * storage/StorageEvent.idl:
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatch):

2009-10-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove ResourceLoadNotifier::activeDocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=30533

        Removing this method from ResourceLoadNotifier better decouples the
        notifier from FrameLoader.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):
        (WebCore::FrameLoader::requestFromDelegate):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didReceiveResponse):
        * loader/ResourceLoadNotifier.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):

2009-10-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move sendRemainingDelegateMessages to ResourceLoadNotifier
        https://bugs.webkit.org/show_bug.cgi?id=30531

        This method is about notifying folks and doesn't interact with the rest
        of FrameLoader.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::willLoadMediaElementURL):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        * loader/FrameLoader.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages):
        * loader/ResourceLoadNotifier.h:

2009-10-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Bypass popup blocker using click event
        https://bugs.webkit.org/show_bug.cgi?id=21501

        Keep track of which events were generated by JavaScript and use that
        inforation when figuring out if we're processing a user gesture.

        Test: http/tests/security/popup-blocked-from-fake-event.html

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGestureEvent):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        * dom/Document.cpp:
        (WebCore::Document::createEvent):
        * dom/Event.cpp:
        (WebCore::Event::Event):
        * dom/Event.h:
        (WebCore::Event::createdByDOM):
        (WebCore::Event::setCreatedByDOM):

2009-10-19  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Darin Adler.

        Fixing a typo.

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

        * platform/sql/SQLiteDatabase.h:

2009-10-19  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        Manual Test for crash caused by JS accessing DOMWindow which is disconnected from the Frame.
        https://bugs.webkit.org/show_bug.cgi?id=30544

        * manual-tests/crash-on-accessing-domwindow-without-frame.html: Added.

2009-10-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Flash at end of opacity/transform transition sometimes
        https://bugs.webkit.org/show_bug.cgi?id=30501
        
        When a transition finishes, there window of time between when the animation is
        removed, and the final style set on the GraphicsLayer. This caused the layer to revert
        to its old appearance for one or two frames. To avoid this, we set the final
        transform or opacity at the start of the transition; we know that the animation
        will override the final value for as long as its running.
        
        No test because this is a very transient effect that can't be captured
        in a test.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        (WebCore::RenderLayerBacking::updateLayerOpacity):
        (WebCore::RenderLayerBacking::updateLayerTransform):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::startTransition):
        * rendering/RenderLayerBacking.h:

2009-10-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add more stop characters into console completions.

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions):
        (WebInspector.ConsoleView.prototype._reportCompletions):

2009-10-19  Marshall Culpepper  <mculpepper@appcelerator.com>

        Reviewed by Adam Roben.

        implemented ClipboardWin::files()
        https://bugs.webkit.org/show_bug.cgi?id=29666

        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::files):

2009-10-19  Nate Chapin  <japhet@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Add support for link relations in HTMLAnchorElement and implement rel="noreferrer".

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

        Tests: http/tests/navigation/no-referrer-reset.html
               http/tests/navigation/no-referrer-same-window.html
               http/tests/navigation/no-referrer-subframe.html
               http/tests/navigation/no-referrer-target-blank.html

        * WebCore.base.exp: Update FrameLoader::loadFrameRequest export symbol
        * html/HTMLAnchorElement.cpp: Add support for link relations and implement noreferrer
        (WebCore::HTMLAnchorElement::HTMLAnchorElement):
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::HTMLAnchorElement::parseMappedAttribute):
        (WebCore::HTMLAnchorElement::hasRel):
        (WebCore::HTMLAnchorElement::setRel):
        * html/HTMLAnchorElement.h: Add support for link relations and implement noreferrer
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::createWindow):
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::urlSelected): Add parameter for referrer policy
        (WebCore::FrameLoader::loadFrameRequest): Add parameter for referrer policy
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy): Suppress opener if requested by ReferrerPolicy
        * loader/FrameLoader.h: Update urlSelected and loadFrameRequest prototypes
        * loader/FrameLoaderTypes.h: Add enum for referrer policy
        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::timerFired):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Update call to urlSelected()
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler): Update call to urlSelected()


2009-10-19  Alpha Lam  <hclam@chromium.org>

        Reviewed by Dimitri Glazkov (dglazkov@chromium.org).

        [v8] typeof(HTMLMediaElement) should return undefined if media
        engine is not available
        https://bugs.webkit.org/show_bug.cgi?id=30343

        Check for availability of the media engine to disable
        HTMLMediaElement, HTMLAudioElement, HTMLVideoElement, MediaError
        in runtime.

        Try runs and review in Chromium:
        http://codereview.chromium.org/276011

        Test: manual-tests/chromium/media-player-not-available.html

        The above test can work work in Chromium. Testing procedures:
        1. Remove all media support libraries in Chromium (e.g. ffmpeg libraries)
        2. Open Chromium with above test page
        3. Verify the test results according to the test page

        * bindings/v8/custom/V8CustomBinding.h:
        Declare enabler methods.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        Report enabled only if media player is available.
        * manual-tests/chromium/media-player-not-available.html: Added.
        Manual test, following instruction in this test for procedures.
        * page/DOMWindow.idl:
        Mark HTMLMediaElement, HTMLAudioElement, HTMLVideElement, MediaError
        as enabled at runtime.

2009-10-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by David Hyatt.

        Refactor out some of the code in paint() into paintPanScrollIcon()
        and paintScrollbars() in preparation of some Qt API changes.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paint):
        * platform/ScrollView.h:

2009-10-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Adam Roben.

        Make the local static panScrollIcon into a Image* instead
        of a RefPtr<Image>.

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

2009-10-19  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by David Levin.

        Forcefully set antialiasing for Chromium media controls.

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

        Before it was nondeterministiacally being enabled based on the previous state of GraphicsContext.

        Covered by existing layout tests.

        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaSlider): Added setShouldAntialias(true).

2009-10-19  Jens Alfke  <jens@mooseyard.com>

        Reviewed by Darin Adler.

        Optimize string upper/lowercasing
        https://bugs.webkit.org/show_bug.cgi?id=30261
        
        - Added AtomicString::upper() and lower()
        - Further optimized StringImpl::lower()
        - Removed StringImpl::isLower()
        - Added QualifiedName::localNameUpper(), which is cached, thereby saving
          thousands of upper() calls and string allocations.
 
         * dom/Element.cpp:
         (WebCore::Element::setAttribute): Call AtomicString::lower()
         * dom/QualifiedName.cpp:
         (WebCore::QualifiedName::localNameUpper): New method
         * dom/QualifiedName.h: Added localNameUpper() method
         * dom/StyledElement.cpp:
         (WebCore::StyledElement::parseMappedAttribute):  Call AtomicString::lower()
         * html/HTMLDocument.cpp:
         (WebCore::HTMLDocument::createElement): Call AtomicString::lower()
         * html/HTMLElement.cpp:
         (WebCore::HTMLElement::nodeName): Call localNameUpper()
         * platform/text/AtomicString.cpp:
         (WebCore::AtomicString::lower): New method
         (WebCore::AtomicString::upper): New method
         * platform/text/AtomicString.h: Added lower() and upper()
         * platform/text/StringImpl.cpp: Removed isLower()
         (WebCore::StringImpl::lower): Further optimization of initial loop
         * platform/text/StringImpl.h: Removed isLower()
 
2009-10-19  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        If a call to a plugin's invokeMethod, invokeDefault or construct
        returns false, throw an exception into JS.        

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

        Test: plugins/netscape-invoke-failure.html

        * bindings/v8/V8NPObject.cpp: Check return values of invokeMethod, invokeDefault and construct.
        (npObjectInvokeImpl):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::invokeMethod): Check return value
        (JSC::Bindings::CInstance::invokeDefaultMethod): Check return value
        (JSC::Bindings::CInstance::invokeConstruct): Check return value

2009-10-16  Stephen White  <senorblanco@chromium.org>

        Reviewed by Adam Barth.

        Fix for chromium/skia canvas arc start/end positions, when the arc is
        >= 360 degrees.
        https://bugs.webkit.org/show_bug.cgi?id=30449

        Covered by new test:
        LayoutTests/fast/canvas/arc360.html

        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::addArc):

2009-10-19  Kent Tamura  <tkent@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix uninitialized variable reference in Element::removeAttribute().
        https://bugs.webkit.org/show_bug.cgi?id=30502

        * dom/Element.cpp:
        (WebCore::Element::removeAttribute):

2009-10-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=30463
        Remove HTML5 media element 'loadend' event

        * dom/EventNames.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseMappedAttribute): Remove 'loadend'.
        (WebCore::HTMLMediaElement::loadInternal): Ditto.
        (WebCore::HTMLMediaElement::noneSupported): Ditto.
        (WebCore::HTMLMediaElement::mediaEngineError): Ditto.
        (WebCore::HTMLMediaElement::setNetworkState): Ditto.
        (WebCore::HTMLMediaElement::userCancelledLoad): Ditto.

2009-10-19  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Adam Barth.

        [Qt] Remove deletion of outgoing FormData object when reply is finished.
        The buffers will be destroyed a bit later, when the QNetworkReply is deleted.
        Bug: https://bugs.webkit.org/show_bug.cgi?id=29551

        * platform/network/qt/QNetworkReplyHandler.cpp:
        * platform/network/qt/QNetworkReplyHandler.h:

2009-10-19  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Fix hard-to-reproduce crash in HTMLTokenizer by avoiding a rare
        fastRealloc edge case.
        https://bugs.webkit.org/show_bug.cgi?id=29313

        No test, the crash shows up occasionally in crash dumps, we weren't able
        to reproduce it locally.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::enlargeScriptBuffer): Added an early exit to
            avoid calling fastRealloc with the size of 0.

2009-10-19  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Seidel.

        Use fillRect() instead of drawRect() to fix Chromium media controls rendering.

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

        Chromium Mac layout tests will need to be rebaselined.  Existing layout tests for Linux/Win still pass.

        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaSlider): Use fillRect() instead of drawRect().

2009-10-19  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Adam Barth.

        Crash in DOMWindow::clearTimeout etc when DOMWindow is not connected to a frame.
        https://bugs.webkit.org/show_bug.cgi?id=29832

        Need to make sure the script caches are reset when frame gets disconnected from still-alive DOMWindow.
        This will prevent JS from calling DOMWindow methods that can not be completed w/o the frame.

        I am not sure it's possible to test this since the only file that repros the problem need ~10 seconds to cause crash.

        * page/Frame.cpp:
        (WebCore::Frame::~Frame): Right after frame disconnects from DOMWindow, clear WindowShell.

2009-10-19  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed build warning fix.
        [Qt] Apply changes to WebCore.pro introduced in r49778

        * WebCore.pro: Removed svg/graphics/filters/SVGFEGaussianBlur.h from HEADERS

2009-10-19  Dirk Schulze  <krit@webkit.org>

        Reviewed by Darin Adler.

        Move feGaussianBlur from WebCore/svg to WebCore/platform
        [https://bugs.webkit.org/show_bug.cgi?id=30495]

        This patch moves SVGFRGaussianBlur from svg/graphics/filters
        to platform/graphics/filters/FEGaussianBlur. This is needed
        for shadow support on Qt and Cairo.
        No change in functionality, therfore no new test case needed.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/FEGaussianBlur.cpp: Added.
        * platform/graphics/filters/FEGaussianBlur.h: Added.
        * svg/SVGFEGaussianBlurElement.h:
        * svg/graphics/filters/SVGFEGaussianBlur.cpp: Removed.
        * svg/graphics/filters/SVGFEGaussianBlur.h: Removed.

2009-10-19  Yael Aharon  <yael.aharon@nokia.com>

        Unreviewed.

        Added reviewer name to r49574.

2009-10-19  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=30489
        [Gtk] The document frame/html container claims to be parentless

        Work around for the parentless claim made by the accessible associated
        with the embedded WebView. When we identify this condition, get the
        widget's parent, and then get the AtkObject from that. Admittedly an ugly
        hack, but we'll need it for Yelp and other Gtk+/GNOME applications which
        plan to switch over to WebKit.

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

2009-10-19  Benjamin Otte  <otte@gnome.org>

        Reviewed by Jan Alonzo.

        Handle duration queries properly
        https://bugs.webkit.org/show_bug.cgi?id=29999

        Previously duration queries failed to handle unknown duration
        and didn't treat the returned duration as an unsigned.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::duration):

2009-10-19  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Fix build on Windows.

        * plugins/win/PluginViewWin.cpp:
        (windowHandleForPageClient):

2009-10-19  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Holger Freyther.

        [Qt] Windowed Plugins: Don't crash when client is 0.
        
        Client is 0 when we use QWebPage without a QWebView or QGraphicsWebView.
        In addition, setFrameRect()/updatePluginWidget() is called even if the
        plugin was not succesfully loaded. updatePluginWidget() updates the
        window rect which is, in theory, useful to draw something that indicates
        that we didn't load successfully.
        
        So, a status check is added to setNPWindowIfNeeded.

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

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

2009-10-19  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Holger Freyther.

        [Qt] Windowed Plugins: Fix crash when QWebPage is deleted after QWebView.
        
        Fixes various sources of crashes:
        1. The PluginContainer is a child of QWebView. When the view gets deleted,
        the PluginView is not notified about the deletion of PluginContainer.
        2. QWebView destructor does not set client to 0.
        3. Sometimes pending paint events are sent after the plugin has died, so add
        a check in PluginView::setNPWindowIfNeeded.

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

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

2009-10-19  Jakob Truelsen  <antialize@gmail.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=29042
        Allow one to customize the minimal and maximal shrink factors used when printing.

        * page/PrintContext.cpp:
        (WebCore::PrintContext::begin):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setPrintingMinimumShrinkFactor):
        (WebCore::Settings::setPrintingMaximumShrinkFactor):
        * page/Settings.h:
        (WebCore::Settings::printingMinimumShrinkFactor):
        (WebCore::Settings::printingMaximumShrinkFactor):

2009-10-18  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Adam Barth.

        Fixes issue where doubleclicking a word could select following adjacent newlines.
        https://bugs.webkit.org/show_bug.cgi?id=30234

        Tests: platform/mac/editing/selection/doubleclick-should-not-expand-across-lines.html
               platform/mac/editing/selection/script-tests/TEMPLATE.html
               platform/win/editing/selection/doubleclick-should-not-expand-across-lines.html
               platform/win/editing/selection/script-tests/TEMPLATE.html

        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::appendTrailingWhitespace):

2009-10-18  Kevin Ollivier  <kevino@theolliviers.com>

        CURL build fix, use proper header name.

        * platform/network/curl/ResourceHandleManager.h:

2009-10-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Properties on Arrays and NodeLists are not logged correctly.

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._formatarray):
        (WebInspector.ConsoleView.prototype._printArray):

2009-10-18  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: touching WebCore so that it
        initiated inspector frontend deployment on Windows.

        Web Inspector: frontend files are not deployed in Windows
        incremental build.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::unbind):

2009-10-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Title of dir(["test", "test2"]) should be Array

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

        Test: inspector/console-tests.html

        * inspector/front-end/InjectedScript.js:

2009-10-18  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        REGRESSION: SVG Mask doesn't work for maskContentUnits="objectBoundingBox"
        [https://bugs.webkit.org/show_bug.cgi?id=30480]

        Patch for SVGMaskElement landed in r49598 should correct the location of
        the mask image graphics context. It only corrects the location for userSpaceOnUse
        mode in maskContentUnits but breaks objectBoundingBoxMode.
        The maskDestRect shouldn't be moved. It is not responsible for the correct context
        postioin but for the correct position of the mask image.
        This patch calculates the context postion independently from the maskDestRect.
        It also uses lineareRGB color space for masking on CG now. This is the default
        color space for masking operations.
        We already have tests for both maskContentUnits modes.

            *svg/W3C-SVG-1.1/masking-intro-01-f.svg
            *svg/custom/mask-with-default-value.svg

        Some tests needed new pixel tests because of the new color space.

        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):

2009-10-18  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Use v8::Integer::NewFromUnsigned when converting unsigneds into V8's numbers.
        That is notably faster for small numbers (most common case).
        https://bugs.webkit.org/show_bug.cgi?id=30493

        * bindings/scripts/CodeGeneratorV8.pm:

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

        Reviewed by Holger Freyther.

        [GTK] Add MathML to the build system
        https://bugs.webkit.org/show_bug.cgi?id=30487

        Add MathML sources if MathML support is enabled.

        * GNUmakefile.am:

2009-10-18  Kevin Ollivier  <kevino@theolliviers.com>

        Non-PCH build fix. Added missing header.

        * bridge/runtime_root.h:

2009-10-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Compositing layers not correctly updated after partial layout
        https://bugs.webkit.org/show_bug.cgi?id=30425
        
        When a partial layout happened, for example as the result of a postion-change-only
        layout, then some compositing layer positions were not correctly updated. To fix
        this, updateLayerPositions() now carries along a flag that is set at the rootmost
        layer being updated, and used to determine when we hit the first compositing layer
        in this update. RenderLayerBacking::updateAfterLayout() makes use of this information
        to do a full geometry update on that layer, which is thus the rootmost compositing
        layer that is being updated.

        Test: compositing/geometry/partial-layout-update.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::scrollToOffset):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):
        * rendering/RenderLayerBacking.h:

2009-09-13  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Add support for proxies in CURL.
 
        https://bugs.webkit.org/show_bug.cgi?id=30446

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::setProxyInfo):
        (WebCore::ResourceHandleManager::initializeHandle):
        * platform/network/curl/ResourceHandleManager.h:
        (WebCore::ResourceHandleManager::):

2009-10-18  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez

        https://bugs.webkit.org/show_bug.cgi?id=25901
        Use ATK_ROLE_SECTION for divTag and ATK_ROLE_LABEL for labelTag

        Replaces the use of ATK_ROLE_PANEL with the expected accessible roles.

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

2009-10-17  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by George Staikos.

        Cleanup SVGElement code, preparing for animVal support
        https://bugs.webkit.org/show_bug.cgi?id=30466

        Add new SynchronizablePropertyController and move the code for SVG property <-> XML attribute synchronization
        from SVGElement. This is a further preparation for animVal support, where SynchronizablePropertyController will
        be used to control the start/end state of an animated property.

        We're currently tracking animated properties that need synchronization, generalize this concept and use
        it to track their creation (bound to certain SVG*Element classes) as well as a flag determing the need
        of synchronization (no SVG DOM object wrappers, no synchronization needed).

        No change in functionality, thus no tests.

        * GNUmakefile.am: Add 'SynchronizablePropertyController.cpp/h' to build
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * svg/SVGAllInOne.cpp: Ditto.
        * svg/SVGAnimatedProperty.h: Add registerProperty() function 
        (WebCore::::SVGAnimatedProperty): Call registerProperty() function  
        (WebCore::::registerProperty): Add new registerProperty() function, announcing new properties to SynchronizablePropertyController.
        * svg/SVGAnimatedTemplate.h: Use propertyController() method, to access the new functions moved from SVGElement.
        (WebCore::lookupOrCreateWrapper):
        * svg/SVGElement.cpp: Adapt to code moving to SynchronizablePropertyController.
        (WebCore::SVGElement::updateAnimatedSVGAttribute):
        * svg/SVGElement.h: Move handling SVG property synchronization to SynchronizablePropertyController.
        (WebCore::SVGElement::propertyController): Expose reference to SynchronizablePropertyController object.
        * svg/SVGViewSpec.cpp: Reorder initialization order of contextElement, leading to possible crashes.
        (WebCore::SVGViewSpec::SVGViewSpec):
        (WebCore::SVGViewSpec::viewTarget):
        * svg/SVGViewSpec.h: Ditto.
        (WebCore::SVGViewSpec::contextElement):
        * svg/SynchronizablePropertyController.cpp: Added.
        (WebCore::SynchronizablePropertyController::SynchronizablePropertyController):
        (WebCore::SynchronizablePropertyController::registerProperty):
        (WebCore::SynchronizablePropertyController::setPropertyNeedsSynchronization):
        (WebCore::SynchronizablePropertyController::synchronizeProperty):
        (WebCore::SynchronizablePropertyController::synchronizeAllProperties):
        (WebCore::SynchronizablePropertyController::startAnimation):
        (WebCore::SynchronizablePropertyController::stopAnimation):
        * svg/SynchronizablePropertyController.h: Added.
        (WebCore::SynchronizableProperty::SynchronizableProperty):
        (WebCore::SynchronizableProperty::isHashTableDeletedValue):
        (WebCore::SynchronizableProperty::operator==):
        (WebCore::SynchronizablePropertyHash::hash):
        (WebCore::SynchronizablePropertyHash::equal):
        (WebCore::SynchronizablePropertyHashTraits::constructDeletedValue):
        (WebCore::SynchronizablePropertyHashTraits::isDeletedValue):

2009-10-17  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25413
        [GTK] Please expose the level of headings

        Exposes the heading level as an attribute of the AtkObject.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (addAttributeToSet):
        (webkit_accessible_get_attributes):
        (webkit_accessible_class_init):

2009-10-17  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        EventHandler::eventLoopHandleMouseDragged needs ENABLE(DRAG_SUPPORT) guards
        https://bugs.webkit.org/show_bug.cgi?id=30472

        Put ENABLE(DRAG_SUPPORT) guards around EventHandler::eventLoopHandleMouseDragged
        in EventHandler.cpp. MSVC fails to compile when DRAG_SUPPORT not enabled.

        * page/EventHandler.cpp:

2009-10-17  Alpha Lam  <hclam@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] Video controls not zoomed / transformed correctly
        https://bugs.webkit.org/show_bug.cgi?id=30461

        Draw the images in the controls scaled.

        No new tests. With this change Chromium will pass the following tests:
        LayoutTests/media/video-controls-zoomed.html
        LayoutTests/media/video-controls-transformed.html

        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaButton):
        Pass along the target rect directly.
        (WebCore::RenderMediaControlsChromium::adjustMediaSliderThumbSize):
        Adjust the thumb slide applied with the scale factor.

2009-10-17  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        [Gtk] Build fix for WebKitGtk after r49723.

        Add bindings/js/JSExceptionBase.* to the build.

        * GNUmakefile.am:

2009-10-17  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        [Qt] Build fix for QtWebKit after r49723.

        Add bindings/js/JSExceptionBase.cpp to the build.

        * WebCore.pro:

2009-10-16  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=30456
        Fixes for new Debug_All Windows build configuration.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::findCFNetworkModule): Ask for the correct library instead of guessing.
        * platform/win/ScrollbarThemeSafari.cpp: Use new DEBUG_ALL preprocessor define for library naming.
        * rendering/RenderMediaControls.cpp: Use new DEBUG_ALL preprocessor define for library naming.
        * rendering/RenderThemeSafari.cpp: Use new DEBUG_ALL preprocessor define for library naming.

2009-10-16  Jon Honeycutt  <jhoneycutt@apple.com>

        Add SPI to determine whether a plug-in has ever been halted.

        Part of <rdar://problem/7312158>.

        Reviewed by Dan Bernstein.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        Initialize m_hasBeenHalted.

        * plugins/PluginView.h:
        (WebCore::PluginView::hasBeenHalted):
        Return m_hasBeenHalted.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::halt):
        Set m_hasBeenHalted.

2009-10-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Alexey Proskuryakov.

        @charset rule after the first byte causes the rest of css to be ignored
        https://bugs.webkit.org/show_bug.cgi?id=18265

        Apparently we're supposed to tolerate whitespace before the charset
        rule so folks can write code like this:

        <style>
        @charset "utf-8"
        ...
        </style>

        I'm told this is one of the top compatability problems in China.
        Tests: fast/css/comment-before-charset-external.html
               fast/css/comment-before-charset.html
               fast/css/many-spaces-before-charset.html
               fast/css/space-before-charset-external.html
               fast/css/space-before-charset.html

        * css/CSSGrammar.y:

2009-10-16  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.

        Fixes part of <http://webkit.org/b/30412>.
        Web Inspector should get human readable DOM Exceptions.

        Add a description field to ExceptionBase, and call it through 
        reportException which allows the user/developer to get a more detailed
        and coherent error explanation through the Web Inspector.

        This only applies to exceptions that come from a script on the page when
        it is run. DOM Exceptions that come from the code run in the console, or DOM
        exceptions that are caught and logged will come in a future patch.

        Tests: inspector/uncaught-dom1-exception.html
               inspector/uncaught-dom3-exception.html
               inspector/uncaught-dom8-exception.html

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        * bindings/js/JSExceptionBase.cpp: Added.
        (WebCore::toExceptionBase):
        * bindings/js/JSExceptionBase.h: Added.
        * dom/ExceptionBase.cpp:
        (WebCore::ExceptionBase::ExceptionBase):
        * dom/ExceptionBase.h:
        (WebCore::ExceptionBase::description):
        * dom/ExceptionCode.cpp:
        (WebCore::):
        (WebCore::getExceptionCodeDescription):
        * dom/ExceptionCode.h:

2009-10-16  Geoffrey Garen  <ggaren@apple.com>

        Build fix: forgot to check in this #include.

        * bridge/runtime_root.h:

2009-10-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Transform layer gets stuck with the wrong transform after an animation ends
        <rdar://problem/7311662>

        Work around a CoreAnimation bug which causes an animated transform layer to
        end up with a stale transform.
        
        Test: compositing/animation/state-at-end-event-transform-layer.html

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::bug7311367Workaround):
        (WebCore::GraphicsLayerCA::removeAnimationFromLayer):

2009-10-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        After running a transition with an end event listener, can't change the transform
        https://bugs.webkit.org/show_bug.cgi?id=30454
        
        Fix an issue where, if a document had any listener for webkitTransitionEnd or webkitAnimationEnd,
        the animations would not get cleaned up correctly, which broke subsequent changes of transform.
        
        Now, we always clean up the animations right after queuing up the end events.

        Tests: animations/state-at-end-event.html
               transitions/move-after-transition.html

        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::onAnimationEnd):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::onAnimationEnd):

2009-10-15  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Handle the Enter Key in the Elements Tree Hierarchy
        https://bugs.webkit.org/show_bug.cgi?id=30428

        TextNode => Edit Text Node
        Has Attributes => Edit First Attribute
        No Attributes => Start Editing New Attribute

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.handleKeyEvent): handle the "Enter" key
        (WebInspector.ElementsTreeElement.prototype.set hovered): only add new attribute button on nodes with attributes
        (WebInspector.ElementsTreeElement.prototype._addNewAttribute): prevent moving backwards where there are no attributes
        (WebInspector.ElementsTreeElement.prototype._startEditingFromEvent): renamed to be clearer
        (WebInspector.ElementsTreeElement.prototype._startEditing): transition to the appropriate edit state for a tree element

2009-10-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix header indent style for FrameLoader and friends
        https://bugs.webkit.org/show_bug.cgi?id=30430

        * loader/FrameLoader.h:
        (WebCore::FrameLoader::frame):
        (WebCore::FrameLoader::policyChecker):
        (WebCore::FrameLoader::history):
        (WebCore::FrameLoader::notifier):
        (WebCore::FrameLoader::isLoadingMainResource):
        (WebCore::FrameLoader::documentLoader):
        (WebCore::FrameLoader::policyDocumentLoader):
        (WebCore::FrameLoader::provisionalDocumentLoader):
        (WebCore::FrameLoader::state):
        (WebCore::FrameLoader::client):
        (WebCore::FrameLoader::url):
        (WebCore::FrameLoader::isLoadingFromCachedPage):
        (WebCore::FrameLoader::committingFirstRealLoad):
        (WebCore::FrameLoader::committedFirstRealDocumentLoad):
        (WebCore::FrameLoader::creatingInitialEmptyDocument):
        * loader/HistoryController.h:
        (WebCore::HistoryController::currentItem):
        (WebCore::HistoryController::provisionalItem):
        * loader/PolicyCallback.h:
        (WebCore::PolicyCallback::request):
        * loader/PolicyChecker.h:
        (WebCore::PolicyChecker::loadType):
        (WebCore::PolicyChecker::setLoadType):
        (WebCore::PolicyChecker::delegateIsDecidingNavigationPolicy):
        (WebCore::PolicyChecker::delegateIsHandlingUnimplementablePolicy):
        * loader/RedirectScheduler.h:
        * loader/ResourceLoadNotifier.h:

2009-10-16  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Add a Debug_All configuration to build entire stack as debug.
        Change Debug_Internal to:
        - stop using _debug suffix for all WebKit/Safari binaries
        - not use _debug as a DLL naming suffix
        - use non-debug C runtime lib.

        * WebCore.vcproj/QTMovieWin.vcproj: Add Debug_All configuration.
        * WebCore.vcproj/WebCore.make: Debug build in makefile should build Debug_All.
        * WebCore.vcproj/WebCore.sln: Add Debug_All configuration.
        * WebCore.vcproj/WebCore.submit.sln: Add Debug_All configuration.
        * WebCore.vcproj/WebCore.vcproj: Add Debug_All configuration.
        * WebCore.vcproj/WebCoreGenerated.vcproj: Renamed single configuration from "Release" to "all".

2009-10-16  Dimitri Glazkov  <dglazkov@chromium.org>

        No review, rolling out r49693, because it broke Chromium build.
        http://trac.webkit.org/changeset/49693

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2009-10-16  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Carlson.

        Updated media resource selection algorithm to reflect latest HTML 5 specification.

        Noticable changes:
            -  Elements with no source should have their network state set to NETWORK_EMPTY as opposed to NETWORK_NO_SOURCE
            -  Empty string ("") is now considered a valid URL resolving to the current page and will be loaded

        Tests: media/video-src-empty.html
               media/video-src-none.html

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

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::selectMediaResource): Updated code and comments to match spec.

2009-10-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Insecure plug-ins don't trigger mixed content
        https://bugs.webkit.org/show_bug.cgi?id=30431

        Added the missing check.

        Test: http/tests/security/mixedContent/insecure-plugin-in-iframe.html

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

2009-10-16  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Carlson.

        Set autobuffer to true and schedule load in V8 audio element constructor.

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

        Covered by existing tests.

        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Set autobuffer to true and schedule load.

2009-10-16  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Seidel.

        Remove FIXME in RenderMediaControlsChromium as bug was fixed upstream.

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

        Covered by existing media layout tests.

        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaSlider): Removed round() and FIXME.

2009-10-16  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Seidel.

        Fix Chromium media controls to render a disabled play button when the element is unintialized.

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

        Covered by existing layout tests.

        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaPlayButton): Include check for NETWORK_EMPTY to render disabled play button.

2009-10-16  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make typeinfo flags default to false
        https://bugs.webkit.org/show_bug.cgi?id=30372

        Last part -- replace HasDefaultGetPropertyNames with OverridesGetPropertyNames
        flag.

        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::createStructure):
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::createStructure):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        (WebCore::JSQuarantinedObjectWrapper::createStructure):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::createStructure):
        * bridge/runtime_object.h:
        (JSC::RuntimeObjectImp::createStructure):

2009-10-16  Steven Knight  <sgk@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=30447
        Handle long link lines by building .idl-generated bindings in a
        separate webcore_bindings library target.  Avoid Visual Studio
        dependency issues by building additional generated .cpp and .h files
        in a separate webcore_bindings_sources target.

        Chrome should still build and test successfully.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2009-10-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Carlson.

        Transform transitions that used to be accelerated are no longer so
        https://bugs.webkit.org/show_bug.cgi?id=30453

        The change in r49633, to not run accelerated animations/transitions on layers that
        are not attached, broke accelerated transitions/animations in many cases where they start
        as soon as the page loads. This change reverts the code that tests for the GraphicsLayer being
        attached.
        
        No test, because it's not possible from a test to know whether a transition is accelerated or not.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):

2009-10-16  Kevin Ollivier  <kevino@theolliviers.com>

        wxMSW build fix, build the MSW source to get methods that use the MSW version of
        PlatformModuleVersion.

        * wscript:

2009-10-16  Adam Barth  <abarth@webkit.org>

        Unreviewed build fix.  Add back MIMETypeRegistryChromium with the right
        casing.

        * platform/chromium/MIMETypeRegistryChromium.cpp: Added.
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):
        (WebCore::MIMETypeRegistry::getMIMETypeForPath):
        (WebCore::MIMETypeRegistry::isSupportedImageMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedImageResourceMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedImageMIMETypeForEncoding):
        (WebCore::MIMETypeRegistry::isSupportedJavaScriptMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedNonImageMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedMediaMIMEType):
        (WebCore::MIMETypeRegistry::isJavaAppletMIMEType):
        (WebCore::MIMETypeRegistry::getMediaMIMETypeForExtension):
        (WebCore::dummyHashSet):
        (WebCore::MIMETypeRegistry::getSupportedImageMIMETypes):
        (WebCore::MIMETypeRegistry::getSupportedImageResourceMIMETypes):
        (WebCore::MIMETypeRegistry::getSupportedImageMIMETypesForEncoding):
        (WebCore::MIMETypeRegistry::getSupportedNonImageMIMETypes):
        (WebCore::MIMETypeRegistry::getSupportedMediaMIMETypes):

2009-10-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        MimeTypeRegistryChromium is mis-casen
        https://bugs.webkit.org/show_bug.cgi?id=30441

        Change the case of MimeTypeRegistryChromium to match other platforms.

        * WebCore.gypi:
        * platform/chromium/MIMETypeRegistryChromium.cpp: Copied from WebCore/platform/chromium/MimeTypeRegistryChromium.cpp.
        * platform/chromium/MimeTypeRegistryChromium.cpp: Removed.

2009-10-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Change EmptyPluginHalterClient in SVGImage to be non-static, to
        match changes made http://trac.webkit.org/changeset/49385.
        https://bugs.webkit.org/show_bug.cgi?id=30403

        Run the following layout test sequence:
          LayoutTests/svg/W3C-SVG-1.1/struct-image-01-t.svg
          LayoutTests/svg/W3C-SVG-1.1/struct-image-03-t.svg
          LayoutTests/svg/W3C-SVG-1.1/struct-image-04-t.svg
          LayoutTests/svg/W3C-SVG-1.1/struct-image-05-b.svg
          LayoutTests/svg/W3C-SVG-1.1/struct-image-06-t.svg
          LayoutTests/svg/W3C-SVG-1.1/struct-image-07-t.svg
          LayoutTests/svg/W3C-SVG-1.1/struct-image-08-t.svg
          LayoutTests/svg/W3C-SVG-1.1/struct-image-09-t.svg
          LayoutTests/svg/W3C-SVG-1.1/struct-image-10-t.svg
          LayoutTests/svg/carto.net/scrollbar.svg
          LayoutTests/svg/carto.net/selectionlist.svg

        selectionlist.svg should not crash.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged): Made EmptyPluginHalterClient non-static.

2009-10-16  Victor Wang  <victorw@chromium.org>

        Reviewed by David Levin.

        Add beforeload event support to V8DOMWrapper

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

        LayoutTests/fast/dom/beforeload/frame-before-load.html

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventToV8Object):

2009-10-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        MimeTypeRegistryChromium is mis-casen
        https://bugs.webkit.org/show_bug.cgi?id=30441

        Change the case of MimeTypeRegistryChromium to match other platforms.

        * WebCore.gypi:
        * platform/chromium/MIMETypeRegistryChromium.cpp: Copied from WebCore/platform/chromium/MimeTypeRegistryChromium.cpp.
        * platform/chromium/MimeTypeRegistryChromium.cpp: Removed.

2009-10-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Mark Rowe.

        Chrome doesn't set Content-Type for file upload when the file extension
        is not recognized
        https://bugs.webkit.org/show_bug.cgi?id=30433

        Apparently, getMIMETypeForPath is supposed to return
        application/octet-stream when it doesn't have a better MIME type.

        * platform/chromium/MimeTypeRegistryChromium.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForPath):

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

        Pull out r49676 as it caused build breakges on Symbian

        * plugins/symbian/PluginViewSymbian.cpp:

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

        Reviewed by Ariya Hidayat.

        Crash fix when loading NPAPI plugins on Qt/Mac

        There's no guarantee that the plist will be valid even if we
        ask the plugin to create it. Crash obverved with iGetter.

        * plugins/mac/PluginPackageMac.cpp:

2009-10-15  Stephen White  <senorblanco@chromium.org>

        Reviewed by David Levin.

        Fix for Chromium/skia's implementation of canvas's isPointInPath().
        https://bugs.webkit.org/show_bug.cgi?id=30402

        Covered by LayoutTests/fast/canvas/pointInPath.html.

        * platform/graphics/skia/SkiaUtils.cpp:
        (WebCore::SkPathContainsPoint):

2009-10-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Factor ResourceLoadNotifier out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=30379

        These methods have virtually no interaction with the rest of
        FrameLoader.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * dom/Document.cpp:
        (WebCore::Document::resourceRetrievedByXMLHttpRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):
        (WebCore::ResourceLoadNotifier::ResourceLoadNotifier):
        (WebCore::ResourceLoadNotifier::activeDocumentLoader):
        (WebCore::ResourceLoadNotifier::assignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::willSendRequest):
        (WebCore::ResourceLoadNotifier::didReceiveResponse):
        (WebCore::ResourceLoadNotifier::didReceiveData):
        (WebCore::ResourceLoadNotifier::didFailToLoad):
        (WebCore::ResourceLoadNotifier::didLoadResourceByXMLHttpRequest):
        (WebCore::FrameLoader::sendRemainingDelegateMessages):
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::ResourceLoadNotifier::didFinishLoad):
        (WebCore::ResourceLoadNotifier::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::dispatchAssignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveResponse):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveContentLength):
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::notifier):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::receivedError):
        * loader/ResourceLoadNotifier.cpp: Added.
        (WebCore::ResourceLoadNotifier::ResourceLoadNotifier):
        (WebCore::ResourceLoadNotifier::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::assignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::willSendRequest):
        (WebCore::ResourceLoadNotifier::didReceiveResponse):
        (WebCore::ResourceLoadNotifier::didReceiveData):
        (WebCore::ResourceLoadNotifier::didFinishLoad):
        (WebCore::ResourceLoadNotifier::didFailToLoad):
        (WebCore::ResourceLoadNotifier::didLoadResourceByXMLHttpRequest):
        (WebCore::ResourceLoadNotifier::dispatchAssignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveResponse):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveContentLength):
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):
        (WebCore::ResourceLoadNotifier::activeDocumentLoader):
        * loader/ResourceLoadNotifier.h: Added.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::didFinishLoadingOnePart):
        (WebCore::ResourceLoader::didFail):
        (WebCore::ResourceLoader::didCancel):
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoader::didCancelAuthenticationChallenge):

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

        Reviewed by Darin Fisher.

        Bug 30427 -  Remove unneeded methods in ChromiumDataObject
        (https://bugs.webkit.org/show_bug.cgi?id=30427)
        
        Remove no longer needed methods from ChromiumDataObject.

        No new tests (no functional change)

        * platform/chromium/ChromiumDataObject.h:

2009-10-16  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Need a way to inform the application when a Netscape plugin is created or deleted
        https://bugs.webkit.org/show_bug.cgi?id=30179

        Inform the application when a plugin is created or destroyed, but only if the 
        application registered for these notifications.

        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::platformDestroy):

2009-10-16  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Eric Seidel.

        Default language translation should be determined by locale settings,
        e.g., "en-US".
        https://bugs.webkit.org/show_bug.cgi?id=29653

        Test: fast/js/navigator-language.html

        * platform/qt/Localizations.cpp:
        (WebCore::defaultLanguage):

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

        Reviewed by Ariya Hidayat.

        Crash fix when loading NPAPI plugins on Qt/Mac

        There's no guarantee that the plist will be valid even if we
        ask the plugin to create it. Crash obverved with iGetter.

        * plugins/mac/PluginPackageMac.cpp:

2009-10-15  Stephen White  <senorblanco@chromium.org>

        Reviewed by David Levin.

        Fix for Chromium/skia's implementation of canvas's isPointInPath().
        https://bugs.webkit.org/show_bug.cgi?id=30402

        Covered by LayoutTests/fast/canvas/pointInPath.html.

        * platform/graphics/skia/SkiaUtils.cpp:
        (WebCore::SkPathContainsPoint):

2009-10-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Factor ResourceLoadNotifier out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=30379

        These methods have virtually no interaction with the rest of
        FrameLoader.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * dom/Document.cpp:
        (WebCore::Document::resourceRetrievedByXMLHttpRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):
        (WebCore::ResourceLoadNotifier::ResourceLoadNotifier):
        (WebCore::ResourceLoadNotifier::activeDocumentLoader):
        (WebCore::ResourceLoadNotifier::assignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::willSendRequest):
        (WebCore::ResourceLoadNotifier::didReceiveResponse):
        (WebCore::ResourceLoadNotifier::didReceiveData):
        (WebCore::ResourceLoadNotifier::didFailToLoad):
        (WebCore::ResourceLoadNotifier::didLoadResourceByXMLHttpRequest):
        (WebCore::FrameLoader::sendRemainingDelegateMessages):
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::ResourceLoadNotifier::didFinishLoad):
        (WebCore::ResourceLoadNotifier::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::dispatchAssignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveResponse):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveContentLength):
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::notifier):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::receivedError):
        * loader/ResourceLoadNotifier.cpp: Added.
        (WebCore::ResourceLoadNotifier::ResourceLoadNotifier):
        (WebCore::ResourceLoadNotifier::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::assignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::willSendRequest):
        (WebCore::ResourceLoadNotifier::didReceiveResponse):
        (WebCore::ResourceLoadNotifier::didReceiveData):
        (WebCore::ResourceLoadNotifier::didFinishLoad):
        (WebCore::ResourceLoadNotifier::didFailToLoad):
        (WebCore::ResourceLoadNotifier::didLoadResourceByXMLHttpRequest):
        (WebCore::ResourceLoadNotifier::dispatchAssignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveResponse):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveContentLength):
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):
        (WebCore::ResourceLoadNotifier::activeDocumentLoader):
        * loader/ResourceLoadNotifier.h: Added.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::didFinishLoadingOnePart):
        (WebCore::ResourceLoader::didFail):
        (WebCore::ResourceLoader::didCancel):
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoader::didCancelAuthenticationChallenge):

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

        Reviewed by Darin Fisher.

        Bug 30427 -  Remove unneeded methods in ChromiumDataObject
        (https://bugs.webkit.org/show_bug.cgi?id=30427)
        
        Remove no longer needed methods from ChromiumDataObject.

        No new tests (no functional change)

        * platform/chromium/ChromiumDataObject.h:

2009-10-15  Daniel Bates  <dbates@webkit.org>

        No review, rolling out r49644.
        http://trac.webkit.org/changeset/49644
        
        We need to think about this change some more. See bug #30418 
        for more details.

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canEvaluateJavaScriptURL):
        (WebCore::XSSAuditor::canCreateInlineEventListener):
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc):
        (WebCore::XSSAuditor::canLoadObject):
        (WebCore::XSSAuditor::canSetBaseElementURL):
        (WebCore::XSSAuditor::findInRequest):
        * page/XSSAuditor.h:

2009-10-14  Jon Honeycutt  <jhoneycutt@apple.com>

        Add SPI to determine whether a node is a halted plug-in.

        Part of <rdar://problem/7273354> Halted plug-ins should restart on
        mouseover

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

        Reviewed by Darin Adler.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        Initialize m_isHalted.

        * plugins/PluginView.h:
        (WebCore::PluginView::isHalted):
        Return m_isHalted.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::halt):
        Set m_isHalted to true.
        (WebCore::PluginView::restart):
        clear m_isHalted.

2009-10-15  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Oliver Hunt.

        [Qt] Build fix for QtWebKit after r49649.

        Change JSC::HasNonDefaultMark to OverridesMarkChildren in createStructure function.

        * bridge/qt/qt_runtime.h:
        (JSC::Bindings::QtRuntimeMethod::createStructure):

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

        Not reviewed - build fix.

        Web Inspector: add file missing in r49648

        * inspector/front-end/TestController.js: Added.
        (WebInspector.TestController):
        (WebInspector.TestController.prototype.waitUntilDone):
        (WebInspector.TestController.prototype.notifyDone):
        (WebInspector.evaluateForTestInFrontend):

2009-10-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Make typeinfo flags default to false
        https://bugs.webkit.org/show_bug.cgi?id=30372

        Part 2 -- Reverse the TypeInfo HasDefaultMark flag to OverridesMarkChildren, etc

        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWithGlobalPointer::createStructure):
        (WebCore::DOMConstructorObject::createStructure):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::createStructure):
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::createStructure):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        (WebCore::JSQuarantinedObjectWrapper::createStructure):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/qt/qt_runtime.h:
        (JSC::Bindings::QtRuntimeMethod::createStructure):
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::createStructure):

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

        Reviewed by Timothy Hatcher.

        Web Inspector: introduce test controller with waitUntilDone
        on frontend side.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/TestController.js: Added.
        (WebInspector.TestController):
        (WebInspector.TestController.prototype.waitUntilDone):
        (WebInspector.TestController.prototype.notifyDone):
        (WebInspector.evaluateForTestInFrontend):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:

2009-10-15  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=27895
        
        Fixes an issue in which injecting an inline event handler whose value ends in a single-line
        JavaScript comment can bypass the XSSAuditor. Similarly fixes this issue with respect to
        the HTML Base element, HTML Object element, inline and external script tags, and
        JavaScript multi-line variants of all of these attacks.

        Tests: http/tests/security/xssAuditor/base-href-comment.html
               http/tests/security/xssAuditor/iframe-javascript-url-comment.html
               http/tests/security/xssAuditor/img-onerror-HTML-comment.html
               http/tests/security/xssAuditor/img-onerror-comment.html
               http/tests/security/xssAuditor/object-tag-comment.html
               http/tests/security/xssAuditor/script-tag-comment-HTML-entity.html
               http/tests/security/xssAuditor/script-tag-comment.html
               http/tests/security/xssAuditor/script-tag-with-source-comment.html

        * page/XSSAuditor.cpp: Added constant minAttackLength.
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canEvaluateJavaScriptURL):
        (WebCore::XSSAuditor::canCreateInlineEventListener):
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc):
        (WebCore::XSSAuditor::canLoadObject):
        (WebCore::XSSAuditor::canSetBaseElementURL):
        (WebCore::XSSAuditor::findInRequest): Added parameter context. Only looks at up 
        to minAttackLength of script code plus context (if any).
        * page/XSSAuditor.h:

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

        Reviewed by Eric Seidel.

        Currently, Skia clip paths are 1-bit. This patch makes our path
        clipping anti-aliased for non-canvas drawing.

        http://code.google.com/p/chromium/issues/detail?id=5927
        https://bugs.webkit.org/show_bug.cgi?id=28820
        http://www.imperialviolet.org/2009/09/02/anti-aliased-clipping.html

        Already covered by layout tests. New baselines will be needed in the
        Chromium tree.

        (Reland. First landed in r49329, reverted in r49330 due to Windows
        build break)

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::clip):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::canvasClip):
        (WebCore::GraphicsContext::clipPath):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::clipPathAntiAliased):
        (PlatformContextSkia::restore):
        (PlatformContextSkia::applyAntiAliasedClipPaths):
        * platform/graphics/skia/PlatformContextSkia.h:
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::canvasClip):

2009-10-15  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7295738> No way to mute/unmute a movie in full screen video mode

        * WebCore.Video.exp: Export muted and setMute.

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

        Reviewed by Dan Bernstein.

        Transitions fail to run sometimes
        https://bugs.webkit.org/show_bug.cgi?id=26770

        Fix an issue where we could attempt to start accelerated animations or transitions on
        GraphicsLayer that were not rooted (because of visibility:hidden), which would leave
        the AnimationController's m_waitingForResponse flag in a state that killed subsequent
        software transitions.

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate):
        (WebCore::AnimationControllerPrivate::endAnimationUpdate):
        (WebCore::AnimationControllerPrivate::receivedStartTimeResponse):
        (WebCore::AnimationControllerPrivate::addToStartTimeResponseWaitList):
        (WebCore::AnimationControllerPrivate::startTimeResponse):
        * page/animation/AnimationControllerPrivate.h:
        Make some methods non-inline for ease of debugging (these are not hot methods).
        Rename m_waitingForAResponse to m_waitingForResponse.
        
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::hasAncestor):
        New method to report whether the receiver has the given layer as an ancestor. Used for checking
        whether a layer is rooted.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):
        Don't try to start accelerated animations or transitions on non-rooted GraphicsLayers.

2009-10-15  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Refactor ProfilesPanel to support multiple profile types

        Data describing different profile types are now stored in distinct objects.
        https://bugs.webkit.org/show_bug.cgi?id=30332

        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileView.profileCallback):
        (WebInspector.CPUProfileView):
        (WebInspector.CPUProfileView.prototype._sortData):
        (WebInspector.CPUProfileType):
        (WebInspector.CPUProfileType.prototype.get buttonTooltip):
        (WebInspector.CPUProfileType.prototype.get buttonStyle):
        (WebInspector.CPUProfileType.prototype.buttonClicked):
        (WebInspector.CPUProfileType.prototype.setRecordingProfile):
        (WebInspector.CPUProfile):
        (WebInspector.CPUProfile.prototype.get title):
        (WebInspector.CPUProfile.prototype.get uid):
        (WebInspector.CPUProfile.prototype.get head):
        (WebInspector.CPUProfile.prototype.createView):
        (WebInspector.CPUProfile.prototype.viewForProfile):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileType):
        (WebInspector.ProfileType.prototype.get buttonTooltip):
        (WebInspector.ProfileType.prototype.get buttonStyle):
        (WebInspector.ProfileType.prototype.get buttonCaption):
        (WebInspector.ProfileType.prototype.get id):
        (WebInspector.ProfileType.prototype.get name):
        (WebInspector.ProfileType.prototype.buttonClicked):
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.get statusBarItems.clickHandler):
        (WebInspector.ProfilesPanel.prototype.get statusBarItems):
        (WebInspector.ProfilesPanel.prototype.reset):
        (WebInspector.ProfilesPanel.prototype.registerProfileType):
        (WebInspector.ProfilesPanel.prototype._makeKey):
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        (WebInspector.ProfilesPanel.prototype.showProfile):
        (WebInspector.ProfilesPanel.prototype.getProfileType):
        (WebInspector.ProfilesPanel.prototype.showProfileForURL):
        (WebInspector.ProfilesPanel.prototype.updateProfileTypeButtons):
        (WebInspector.ProfilesPanel.prototype.displayTitleForProfileLink):
        (WebInspector.ProfilesPanel.prototype.get searchableViews):
        (WebInspector.ProfilesPanel.prototype._updateInterface):
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):
        (WebInspector.addProfileHeader):
        (WebInspector.setRecordingProfile):
        (WebInspector.linkifyStringAsFragment):
        (WebInspector.showProfileForURL):

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

        Reviewed by Timothy Hatcher.

        Web Inspector: Enable inspector layout tests.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::evaluateForTestInFrontend):

2009-10-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        [GStreamer] READY state doesn't mean "enough data"
        https://bugs.webkit.org/show_bug.cgi?id=30003

        STATE_READY means MediaPlayer::HaveNothing

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::updateStates):

2009-10-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

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

        implement cancelLoad

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::cancelLoad):

2009-10-15  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=30353
        
        Fix race condition, leading to a deadlock

        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_timeout_func):
        (webkit_video_sink_render):
        (unlock_buffer_mutex):
        (webkit_video_sink_unlock):
        (webkit_video_sink_unlock_stop):
        (webkit_video_sink_stop):
        (webkit_video_sink_start):
        (webkit_video_sink_class_init):
        Fix race condition in unlock/render that would lead to deadlocks.

2009-10-15  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=30374
        
        Check if caps are valid before parsing them

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::duration):
        Check if caps are valid before parsing them in ::naturalSize().
        This prevents assertions if the natural size should be calculated
        before the video caps are negotiated.

2009-10-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=30006
        [GStreamer] Unnecessary checks for Messages types in callbacks

        refactored gst message callbacks into a single one

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateMessageCallback):
        (WebCore::do_gst_init):
        (WebCore::MediaPlayerPrivate::duration):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2009-10-15  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Adele Peterson.

        Anchor elements should be mouse focusable regardless isLink flag.
        https://bugs.webkit.org/show_bug.cgi?id=26856

        * html/HTMLAnchorElement.cpp:
        * html/HTMLAnchorElement.h:

2009-10-15  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Sort XCode project file.

        * WebCore.xcodeproj/project.pbxproj:

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

        Reviewed by Dave Hyatt.

        Return correct shorthand property name for 
        background-repeat-x, background-repeat-y, background-position-x,
        background-position-y, -webkit-mask-position-x, -webkit-mask-position-y,
        -webkit-mask-repeat-x, -webkit-mask-repeat-y.

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

        Test: fast/backgrounds/repeat/background-repeat-shorthand.html

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

2009-10-14  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Migrate profiles to the injected script-based schema.

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

        * bindings/js/JSInspectorBackendCustom.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getProfileHeaders):
        (WebCore::InspectorBackend::getProfile):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::getProfileHeaders):
        (WebCore::InspectorController::getProfile):
        (WebCore::InspectorController::createProfileHeader):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addProfileHeader):
        (WebCore::InspectorFrontend::didGetProfileHeaders):
        (WebCore::InspectorFrontend::didGetProfile):
        * inspector/InspectorFrontend.h:
        * inspector/JavaScriptProfileNode.cpp:
        (WebCore::ProfileNodeClass):
        * inspector/front-end/ProfileView.js:
        (WebInspector.ProfileView.profileCallback):
        (WebInspector.ProfileView):
        (WebInspector.ProfileView.prototype._mouseDownInDataGrid):
        (WebInspector.ProfileView.prototype._assignParentsInProfile):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        * inspector/front-end/inspector.js:
        (WebInspector.addProfileHeader):

2009-10-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Create and update frontend script objects only when
        web inspector is visible.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addConsoleMessage):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::pruneResources):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::mainResourceFiredDOMContentEvent):
        (WebCore::InspectorController::mainResourceFiredLoadEvent):
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didReceiveContentLength):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorController::scriptImported):
        (WebCore::InspectorController::didOpenDatabase):
        (WebCore::InspectorController::didUseDOMStorage):
        (WebCore::InspectorController::evaluateForTestInFrontend):

2009-10-15  Joseph Pecoraro  <joepeck@webkit.org>

        Fix Windows build.

        * dom/Document.idl:

2009-10-14  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Adam Barth.

        [HTML5] Add document.head
        https://bugs.webkit.org/show_bug.cgi?id=30232

        Test is fast/dom/document-head.html

        * dom/Document.idl: added readonly attribute head

2009-10-14  Matt Mueller  <mattm@chromium.org>

        Reviewed by Darin Adler.

        Check FNonNeg after the unit switch to avoid valgrind uninitialised conditional reference in WebCore::CSSParser::validUnit.  See http://crbug.com/20939.
        https://bugs.webkit.org/show_bug.cgi?id=30347
        https://bugs.webkit.org/show_bug.cgi?id=22772

        Covered by running LayoutTests/fast/css/invalid-percentage-property.html under valgrind.

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

2009-10-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Move scrolling code from FrameLoader to FrameView
        https://bugs.webkit.org/show_bug.cgi?id=30370

        This code is about controlling the Frame's view, not about loading
        stuff into the frame.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedParsing):
        (WebCore::FrameLoader::scrollToAnchor):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToFragment):
        (WebCore::FrameView::scrollToAnchor):
        * page/FrameView.h:

2009-10-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Make typeinfo flags default to false
        https://bugs.webkit.org/show_bug.cgi?id=30372
        
        Part 1. Reverse the HasStandardGetOwnPropertySlot flag.

        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWithGlobalPointer::createStructure):
        (WebCore::DOMConstructorObject::createStructure):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::createStructure):
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::createStructure):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        (WebCore::JSQuarantinedObjectWrapper::createStructure):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/objc/objc_runtime.h:
        (JSC::Bindings::ObjcFallbackObjectImp::createStructure):
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::createStructure):
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::createStructure):
        * bridge/runtime_object.h:
        (JSC::RuntimeObjectImp::createStructure):

2009-10-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        [XSSAuditor] Add an exception for local files
        https://bugs.webkit.org/show_bug.cgi?id=30352

        Reduce XSS auditor false positives by always letting pages load scripts
        from their own host. We don't actually know of any false positives
        that this prevents, but it seems like a good idea.

        One subtly is that we don't add this exception for scripts that have a
        query string because (1) URLs with query strings are more apt to
        confuse servers and (2) it is much less common to load scripts with a
        query string.

        Tests: http/tests/security/xssAuditor/script-tag-with-source-same-host-with-query.html
               http/tests/security/xssAuditor/script-tag-with-source-same-host.html

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc):

2009-10-14  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by George Staikos.

        Kill virtual contextElement() method spread all over SVG code
        https://bugs.webkit.org/show_bug.cgi?id=30183

        Remove virtual contextElement() function from all SVG*Element classes, as all animated properties live in the
        SVG*Element classes now instead of the SVGFitToViewBox / SVGURIReference / SVGExternalResourcesRequired
        subclasses. This is a first step to working animVal support. More patches will follow that depend on this change.

        Remove "This file is part of the KDE project" from several files, change my old mail adress wildfox -> zimmermann,
        and remove vim modelines on all files I touched. No change in functionality, thus no new tests.

        * svg/SVGAElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGAltGlyphElement.h: Remove virtual contextElement() method.
        * svg/SVGAnimatedProperty.h:
        (WebCore::::synchronize):
        (WebCore::::startAnimation):
        (WebCore::::stopAnimation):
        * svg/SVGAnimationElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGCircleElement.h: Ditto.
        * svg/SVGClipPathElement.h: Ditto.
        * svg/SVGCursorElement.h: Ditto.
        * svg/SVGDefsElement.h: Ditto.
        * svg/SVGEllipseElement.h: Ditto.
        * svg/SVGExternalResourcesRequired.h: Remove pure-virtual contextElement() method.
        * svg/SVGFEImageElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGFELightElement.h: Remove virtual contextElement() method.
        * svg/SVGFEMergeNodeElement.h: Ditto.
        * svg/SVGFilterElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGFilterPrimitiveStandardAttributes.h: Remove virtual contextElement() method.
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox): Add Document* parameter - we used to fetch the Document pointer from the context element.
        (WebCore::SVGFitToViewBox::parseMappedAttribute): Ditto.
        * svg/SVGFitToViewBox.h: Remove pure-virtual contextElement() method.
        * svg/SVGFontElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGForeignObjectElement.h: Ditto.
        * svg/SVGGElement.h: Ditto.
        * svg/SVGGradientElement.h: Ditto.
        * svg/SVGImageElement.h: Ditto.
        * svg/SVGLineElement.h: Ditto.
        * svg/SVGMPathElement.h: Ditto. Fix license indention.
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::parseMappedAttribute): Pass document() to SVGFitToViewBox::parseMappedAttribute().
        * svg/SVGMarkerElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGMaskElement.h: Ditto.
        * svg/SVGPathElement.h: Ditto.
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::parseMappedAttribute): Pass document() to SVGFitToViewBox::parseMappedAttribute().
        * svg/SVGPatternElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::updateAnimatedSVGAttribute): synchronizeProperty<...>() has been renamed to PropertySynchronizer<...>::synchronize().
        * svg/SVGPolyElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGRectElement.h: Ditto.
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute): Pass document() to SVGFitToViewBox::parseMappedAttribute().
        * svg/SVGSVGElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGScriptElement.h: Ditto.
        * svg/SVGSwitchElement.h: Ditto.
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::parseMappedAttribute): Pass document() to SVGFitToViewBox::parseMappedAttribute().
        * svg/SVGSymbolElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGTRefElement.h: Remove virtual contextElement() method.
        * svg/SVGTextContentElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGTextPathElement.h: Remove virtual contextElement() method.
        * svg/SVGUseElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::parseMappedAttribute): Pass document() to SVGFitToViewBox::parseMappedAttribute().
        * svg/SVGViewElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::setViewBoxString): Pass document() to SVGFitToViewBox::parseMappedAttribute().
        (WebCore::SVGViewSpec::parseViewSpec): Ditto.
        * svg/SVGViewSpec.h: Devirtualize contextElement() method, it's the only place where contextElement() remains needed.

2009-10-14  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG Masking with wrong offset
        [https://bugs.webkit.org/show_bug.cgi?id=30325]

        SVGMaskElement moves the mask image graphics context to the wrong location.
        In objectBoundingBoxMode the maskDestRect gets translated. This transformation
        is not used in the later calculation. Fix by consistenly calculating the translation
        offsets from the final mask destination rect.

        Test: svg/custom/mask-with-default-value.svg

        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):

2009-10-14  Kevin Decker  <kdecker@apple.com>

        Rubberstamped by Jon Honeycutt.
        
        Export a few more showSubstituteImage() related methods.
        
        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:

2009-10-14  Evan Martin  <evan@chromium.org>

        Reviewed by Darin Adler.

        Stringify CSS units manually (without printf) to make the formatting
        locale-insensitive and obey CSS spec with respect to large values.
        
        https://bugs.webkit.org/show_bug.cgi?id=18994

        * css/CSSPrimitiveValue.cpp:
        (WebCore::appendCSSDouble):
        (WebCore::formatWithUnits):
        (WebCore::CSSPrimitiveValue::cssText):

2009-10-14  Mark Seaborn  <mseaborn@google.com>

        Reviewed by Darin Adler.

        Check error return value in Perl build script
        https://bugs.webkit.org/show_bug.cgi?id=30316

        * css/makevalues.pl: Die if gperf fails.

2009-10-14  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG wrong filterRegions for userSpaceOnUse and percentage values
        [https://bugs.webkit.org/show_bug.cgi?id=30330]

        Some clean-up of the SVG filter calculation code. This clean-up
        also fixes the problem with percentage and userSpaceInUse mode.

        Test: svg/filters/subRegion-in-userSpace.svg

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::FilterEffect):
        * platform/graphics/filters/FilterEffect.h:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::filterBoundingBoxForRenderer):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::buildFilter):
        (WebCore::SVGFilterElement::canvasResource):
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
        * svg/graphics/SVGResourceFilter.cpp:
        (WebCore::SVGResourceFilter::SVGResourceFilter):
        (WebCore::SVGResourceFilter::~SVGResourceFilter):
        (WebCore::SVGResourceFilter::addFilterEffect):
        (WebCore::SVGResourceFilter::prepareFilter):
        * svg/graphics/SVGResourceFilter.h:
        (WebCore::SVGResourceFilter::create):
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::SVGFilter):
        (WebCore::SVGFilter::calculateEffectSubRegion):
        (WebCore::SVGFilter::create):
        * svg/graphics/filters/SVGFilter.h:

2009-10-14  Chris Marrin  <cmarrin@apple.com>

        The last change fixed the problem, removing diagnostic printfs.

        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2009-10-14  Kevin Ollivier  <kevino@theolliviers.com>

        CURL build fix for versions < 7.18.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setDefersLoading):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::initializeHandle):

2009-10-14  Chris Marrin  <cmarrin@apple.com>

        One more round of changes to figure out why the webgl 
        tests are crashing on the build bot. Here I am trying
        to see if we can create a software renderer. I am also
        printing the found pixel formats.

        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2009-10-14  Yael Aharon  <yael.aharon@nokia.com>
 
        Reviewed by Simon Hausmann.
 
        Enabling NPAPI plugin support on Qt Webkit for S60 platform
        https://bugs.webkit.org/show_bug.cgi?id=29302

        Also implemented by Mahesh Kulkarni<mahesh.kulkarni@nokia.com>, 
        Rohini Ananth <rohini.ananth@nokia.com> and help from Norbert Lesr
        <norbert.leser@nokia.com>
         
        * WebCore.pro:
        Enabling ENABLE_NETSCAPE_PLUGIN_API for S60 and added S60 specific 
        new plugin files to be compiled under symbian: macro

        * bridge/npapi.h:
        Added NPEvent and NPRegion definition for Symbian

        * plugins/PluginPackage.h:
        Added S60 specific plugin interface and plugin loader variables
        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::unload): Added !PLATFORM(SYMBIAN) macro.
        Default implementation to be used only for non-symbian platform
        * plugins/PluginDatabase.cpp:
        Macro !SYMBIAN checking
        * plugins/PluginView.h:
        Add Symbian to platforms that support setNPWindowIfNeeded
        * plugins/PluginView.cpp:
        (WebCore::PluginView::setFrameRect): Add Symbian to platforms that
        call setNPWindowRect from setFrameRect
         
        Added folder 'symbian' which contains implementation files for S60
        platform-specific NPAPI plugin functionality, under /plugins folder
        * plugins/symbian
        * plugins/symbian/npinterface.h:
        Plugin Interface to be implemented by S60 NPAPI plugins 
        * plugins/symbian/PluginContainerSymbian.h:
        * plugins/symbian/PluginContainerSymbian.cpp:
        * plugins/symbian/PluginDatabaseSymbian.cpp:
        * plugins/symbian/PluginViewSymbian.cpp:
        * plugins/symbian/PluginPackageSymbian.cpp:

2009-10-14  Chris Marrin  <cmarrin@apple.com>

        More changes to figure out why the webgl tests are crashing on the build bot.

        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2009-10-14  Victor Wang  <victorw@chromium.org>

        Reviewed by David Hyatt.

        Round non-integer line height values.

        Change webkit to rounding non-integer line height values
        instead of truncating them. This fixes a layout test
        failure on Windows and matches the calculation in IE and Firefox. 

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

        Test: fast/css/line-height-rounding.html
              fast/forms/textarea-scrollbar-height.htm

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        * rendering/RenderBR.cpp:
        (WebCore::RenderBR::lineHeight):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::computedLineHeight):

2009-10-13  Kelly Norton  <knorton@google.com>

        Reviewed by Pavel Feldman.

        Removes the persistent setting for InspectorTimelineAgent and renames timeline related
        interfaces to be more consistent with the JavaScript profiler.

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::startTimelineProfiler):
        (WebCore::InspectorBackend::stopTimelineProfiler):
        (WebCore::InspectorBackend::timelineProfilerEnabled):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::startTimelineProfiler):
        (WebCore::InspectorController::stopTimelineProfiler):
        (WebCore::InspectorController::timelineProfilerEnabled):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::timelineProfilerWasStarted):
        (WebCore::InspectorFrontend::timelineProfilerWasStopped):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/TimelineAgent.js:
        (WebInspector.timelineProfilerWasStarted):
        (WebInspector.timelineProfilerWasStopped):

2009-10-01  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Adele Peterson.

        Fix crash when loading invalid image data
        https://bugs.webkit.org/show_bug.cgi?id=29980

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::setImageSizeForAltText):

2009-10-09  Stephen White  <senorblanco@chromium.org>

        Reviewed by Eric Seidel.

        Fix for NULL ptr deref in canvas's toDataURL().
        https://bugs.webkit.org/show_bug.cgi?id=30254

        Test: fast/canvas/canvas-toDataURL-crash.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toDataURL):

2009-10-14  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed, reverting r49558 since it broke profiler tests.

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

        * bindings/js/JSInspectorBackendCustom.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getProfileHeaders):
        (WebCore::InspectorBackend::getProfile):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::getProfileHeaders):
        (WebCore::InspectorController::getProfile):
        (WebCore::InspectorController::createProfileHeader):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addProfileHeader):
        (WebCore::InspectorFrontend::didGetProfileHeaders):
        (WebCore::InspectorFrontend::didGetProfile):
        * inspector/InspectorFrontend.h:
        * inspector/JavaScriptProfileNode.cpp:
        (WebCore::ProfileNodeClass):
        * inspector/front-end/ProfileView.js:
        (WebInspector.ProfileView.profileCallback):
        (WebInspector.ProfileView):
        (WebInspector.ProfileView.prototype._mouseDownInDataGrid):
        (WebInspector.ProfileView.prototype._assignParentsInProfile):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        * inspector/front-end/inspector.js:
        (WebInspector.addProfileHeader):

2009-10-13  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        ImageDecoderQt: Minor tweaks to the decoder

        - Only cache the data when we start to use it.
        - Start with a repetition count of none for normal images.
        - Do not use canRead as this will trigger parsing of the full image
        - Cope with a GIF failing to decode the first frame, do not
          set m_failed to true if decoding the first frame failed
        - Inform the QImageReader about the format that was detected
        - Always create a ImageDecoderQt when when we have more
        than four byte.


        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoder::create): Always create QImageReader for a significant speed up
        (WebCore::ImageDecoderQt::ImageDecoderQt): Initialize m_repetitionCount to cAnimationNone
        (WebCore::ImageDecoderQt::setData): Only call ImageDecoder::setData when everything has been received
        (WebCore::ImageDecoderQt::isSizeAvailable): Do not check m_failed twice.
        (WebCore::ImageDecoderQt::filenameExtension): Convert from QByteArray to String
        (WebCore::ImageDecoderQt::frameBufferAtIndex): Check for m_failed before trying to decode
        (WebCore::ImageDecoderQt::internalDecodeSize): Fail if the size is QSize()
        (WebCore::ImageDecoderQt::forceLoadEverything): Handle the case were decoding the first frame fails
        * platform/graphics/qt/ImageDecoderQt.h: Change the m_format type

2009-10-14  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Migrate profiles to the injected script-based schema.

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

        * bindings/js/JSInspectorBackendCustom.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getProfileHeaders):
        (WebCore::InspectorBackend::getProfile):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::getProfileHeaders):
        (WebCore::InspectorController::getProfile):
        (WebCore::InspectorController::createProfileHeader):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addProfileHeader):
        (WebCore::InspectorFrontend::didGetProfileHeaders):
        (WebCore::InspectorFrontend::didGetProfile):
        * inspector/InspectorFrontend.h:
        * inspector/JavaScriptProfileNode.cpp:
        (WebCore::ProfileNodeClass):
        * inspector/front-end/ProfileView.js:
        (WebInspector.ProfileView.profileCallback):
        (WebInspector.ProfileView):
        (WebInspector.ProfileView.prototype._mouseDownInDataGrid):
        (WebInspector.ProfileView.prototype._assignParentsInProfile):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        * inspector/front-end/inspector.js:
        (WebInspector.addProfileHeader):

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

        Reviewed by Pavel Feldman.

        Don't collect call frame properties until they're needed for completion.

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.getCompletions): if call frame id is specified and the expression is empty collect frame properties.
        (InjectedScript.CallFrameProxy.prototype._wrapScopeChain): don't send call frame properties until they're needed.
        * inspector/front-end/ScriptsPanel.js:

2009-10-13  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Ariya Hidayat.

        https://bugs.webkit.org/show_bug.cgi?id=29106
        [Qt] make CachedResourceHandle.h compile in winscw Symbian compiler.

        Don't inline constructor CachedResourceHandle<T>(R*) to stop winscw
        compiler aggressively resolve inheritance of class R.  
        
        The winscw compiler bug is reported at:
        https://xdabug001.ext.nokia.com/bugzilla/show_bug.cgi?id=9812.
        
        The change should be reverted when the above bug is fixed in winscw compiler.

        * loader/CachedResourceHandle.h:
        (WebCore::::CachedResourceHandle):

2009-10-13  Dimitri Glazkov  <dglazkov@chromium.org>

        No review, rolling out r49554, because it broke Win and Chromium builds.
        http://trac.webkit.org/changeset/49554

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText):

2009-10-13  Evan Martin  <evan@chromium.org>

        Reviewed by Adam Barth.

        Stringify CSS units manually (without printf) to make the formatting
        locale-insensitive and obey CSS spec with respect to large values.
        
        https://bugs.webkit.org/show_bug.cgi?id=18994

        * css/CSSPrimitiveValue.cpp:
        (WebCore::appendCSSDouble):
        (WebCore::formatWithUnits):
        (WebCore::CSSPrimitiveValue::cssText):

2009-10-13  Evan Martin  <evan@chromium.org>

        Reviewed by David Levin.

        Make grippy lines vertical on horizontal scrollbars in Linux Chrome.
        While we're rebaselining scrollbars, fix an off by one in the vertical
        scrollbar rendering too.

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

        Tests: this is covered by every pixel test involving scrollbars.

        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarThemeChromiumLinux::paintThumb):

2009-10-13  Sam Weinig  <sam@webkit.org>

        Reviewed by David Hyatt.

        Fix issue where clientX and clientY on MouseEvents were wrong when
        the page was zoomed and scrolled.

        Test: fast/events/clientXY-in-zoom-and-scroll.html

        * dom/MouseRelatedEvent.cpp:
        (WebCore::contentsX): Take page zoom into account.
        (WebCore::contentsY): Ditto.

2009-10-13  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Change the order of arguments on some of the user stylesheet/script functions.  Split the removal functions
        out into separate ones for scripts and stylesheets.

        * WebCore.base.exp:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserScriptToWorld):
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        (WebCore::PageGroup::removeUserScriptFromWorld):
        (WebCore::PageGroup::removeUserStyleSheetFromWorld):
        (WebCore::PageGroup::removeUserScriptsFromWorld):
        (WebCore::PageGroup::removeUserStyleSheetsFromWorld):
        * page/PageGroup.h:
        (WebCore::PageGroup::userScripts):
        (WebCore::PageGroup::userStyleSheets):

2009-10-13  Evan Martin  <evan@chromium.org>

        Reviewed by Dmitry Titov.

        Chrome's "Skia" theme paints select controls backwards in RTL.

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

        Test: fast/text/international/bidi-menulist.html
        (The test is about something else, but it includes RTL selects.)

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintMenuList): flip the arrow position in RTL case.

2009-10-13  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=30318
        ScriptExecutionContext is not anymore needed to create an EventListener - remove old code.
        It's a followup to r48884. It removed the need to pass the ScritpExecutionContext
        into EventListener constructor but did not remove the code pulling ScriptExecutionContext.

        Tests:
        Test adds event listener to a DocumentType Node which is created without a document
        and then dispatches the event after attaching a node to the tree. Event
        should fire when node is attached to the tree.

        * fast/events/add-event-without-document-expected.txt: Added.
        * fast/events/add-event-without-document.html: Added.

        All changes in files below are the same - remove the code that calls
        EventTarget::scriptExecutionContext and checks it for NULL.

        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::addEventListener):
        (WebCore::JSAbstractWorker::removeEventListener):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDesktopNotificationsCustom.cpp:
        (WebCore::JSNotification::addEventListener):
        (WebCore::):
        * bindings/js/JSEventSourceCustom.cpp:
        (WebCore::JSEventSource::addEventListener):
        (WebCore::JSEventSource::removeEventListener):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocket::addEventListener):
        (WebCore::JSWebSocket::removeEventListener):

2009-10-13  Drew Wilson  <atwilson@atwilson-macpro.local>

        Reviewed by David Levin.

        Enable SHARED_WORKERS for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=30289

        Cleaned up bitrot in SharedWorker V8 bindings.

        * WebCore.gypi:
        Removed default implementation of SharedWorkerRepository so Chromium can provide its own.
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        Added V8SharedWorkerContext.cpp.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        Added case statements for SHAREDWORKER and SHAREDWORKERCONTEXT.
        * bindings/v8/V8Index.cpp:
        Now includes V8SharedWorkerContext.h to allow supporting SharedWorkers.
        * bindings/v8/V8Index.h:
        Added definition for SHAREDWORKERCONTEXT wrapper.
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        Added includes for SharedWorker.h and SharedWorkerContext.h.
        * bindings/v8/custom/V8CustomBinding.h:
        Reorganized Worker field indexes to be clearer, and fixed mismatch in worker field index.
        Also added field indexes for SharedWorkers.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        Added runtime enabler for the SharedWorker constructor.
        * bindings/v8/custom/V8SharedWorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        Cleaned up bitrot (various APIs have changed since this file was written).
        * page/DOMWindow.idl:
        Added EnabledAtRuntime flag to window.SharedWorker.

2009-10-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=30345
        HTTP tests for credential handling fail on Tiger

        We cannot prevent NSURLConnection from doing its credentil handling on Tiger anyway; so
        let it do its work without intervention. Once again, we pass explicitly passed credentials
        in URL, fixing regressions from Safari 3.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):

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

        Reviewed by Adam Barth.

        Bug 28964 -  [Chromium] ChromiumDataObject should have getter/setter interface

        Reworked and added to the getter/setter interface in ChromiumDataObject:
        - added contains...() methods to just query the state
        - added containsValid...URL() methods for URL data members
        - removed takeFileNames() as this was too type-dependent
        - changed return type of fileNames() to Vector<String>
        - added interface methods to allow appending to and iteration over file names

        No new tests (no functional behavior changed).

        * platform/chromium/ChromiumDataObject.h:
        (WebCore::ChromiumDataObject::containsMainURL):
        (WebCore::ChromiumDataObject::containsValidMainURL):
        (WebCore::ChromiumDataObject::containsMainURLTitle):
        (WebCore::ChromiumDataObject::containsTextPlain):
        (WebCore::ChromiumDataObject::containsTextHTML):
        (WebCore::ChromiumDataObject::containsHTMLBaseURL):
        (WebCore::ChromiumDataObject::containsValidHTMLBaseURL):
        (WebCore::ChromiumDataObject::containsContent):
        (WebCore::ChromiumDataObject::containsContentFileExtension):
        (WebCore::ChromiumDataObject::containsContentFileName):
        (WebCore::ChromiumDataObject::setContentFileName):
        (WebCore::ChromiumDataObject::containsFileNames):
        (WebCore::ChromiumDataObject::fileNames):
        (WebCore::ChromiumDataObject::clearFileNames):
        (WebCore::ChromiumDataObject::countFileNames):
        (WebCore::ChromiumDataObject::fileNameAt):
        (WebCore::ChromiumDataObject::setFileNames):
        (WebCore::ChromiumDataObject::appendToFileNames):
        (WebCore::ChromiumDataObject::popFileName):

2009-10-13  Simon Fraser  <simon.fraser@apple.com>

        Temporary debugging changes to figure out why the webgl tests are crashing on the build bot.

        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2009-10-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Visibility:visible inside a compositing layer doesn't make the element visible
        https://bugs.webkit.org/show_bug.cgi?id=30339
        
        When deciding if a layer had any renderable content, RenderLayerBacking::paintIntoLayer()
        only consulted hasVisibleContent(), which does not take into a account child layers which
        may be visible. We also have to consult hasVisibleDescendant() as well.

        Test: compositing/compositing-visible-descendant.html

        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::hasVisibleDescendant):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):

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

        Reviewed by Simon Hausmann.

        Refactor ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH
        https://bugs.webkit.org/show_bug.cgi?id=30278

        Move the definition of ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH 
        from the make system into common code.

        Enable ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH if NETSCAPE_PLUGIN_API 
        support is not enabled.

        Remove notImplemented() from PluginPackageNone.cpp and 
        PluginDataNone.cpp make them just empty functions.

        * GNUmakefile.am:
        * WebCore.pro:
        * plugins/PluginDataNone.cpp:
        (WebCore::PluginData::initPlugins):
        (WebCore::PluginData::refresh):
        * plugins/PluginPackageNone.cpp:
        (WebCore::PluginPackage::determineQuirks):
        (WebCore::PluginPackage::fetchInfo):
        (WebCore::PluginPackage::load):

2009-10-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=30150
        <rdar://problem/7283540> REGRESSION: Crash when accessing clipboardData.types

        Test: editing/pasteboard/crash-accessing-clipboardData-types.html

        * platform/mac/ClipboardMac.mm: (WebCore::addHTMLClipboardTypesForCocoaType): The String
        class doesn't have operator bool, it's operator NSString* that is invoked instead, and it
        converts null strings to non-null @"".

2009-10-13  Drew Wilson  <atwilson@atwilson-macpro.local>

        Reviewed by Dimitri Glazkov.

        window attributes (like localStorage) that are disabled at runtime are still visible
        https://bugs.webkit.org/show_bug.cgi?id=30240

        Adding codegen/bindings to support runtime disabling of attributes.

        No new tests (only supported by chrome currently)

        * bindings/scripts/CodeGeneratorV8.pm:
        Refactored the guts of GenerateBatchedAttributeData into a separate GenerateSingleBatchedAttribute with a passed-in indentation level to allow generating a single BatchedAttribute struct.
        Added support for the EnabledAtRuntime extended attribute, which generates a call to the appropriate XXXXEnabled() API before adding the attribute to the instance.
        * bindings/v8/V8Proxy.cpp:
        (WebCore::batchConfigureAttributes):
        Refactored attribute setting code into a common inline routine.
        * bindings/v8/V8Proxy.h:
        (WebCore::configureAttribute):
        Inline function which configures a single attribute given a BatchedAttribute struct.
        * bindings/v8/custom/V8CustomBinding.h:
        Added (DECLARE_)ACCESSOR_RUNTIME_ENABLER to allow enabling attributes at runtime.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        Added code to enable window.Audio only if MediaPlayer.isAvailable() == true
        * page/DOMWindow.idl:
        Added [EnabledAtRuntime] extended attribute to the Audio attribute.

2009-10-13  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=27457
        Added support for static validation on type=email input elements as per
        HTML5 specs:
        http://www.whatwg.org/specs/web-apps/current-work/#e-mail-state

        Test: fast/forms/ValidityState-typeMismatch-email.html

        * html/ValidityState.cpp:
        (WebCore::ValidityState::typeMismatch): ValidityState.typeMismatch
        performs validation on type=email input elements now.
        (WebCore::ValidityState::isValidEmailAddress): simple validation method 
        * html/ValidityState.h:

2009-10-13  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Adam Barth.

        Event listeners installed on a window object returned from window.open() don't work
        https://bugs.webkit.org/show_bug.cgi?id=28716

        Tests: http/tests/security/window-events-clear-domain.html
               http/tests/security/window-events-clear-port.html
               http/tests/security/window-events-pass.html

        * dom/Document.cpp: Split code of Document::clear() in a way to avoid removing all
        window event handlers when implicitOpen is called. It is called in 2 cases - on
        committing loaded content (no need to clean handlers) and on document.open() (needs to remove handlers).

        (WebCore::Document::open): in addition to calling implicitOpen it also removes window
        event handlers, to preserve the behavior of document.open().

        (WebCore::Document::implicitOpen): includes the part of removed Document::clear() that
        does not remove window event handlers.

        * dom/Document.h: Removed clear().

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading): add check to avoid removing window event handlers
        if we transition from temporary empty document to a loaded one.

        (WebCore::FrameLoader::didOpenURL): Remove closeURL() which was called twice when loading.
        (WebCore::FrameLoader::finishedLoadingDocument): add closeURL() to compensate for change above.

2009-10-13  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Pavel Feldman.

        Fix a leak in the inspector by calling didRemoveNode with
        an error code when it fails, instead of returning from the
        Backend.

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::removeNode):
        * inspector/front-end/ElementsTreeOutline.js:

2009-10-13  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30337>.
        Web Inspector: Should be able to delete nodes from the Elements Tree.
        
        When the delete key is pressed and a element is selected in the tree,
        the element should be deleted from the Elements Tree and the DOM.

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::removeNode):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didRemoveNode):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._updateModifiedNodes):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.handleKeyEvent):

2009-10-13  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fix REGRESSION(49479): Mouseover on resources graph doesn't show timings.
        
        Set pointer-events: none on the new overlay so mouseover events are passed
        to the resources graph so we can show timings.

        * inspector/front-end/inspector.css:

2009-10-13  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Plugins : Remove all traces of winId. Use ownerWidget() instead.
        
        This is a bug for two reasons:
        1. Everytime we use winId(), we end up creating a native widget. This causes an
        unnecessary copy of contents from the backing store to the native widget.
        2. Neither windowed nor windowless plugins require the winId of the QWebView or
        QGraphicsView.
        
        Introduce ownerWidget() which returns a QWidget * without creating a native widget
        (as opposed to QWidget::find(winId)).

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

        * platform/qt/PlatformScreenQt.cpp:
        (WebCore::screenDepthPerComponent):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::show):
        * platform/qt/QWebPageClient.h:
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::setSharedXEventFields):
        (WebCore::PluginView::initXEvent):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::platformStart):

2009-10-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed build system fix. Typo in a filename.

        * GNUmakefile.am:

2009-10-12  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.
        Alter profile link format to enable multiple profile types
        https://bugs.webkit.org/show_bug.cgi?id=30253

        The new profile URL includes the profile type along with the
        profile title and uid.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addProfileFinishedMessageToConsole):
        (WebCore::InspectorController::addStartProfilingMessageToConsole):
        * inspector/front-end/inspector.js:
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):
        (WebInspector.linkifyStringAsFragment):

2009-10-12  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Fix same-named profiles grouping in the Profiles panel.

        The tree node re-parenting while adding a new group node was broken.
         
        https://bugs.webkit.org/show_bug.cgi?id=30299

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.addProfile):

2009-10-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Enforce async interaction between inspector controller and frontend.

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

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

2009-10-12  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Sam Weinig.

        Fix issue caretRangeFromPoint() returns wrong result for a zoomed and 
        scrolled page.
        https://bugs.webkit.org/show_bug.cgi?id=30034

        * dom/Document.cpp:
        (WebCore::Document::elementFromPoint): calculate the correct point 
        relative to document when the page is zoomed and scrolled.
        (WebCore::Document::caretRangeFromPoint): calculate the correct point 
        relative to document when the page is zoomed and scrolled.

2009-10-12  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Sam Weinig.

        JavaScript bindings of WebSocket addEventListener/removeEventListener
        https://bugs.webkit.org/show_bug.cgi?id=29841

        Test: fast/websockets/websocket-event-target.html

        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocket::addEventListener):
        (WebCore::JSWebSocket::removeEventListener):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * websockets/WebSocket.idl:

2009-10-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=29078
        <rdar://problem/7288221>

        Add a mechanism to blacklist certain codecs.  Initially, just blacklist UTF-7 as HTML5 encourages.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::pruneBlacklistedCodecs):
        (WebCore::buildBaseTextCodecMaps):
        (WebCore::extendTextCodecMaps):

2009-10-09  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        Add support for the beforeload event to frames.  Complete support of the beforeload event by making sure
        its wrapper gets properly constructed (so that the URL field of the event can be accessed).  Add support
        for the Objective-C wrapper class as well.

        Added fast/dom/beforeload/frame-before-load.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/objc/DOMEvents.mm:
        (kitClass):
        * dom/BeforeLoadEvent.h:
        (WebCore::BeforeLoadEvent::isBeforeLoadEvent):
        * dom/Event.cpp:
        (WebCore::Event::isBeforeLoadEvent):
        * dom/Event.h:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseMappedAttribute):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadWithDocumentLoader):

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

        Reviewed by Simon Fraser.

        Fix <rdar://problem/7094146> Reproducible crash at
        RenderObject::localToAbsolute()

        Test: fast/dynamic/position-absolute-to-fixed-crash.html

        The crash was caused by stale positioned objects lists following an
        object transitioning from being absolutely position to being fixed
        positioned.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange): In case of a transition between
        absolute and fixed position, mark the parent as having a child needing
        layout, so that this object will get inserted into its new container's
        positioned objects list.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange): Changed a condition to cover
        this transition, so that this object gets removed from its current
        container's positioned objects list.

2009-10-12  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Add a palette() method that is needed by our RenderTheme.

        * platform/qt/QWebPageClient.h:

2009-10-12  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG Gradients can't handle percentage values in userSpaceOnUse mode
        [https://bugs.webkit.org/show_bug.cgi?id=30286]

        Fixed *GradientAttributes to take SVGLength instead of double. This casues
        the problem, that we can't calculate the correct size of a gradient on
        userSpaceOnUse mode with percentage values.

        Test: svg/custom/gradient-userSpaceOnUse-with-percentage.svg

        * svg/LinearGradientAttributes.h:
        (WebCore::LinearGradientAttributes::LinearGradientAttributes):
        (WebCore::LinearGradientAttributes::x1):
        (WebCore::LinearGradientAttributes::y1):
        (WebCore::LinearGradientAttributes::x2):
        (WebCore::LinearGradientAttributes::y2):
        (WebCore::LinearGradientAttributes::setX1):
        (WebCore::LinearGradientAttributes::setY1):
        (WebCore::LinearGradientAttributes::setX2):
        (WebCore::LinearGradientAttributes::setY2):
        * svg/RadialGradientAttributes.h:
        (WebCore::RadialGradientAttributes::RadialGradientAttributes):
        (WebCore::RadialGradientAttributes::cx):
        (WebCore::RadialGradientAttributes::cy):
        (WebCore::RadialGradientAttributes::r):
        (WebCore::RadialGradientAttributes::fx):
        (WebCore::RadialGradientAttributes::fy):
        (WebCore::RadialGradientAttributes::setCx):
        (WebCore::RadialGradientAttributes::setCy):
        (WebCore::RadialGradientAttributes::setR):
        (WebCore::RadialGradientAttributes::setFx):
        (WebCore::RadialGradientAttributes::setFy):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::buildGradient):
        (WebCore::SVGLinearGradientElement::collectGradientProperties):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        (WebCore::SVGRadialGradientElement::collectGradientProperties):

2009-10-12  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <http://webkit.org/b/30315>.
        Web Inspector: DOM Content and Load lines in Resources are unclear what they mean.
        
        Add tooltip text to the Load event and DOM Content event lines through
        a new layer that allows these lines to be on top of the view.

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._updateGraphDividersIfNeeded):
        (WebInspector.ResourcesPanel.prototype._updateDividersLabelBarPosition):
        * inspector/front-end/inspector.css:

2009-10-12  Dimitri Glazkov  <dglazkov@chromium.org>

        No review, rolling out r49429, because it broke layout tests.
        http://trac.webkit.org/changeset/49429

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::~V8AbstractEventListener):

2009-10-12  Dirk Schulze  <krit@webkit.org>

        Reviewed by Eric Seidel.

        SVG - crash on feMerge when input not available
        [https://bugs.webkit.org/show_bug.cgi?id=30297]

        Make a early return in SVGFEMergeElement if the needed
        filter effect doesn't exist.

        Test: svg/filters/feMerge-wrong-input.svg

        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::build):

2009-10-12  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Added automatic flush before compositing
        https://bugs.webkit.org/show_bug.cgi?id=30236

        This causes image to always render correctly. In writing a testcase
        I needed to implement readPixels. This exposed a bug in reading back
        values from a CanvasArray subclass, so I fixed that as well. Now when
        you wrap a CanvasArray in a JSValue it actually wraps the specific
        subclass. To do this I need to add virtual methods to each CanvasArray
        subclass to determine the type and a custom toJS method for CanvasArray
        to create the proper wrapper. 

        Test: fast/canvas/webgl/triangle.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCanvasArrayCustom.cpp:
        (WebCore::toJS):
        * html/canvas/CanvasArray.h:
        (WebCore::CanvasArray::isByteArray):
        (WebCore::CanvasArray::isUnsignedByteArray):
        (WebCore::CanvasArray::isShortArray):
        (WebCore::CanvasArray::isUnsignedShortArray):
        (WebCore::CanvasArray::isIntArray):
        (WebCore::CanvasArray::isUnsignedIntArray):
        (WebCore::CanvasArray::isFloatArray):
        * html/canvas/CanvasArray.idl:
        * html/canvas/CanvasByteArray.h:
        (WebCore::CanvasByteArray::isByteArray):
        * html/canvas/CanvasFloatArray.h:
        (WebCore::CanvasFloatArray::isFloatArray):
        * html/canvas/CanvasIntArray.h:
        (WebCore::CanvasIntArray::isIntArray):
        * html/canvas/CanvasRenderingContext3D.cpp:
        (WebCore::CanvasRenderingContext3D::readPixels):
        * html/canvas/CanvasRenderingContext3D.h:
        * html/canvas/CanvasRenderingContext3D.idl:
        * html/canvas/CanvasShortArray.h:
        (WebCore::CanvasShortArray::isShortArray):
        * html/canvas/CanvasUnsignedByteArray.h:
        (WebCore::CanvasUnsignedByteArray::isUnsignedByteArray):
        * html/canvas/CanvasUnsignedIntArray.h:
        (WebCore::CanvasUnsignedIntArray::isUnsignedIntArray):
        * html/canvas/CanvasUnsignedShortArray.h:
        (WebCore::CanvasUnsignedShortArray::isUnsignedShortArray):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/Canvas3DLayer.mm:
        (-[Canvas3DLayer drawInCGLContext:pixelFormat:forLayerTime:displayTime:]):
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::readPixels):

2009-10-12  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=30307
        
        Fix 0 sentinel for g_object_set() function call.

        * platform/graphics/gtk/DataSourceGStreamer.cpp:
        (webkit_data_src_uri_set_uri):
        0 is passed as 32 bit value on x86-64 in vararg functions, but
        g_object_set() expects a 64 bit 0. This will cause crashes.

2009-10-12  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        Drop in="" from <feFlood>
        https://bugs.webkit.org/show_bug.cgi?id=29001

        This makes <feFlood in="bogus"> have an effect, too.

        http://www.w3.org/2003/01/REC-SVG11-20030114-errata#feflood-attribute

        Test: svg/dom/feFlood-no-in1.html

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

2009-10-12  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=29998
        
        Scale video to completely fill the target surface while
        keeping the aspect ratio. This fixes displaying of the
        YouTube HTML5 sample website.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        Scale video to completely fill the target surface, keep
        the aspect ratio and center it.

2009-10-12  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=29997
        
        Fixes double memcpy of all rendered video frames.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateRepaintCallback):
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::duration):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_timeout_func):
        (webkit_video_sink_dispose):
        (unlock_buffer_mutex):
        (webkit_video_sink_unlock):
        (marshal_VOID__MINIOBJECT):
        (webkit_video_sink_class_init):
        (webkit_video_sink_new):
        * platform/graphics/gtk/VideoSinkGStreamer.h:
        Directly pass the buffers up to the MediaPlayerPrivate::paint()
        method instead of rendering them first to an intermediate cairo
        surface. This should increase performance and peak memory usage.

2009-10-11  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=30242
        
        Fixes an issue where JavaScript URLs that are URL-encoded twice can 
        bypass the XSSAuditor.
        
        JavaScript URLs that are completed by method Document::completeURL have added
        URL-encoded characters such that a direct comparison with the URL-decoded 
        outgoing HTTP parameters is not sufficient. Instead, the URL-decoded outgoing 
        HTTP parameters must be URL-decoded before comparison.

        Tests: http/tests/security/xssAuditor/iframe-javascript-url-twice-url-encode.html
               http/tests/security/xssAuditor/iframe-javascript-url-twice-url-encode2.html
               http/tests/security/xssAuditor/iframe-javascript-url-twice-url-encode3.html

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL): Modified to pass XSSAuditor
        the URL-decoded source code for the JavaScript URL.
        * page/XSSAuditor.cpp:
        (WebCore::isIllegalURICharacter): Minor syntactical change to the comment.
        (WebCore::XSSAuditor::CachingURLCanonicalizer::canonicalizeURL): Added 
        parameter decodeURLEscapeSequencesTwice.
        (WebCore::XSSAuditor::canEvaluateJavaScriptURL):
        (WebCore::XSSAuditor::decodeURL): Ditto.
        (WebCore::XSSAuditor::findInRequest): Ditto.
        * page/XSSAuditor.h:
        (WebCore::XSSAuditor::CachingURLCanonicalizer::CachingURLCanonicalizer): Ditto.

2009-10-11  Dominic Cooney  <dominicc@google.com>

        Reviewed by Adam Barth.

        Fixes a build break in the V8 bindings caused by revision 49420.
        https://bugs.webkit.org/show_bug.cgi?id=30294

        Revision 49420 introduces an IDL-defined CanvasActiveInfo
        type. This causes a build break in the V8 bindings where
        CanvasGraphicsContext3D naively refers to CanvasActiveInfo as a
        non-ref type.

        * WebCore.gypi: Include CanvasActiveInfo.idl in build.
        * bindings/scripts/CodeGeneratorV8.pm: CanvasActiveInfo is a ref
          ptr type.
        * bindings/v8/DOMObjectsInclude.h: Include generated
          CanvasActiveInfo files.
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:

2009-10-11  Collin Jackson  <collinj@webkit.org>

        Reviewed by Adam Barth.

        Log mixed content warnings to console

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

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkIfDisplayInsecureContent):
        (WebCore::FrameLoader::checkIfRunInsecureContent):

2009-10-11  Søren Gjesse  <sgjesse@chromium.org>

        Reviewed by Adam Barth.

        [V8] Add a context scope in JS listener destructor. The destructor code uses the cotext. See http://crbug.com/24200.
        https://bugs.webkit.org/show_bug.cgi?id=30250

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::~V8AbstractEventListener):

2009-10-11  Lyon Chen  <lyon.chen@torchmobile.com>

        Reviewed by Alexey Proskuryakov.

        Correct the position of #endif sentence inside WebCore::Document::finishedParsing().

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

        This change requires no test case as it fix a compiling error.

        * dom/Document.cpp:
        (WebCore::Document::finishedParsing):

2009-10-11  Dominic Cooney  <dominicc@google.com>

        Reviewed by Adam Barth.

        Sets a 500K stack limit for JavaScript workers in Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=29797

        Runaway recursion in JavaScript workers crashes the Chromium
        worker process on OS X. This is because V8's default stack limit
        is 512K on ia32 or 1M on x64, but the worker process runs workers
        on a thread with the OS X default stack size--512K. Because there
        are already some C+frames on the stack when V8 establishes its
        512K default stack limit, and V8 doesn't precisely enforce the
        stack limit, runaway recursion in V8 workers overflows the OS
        stack and segfaults, killing the worker process. This is described
        in Chromium bug 21653 <http://crbug.com/21653>.

        This patch sets the V8 stack limit for worker JavaScript in
        Chromium to a more conservative 500K on all platforms. This allows
        some "headroom" for the C+stack in use when the limit is set up,
        and some "legroom" for the V8 helper functions which in practice
        briefly flout the V8 stack limit.

        Test: LayoutTests/fast/workers/use-machine-stack.html

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initV8IfNeeded):
        * bindings/v8/WorkerContextExecutionProxy.h:

2009-10-11  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for wxMac 2.9, use wxGC API for measuring text.

        * platform/wx/wxcode/mac/carbon/fontprops.cpp:
        (GetTextExtent):

2009-10-10  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Sam Weinig.

        Allow [Reflect] on SVG elements.
        https://bugs.webkit.org/show_bug.cgi?id=28936

        Update the JS binding generators to reference SVGNames instead of
        HTMLNames, if [Reflect]ing an attribute on an SVG element.  Make
        SVGElement::id use [Reflect].

        Also make [Reflect] on an attribute with a setter exception work in ObjC
        bindings.

        Test: svg/dom/id-reflect.html

        * bindings/scripts/CodeGenerator.pm: Add a function to determine the
        appropriate C+namespace for attribute name constants.
        * bindings/scripts/CodeGeneratorObjC.pm: Generate ExceptionCode handling
        code for [Reflect] on an attribute with a setter exception.
        * bindings/scripts/CodeGeneratorCOM.pm: Generate "SVGNames" instead of
        "HTMLNames" when appropriate.
        * bindings/scripts/CodeGeneratorJS.pm: Ditto.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * svg/SVGElement.cpp: Remove getter and setter methods for id.
        * svg/SVGElement.h: Ditto.
        * svg/SVGElement.idl: Add [Reflect] to id.

2009-10-10  Oliver Hunt  <oliver@apple.com>

        Fix paths in xcode.

        * WebCore.xcodeproj/project.pbxproj:

2009-10-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Eric Carlson.

        Implement getActiveAttrib and getActiveUniform
        https://bugs.webkit.org/show_bug.cgi?id=30276

        Implements the getActiveAttrib and getActiveUniform APIs.
        Rather simple patch, adds CanvasActiveInfo definition and implementation
        and adds forwarding to the GraphicsContext3D.

        Test: fast/canvas/webgl/getActiveTest.html

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/CanvasActiveInfo.h: Added.
        (WebCore::CanvasActiveInfo::create):
        (WebCore::CanvasActiveInfo::name):
        (WebCore::CanvasActiveInfo::type):
        (WebCore::CanvasActiveInfo::size):
        (WebCore::CanvasActiveInfo::CanvasActiveInfo):
        * html/canvas/CanvasActiveInfo.idl: Added.
        * html/canvas/CanvasObject.h:
        (WebCore::CanvasObject::context):
          Need to make the context public as it is needed to ensure we don't
          provide a program from one context as an argument to another.
        * html/canvas/CanvasRenderingContext3D.cpp:
        (WebCore::CanvasRenderingContext3D::getActiveAttrib):
        (WebCore::CanvasRenderingContext3D::getActiveUniform):
        * html/canvas/CanvasRenderingContext3D.h:
        * html/canvas/CanvasRenderingContext3D.idl:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniform):

2009-10-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Adding new attributes in Element Panel is
        counterintuitive.

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

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._onmousemove):
        (WebInspector.ElementsTreeElement.prototype.set hovered):
        (WebInspector.ElementsTreeElement.prototype.toggleNewAttributeButton):

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

        Reviewed by Holger Freyther.

        Build fix if Netscape plugin support is turned off
        https://bugs.webkit.org/show_bug.cgi?id=30275

        In addition to fixing the build break with guards
        remove notImplemented() from PluginViewNone.cpp and
        make them just just be empty functions.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::handleEvent):
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::handlePostReadFile):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::getValueStatic):
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::invalidateRegion):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::platformDestroy):
        (WebCore::PluginView::setParentVisible):
        (WebCore::PluginView::updatePluginWidget):

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

        Unreviewed.

        [Qt] Build fix for QtWebKit after r49415.

        Add HistoryController.cpp to the build.

        * WebCore.pro:

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

        Reviewed by Eric Seidel.

        [Chromium] KURLGoogle's protocolIs barfs on input containing hyphens
        https://bugs.webkit.org/show_bug.cgi?id=30262

        This is not testable from WebKit since WebKit never uses the member
        function form of protocolIs with input that can be controlled from a
        web page.  It always passes string literals lacking hyphens.

        * platform/KURLGoogle.cpp:
        (WebCore::lowerCaseEqualsASCII): Only assert if toASCIILower would
        transform the input character.

2009-10-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Oliver Hunt.

        Move HistoryController to its own file
        https://bugs.webkit.org/show_bug.cgi?id=30272

        Purely mechanical.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/HistoryController.cpp: Added.
        * loader/HistoryController.h: Added.

2009-10-09  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        ApplyStyleCommand removes presentational tags even when not necessary
        https://bugs.webkit.org/show_bug.cgi?id=28091

        This patch updates implicitlyStyledElementShouldBeRemovedWhenApplyingStyle to return true
        (triggering removal of tag) only if the style implicitly added by the element is not present in
        the new style to apply. It also changes surroundNodeRangeWithElement so that it merges the
        surrounding element when possible. applyTextDecorationStyle is modified so that it does not add
        style span when the style attribute is empty.

        Test: editing/execCommand/toggle-style-3.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::shouldRemoveTextDecorationTag): Returns true if specified text
        decoration is not present in the style to apply
        (WebCore::ApplyStyleCommand::implicitlyStyledElementShouldBeRemovedWhenApplyingStyle): No longer
        returns true if the tag is used in new style
        (WebCore::ApplyStyleCommand::applyTextDecorationStyle): Does not add style-span when redundant
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement): Merges the newly created element
        with the surrounding identical elements
        * editing/ApplyStyleCommand.h:

2009-10-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Factor HistoryController out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=30246

        HistoryController is in charge of managing the current / previous /
        provisional HistoryItems.  The split isn't perfect, but it's a place to
        start.  I'll move HistoryController into its own file in another patch.

        * WebCore.base.exp:
        * loader/FrameLoader.cpp:
        (WebCore::HistoryController::HistoryController):
        (WebCore::HistoryController::~HistoryController):
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::closeURL):
        (WebCore::FrameLoader::begin):
        (WebCore::HistoryController::restoreDocumentState):
        (WebCore::HistoryController::setCurrentItem):
        (WebCore::HistoryController::setProvisionalItem):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::logCanCacheFrameDecision):
        (WebCore::FrameLoader::scrollToAnchor):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::didFirstLayout):
        (WebCore::HistoryController::updateForFrameLoadCompleted):
        (WebCore::FrameLoader::frameLoadCompleted):
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::HistoryController::addHistoryItemForFragmentScroll):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        (WebCore::FrameLoader::shouldTreatURLAsSameAsCurrent):
        (WebCore::HistoryController::createHistoryItem):
        (WebCore::FrameLoader::checkDidPerformFirstNavigation):
        (WebCore::HistoryController::addBackForwardItemClippedAtTarget):
        (WebCore::HistoryController::createHistoryItemTree):
        (WebCore::HistoryController::saveScrollPositionAndViewStateToItem):
        (WebCore::HistoryController::restoreScrollPositionAndViewState):
        (WebCore::HistoryController::invalidateCurrentItemCachedPage):
        (WebCore::HistoryController::saveDocumentState):
        (WebCore::FrameLoader::loadItem):
        (WebCore::HistoryController::urlsMatchItem):
        (WebCore::HistoryController::goToItem):
        (WebCore::HistoryController::recursiveGoToItem):
        (WebCore::HistoryController::childFramesMatchItem):
        (WebCore::HistoryController::updateForStandardLoad):
        (WebCore::HistoryController::updateForClientRedirect):
        (WebCore::HistoryController::updateForBackForwardNavigation):
        (WebCore::HistoryController::updateForReload):
        (WebCore::HistoryController::updateForRedirectWithLockedBackForwardList):
        (WebCore::HistoryController::updateForCommit):
        (WebCore::HistoryController::updateForAnchorScroll):
        (WebCore::HistoryController::saveDocumentAndScrollState):
        (WebCore::HistoryController::setCurrentItemTitle):
        (WebCore::FrameLoader::didChangeTitle):
        * loader/FrameLoader.h:
        (WebCore::HistoryController::current):
        (WebCore::HistoryController::provisional):
        (WebCore::FrameLoader::policyChecker):
        (WebCore::FrameLoader::history):
        (WebCore::FrameLoader::creatingInitialEmptyDocument):
        * page/Page.cpp:
        (WebCore::Page::goToItem):

2009-10-09  Alexey Proskuryakov  <ap@apple.com>

        Unreviewed - fixing an obvious typo in my previous check-in.

        https://bugs.webkit.org/show_bug.cgi?id=30260
        <rdar://problem/6447115> REGRESSION: Logging out from SAP doesn't work

        Fixes existing tests (which I thought I had run the previous time).

        * platform/network/CredentialStorage.cpp: (WebCore::originsWithCredentials): Return the
        set by reference.

2009-10-09  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        [v8] Need change to V8WorkerContextEventListener::reportError signature to match the base class.
        https://bugs.webkit.org/show_bug.cgi?id=30264

        The base class method changed in r48884.

        Test: fast/worker/worker-script-error.html

        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::reportError):
        * bindings/v8/V8WorkerContextEventListener.h:

2009-10-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=30260
        <rdar://problem/6447115> REGRESSION: Logging out from SAP doesn't work

        Tests: http/tests/xmlhttprequest/logout.html
               http/tests/xmlhttprequest/re-login-async.html
               http/tests/xmlhttprequest/re-login.html

        Fix several issues with existing credential handling code.

        * platform/network/CredentialStorage.cpp:
        (WebCore::pathToDefaultProtectionSpaceMap): Changed the data structure to a simpler one.
        (WebCore::originsWithCredentials): The reason for two-stage lookup above was that we didn't
        want to iterate paths for origins that never had credentials associated with them. Changed
        to use a separate HashSet for this.
        (WebCore::pathToDefaultProtectionSpaceMap): The concept of default per-path credentials didn't
        match the spec very well. UAs are supposed to deduce protection space from an URL, and then
        use whichever credentials are known for this protection space. So, OriginToDefaultBasicCredentialMap
        is now PathToDefaultProtectionSpaceMap.
        (WebCore::protectionSpaceMapKeyFromURL): Factored out a helper that extracts a directory
        URL from a given URL. These directory URLs are what we use as keys in PathToDefaultProtectionSpaceMap.
        (WebCore::CredentialStorage::set): Updated for above changes.
        (WebCore::findDefaultProtectionSpaceForURL): Factored out code iterating path length to find
        a prefix in OriginToDefaultBasicCredentialMap.
        (WebCore::CredentialStorage::set): Another version of set() can update credentials for a
        URL default protection space. It does nothing if the given URL doesn't correspond to a known
        protection space.
        (WebCore::CredentialStorage::get): Renamed from getDefaultAuthenticationCredential.

        * platform/network/CredentialStorage.h: Made the distinction between methods that use a known
        protection space and those that deduce one from URL more clear.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start): Update credentials before starting the request for real.
        This makes the following pattern work:
          var req = new XMLHttpRequest("GET", "logout.html", "logout", "logout"); // wrong credentials
          req.send("");
          req.abort();
        Abort() is used here to avoid having UA present an auth dialog after getting a 401 response.
        Note that one cannot log in using the same method, because there isn't a known protection
        space for the URL yet in that case, so the added code has no effect.
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Use a correct persistence for
        calling receivedCredential(). This fixes logging in using an async XHR (withut abort(), of
        course), and matches sync case.
        (+[WebCoreSynchronousLoader loadRequest:allowStoredCredentials:returningResponse:error:]):
        Renamed getDefaultAuthenticationCredential() to get().

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::WebCoreSynchronousLoader::load):
        Same changes as in Mac code.

2009-10-09  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        Undoing a indent removes text instead of it's formatting.
        <rdar://problem/7169206>
        https://bugs.webkit.org/show_bug.cgi?id=28722
        Restored the behavior prior to http://trac.webkit.org/changeset/46143. This change implemented the
        indent command making simple DOM operation, without using moveParagraph which cause undo to be broken.
        
        Added editing/undo/undo-indent.html test.

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::prepareBlockquoteLevelForInsertion): Restored. 
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem): Merged changes.
        (WebCore::IndentOutdentCommand::indentIntoBlockquote): Restored.
        (WebCore::IndentOutdentCommand::indentRegion): Restored and added call to updateLayout to
        ensure TextIterator could correctly calculate the position starting from the index.
        * editing/IndentOutdentCommand.h: Restored.

2009-10-09  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Adler.
        
        Optimization: Many StringImpl transformations are no-ops and should just return 'this'
        https://bugs.webkit.org/show_bug.cgi?id=30186

        Optimized StringImpl methods lower(), stripWhiteSpace() and simplifyWhiteSpace() to
        detect no-ops and return this instead of creating a new instance.
        Empirical testing shows that the majority of calls to these methods are no-ops, making
        this worthwhile even if (in the case of lower()) the non-no-op case is slightly slowed.
        Upper() is very rarely a no-op, so it wasn't worthwhile to optimize it.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::lower):
        (WebCore::StringImpl::upper): Just add a comment explaining why this wasn't optimized
        (WebCore::StringImpl::stripWhiteSpace):
        (WebCore::StringImpl::simplifyWhiteSpace):

2009-10-09  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        SVG Filter feGaussianBlur implementation is missing
        [https://bugs.webkit.org/show_bug.cgi?id=28141]

        This is the implementation of GaussianBlur filter for SVG.

        There is already a test for feGaussianBlur
        Test: svg/W3C-SVG-1.1/filters-gauss-01-b-w3c.svg 

        Test: svg/filters/feGaussianBlur.svg

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::FilterEffect):
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::isAlphaImage):
        (WebCore::FilterEffect::setIsAlphaImage):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::apply):
        * svg/graphics/filters/SVGFEGaussianBlur.cpp:
        (WebCore::boxBlur):
        (WebCore::FEGaussianBlur::apply):

2009-10-09  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] QoS support in the video sink
        https://bugs.webkit.org/show_bug.cgi?id=29959

        Removed the async buffer queue from the sink. Synchronize the
        render method of the sink using a g_timeout_add() combined with a
        gcond triggered when the buffer has been rendered.
        Also fixed the video sink reference handling in the player, now
        that the idle is not there anymore to mess up things.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):
        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_init):
        (webkit_video_sink_timeout_func):
        (webkit_video_sink_render):
        (webkit_video_sink_dispose):
        (unlock_buffer_mutex):
        (webkit_video_sink_unlock):
        (webkit_video_sink_stop):
        (webkit_video_sink_class_init):

2009-10-09  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        feMorphology filter is not implemented
        [https://bugs.webkit.org/show_bug.cgi?id=5863]

        Adds SVGFEMorphologyElement, for the SVG filter. It also fixes a bug
        with the attribute "operator". It was only accessible via "_operator" 
        on JavaScript.

        Test: svg/dom/operatorAttribute.xhtml

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.SVG.Filters.exp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        * bindings/objc/DOMSVG.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * page/DOMWindow.idl:
        * svg/SVGAllInOne.cpp:
        * svg/SVGFECompositeElement.idl:
        * svg/SVGFEMorphologyElement.cpp: Added.
        (WebCore::SVGFEMorphologyElement::SVGFEMorphologyElement):
        (WebCore::SVGFEMorphologyElement::~SVGFEMorphologyElement):
        (WebCore::SVGFEMorphologyElement::setRadius):
        (WebCore::SVGFEMorphologyElement::parseMappedAttribute):
        (WebCore::SVGFEMorphologyElement::build):
        * svg/SVGFEMorphologyElement.h: Added.
        * svg/SVGFEMorphologyElement.idl: Added.
        * svg/graphics/filters/SVGFEMorphology.cpp:
        (WebCore::operator<<):
        * svg/graphics/filters/SVGFEMorphology.h:
        (WebCore::):
        * svg/svgtags.in:

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

        Reviewed by Dimitri Glazkov.

        Fix Chromium breakage.

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

        * inspector/front-end/inspector.js:
        (WebInspector.addCookieDomain): check that Storage panel is present before calling its methods.

2009-10-09  Joe Ligman  <joseph.ligman@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Added pure virtual methods setInputMethodEnabled and setInputMethodHint to QWebPageClient

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

        * platform/qt/QWebPageClient.h:

2009-10-08  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        Implement beforeload for images.  ImageLoadEventSender has been refactored into a more generic
        ImageEventSender that can be used by both load and beforeload events.  If the document has any
        beforeload listeners, then the installation of images onto the renderer becomes asynchronous
        and will be held up until the beforeload event can fire at a later date.

        Both beforeload and load events now fire at the end of the tokenizer write() methods, so that
        in the typical parsing case we don't have to put off the beforeload/load events until after
        a layout or paint might already have happened.  This lets beforeload/load not cause extra
        layouts and repaints.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::dispatchBeforeLoadEvent):
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        (WebCore::Document::addListenerTypeIfNeeded):
        * dom/Document.h:
        (WebCore::Document::):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::write):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::attach):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::attach):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::write):
        * loader/ImageLoader.cpp:
        (WebCore::ImageBeforeLoadEventSender::ImageBeforeLoadEventSender):
        (WebCore::ImageLoadEventSender::ImageLoadEventSender):
        (WebCore::beforeLoadEventSender):
        (WebCore::ImageLoader::ImageLoader):
        (WebCore::ImageLoader::~ImageLoader):
        (WebCore::ImageLoader::setImage):
        (WebCore::ImageLoader::setLoadingImage):
        (WebCore::ImageLoader::updateFromElement):
        (WebCore::ImageLoader::notifyFinished):
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        (WebCore::ImageLoader::dispatchPendingEvents):
        (WebCore::ImageEventSender::ImageEventSender):
        (WebCore::ImageEventSender::dispatchEventSoon):
        (WebCore::ImageEventSender::cancelEvent):
        (WebCore::ImageEventSender::dispatchPendingEvents):
        (WebCore::ImageEventSender::timerFired):
        * loader/ImageLoader.h:
        (WebCore::ImageLoader::haveFiredBeforeLoadEvent):
        * wml/WMLImageElement.cpp:
        (WebCore::WMLImageElement::attach):

2009-10-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Dimitri Glazkov.

        Web Inspector: Wrap Database into ScriptObject in v8 bindings.

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

        No tests due to no Script* test infrastructure.

        * bindings/v8/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):

2009-10-09  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Windowless Plugins : Fix crash when using QWebPage without QWebView.
        
        'client' is 0 when we have no view.

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

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

2009-10-09  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Plugins : Add missing setCurrentPlugin(0)

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

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

2009-10-09  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] beforeload event does not fire on script elements in XML
        https://bugs.webkit.org/show_bug.cgi?id=30235

        r49194 was lacking a change to XMLTokenizerQt.cpp, equivalent to the one
        made in XMLTokenizerLibxml2.cpp.

        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::parseEndElement):

2009-10-09  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's CSSParserValueList
        https://bugs.webkit.org/show_bug.cgi?id=30249

        Inherits CSSParserValueList class from FastAllocBase because it has 
        been instantiated by 'new' in WebCore/css/CSSGrammar.y:1271.

        * css/CSSParserValues.h:

2009-10-09  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Windowless Plugins : Create Pixmap only when size changes.

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

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

2009-10-08  Jon Honeycutt  <jhoneycutt@apple.com>

        Remove the WebKitPluginHalterEnabledPreferenceKey in favor of checking
        for the existence of a PluginHalterDelegate.

        This fixes a leak of WebPluginHalterClients:
        https://bugs.webkit.org/show_bug.cgi?id=30119.

        Reviewed by Dan Bernstein.

        * WebCore.base.exp:
        Removed the export of WebCore::Settings::setPluginHalterEnabled().

        * loader/EmptyClients.h:
        (WebCore::EmptyPluginHalterClient::enabled):

        * page/Page.cpp:
        (WebCore::Page::Page):
        Remove initialization of m_pluginHalterClient, which was removed. If a
        non-null PluginHalterClient was passed, create the PluginHalter, and
        set its allowed run time.

        * page/Page.h:
        Removed pluginHalterEnabledStateChanged() and m_pluginHalterClient.

        * page/PluginHalter.cpp:
        (WebCore::PluginHalter::didStartPlugin):
        Check whether the PluginHalterClient is enabled.
        (WebCore::PluginHalter::didStopPlugin):
        Ditto.

        * page/PluginHalter.h:
        Made m_client an OwnPtr.

        * page/PluginHalterClient.h:
        Added a function to return the enabled state.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        Remove initialization of removed member.

        * page/Settings.h:
        Removed settings for the enabled state of the PluginHalter; we now use
        the existence of a WebPluginHalterDelegate to determine whether the
        PluginHalter is enabled.

2009-10-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move executeScript from FrameLoader to ScriptController
        https://bugs.webkit.org/show_bug.cgi?id=30200

        These methods have virtually no interaction with FrameLoader.  They
        really seem like they ought to belong to ScriptController.

        * WebCore.base.exp:
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::executeScript):
        (WebCore::ScriptController::executeIfJavaScriptURL):
        (WebCore::ScriptController::evaluate):
        * bindings/js/ScriptController.h:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::executeScript):
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * bindings/v8/ScriptController.h:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::notifyFinished):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::endElementNs):
        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::parseEndElement):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptExecution):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::requestFrame):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::replaceDocument):
        * loader/FrameLoader.h:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::performRequest):

2009-10-08  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: added missing #include.

        * ForwardingHeaders/runtime/StructureChain.h: Copied from WebCore/ForwardingHeaders/runtime/PropertyNameArray.h.

2009-10-08  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30237>.
        DOM Content and Load lines aren't shown if a page is loaded when the inspector is up.
        
        Make sure to call update script object if we have an InspectorFrontend to
        call it on when we get one of the new events.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::mainResourceFiredDOMContentEvent):
        (WebCore::InspectorController::mainResourceFiredLoadEvent):

2009-10-08  Geoffrey Garen  <ggaren@apple.com>

        Build fix: updated for removal of Structure::markAggregate().

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::markChildren):

2009-10-08  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Adler.

        Make AtomicString create its StringImpl via create(), not the constructor,
        so it gets allocated in a single heap block, saving memory and CPU cycles.
        This eliminates two StringImpl constructors, making the remaining ones
        unambiguous, so the "AdoptBuffer" parameter is no longer needed.
        Added const attribute to UChar* in StringImpl constructor, eliminating the
        need for several const_casts in calls to it.
        StringImpl also unfriends AtomicString (OMG drama!!!)
        https://bugs.webkit.org/show_bug.cgi?id=30141

        * platform/text/AtomicString.cpp:
        (WebCore::CStringTranslator::translate): Call StringImpl::create().
        (WebCore::UCharBufferTranslator::translate): Ditto.
        (WebCore::HashAndCharactersTranslator::translate): Ditto.
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl): Remove unnecessary AdoptBuffer param.
        (WebCore::StringImpl::adopt): Ditto.
        (WebCore::StringImpl::createUninitialized): Ditto.
        (WebCore::StringImpl::create): Ditto.
        (WebCore::StringImpl::crossThreadString): Ditto.
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::setHash): Used by AtomicString when creating StringImpls.

2009-10-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove the shouldLoadMediaElementURL frame loader client function.

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

2009-10-08  John Gregg  <johnnyg@google.com>

        Reviewed by Dimitri Glazkov.

        SVGURIReference Build problem for V8.  An additional stale reference to SVGURIReference bindings
        which wasn't exposed until a clean build.
        https://bugs.webkit.org/show_bug.cgi?id=30217

        No new tests, just a build fix.

        * bindings/v8/V8Index.cpp:

2009-10-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Sort XCode project file.

        * WebCore.xcodeproj/project.pbxproj:

2009-10-08  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        unselectable resources in resource panel
        https://bugs.webkit.org/show_bug.cgi?id=30079

        manual test added
        
        Also changed the way DnD for resources in the Resources panel is 
        handled.

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.onattach):
        (WebInspector.ResourceSidebarTreeElement.prototype.ondragstart):
        * manual-tests/inspector/duplicate-resource-urls.html: Added.

2009-10-08  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <http://webkit.org/b/30233>
        Local Storage and Cookies show Blank Titles on Local Files.

        If a local storage or cookies sidebar item has no domain, set the 
        title to "Local Files", because that is what it represents.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/StoragePanel.js:
        (WebInspector.DOMStorageSidebarTreeElement.prototype.get mainTitle):
        (WebInspector.CookieSidebarTreeElement.prototype.get mainTitle):
        (WebInspector.CookieSidebarTreeElement.prototype.set mainTitle):

2009-10-08  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        Fix failing media layout tests.  Don't make beforeload block loads of objects that aren't in the
        document, since video/audio (and images eventually too) can load when not in the document yet.

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

2009-10-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Eric Seidel.

        Move SVGFitToViewBox ANIMATED_* macros in classes that inherit from it
        https://bugs.webkit.org/show_bug.cgi?id=30230

        This patch also devirtualizes viewBoxToViewTransform(), is it's superflous.
        viewBoxToViewTransform() is now a simple static heper function in SVGFitToViewBox.
        As a result, the SVGSVGElement::viewBoxToViewTransform() function now resuses the same logic.

        As side-effect this patch fixes svg/custom/linking-a-03-b-transform.svg, the return
        statement in SVGSVGElement::viewBoxToViewTransform() was clearly wrong.

        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::SVGFitToViewBox):
        (WebCore::SVGFitToViewBox::viewBoxToViewTransform):
        * svg/SVGFitToViewBox.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::viewBoxToViewTransform):
        * svg/SVGMarkerElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::buildPattern):
        * svg/SVGPatternElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::viewBoxToViewTransform):
        * svg/SVGSVGElement.h:
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::SVGSymbolElement):
        * svg/SVGSymbolElement.h:
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::SVGViewElement):
        * svg/SVGViewElement.h:
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::SVGViewSpec):
        * svg/SVGViewSpec.h:

2009-10-08  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Jon Honeycutt.

        Correct a typo that fixes the resizing of columns in Cookie view when you
        resize the Inspector window.

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

2009-10-08  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=29811>
        Text in Inspector's Styles gear menu is invisible.
        
        Adds a style rule for the option text and hr's in the gear menu,
        to prevent them from being transparent.

        * inspector/front-end/inspector.css:

2009-10-08  John Gregg  <johnnyg@google.com>

        Reviewed by David Levin.

        Fix build problem with SVGURIReference in V8.
        https://bugs.webkit.org/show_bug.cgi?id=30217

        No new tests, just a build fix.

        * WebCore.gypi:
        * bindings/v8/DerivedSourcesAllInOne.cpp:

2009-10-07  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Eric Carlson.

        Make beforeload work on <video>/<audio> elements.

        Added fast/dom/beforeload/video-before-load.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseMappedAttribute):
        (WebCore::HTMLMediaElement::selectMediaResource):
        (WebCore::HTMLMediaElement::selectNextSourceChild):

2009-10-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Eric Seidel.

        Move SVGExternalResourcesRequired ANIMATED_* macros in classes that inherit from it
        https://bugs.webkit.org/show_bug.cgi?id=30218

        The long term goal is to kill the need for the virtual contextElement() function in SVG code. 
        No change in functionality, thus no new tests.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::SVGAElement):
        * svg/SVGAElement.h:
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::SVGAnimationElement):
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::SVGCircleElement):
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::SVGClipPathElement):
        * svg/SVGClipPathElement.h:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::SVGCursorElement):
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.cpp:
        (WebCore::SVGDefsElement::SVGDefsElement):
        * svg/SVGDefsElement.h:
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::SVGEllipseElement):
        * svg/SVGEllipseElement.h:
        * svg/SVGExternalResourcesRequired.cpp:
        (WebCore::SVGExternalResourcesRequired::SVGExternalResourcesRequired):
        * svg/SVGExternalResourcesRequired.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::SVGFEImageElement):
        * svg/SVGFEImageElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        * svg/SVGFilterElement.h:
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::SVGFontElement):
        * svg/SVGFontElement.h:
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::SVGGElement):
        * svg/SVGGElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement):
        * svg/SVGGradientElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::SVGLineElement):
        * svg/SVGLineElement.h:
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::SVGMPathElement):
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        * svg/SVGMaskElement.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::SVGPolyElement):
        * svg/SVGPolyElement.h:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::SVGRectElement):
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        * svg/SVGScriptElement.h:
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::SVGSwitchElement):
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::SVGSymbolElement):
        * svg/SVGSymbolElement.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::SVGTextContentElement):
        * svg/SVGTextContentElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        * svg/SVGUseElement.h:
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::SVGViewElement):
        * svg/SVGViewElement.h:

2009-10-08  Dirk Schulze  <krit@webkit.org>

        Reviewed by Darin Adler.

        SVG feComposite: operator over mixes up inputs
        [https://bugs.webkit.org/show_bug.cgi?id=30205]

        SVG feComposite operator over mixed up the inputs.
        The pixel-test svg/filters/feComposite.svg can already test this.
        No new test result is needed as long as filters are disabled.

        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::apply):

2009-10-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by George Staikos.

        Move SVGURIReference ANIMATED_* macros in classes that inherit from it
        https://bugs.webkit.org/show_bug.cgi?id=30184

        The long term goal is to kill the need for the virtual contextElement() function in SVG code. 
        No change in functionality, thus no new tests.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::SVGAElement):
        * svg/SVGAElement.h:
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::SVGAltGlyphElement):
        * svg/SVGAltGlyphElement.h:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::SVGCursorElement):
        * svg/SVGCursorElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::SVGFEImageElement):
        * svg/SVGFEImageElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        * svg/SVGFilterElement.h:
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement):
        * svg/SVGGradientElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        * svg/SVGImageElement.h:
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::SVGMPathElement):
        (WebCore::SVGMPathElement::pathElement):
        * svg/SVGMPathElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        * svg/SVGMaskElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        * svg/SVGPatternElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        * svg/SVGScriptElement.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::SVGTRefElement):
        * svg/SVGTRefElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::SVGTextPathElement):
        * svg/SVGTextPathElement.h:
        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::SVGURIReference):
        * svg/SVGURIReference.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        * svg/SVGUseElement.h:

2009-10-08  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Re-add the QApplication::syncX() line for plugin windows removed
        by r49169. Also changed the location of the sync just after the
        creation instead of just before sending it to the plugin.
        https://bugs.webkit.org/show_bug.cgi?id=25053

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

2009-10-08  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector: NodeLists Don't Display Well in the Console
        https://bugs.webkit.org/show_bug.cgi?id=28061

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

2009-10-08  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Windowless plugins: Remove unnecessary XSync for opaque mode.
        
        The reason for the XSync was that the plugin would not know about the
        Drawable. It turns out that the real reason behind this is that even
        though XCreatePixmap returns a handle, this id is unknown to the server
        until we flush the connection.
        
        So, move the XSync to right after we create the Pixmap.

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

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

2009-10-07  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=30188
        
        Fixes an issue where performing a non DHTML drag-and-drop operation 
        does not work as expected. For instance, dragging some selected text 
        to an external application, such as TextEdit.
        
        This issue was a regression that arose from patching bug #30107.
        
        This change is covered by the manual test: 
        drag-out-of-background-window.html

        * page/DragController.cpp:
        (WebCore::DragController::startDrag): When performing a non-DHTML drag 
        operation then default to drag operations DragOperationGeneric and 
        DragOperationCopy according to similar functionality removed when fixing
        bug #30107, see: 
        http://trac.webkit.org/browser/trunk/WebKit/mac/WebView/WebHTMLView.mm?rev=48526#L3430 

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

        Fix more breakage in the GTKbuild.

        * GNUmakefile.am:

2009-10-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move PolicyChecker to it's own file
        https://bugs.webkit.org/show_bug.cgi?id=30193

        This is just moving code around and re-naming things.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/PolicyCallback.cpp: Added.
        (WebCore::PolicyCallback::PolicyCallback):
        (WebCore::PolicyCallback::~PolicyCallback):
        (WebCore::PolicyCallback::clear):
        (WebCore::PolicyCallback::set):
        (WebCore::PolicyCallback::call):
        (WebCore::PolicyCallback::clearRequest):
        (WebCore::PolicyCallback::cancel):
        * loader/PolicyCallback.h: Added.
        (WebCore::PolicyCallback::request):
        * loader/PolicyCheck.cpp: Removed.
        * loader/PolicyCheck.h: Removed.

2009-10-07  Joel Stanley  <joel@jms.id.au>

        Reviewed by Mark Rowe.

        Include <limits> for std::numeric_limits.  Required by gcc-4.4
        https://bugs.webkit.org/show_bug.cgi?id=30197

        * html/canvas/CanvasByteArray.h:
        * html/canvas/CanvasIntArray.h:
        * html/canvas/CanvasShortArray.h:
        * html/canvas/CanvasUnsignedByteArray.h:
        * html/canvas/CanvasUnsignedIntArray.h:
        * html/canvas/CanvasUnsignedShortArray.h:

2009-10-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Factor PolicyChecker out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=30155

        This patch separates PolicyChecker from FrameLoader.  Loader policy is
        in change of managing the FrameLoaderClient callbacks.  Ideally, it
        shouldn't know anything about FrameLoader, but I couldn't quite remove
        all knowledge (although we might be able to do more later).  In a
        future patch, I'll move PolicyChecker into a separate file.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::PolicyChecker::handleUnimplementablePolicy):
        (WebCore::PolicyChecker::cannotShowMIMEType):
        (WebCore::PolicyChecker::PolicyChecker):
        (WebCore::PolicyChecker::checkNavigationPolicy):
        (WebCore::PolicyChecker::checkContentPolicy):
        (WebCore::FrameLoader::shouldReloadToHandleUnreachableURL):
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::PolicyChecker::cancelCheck):
        (WebCore::PolicyChecker::stopCheck):
        (WebCore::PolicyChecker::continueAfterContentPolicy):
        (WebCore::PolicyChecker::continueLoadAfterWillSubmitForm):
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::PolicyChecker::checkNewWindowPolicy):
        (WebCore::PolicyChecker::continueAfterNewWindowPolicy):
        (WebCore::PolicyChecker::continueAfterNavigationPolicy):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        * loader/FrameLoader.h:
        (WebCore::PolicyChecker::loadType):
        (WebCore::PolicyChecker::setLoadType):
        (WebCore::PolicyChecker::delegateIsDecidingNavigationPolicy):
        (WebCore::PolicyChecker::delegateIsHandlingUnimplementablePolicy):
        (WebCore::FrameLoader::policy):
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didCancel):
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::didReceiveResponse):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

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

        Reviewed by Oliver Hunt.

        Fixed <rdar://problem/5751979> Database code takes JSLock on secondary
        thread, permanently slowing down JavaScript

        Changed callback objects to use a standard helper object. The helper
        object ASSERTs that it is deleted on the main thread, so no lock is
        required when unprotecting its members. It also centralizes some previously
        duplicated code.
        
        Callback objects that might be deleted on a secondary thread use
        callOnMainThread to delete their helper objects on the main thread.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCallbackData.cpp: Copied from bindings/js/JSCustomSQLTransactionCallback.cpp.
        (WebCore::JSCallbackData::deleteData):
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCallbackData.h: Copied from bindings/js/JSCustomSQLTransactionCallback.cpp.
        (WebCore::JSCallbackData::JSCallbackData):
        (WebCore::JSCallbackData::~JSCallbackData):
        (WebCore::JSCallbackData::callback):
        * bindings/js/JSCustomPositionCallback.cpp:
        (WebCore::JSCustomPositionCallback::JSCustomPositionCallback):
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionCallback.h:
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        (WebCore::JSCustomPositionErrorCallback::JSCustomPositionErrorCallback):
        (WebCore::JSCustomPositionErrorCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.h:
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::JSCustomSQLStatementCallback):
        (WebCore::JSCustomSQLStatementCallback::~JSCustomSQLStatementCallback):
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.h:
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::JSCustomSQLStatementErrorCallback):
        (WebCore::JSCustomSQLStatementErrorCallback::~JSCustomSQLStatementErrorCallback):
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.h:
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::JSCustomSQLTransactionCallback):
        (WebCore::JSCustomSQLTransactionCallback::~JSCustomSQLTransactionCallback):
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.h:
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::JSCustomSQLTransactionErrorCallback):
        (WebCore::JSCustomSQLTransactionErrorCallback::~JSCustomSQLTransactionErrorCallback):
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.h:
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::JSCustomVoidCallback):
        (WebCore::JSCustomVoidCallback::~JSCustomVoidCallback):
        (WebCore::JSCustomVoidCallback::handleEvent):
        * bindings/js/JSCustomVoidCallback.h:
        * storage/Database.cpp:
        (WebCore::Database::Database):

2009-10-07  Jens Alfke  <snej@chromium.org>

        Reviewed by Dave Levin.

        Fix StringImpl::m_buffer
        https://bugs.webkit.org/show_bug.cgi?id=30189

        Fix my previous StringImpl patch to avoid using an indefinite-length array member,
        since MSVC doesn't like it. Instead, go back to offsetting by sizeof(StringImpl).

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl):
        (WebCore::StringImpl::createUninitialized):
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::bufferIsInternal):

2009-10-07  Aaron Boodman  <aa@chromium.org>

        Reviewed by Adam Barth.

        Update isolated worlds under v8 to support world reuse.
        https://bugs.webkit.org/show_bug.cgi?id=30145

        * bindings/v8/ScriptController.cpp:
        Replace evaluateInNewIsolatedWorld() withe evaluateInIsolatedWorld(id).
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        * bindings/v8/ScriptController.h: Ditto.
        * bindings/v8/V8Proxy.cpp: Ditto.
        (WebCore::V8Proxy::~V8Proxy): Dittio.
        (WebCore::V8Proxy::evaluateInIsolatedWorld): Ditto.
        * bindings/v8/V8Proxy.h: Ditto.
        * bindings/v8/V8IsolatedWorld.cpp:
        Add support for controlling lifetime of a world, rather than relying on GC.
        (WebCore::V8IsolatedWorld::contextWeakReferenceCallback): Ditto.
        (WebCore::V8IsolatedWorld::V8IsolatedWorld): Ditto.
        (WebCore::V8IsolatedWorld::destroy): Ditto.
        * bindings/v8/V8IsolatedWorld.h: Ditto.

2009-10-07  Jeremy Orlow  <jorlow@chromium.org>

        Build fix for http://trac.webkit.org/changeset/49272 on Windows

        * platform/text/StringImpl.h:

2009-10-07  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Adler.

        Optimization of StringImpl:
        - Remove unnecessary m_bufferIsInternal member (saves 4 bytes). Instead, check whether
          m_data points to just past the end of the object's members.
        - copy() and createWithTerminatingNullCharacter() create the string in a single malloc
          block instead of 2 (saves ~20 bytes and considerable CPU cycles, increases locality).
        - Move m_length next to m_hash to save 4 bytes of padding in 64-bit builds.
          
        https://bugs.webkit.org/show_bug.cgi?id=29500

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl): Re-ordered members.
        (WebCore::StringImpl::~StringImpl): Change to is-buffer-internal check.
        (WebCore::StringImpl::createUninitialized): Use new m_buffer member instead of sizeof()
            to ensure chars are copied to correct location.
        (WebCore::StringImpl::createWithTerminatingNullCharacter): Make sure copy is created
            in a single malloc block.
        (WebCore::StringImpl::threadsafeCopy): Make sure copy is created in a single malloc block.
        (WebCore::StringImpl::crossThreadString): Make sure copy is created in a single malloc block.
        (WebCore::StringImpl::sharedBuffer): Change to is-buffer-internal check.
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::startsWith): Just fixed a confusing param name.
        (WebCore::StringImpl::bufferIsInternal): Changed member var into accessor method.
        (WebCore::StringImpl::m_data): Repositioned for optimal member packing in 64-bit.
        (WebCore::StringImpl::m_buffer): Added to provide an explicit location for where internal buffer goes.

2009-10-07  Daniel Bates  <dbates@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=30102
        And
        <rdar://problem/5015957>
        
        Manual test to confirm that the not-allowed cursor is shown for an
        invalid drag-and-drop operation.
        
        We cannot test this using DRT because of a discrepancy between the Windows
        API-based drop effect and the WebKit drop effect. See bug #24731 for more
        details.

        * manual-tests/drag-cursor-notallowed.html: Added.

2009-10-07  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        * WebCore.xcodeproj/project.pbxproj:

2009-10-07  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <http://webkit.org/b/30104>.
        Inspector should show cookies of sub-resources on the page.
        
        This function implements showing cookies for all sub-resources of a page.
        When the page is loaded, it populates the Storage Panel with a list of all
        domains that were loaded as part of the full page load (iframes, ads, etc).
        When the user selects one of the domains, the inspector calls back into the
        controller, and the controller combines all of the cookies from that domain
        into a list, and sends that list is sent back to the controller to render.
        
        A domain now needs to be passed into CookieItemsView, and CookieSidebarTreeElement.
        
        As a result of a previous patch, we now have detailed cookie information for
        both Windows on CFNetwork and Mac. Additionally, this patch provides deleteCookie
        support on Windows.

        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptObject::set):
        * bindings/js/ScriptObject.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getCookies):
        (WebCore::InspectorBackend::deleteCookie):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::getCookies):
        (WebCore::InspectorController::buildArrayForCookies):
        (WebCore::InspectorController::buildObjectForCookie):
        (WebCore::InspectorController::deleteCookie):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addCookieDomainForDocument):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView):
        (WebInspector.CookieItemsView.prototype.update):
        (WebInspector.CookieItemsView.prototype._deleteButtonClicked):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.Cookies.getCookiesAsync):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.reset):
        (WebInspector.StoragePanel.prototype.addCookieDomain):
        (WebInspector.StoragePanel.prototype.showCookies):
        (WebInspector.CookieSidebarTreeElement):
        (WebInspector.CookieSidebarTreeElement.prototype.onselect):
        * inspector/front-end/inspector.js:
        (WebInspector.addCookieDomain):
        * platform/Cookie.h:
        (WebCore::CookieHash::hash):
        (WebCore::CookieHash::equal):
        (WTF::):
        * platform/network/win/CookieJarCFNetWin.cpp:
        (WebCore::deleteCookie):

2009-10-07  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add ScriptObject::set(const char*, unsigned).

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

        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptObject::set):
        * bindings/v8/ScriptObject.h:

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

        Unreviewed build fix for Windows (Cairo).

        Provide implementation of new BitmapImage::create that was
        added in @r49060.

        * platform/graphics/win/ImageCairoWin.cpp:

2009-10-07  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Carlson.

        Refactor RenderThemeChromiumMac and RenderThemeChromiumSkia to render media controls using GraphicsContext.

        Design was based on existing RenderMediaControls.cpp used by RenderThemeSafari/Win.

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

        Covered by existing layout tests as no new functionality was introduced.

        * WebCore.gypi: Added RenderMediaControlsChromium.cpp/h.
        * css/mediaControlsChromium.css: Tweaked media slider position and border style.
        * rendering/MediaControlElements.cpp:
        (WebCore::toParentMediaElement): Taken from RenderMediaControls.
        (WebCore::MediaControlElement::rendererIsNeeded): Don't call shouldRenderMediaControlPart() if element has no appearance.
        (WebCore::MediaControlInputElement::rendererIsNeeded): Ditto.
        * rendering/RenderMediaControls.cpp: Moved parentMediaElement() to MediaControlElements.
        * rendering/RenderMediaControlsChromium.cpp: Added.
        (WebCore::platformResource): Helper to load and cache media control image resources.
        (WebCore::mediaSliderThumbImage): Implementation refactored from RenderThemeChromiumMac/Skia.
        (WebCore::mediaVolumeSliderThumbImage): Ditto.
        (WebCore::paintMediaButton): Ditto.
        (WebCore::paintMediaMuteButton): Ditto.
        (WebCore::paintMediaPlayButton): Ditto.
        (WebCore::paintMediaSlider): Ditto.
        (WebCore::paintMediaSliderThumb): Ditto.
        (WebCore::paintMediaVolumeSlider): Ditto.
        (WebCore::paintMediaVolumeSliderThumb): Ditto.
        (WebCore::paintMediaTimelineContainer): Ditto.
        (WebCore::RenderMediaControlsChromium::shouldRenderMediaControlPart): Ditto.
        (WebCore::RenderMediaControlsChromium::paintMediaControlsPart): Same
        (WebCore::RenderMediaControlsChromium::adjustMediaSliderThumbSize):
        * rendering/RenderMediaControlsChromium.h: Added.
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::adjustSliderThumbSize): Implementation delegated to RenderMediaControlsChromium.
        (WebCore::RenderThemeChromiumMac::shouldRenderMediaControlPart): Ditto.
        (WebCore::RenderThemeChromiumMac::paintMediaPlayButton): Ditto.
        (WebCore::RenderThemeChromiumMac::paintMediaMuteButton): Ditto.
        (WebCore::RenderThemeChromiumMac::paintMediaSliderTrack): Ditto.
        (WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderTrack): Ditto.
        (WebCore::RenderThemeChromiumMac::paintMediaSliderThumb): Ditto.
        (WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderThumb): Ditto.
        (WebCore::RenderThemeChromiumMac::paintMediaControlsBackground): Ditto.
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintMediaControlsBackground): Implementation delegated to RenderMediaControlsChromium.
        (WebCore::RenderThemeChromiumSkia::paintMediaSliderTrack): Ditto.
        (WebCore::RenderThemeChromiumSkia::paintMediaVolumeSliderTrack): Ditto.
        (WebCore::RenderThemeChromiumSkia::adjustSliderThumbSize): Ditto.
        (WebCore::RenderThemeChromiumSkia::paintMediaSliderThumb): Ditto.
        (WebCore::RenderThemeChromiumSkia::paintMediaVolumeSliderThumb): Ditto.
        (WebCore::RenderThemeChromiumSkia::paintMediaPlayButton): Ditto.
        (WebCore::RenderThemeChromiumSkia::paintMediaMuteButton): Ditto.
        (WebCore::RenderThemeChromiumSkia::shouldRenderMediaControlPart): Ditto.

2009-10-07  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Make plugins work with beforeload.

        Added fast/dom/beforeload/flash-before-load.html

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget):

2009-10-07  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Adam Barth.

        [V8] Protect JS listener object from GC while clearing a property on it.
        See http://crbug.com/23780.
        https://bugs.webkit.org/show_bug.cgi?id=30137

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::~V8AbstractEventListener):

2009-10-07  Zoltan Horvath  <zoltan@webkit.org>

        Rubber-stamped by Eric Seidel.

        Allow custom memory allocation control for WebCore's CachedResourceClient class
        https://bugs.webkit.org/show_bug.cgi?id=30165

        Inherits CachedResourceClient class from FastAllocBase because (its
        child class) CSSFontFaceSource has been instantiated by 'new' in WebCore/css/CSSFontFaceSource.h:46.

        * loader/CachedResourceClient.h:

2009-10-07  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's IdentifierRep 
        https://bugs.webkit.org/show_bug.cgi?id=30159                                                        

        Inherits IdentifierRep class from FastAllocBase because it has been                                 
        instantiated by 'new' in WebCore/bridge/IdentifierRep.cpp:61.  

        * bridge/IdentifierRep.h:

2009-10-07  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Fetch pointers to C+DOM window immediately from holder
        object (do not search prototype chain for proper JS wrapper).
        https://bugs.webkit.org/show_bug.cgi?id=29031

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::createNewContext):
        (WebCore::V8Proxy::installDOMWindow):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::NAMED_ACCESS_CHECK):
        (WebCore::INDEXED_ACCESS_CHECK):
2009-10-07  Adam Roben  <aroben@apple.com>

        Fix typo in PluginView::load that was causing cross-origin loads to
        be allowed

        This typo was introduced in the build fix in r49213.

        Fixes <http://webkit.org/b/30168> REGRESSION (r49213):
        http/tests/plugins/local-geturl-from-remote.html is failing on Windows

        Reviewed by Sam Weinig.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::load): Removed a comma operator that was making
        a condition always evaluate to true.

2009-10-07  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Do not create valid QColor's for invalid WebCore::Color's.

        * platform/graphics/qt/ColorQt.cpp:
        (WebCore::Color::operator QColor):

2009-10-07  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        [Qt] Symbian SBSv2 .data segment adress fix
        https://bugs.webkit.org/show_bug.cgi?id=30157

        RO-section in qtwebkit.dll exceeds allocated space in SBSv2. Move RW-section
        base address to start from 0x800000 instead of the toolchain default 0x400000

        * WebCore.pro:

2009-10-07  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Migrate database inspection to the injected script-based schema.

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

        * bindings/js/JSInspectorBackendCustom.cpp:
        (WebCore::JSInspectorBackend::databaseForId):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8InspectorBackendCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        (WebCore::InspectorBackend::databaseForId):
        (WebCore::InspectorBackend::selectDatabase):
        (WebCore::InspectorBackend::getDatabaseTableNames):
        (WebCore::InspectorBackend::reportDidDispatchOnInjectedScript):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::selectDatabase):
        (WebCore::InspectorController::databaseForId):
        (WebCore::InspectorController::didOpenDatabase):
        (WebCore::InspectorController::didUseDOMStorage):
        (WebCore::InspectorController::selectDOMStorage):
        (WebCore::InspectorController::getDOMStorageResourceForId):
        * inspector/InspectorController.h:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::InspectorDatabaseResource):
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorDatabaseResource.h:
        (WebCore::InspectorDatabaseResource::database):
        (WebCore::InspectorDatabaseResource::id):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addDatabase):
        (WebCore::InspectorFrontend::selectDatabase):
        (WebCore::InspectorFrontend::didGetDatabaseTableNames):
        (WebCore::InspectorFrontend::addDOMStorage):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/Database.js:
        (WebInspector.Database):
        (WebInspector.Database.prototype.get id):
        (WebInspector.Database.prototype.set name):
        (WebInspector.Database.prototype.set version):
        (WebInspector.Database.prototype.set domain):
        (WebInspector.Database.prototype.getTableNames):
        (WebInspector.Database.prototype.executeSql):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.dispatch):
        (InjectedScript.executeSql):
        (InjectedScript.executeSql.errorCallback):
        (InjectedScript.executeSql.queryTransaction):
        * inspector/front-end/InjectedScriptAccess.js:
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.methodName):
        (InjectedScriptAccess._installHandler):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.selectDatabase):
        (WebInspector.StoragePanel.prototype.dataGridForResult):
        * inspector/front-end/inspector.js:
        (WebInspector.addDatabase):

2009-10-07  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Windowless Plugins: Disable content propagation for QGraphicsView items
        
        We cannot support content propagation for items in QGraphicsView because
        the contents of the backing store might be transformed. So turn it off
        if we are not painting on QWidget.
        
        Note that this check will not work for a QWebView in a
        QGraphicsProxyWidget, but I guess it's fine. Alternative is to do an
        even uglier cast: static_cast painter's paintDevice() to QWidget and
        check if it is the viewport() of QGraphicsView.

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

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

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

        Fix the Qt build by adding the missing files to the build.

        * WebCore.pro:

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

        Reviewed by Xan Lopez.

        Fix incorrect convertion of double into int while assigning it to
        a float.

        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::platformInit):

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

        Reviewed by Xan Lopez.

        Fix rounding error issues in height calculation in 64 bits.

        Already covered by existing tests.

        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::platformInit):

2009-10-07  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        Dual lines in css2.1 layout tests do not match:
        https://bugs.webkit.org/show_bug.cgi?id=23262

        Now we can put a counter node as the next sibling of a reset node.
        Re-layout the counter content when the count is updated.

        Tests: fast/css/counters/t1204-increment-00-c-o.html
               fast/css/counters/t1204-increment-01-c-o.html

        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::recount):
        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):

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

        Try to fix the GTKbuild.

        * GNUmakefile.am:

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

        Reviewed by Adam Barth.

        Removed unused member variable from FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=30146

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

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

        Reviewed by NOBODY (build fix).

        A few small/trivial tweaks to the last build fix.

        * bindings/scripts/CodeGeneratorV8.pm:

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

        Reviewed by Dimitri Glazkov.

        [Chromium] Need to adjust MessagePort, etc. code for the post clone work done.
        https://bugs.webkit.org/show_bug.cgi?id=30147

        No change in functionality so no new tests.

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/SerializedScriptValue.h: Added.
         A very simple implementation of SerializedScriptValue
         that only works for strings.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

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

        Reviewed by Brady Eidson.

        Fix for <rdar://problem/7271202>
        Dispatch resource load delegate functions for the media element.
        Since we don't get the required callbacks from the media engine,
        just fake the parameters to the delegate functions as best as possible.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::isSafeToLoadURL):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::willLoadMediaElementURL):
        * loader/FrameLoader.h:

2009-10-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        More build fixes.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::DeserializingTreeWalker::getProperty):
        (WebCore::TeardownTreeWalker::getProperty):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::SerializedScriptValue):

2009-10-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Build and formatting fix.

        * ForwardingHeaders/runtime/ExceptionHelpers.h: Added.
        * bindings/js/SerializedScriptValue.cpp:
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValueData::operator bool):
        (WebCore::SerializedScriptValueData::release):
        (WebCore::SerializedScriptValue::release):
        (WebCore::SerializedScriptValue::toString):
        (WebCore::SerializedScriptValue::~SerializedScriptValue):
        (WebCore::SerializedScriptValue::SerializedScriptValue):

2009-10-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        It should be possible to post (clone) built-in JS objects to Workers
        https://bugs.webkit.org/show_bug.cgi?id=22878

        Implement object cloning semantics for postMessage.  Currently only
        a partial implementation of the spec -- cloning of File, FileList,
        ImageData, and RegExp were left out as they would have significantly
        increased patch size.

        Cloning requires multiple tree walks so we use a templated tree
        walk function, allowing us to share a single implementation for
        serialization, deserialization, and eventual destruction of the
        serialized object tree.

        Test: fast/dom/Window/window-postmessage-clone.html

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::postMessage):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::initMessageEvent):
        * bindings/js/JSMessagePortCustom.h:
        (WebCore::handlePostMessage):
        * bindings/js/SerializedScriptValue.cpp: Added.
        (WebCore::SerializedObject::set):
        (WebCore::SerializedObject::names):
        (WebCore::SerializedObject::values):
        (WebCore::SerializedObject::create):
        (WebCore::SerializedObject::clear):
        (WebCore::SerializedObject::SerializedObject):
        (WebCore::SerializedArray::setIndex):
        (WebCore::SerializedArray::canDoFastRead):
        (WebCore::SerializedArray::getIndex):
        (WebCore::SerializedArray::getSparseIndex):
        (WebCore::SerializedArray::length):
        (WebCore::SerializedArray::create):
        (WebCore::SerializedArray::clear):
        (WebCore::SerializedArray::SerializedArray):
        (WebCore::SerializedScriptValueData::SerializedScriptValueData):
        (WebCore::SharedSerializedData::asArray):
        (WebCore::SharedSerializedData::asObject):
        (WebCore::):
        (WebCore::walk):
        (WebCore::BaseWalker::BaseWalker):
        (WebCore::BaseWalker::shouldTerminate):
        (WebCore::BaseWalker::ticksUntilNextCheck):
        (WebCore::BaseWalker::didTimeOut):
        (WebCore::BaseWalker::throwStackOverflow):
        (WebCore::BaseWalker::throwInterruptedException):
        (WebCore::SerializingTreeWalker::SerializingTreeWalker):
        (WebCore::SerializingTreeWalker::null):
        (WebCore::SerializingTreeWalker::isArray):
        (WebCore::SerializingTreeWalker::isObject):
        (WebCore::SerializingTreeWalker::asInputArray):
        (WebCore::SerializingTreeWalker::asInputObject):
        (WebCore::SerializingTreeWalker::createOutputArray):
        (WebCore::SerializingTreeWalker::createOutputObject):
        (WebCore::SerializingTreeWalker::length):
        (WebCore::SerializingTreeWalker::canDoFastRead):
        (WebCore::SerializingTreeWalker::getIndex):
        (WebCore::SerializingTreeWalker::getSparseIndex):
        (WebCore::SerializingTreeWalker::getProperty):
        (WebCore::SerializingTreeWalker::convertIfTerminal):
        (WebCore::SerializingTreeWalker::getPropertyNames):
        (WebCore::SerializingTreeWalker::putIndex):
        (WebCore::SerializingTreeWalker::putProperty):
        (WebCore::SerializingTreeWalker::startArray):
        (WebCore::SerializingTreeWalker::endArray):
        (WebCore::SerializingTreeWalker::startObject):
        (WebCore::SerializingTreeWalker::endObject):
        (WebCore::SerializedScriptValueData::serialize):
        (WebCore::DeserializingTreeWalker::DeserializingTreeWalker):
        (WebCore::DeserializingTreeWalker::null):
        (WebCore::DeserializingTreeWalker::isArray):
        (WebCore::DeserializingTreeWalker::isObject):
        (WebCore::DeserializingTreeWalker::asInputArray):
        (WebCore::DeserializingTreeWalker::asInputObject):
        (WebCore::DeserializingTreeWalker::createOutputArray):
        (WebCore::DeserializingTreeWalker::createOutputObject):
        (WebCore::DeserializingTreeWalker::length):
        (WebCore::DeserializingTreeWalker::canDoFastRead):
        (WebCore::DeserializingTreeWalker::getIndex):
        (WebCore::DeserializingTreeWalker::getSparseIndex):
        (WebCore::DeserializingTreeWalker::getProperty):
        (WebCore::DeserializingTreeWalker::convertIfTerminal):
        (WebCore::DeserializingTreeWalker::getPropertyNames):
        (WebCore::DeserializingTreeWalker::putIndex):
        (WebCore::DeserializingTreeWalker::putProperty):
        (WebCore::DeserializingTreeWalker::startArray):
        (WebCore::DeserializingTreeWalker::endArray):
        (WebCore::DeserializingTreeWalker::startObject):
        (WebCore::DeserializingTreeWalker::endObject):
        (WebCore::SerializedScriptValueData::deserialize):
        (WebCore::TeardownTreeWalker::shouldTerminate):
        (WebCore::TeardownTreeWalker::ticksUntilNextCheck):
        (WebCore::TeardownTreeWalker::didTimeOut):
        (WebCore::TeardownTreeWalker::throwStackOverflow):
        (WebCore::TeardownTreeWalker::throwInterruptedException):
        (WebCore::TeardownTreeWalker::null):
        (WebCore::TeardownTreeWalker::isArray):
        (WebCore::TeardownTreeWalker::isObject):
        (WebCore::TeardownTreeWalker::asInputArray):
        (WebCore::TeardownTreeWalker::asInputObject):
        (WebCore::TeardownTreeWalker::createOutputArray):
        (WebCore::TeardownTreeWalker::createOutputObject):
        (WebCore::TeardownTreeWalker::length):
        (WebCore::TeardownTreeWalker::canDoFastRead):
        (WebCore::TeardownTreeWalker::getIndex):
        (WebCore::TeardownTreeWalker::getSparseIndex):
        (WebCore::TeardownTreeWalker::getProperty):
        (WebCore::TeardownTreeWalker::convertIfTerminal):
        (WebCore::TeardownTreeWalker::getPropertyNames):
        (WebCore::TeardownTreeWalker::putIndex):
        (WebCore::TeardownTreeWalker::putProperty):
        (WebCore::TeardownTreeWalker::startArray):
        (WebCore::TeardownTreeWalker::endArray):
        (WebCore::TeardownTreeWalker::startObject):
        (WebCore::TeardownTreeWalker::endObject):
        (WebCore::SerializedScriptValueData::tearDownSerializedData):
        * bindings/js/SerializedScriptValue.h: Added.
        (WebCore::SharedSerializedData::~SharedSerializedData):
        (WebCore::SerializedScriptValueData::):
        (WebCore::SerializedScriptValueData::type):
        (WebCore::SerializedScriptValueData::~SerializedScriptValueData):
        (WebCore::SerializedScriptValueData::SerializedScriptValueData):
        (WebCore::SerializedScriptValueData::asImmediate):
        (WebCore::SerializedScriptValueData::asDouble):
        (WebCore::SerializedScriptValueData::asString):
        (WebCore::SerializedScriptValueData::asObject):
        (WebCore::SerializedScriptValueData::asArray):
        (WebCore::SerializedScriptValueData::operator bool ):
        (WebCore::SerializedScriptValueData::release):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::release):
        (WebCore::SerializedScriptValue::toString):
        (WebCore::SerializedScriptValue::deserialize):
        (WebCore::SerializedScriptValue::~SerializedScriptValue):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        (WebCore::MessageEvent::initMessageEvent):
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::create):
        (WebCore::MessageEvent::data):
        * dom/MessageEvent.idl:
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage):
        * dom/MessagePort.h:
        * dom/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::EventData::create):
        (WebCore::MessagePortChannel::EventData::EventData):
        * dom/MessagePortChannel.h:
        (WebCore::MessagePortChannel::EventData::message):
        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::PostMessageTimer):
        (WebCore::DOMWindow::postMessage):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/EventSource.cpp:
        (WebCore::EventSource::createMessageEvent):
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::didReceiveMessage):
        * workers/DedicatedWorkerContext.cpp:
        (WebCore::DedicatedWorkerContext::postMessage):
        * workers/DedicatedWorkerContext.h:
        * workers/DedicatedWorkerContext.idl:
        * workers/Worker.cpp:
        (WebCore::Worker::postMessage):
        * workers/Worker.h:
        * workers/Worker.idl:
        * workers/WorkerContextProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerContextTask::create):
        (WebCore::MessageWorkerContextTask::MessageWorkerContextTask):
        (WebCore::MessageWorkerTask::create):
        (WebCore::MessageWorkerTask::MessageWorkerTask):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerContext):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerObjectProxy.h:

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

        Unreviewed build fix for Windows.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::load):

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

        Reviewed by Eric Seidel.

        Move FrameLoader::canLoad to SecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=30111

        * WebCore.base.exp:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isSafeToLoadURL):
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadSubframe):
        (WebCore::FrameLoader::loadPlugin):
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::createJavaAppletWidget):
        * loader/FrameLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canLoad):
        (WebCore::SecurityOrigin::shouldHideReferrer):
        * page/SecurityOrigin.h:

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

        Reviewed by Eric Seidel.

        Move setLocalLoadPolicy and friends to SecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=30110

        These have more to do with security policies than with loading frames.

        * WebCore.base.exp:
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::setLocalLoadPolicy):
        (WebCore::SecurityOrigin::restrictAccessToLocal):
        (WebCore::SecurityOrigin::allowSubstituteDataAccessToLocal):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::):

2009-10-06  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Brady Eidson.

        Preparation for <http://webkit.org/b/30104>.
        Inspector should show cookies of sub-resources on the page.
        
        Implement getRawCookies for CFNetwork for Windows, so we can see more
        than just a key/value pair for Cookies when we are on Windows.

        * platform/network/win/CookieJarCFNetWin.cpp:
        (WebCore::getRawCookies):

2009-10-06  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=30132, make beforeload work with <link> elements and
        XML processing instructions.

        Fix up ProcessingInstruction's setData call so that it actually updates a stylesheet when the
        data gets changed.

        Move dispatchBeforeLoadedEvent to ContainerNode so all Elements (and ProcessingInstruction) can
        access it.

        Added fast/dom/beforeload/link-before-load.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::dispatchBeforeLoadEvent):
        * dom/ContainerNode.h:
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::setData):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::requestScript):
        * dom/ScriptElement.h:
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::endElementNs):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseMappedAttribute):
        (WebCore::HTMLLinkElement::process):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::forAttributeValue):
        * html/HTMLScriptElement.h:
        * svg/SVGScriptElement.cpp:
        * svg/SVGScriptElement.h:

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

        Reviewed by Mark Rowe.

        accessibility/media-element.html crashes (and has incorrect result)
        https://bugs.webkit.org/show_bug.cgi?id=30108

        Fix up the accessibilty label for the newly added fullscreen button,
        and update the test result accordingly.

        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::controlTypeName):

2009-10-06  Kelly Norton  <knorton@google.com>

        Reviewed by Timothy Hatcher.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30028>
        Multiple calls to SetFrontendProxyObject can leave an InspectorTimelineAgent with an invalid
        InspectorFrontend.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setFrontendProxyObject): Adds a check for an existing timeline agent.

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

        Reviewed by Dave Kilzer.

        Move textRects to the right category in DOM.mm. Include DOMPrivate.h to ensure that the interfaces match.

        * bindings/objc/DOM.mm:
        (-[DOMNode textRects]):

2009-10-06  Benjamin C Meyer  <bmeyer@rim.com>

        Reviewed by Ariya Hidayat.
        
        Match the behavior of other WebKit browser and have the first url of the drag data be the url passed in declareAndWriteDragImage and set the text of the drag data to be the title argument.
        
        Manual test: Drag the readability js link from http://lab.arc90.com/experiments/readability/
        
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::declareAndWriteDragImage):

2009-10-06  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Implement min/max attributes, ValidityState.rangeUnderflow and
        ValidityState.rangeOverflow for <input type=number> and <input type=range>
        https://bugs.webkit.org/show_bug.cgi?id=29069
        
        HTMLInputElement::max and min are not defined for COM because they
        conflict with the standard min() and max() macros.

        Tests: fast/forms/ValidityState-rangeOverflow-number.html
               fast/forms/ValidityState-rangeOverflow-range.html
               fast/forms/ValidityState-rangeUnderflow-number.html
               fast/forms/ValidityState-rangeUnderflow-range.html
               fast/forms/input-minmax.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::rangeUnderflow):
        (WebCore::HTMLInputElement::rangeOverflow):
        (WebCore::HTMLInputElement::rangeMinimum):
        (WebCore::HTMLInputElement::rangeMaximum):
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:
        * html/ValidityState.cpp:
        (WebCore::ValidityState::rangeUnderflow):
        (WebCore::ValidityState::rangeOverflow):
        * html/ValidityState.h:
        * rendering/RenderSlider.cpp:
        (WebCore::SliderRange::SliderRange):
        (WebCore::SliderRange::valueFromElement):

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

        Reviewed by Eric Seidel.

        Move m_openedByDOM to Page
        https://bugs.webkit.org/show_bug.cgi?id=30109

        We only need one instance of m_openedByDOM per page, we should move it
        to a page-scoped object.  Notice that it's only ever touched for the
        main frame.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::createWindow):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::createWindow):
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::close):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::openedByDOM):
        (WebCore::Page::setOpenedByDOM):
        * page/Page.h:

2009-10-06  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Some functions in GraphicsContext do not work
        as expected if the associated painter has no clipping.
        https://bugs.webkit.org/show_bug.cgi?id=29691

        No new tests are associated with this because DumpRenderTree
        always sets clipping on the painter, thus it would never hit 
        the test case, but fast/box-shadow/basic-shadows.html is a
        good example of what happens if the clipping is not set by
        the user of QtWebKit.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        Fixed to handle the case that there is no clipping
        before the call.

2009-10-06  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=30131, make beforeload fire on script elements.

        Added tests in fast/dom/beforeload/.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::requestScript):
        * dom/ScriptElement.h:
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::endElementNs):
        * html/HTMLAttributeNames.in:
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseMappedAttribute):
        (WebCore::HTMLScriptElement::dispatchBeforeLoadEvent):
        * html/HTMLScriptElement.h:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::dispatchBeforeLoadEvent):
        * svg/SVGScriptElement.h:

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

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25526
        [Gtk] Additional support is needed for caret browsing

        Enable caret movement commands also when caret browsing setting is
        enabled.

        * editing/EditorCommand.cpp:
        (WebCore::caretBrowsingEnabled):
        (WebCore::enabledVisibleSelectionOrCaretBrowsing):
        (WebCore::enabledInEditableTextOrCaretBrowsing):
        (WebCore::CommandEntry::):
        * manual-tests/gtk/caret-browsing.html: Added.

2009-10-06  Anton Muhin  <antonm@chromium>

        Reviewed by Dimitri Glazkov.

        Non standard, but popular exetension allows automagically
        turn a function into a namespace resolver.  Support that in
        Chromium as well.

        Adjust CodeGeneratorV8 to treat XPathNSResolver in a special way.
        https://bugs.webkit.org/show_bug.cgi?id=30128

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::getXPathNSResolver):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

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

        Reviewed by Timothy Hatcher.

        Web Inspector: close inspector client view on
        InspectorController::close API call.

        In order to run batch web inspector layout tests (and not affect
        subsequent tests) we should close inspector client's view upon
        InspectorController::close API call.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::close):

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

        Reviewed by Tor Arne Vestbø.

        Fix the Qt/Windows build by stubbing out the still image
        support for halted plugins for the Qt build.

        Bugzilla entry https://bugs.webkit.org/show_bug.cgi?id=30130
        tracks removing this by implementing Frame::nodeImage().

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::halt):

2009-10-05  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] Change QImageReader usage in ImageDecoderQt
        https://bugs.webkit.org/show_bug.cgi?id=27538

        Replace the ReadContext with another appoach to
        reading the image. Attempt to only read meta information
        like the image size and number of frames (for animations)
        first and then when the page is getting drawn decode
        the image with the QImageReader.

        This is a huge benefit on pages with many images and saves
        ~2GB of memory on the szeged image test page.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ImageDecoderQt):
        (WebCore::ImageDecoderQt::setData):
        (WebCore::ImageDecoderQt::isSizeAvailable):
        (WebCore::ImageDecoderQt::frameCount):
        (WebCore::ImageDecoderQt::repetitionCount):
        (WebCore::ImageDecoderQt::filenameExtension):
        (WebCore::ImageDecoderQt::frameBufferAtIndex):
        (WebCore::ImageDecoderQt::clearFrameBufferCache):
        (WebCore::ImageDecoderQt::internalDecodeSize):
        (WebCore::ImageDecoderQt::internalReadImage):
        (WebCore::ImageDecoderQt::internalHandleCurrentImage):
        (WebCore::ImageDecoderQt::forceLoadEverything):
        (WebCore::ImageDecoderQt::failRead):
        * platform/graphics/qt/ImageDecoderQt.h:

2009-10-05  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] Make use of RGBA32Buffer in ImageDecoderQt
        https://bugs.webkit.org/show_bug.cgi?id=27538

        Use the RGBA32Buffer instead of the internal ImageData
        to be able to use support of the base class, optionally
        support WebCore decoders for Qt and most importantly
        separate metadata and image data for better cache control.

        Remove ImageSourceQt as everything is now shared with
        the normal ImageSource.

        Change the ownership of the NativeImagePtr/QPixmap in
        ImageQt.cpp to delete the m_frame to be subject to cache
        control.

        * WebCore.pro:
        * platform/graphics/ImageSource.cpp:
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ReadContext::ReadContext):
        (WebCore::ImageDecoderQt::ReadContext::read):
        (WebCore::ImageDecoderQt::ReadContext::readImageLines):
        (WebCore::ImageDecoderQt::ImageDecoderQt):
        (WebCore::ImageDecoderQt::setData):
        (WebCore::ImageDecoderQt::frameCount):
        (WebCore::ImageDecoderQt::frameBufferAtIndex):
        (WebCore::ImageDecoderQt::clearFrameBufferCache):
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/graphics/qt/ImageSourceQt.cpp: Removed.
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::decodedImage):
        (WebCore::RGBA32Buffer::getAddr):
        * platform/image-decoders/qt/RGBA32BufferQt.cpp: Added.
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        (WebCore::RGBA32Buffer::setDecodedImage):
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::zeroFill):
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::setSize):
        (WebCore::RGBA32Buffer::asNewNativeImage):
        (WebCore::RGBA32Buffer::hasAlpha):
        (WebCore::RGBA32Buffer::setHasAlpha):
        (WebCore::RGBA32Buffer::setStatus):
        (WebCore::RGBA32Buffer::operator=):
        (WebCore::RGBA32Buffer::width):
        (WebCore::RGBA32Buffer::height):

2009-10-05  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] ImageDecoderQt avoid QString creation.
        https://bugs.webkit.org/show_bug.cgi?id=27538

        Avoid going from CString to QString to String
        and go directly from CString to String. Also
        avoid going to lower case to avoid an extra
        memory allocation.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoder::create):
        (WebCore::ImageDecoderQt::ImageDecoderQt):
        * platform/graphics/qt/ImageDecoderQt.h:

2009-10-05  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] Cleanup the ImageDecoder of Qt.
        https://bugs.webkit.org/show_bug.cgi?id=27538

        Remove the various enums for partial load. The fact is
        that this image decoder will decode everything that is
        in the file at once. Make it look like it behaves to
        ease fixing this core problem.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ImageData::ImageData):
        (WebCore::ImageDecoderQt::ReadContext::ReadContext):
        (WebCore::ImageDecoderQt::ReadContext::read):
        (WebCore::ImageDecoderQt::ReadContext::readImageLines):
        (WebCore::ImageDecoderQt::hasFirstImageHeader):
        (WebCore::ImageDecoderQt::setData):
        * platform/graphics/qt/ImageDecoderQt.h:

2009-10-04  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] Reimplement instead of overload frameCount in ImageDecoderQt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=27538

        Reimplement frameCount instead of overloading it.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::frameCount):
        * platform/graphics/qt/ImageDecoderQt.h:

2009-10-04  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] QImageReader does not support progressive reading
        https://bugs.webkit.org/show_bug.cgi?id=27538

        Change the ImageDecoderQt::setData to store the encoded
        data in ImageDecoder.

        Only call ReadContext when the whole Resource has been
        loaded to avoid needless calls to reset and the
        ReadContext as progressive loading is not supported.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::setData):
        * platform/graphics/qt/ImageDecoderQt.h:

2009-10-04  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] Remove dead code from ImageDecoderQt
        https://bugs.webkit.org/show_bug.cgi?id=27538

        Remove unused variables and debugging code. The debug
        code has never been used and does not provide anything
        useful.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ReadContext::read):
        (WebCore::ImageDecoderQt::ReadContext::readImageLines):
        (WebCore::ImageDecoderQt::setData):
        (WebCore::ImageDecoderQt::isSizeAvailable):
        (WebCore::ImageDecoderQt::frameCount):
        (WebCore::ImageDecoderQt::repetitionCount):
        (WebCore::ImageDecoderQt::filenameExtension):
        (WebCore::ImageDecoderQt::imageAtIndex):

2009-10-06  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] segfault when calling gst_video_format_parse_caps in the video sink
        https://bugs.webkit.org/show_bug.cgi?id=30120

        Fix use of gst_video_format_parse_caps()

        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_idle_func):

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

        Reviewed by Simon Hausmann.

        [Qt] Update mediaControls CSS

        * css/mediaControlsQt.css:

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

        Reviewed by Timothy Hatcher.

        Web Inspector: Get rid of Preferences.ignoreWhitespace.

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

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent):
        (WebInspector.DOMAgent.prototype._childNodeCountUpdated):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.update):
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype.onpopulate):
        (WebInspector.ElementsTreeElement.prototype._updateChildren.updateChildrenOfNode):
        (WebInspector.ElementsTreeElement.prototype._updateChildren):
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.isCaretAtEndOfPrompt):
        * inspector/front-end/inspector.js:
        * inspector/front-end/utilities.js:
        (Node.prototype.rangeOfWord):
        (traverseNextNode):
        (traversePreviousNode):
        (onlyTextChild):

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

        Reviewed by Timothy Hatcher.

        Web Inspector: Do not call nodeTitleInfo twice +
        followup fixes for r49101.

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

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

2009-10-06  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Windowless plugins: Enable painting on printer.

        The print preview dialog crashed because the depth of the drawable
        changed owing to a bug in Qt - if you draw onto a 32-bit pixmap,
        and set a 24-bit pixmap as source, it will convert the source to
        32-bit.

        1210fa5b2d65895ad2be1f9ca7cae586e3b29dc1 is the bug fix in Qt.

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

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

2009-10-06  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Windowless plugins: Make painting and events work when page is zoomed.

        The element gets resized when zoomed. So, we have to make sure that we resize
        the drawable and do a setwindow call. Multiple calls to setwindow do not
        crash plugin in windowless mode (unlike in windowed mode).

        For mouse events we have to convert the pos to post-zoom position.

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

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::setXButtonEventSpecificFields):
        (WebCore::setXMotionEventSpecificFields):
        (WebCore::setXCrossingEventSpecificFields):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowIfNeeded):

2009-10-06  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Windowless plugins: Add PluginQuirkRequiresDefaultScreenDepth quirk for Flash.

        Flash does not use the visual provided by us to draw into the drawable.
        It instead uses the system default visual (as returned by XDefaultVisual).
        This means that if the screen default visual is 24-bit, Flash won't be
        able to draw on 32-bit drawable created by us. This is a bug in Flash
        and for the moment, the above quirk is only set for Flash.

        Our strategy to create the drawable:
        1. Create a 32-bit drawable if the default screen depth is 32 or the
        quirk is not set (i.e not flash)
        2. If we didn't create a 32-bit drawable (maybe the Display has no such
        visual), we create a drawable with default screen depth.

        As a result of the above changes, content propagation behavior changes as:
        1. Content propagation is possible only if the drawable we create and
        Qt's backing store are of the same depth.
        2. If we created a 32-bit drawable, there is no need for content
        propagation (Qt will take care of it).

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

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::determineQuirks):
        * plugins/PluginQuirkSet.h:
        (WebCore::):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):
        (WebCore::getVisualAndColormap):
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::platformDestroy):

2009-10-06  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Ariya Hidayat.

        Qt build fix.
        https://bugs.webkit.org/show_bug.cgi?id=29362.

        In Qt 4.5, a new function QPainter::fillRect(QRect, QColor) is
        introduced to avoid the expensive construction of QBrush.
        By casting WebCore::Color to QColor, we can compile on Qt 4.4
        and use optimization for solid color fill in Qt 4.5.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::drawBorderlessRectShadow):

2009-10-05  Andrei Popescu  <andreip@google.com>

        Reviewed by Eric Carlson.

        Allow the platform media player to know the <video> poster URL.
        Add MediaPlayerPrivate::prepareToPlay() to support media engines
        that do not buffer video data automatically. This method allows
        such media engines to start the buffering just before starting
        playback.
        https://bugs.webkit.org/show_bug.cgi?id=29133

        All platforms that currently implement <video> return false
        in MediaPlayerPrivate::canLoadPoster() and do nothing in
        MediaPlayerPrivate::prepareToPlay() their behavior is
        unchanged. The current set of media test should then be
        sufficient to guarantee that this patch does not break anything.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):
        After the MediaPlayer is created, inform it what the poster URL is.
        (WebCore::HTMLMediaElement::updatePlayState):
        Add another case where prepareToPlay is called for the platforms
        that do not buffer video content automatically.
        (WebCore::HTMLMediaElement::couldPlayIfEnoughData)
        Same as potentiallyPlaying, except that we don't check for
        the readyState being at least HAVE_FUTURE_DATA.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::canLoadPoster):
        Empty implementation for the NullMediaPlayerPrivate.
        (WebCore::NullMediaPlayerPrivate::setPoster):
        Empty implementation for the NullMediaPlayerPrivate.
        (WebCore::MediaPlayer::canLoadPoster):
        Proxy to the m_private.
        (WebCore::MediaPlayer::setPoster):
        Proxy to m_private.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::canLoadPoster):
        (WebCore::MediaPlayerPrivateInterface::setPoster):
        Add new methods that allow the platform player to receive the poster URL.
        (WebCore::MediaPlayerPrivateInterface::prepareToPlay):
        Notifies the media engine that playback should start. The media engine
        should start preparing (e.g. by initializing the player and starting to buffer)
        and call back when the state is changed to HAVE_FUTURE_DATA.

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

        Reviewed by Oliver Hunt.

        StringImpl needs a method to get an instance for another thread which doesn't copy the underlying buffer.
        https://bugs.webkit.org/show_bug.cgi?id=30095

        All String::copy methods were changed to call either threadsafeCopy or crossThreadString. The method
        call was made threadsafeCopy unless I could show that threadsafety wasn't needed.

        No visible change in functionality so no new tests.

        * dom/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::EventData::EventData):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):
        (WebCore::IconDatabase::iconForPageURL):
        (WebCore::IconDatabase::iconURLForPageURL):
        (WebCore::IconDatabase::retainIconForPageURL):
        (WebCore::IconDatabase::releaseIconForPageURL):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::setIconURLForPageURL):
        (WebCore::IconDatabase::databasePath):
        (WebCore::IconDatabase::defaultDatabaseFilename):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin): Since this is used by SecurityOrigin::threadsafeCopy,
        it makes threadsafe calls.
        (WebCore::SecurityOrigin::threadsafeCopy): The only place that called this
        needed a threadsafe method.
        * page/SecurityOrigin.h:
        * platform/CrossThreadCopier.cpp:
        (WebCore::::copy):
        * platform/KURL.cpp:
        (WebCore::KURL::copy):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::copyData):
        * platform/network/ResourceErrorBase.cpp:
        (WebCore::ResourceErrorBase::copy):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::copyData):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::copyData):
        * platform/sql/SQLValue.cpp:
        (WebCore::SQLValue::SQLValue):
        (WebCore::SQLValue::string):
        * platform/sql/SQLValue.h:
        (WebCore::SQLValue::SQLValue):
        All constructors now initialize the m_number which is a double. Failure to
        do so can result in unexpected crashes when it is copied in the copy constructor.
        See http://blogs.msdn.com/oldnewthing/archive/2008/07/02/8679191.aspx, I was that colleague.
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        (WebCore::String::threadsafeCopy):
        (WebCore::String::crossThreadString):
        * platform/text/StringImpl.cpp:
        Removed StringImpl::substringCopy which was no longer being used anywhere.
        (WebCore::StringImpl::threadsafeCopy): Changed the name to indicate that
        it is threadsafe.
        (WebCore::StringImpl::crossThreadString): The way to get strings for
        another thread which is not threadsafe. This shares the underlying buffer
        with both strings and gives them a way to do threadsafe refcounting for it.
        * platform/text/StringImpl.h:
        * storage/ChangeVersionWrapper.cpp:
        (WebCore::ChangeVersionWrapper::ChangeVersionWrapper):
        * storage/Database.cpp:
        (WebCore::updateGuidVersionMap):
        (WebCore::Database::Database):
        (WebCore::Database::getVersionFromDatabase):
        (WebCore::Database::setVersionInDatabase):
        (WebCore::Database::version):
        (WebCore::Database::setExpectedVersion):
        (WebCore::Database::securityOriginCopy):
        (WebCore::Database::stringIdentifier):
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
        * storage/OriginQuotaManager.cpp:
        (WebCore::OriginQuotaManager::addDatabase):
        * storage/SQLError.h:
        (WebCore::SQLError::message):
        (WebCore::SQLError::SQLError):
        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::SQLStatement):
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::syncTimerFired):
        * storage/StorageMap.cpp:
        (WebCore::StorageMap::importItem):
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::StorageNamespaceImpl):
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::StorageSyncManager):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::url): Do the copy of the url in a way that is threadsafe.
        (WebCore::SharedWorkerProxy::name):
        (WebCore::SharedWorkerProxy::SharedWorkerProxy):
        (WebCore::DefaultSharedWorkerRepository::getProxy): Do the copy of the url in a way that is threadsafe.
        * workers/SharedWorkerThread.cpp:
        (WebCore::SharedWorkerThread::SharedWorkerThread):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerContextTask::MessageWorkerContextTask):
        (WebCore::MessageWorkerTask::MessageWorkerTask):
        (WebCore::WorkerExceptionTask::WorkerExceptionTask):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::Task::Task):
        (WebCore::WorkerRunLoop::postTaskForMode):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):

2009-10-06  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Windowless plugins: Use X Pixmap instead of QPixmap.

        This has the following advantages:
        1. Allows more sharing of code between gtk and Qt ports in the future
        2. QPixmap creates 24-bit by default. We have to later 'upgrade' it to 32-bit.
        3. QPixmap may sometime change depth behind our back! This will require us to
        update the plugin about the new visual and colormap.
        4. We cannot ensure that QPixmap is backed by a X Drawable. For example, with
        -graphicssystem raster, QPixmap uses the raster (image) backend.

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

        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::platformDestroy):

2009-10-06  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Add support for windowless NPAPI plugins

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

        * plugins/PluginView.cpp:
        (WebCore::PluginView::setFrameRect):
        (WebCore::PluginView::handleEvent):
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::setSharedXEventFields):
        (WebCore::PluginView::initXEvent):
        (WebCore::setXKeyEventSpecificFields):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::inputEventState):
        (WebCore::setXButtonEventSpecificFields):
        (WebCore::setXMotionEventSpecificFields):
        (WebCore::setXCrossingEventSpecificFields):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::handleFocusInEvent):
        (WebCore::PluginView::handleFocusOutEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::getValueStatic):
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::invalidateRegion):
        (WebCore::PluginView::forceRedraw):
        (WebCore::getPluginDisplay):
        (WebCore::PluginView::platformStart):

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

        Reviewed by Nikolas Zimmermann.

        SVG Filters do not support source images besides "sourceGraphic"
        [https://bugs.webkit.org/show_bug.cgi?id=6022]

        Add support for SourceAlpha to SVG filters.

        Test: svg/filters/sourceAlpha.svg

        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::calculateEffectRect):
        (WebCore::SourceAlpha::apply):
        * platform/graphics/filters/SourceAlpha.h:

2009-10-05  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Adam Barth.

        Fix reliablity bot crash in DateExtension.
        https://bugs.webkit.org/show_bug.cgi?id=30033

        There were a few problems using the weak persistent pointers because no one else had a
        handle to them.  The new approach stores them as a hidden value on the Date constructor.

        * bindings/v8/DateExtension.cpp:
        (WebCore::DateExtension::setAllowSleep):
        (WebCore::DateExtension::GetNativeFunction):
        (WebCore::DateExtension::Setup):
        (WebCore::DateExtension::OnSleepDetected):
        * bindings/v8/DateExtension.h:
        * bindings/v8/V8HiddenPropertyName.cpp:
        (WebCore::V8HiddenPropertyName::sleepFunction):
        * bindings/v8/V8HiddenPropertyName.h:

2009-10-05  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Dan Bernstein.

        Crash when trying to load a null stylesheet for a site specific hack. 
        https://bugs.webkit.org/show_bug.cgi?id=30105

        Created a testcase and tested in browser.  DRT doesn't test
        site specific hacks.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):

2009-10-05  James Robinson  <jamesr@google.com>

        Reviewed by Darin Adler.

        Fix forward declaration (struct vs class mismatch)

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

        * loader/RedirectScheduler.h:

2009-10-05  Julie Parent  <jparent@chromium.org>

        Unreviewed, last Chromium build fix corresponding to revision 49113.
        Add include for BeforeLoadEvent to DOMObjectsInclude.h.

        * bindings/v8/DOMObjectsInclude.h:

2009-10-05  Simon Fraser  <simon.fraser@apple.com>

        Fix Windows build.

        * html/HTMLMediaElement.cpp:

2009-10-05  Simon Fraser  <simon.fraser@apple.com>

        Fix the build: MediaControllerThemeQT was renamed to MediaControllerThemeQuickTime.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::shouldRenderMediaControlPart):

2009-10-05  Pierre d'Herbemont  <pdherbemont@webkit.org>

        Reviewed by Simon Fraser
        
        Support fullscreen in MediaPlayer (Mac)
        https://bugs.webkit.org/show_bug.cgi?id=26742

        Add a fullscreen button to the <video> controller if the media engine,
        and the theme have support for fullscreen, and can show appropriate controls.
        Clicking the button calls through the ChromeClient to the WebVideoFullscreenController
        in WebKit to do a nice animation to fullscreen, with a custom controller.

        * DerivedSources.make:
        * WebCore.Video.exp: Added.
        New export file for when VIDEO is enabled.
        
        * WebCore.base.exp: Export WebCore::HTMLNames::videoTag
        * WebCore.xcodeproj/project.pbxproj: New files
        
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::willRemove):
        (WebCore::HTMLMediaElement::screenRect):
        (WebCore::HTMLMediaElement::enterFullscreen):
        (WebCore::HTMLMediaElement::exitFullscreen):
        (WebCore::HTMLMediaElement::platformMedia):
        Add fullscreen logic. platformMedia returns a pointer to platform-specific playback data
        used for fullscreen.
        
        * html/HTMLVideoElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::supportsFullscreen): Check with both the player and the ChromeClient
        to see if it's possile to enter fullscreen for this element.
        
        * page/ChromeClient.h:
        (WebCore::ChromeClient::supportsFullscreenForNode):
        (WebCore::ChromeClient::enterFullscreenForNode):
        (WebCore::ChromeClient::exitFullscreenForNode):
        New methods
        
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::platformMedia):
        (WebCore::MediaPlayer::platformMedia):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::platformMedia):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::platformMedia):
        (WebCore::MediaPlayerPrivate::supportsFullscreen):
        New methods to return platform-specific playback data for fullscreen.
        
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlFullscreenButtonElement::defaultEventHandler):
        Hook up the fullscreen button.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::shouldRenderMediaControlPart):
        Allow the RenderThemeMac to make a decision about the availability of fullscreen based
        on the QuickTime version, since this affects what controls are availabl.e

2009-10-05  Kevin Decker  <kdecker@apple.com>

        Export a few more methods from Settings.h
        
        Rubberstamped by Jon Honeycutt.
        
        * WebCore.base.exp:

2009-10-05  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        1-char fix for obviously reverse condition.
        https://bugs.webkit.org/show_bug.cgi?id=30100
        No test since the only difference is a timing of GC.

        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::clear): Revert condition. Almost a typo.

2009-09-30  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Update platform-specific #ifdefs in GraphicsContext3D.h for the
        Chromium port.
        https://bugs.webkit.org/show_bug.cgi?id=29936

        * platform/graphics/GraphicsContext3D.h:
        Changed #if PLATFORM(SKIA) to #if PLATFORM(CHROMIUM).

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

        Reviewed by Darin Adler.

        REGRESSION (r47440): Inserting text in the middle of content in a scrolled textfield results in painting bugs
        <rdar://problem/7269108>
        https://bugs.webkit.org/show_bug.cgi?id=29982

        Test: fast/repaint/line-in-scrolled-clipped-block.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Use the unclipped overflow rect
        (including layout overflow) for the repaint rect calculation.

2009-10-05  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Chromium wants to turn off SharedWorkers at runtime
        https://bugs.webkit.org/show_bug.cgi?id=29757

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::sharedWorker):
        Now returns jsUndefined if isAvailable() returns false, to allow SharedWorkers to be disabled at runtime.
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerRepository::isAvailable):
        Made SharedWorkers available by default.
        * workers/SharedWorkerRepository.h:
        Added definition for SharedWorkerRepository::isAvailable().

2009-10-05  Hironori Bono  <hbono@chromium.org>

        Reviewed by Eric Seidel.

        A super quick fix for Bug 28710.

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

        This change just resets the style sent to addStyleMarkup() to avoid an assertion error
        and creates an empty style when computedStyleAtPosition is 0 to avoid a crash.
        (This change is nothing but a better-than-crash change.)

        Tests: editing/selection/select-crash-001.html
               editing/selection/select-crash-002.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::editingStyleAtPosition): Resets the style sent to addStyleMarkup() if it is not valid.
        * editing/markup.cpp:
        (WebCore::createMarkup): Creates an empty style if computedStyleAtPosition is 0.

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

        Reviewed by Mark Rowe.

        Silence duplicate errors logged for missing getComputedStyle
        implementations. Improves the error message as well.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::logUnimplementedPropertyID):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2009-10-05  Julie Parent  <jparent@chromium.org>

        Unreviewed, Chromium build fix #3.  Add V8BeforeLoadEvent.[cc|h] to derived sources.

        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8Index.cpp:

2009-10-05  Mark Rowe  <mrowe@apple.com>

        Try and fix the GTK build.

        * GNUmakefile.am:

2009-10-05  Julie Parent  <jparent@chromium.org>

        Unreviewed, Chromium build fix #2.  Add new BEFORELOADEVENT to V8ClassIndex.

        * bindings/v8/V8Index.h:

2009-10-05  Julie Parent  <jparent@chromium.org>

        Unreviewed, Chromium build fix.  Missing "," after entry for BeforeLoadEvent.idl. 

        * WebCore.gypi:

2009-10-05  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        Add a beforeload event that will be fired before subresources load. (It isn't fired yet.)  The event
        has one field, the URL that is going to be requested.  Setting preventDefault will stop the load
        from occurring.

        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/BeforeLoadEvent.h: Added.
        (WebCore::BeforeLoadEvent::create):
        (WebCore::BeforeLoadEvent::initBeforeLoadEvent):
        (WebCore::BeforeLoadEvent::url):
        (WebCore::BeforeLoadEvent::BeforeLoadEvent):
        * dom/BeforeLoadEvent.idl: Added.
        * dom/EventNames.h:
        * page/DOMWindow.idl:

2009-10-05  Priit Laes  <plaes@plaes.org>

        Reviewed by Gustavo Noronha.

        Add Gentoo-specific paths for searching browser plugins.
        https://bugs.webkit.org/show_bug.cgi?id=30088

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::defaultPluginDirectories):

2009-10-02  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adele Peterson.

        Add functionality to pause/throttle CSS transitions/animations in a WebView
        https://bugs.webkit.org/show_bug.cgi?id=29942

        Exporting call from AnimationController

        * WebCore.base.exp:

2009-10-05  Kevin Decker  <kdecker@apple.com>

        Rubberstamped by Anders Carlsson.
        
        * WebCore.base.exp: Update export of HaltablePlugin/PluginHalterClient.
        * WebCore.xcodeproj/project.pbxproj: Likewise.

2009-10-05  Eric Seidel  <eric@webkit.org>

        No review, rolling out r49104.
        http://trac.webkit.org/changeset/49104

        * html/HTMLInputElement.cpp:
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:
        * html/ValidityState.cpp:
        * html/ValidityState.h:
        (WebCore::ValidityState::rangeUnderflow):
        (WebCore::ValidityState::rangeOverflow):
        * rendering/RenderSlider.cpp:
        (WebCore::SliderRange::SliderRange):
        (WebCore::SliderRange::valueFromElement):

2009-10-05  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Update style immediately when validation-related values are updated.
        https://bugs.webkit.org/show_bug.cgi?id=28868

        In order to apply :valid, :invalid, :optional or :required lively,
          - call setNeedsStyleRecalc() when properties which can change
            willValidate state are updated, and
             (Parent form element, name, disabled, readonly)
          - call updateValidity() when properties which can change validity
            state are updated. (value, pattern, required)

        Tests: fast/forms/input-live-pseudo-selectors.html
               fast/forms/textarea-live-pseudo-selectors.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::parseMappedAttribute):
        (WebCore::HTMLFormControlElement::required):
        (WebCore::HTMLFormControlElement::updateValidity):
        * html/HTMLFormControlElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        (WebCore::HTMLInputElement::setFileListFromRenderer):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setValue):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::subtreeHasChanged):

2009-10-05  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Implement min/max attributes, ValidityState.rangeUnderflow and
        ValidityState.rangeOverflow for <input type=number> and <input type=range>
        https://bugs.webkit.org/show_bug.cgi?id=29069

        Tests: fast/forms/ValidityState-rangeOverflow-number.html
               fast/forms/ValidityState-rangeOverflow-range.html
               fast/forms/ValidityState-rangeUnderflow-number.html
               fast/forms/ValidityState-rangeUnderflow-range.html
               fast/forms/input-minmax.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::rangeUnderflow):
        (WebCore::HTMLInputElement::rangeOverflow):
        (WebCore::HTMLInputElement::rangeMinimum):
        (WebCore::HTMLInputElement::rangeMaximum):
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:
        * html/ValidityState.cpp:
        (WebCore::ValidityState::rangeUnderflow):
        (WebCore::ValidityState::rangeOverflow):
        * html/ValidityState.h:
        * rendering/RenderSlider.cpp:
        (WebCore::SliderRange::SliderRange):
        (WebCore::SliderRange::valueFromElement):

2009-10-05  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Introduces
         - new CSS pseudo selector: "-webkit-input-list-button"
         - new CSS apperance type: "list-button"
         - new ControlPart value: "ListButtonPart"
        for the UI of the list attribute of the input element, and adds
        implementation to draw ListButtonPart on Mac.
        The code is guarded by ENABLE(DATALIST).

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

        Test: platform/mac/fast/forms/input-list-button-size.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * css/CSSValueKeywords.in:
        * css/html.css:
        * html/HTMLInputElement.cpp:
        * platform/ThemeTypes.h:
        (WebCore::):
        * platform/mac/ThemeMac.mm:
        (WebCore::listButtonSizes):
        (WebCore::button):
        (WebCore::paintButton):
        (WebCore::ThemeMac::controlSize):
        (WebCore::ThemeMac::minimumControlSize):
        (WebCore::ThemeMac::controlBorder):
        (WebCore::ThemeMac::paint):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustRepaintRect):
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-10-05  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30065>
        nodeTitleInfo should be placed in ElementsTreeOutline.
        
        Move nodeTitleInfo into ElementsTreeOutline.js from utilities.js.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype._updateTitle):
        (WebInspector.ElementsTreeElement.prototype._nodeTitleInfo):
        * inspector/front-end/utilities.js:

2009-10-02  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Inform the application when a new request is created
        https://bugs.webkit.org/show_bug.cgi?id=29975

        Emit a signal each time a request is created, with the request and the frame
        that created it.

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

2009-10-05  Ben Murdoch  <benm@google.com>

        Reviewed by Darin Adler.

        Add an ASSERT in updateGuidVersionMap.
        https://bugs.webkit.org/show_bug.cgi?id=30077

        * storage/Database.cpp:
        (WebCore::updateGuidVersionMap): ASSERT that the guidMutex() is locked.

2009-10-05  Nate Chapin  <japhet@chromium.org>

        Reviewed by Eric Seidel.

        Allow V8 to throw an exception in _NPN_SetException without worrying about context
        if we don't have enough information to find the correct context.

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

        Part of the fix for Chromium's failure of LayouTests/plugins/netscape-throw-exception.html.

        * bindings/v8/NPV8Object.cpp: 
        (_NPN_SetException): Don't suppress the exception if we can't find the relevant context.

2009-10-05  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Place "Close" button in docked mode on the same side as the window "Close" button in detached mode.

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

        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):

2009-10-05  J-P Nurmi  <jpnurmi@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Added pure virtual QWebPageClient::pluginParent()

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

        * platform/qt/QWebPageClient.h:

2009-10-05  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] windowsKeyCodeForKeyEvent() returns a wrong value for the F10 key.
        https://bugs.webkit.org/show_bug.cgi?id=30042

        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2009-10-05  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed build fix for ENABLE(WEB_SOCKETS) and v8.

        V8ObjectEventListener.h has been removed at r48978

        * bindings/v8/custom/V8WebSocketCustom.cpp:

2009-10-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector console stops working while JS in IFRAME is paused.

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

        * inspector/front-end/InjectedScript.js:
        (InjectedScript._evaluateOn):
        (InjectedScript.addInspectedNode):
        (InjectedScript._ensureCommandLineAPIInstalled):

2009-10-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Introduce inspected object groups for console
        and watch evaluation results so that they could be released
        explicitly.

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

        * bindings/js/JSInspectorBackendCustom.cpp:
        (WebCore::JSInspectorBackend::wrapObject):
        * bindings/v8/custom/V8InspectorBackendCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::wrapObject):
        (WebCore::InspectorBackend::releaseWrapperObjectGroup):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::clearConsoleMessages):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::wrapObject):
        (WebCore::InspectorController::unwrapObject):
        (WebCore::InspectorController::releaseWrapperObjectGroup):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addMessageToConsole):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.evalInInspectedWindow):
        (WebInspector.ConsoleView.prototype.doEvalInWindow):
        (WebInspector.ConsoleView.prototype._enterKeyPressed):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.evaluate):
        (InjectedScript._evaluateAndWrap):
        (InjectedScript.evaluateInCallFrame):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):
        (WebInspector.ScriptsPanel.prototype.doEvalInCallFrame):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSidebarPane):
        (WebInspector.WatchExpressionsSection.prototype.update):

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

        Reviewed by Eric Carlson.

        Move mediaControls extras for the Qt port into WebCore/css like other ports

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

        * WebCore.pro:
        * WebCore.qrc:
        * css/mediaControlsQt.css: Renamed from WebCore/css/qt/mediaControls-extras.css.
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::extraMediaControlsStyleSheet):

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

        Reviewed by Eric Carlson.

        Rename WebCore/css/mediaControlsQT.css and MediaControllerThemeQT

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

        The QT suffix has been expanded to QuickTime, to not cause confusion
        and name-crashes with similar files in the Qt port.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * css/mediaControlsQuickTime.css: Renamed from WebCore/css/mediaControlsQT.css.
        * rendering/RenderThemeMac.mm:
        (WebCore::):
        (WebCore::mediaControllerTheme):
        (WebCore::RenderThemeMac::adjustSliderThumbSize):
        (WebCore::getUnzoomedRectAndAdjustCurrentContext):
        (WebCore::RenderThemeMac::extraMediaControlsStyleSheet):

2009-10-04  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.
        
        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30064>
        Syntax Highlighting CSS shouldn't be duplicated.

        Refactor syntax highlighting CSS into a new file, add it to the
        projects, and have SourceFrame.js and inspector.html include the
        new CSS file.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._loaded):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspectorSyntaxHighlight.css: Added.
        * inspector/front-end/WebKit.qrc:

2009-10-04  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.
        
        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30062>
        Inspector should syntax highlight JS/CSS in elements view.

        Add syntax highlighting of CSS and JavaScript tags to the elements panel.
        Copied CSS rules from SourceFrame.js to inspector.css, and have the text nodes
        in utilities.js call the CSS or JS Syntax highlighters if their parent is a script
        or style tag.

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

2009-10-04  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel

        Enable Web Sockets in chromium build.
        https://bugs.webkit.org/show_bug.cgi?id=29917

        * WebCore.gyp/WebCore.gyp:

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

        Reviewed by Gustova Noronha.

        [GTK] performs a POST when refreshing a view that was obtained with a GET
        https://bugs.webkit.org/show_bug.cgi?id=29761

        Update the HTTP method in the request stored by willSendRequest
        after a redirect, since it could have changed.

        Test: http/tests/navigation/postredirect-reload.html

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):

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

        Revert previous patch, as the newly added test breaks other tests.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):

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

        Reviewed by Gustova Noronha.

        [GTK] performs a POST when refreshing a view that was obtained with a GET
        https://bugs.webkit.org/show_bug.cgi?id=29761

        Update the HTTP method in the request stored by willSendRequest
        after a redirect, since it could have changed.

        Test: http/tests/navigation/postredirect-reload.html

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):

2009-10-04  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Adam Barth.

        [V8] Fixed Function leak in V8LazyEventListener.
        (Should fix the remaning leak in
        https://bugs.webkit.org/show_bug.cgi?id=29093).
        V8LazyEventListeners used to create FunctionTemplates for each
        wrapped listener which in turn created Functions that were cached
        forever in V8 Context. Now there is at most one such Function per
        Context.
        https://bugs.webkit.org/show_bug.cgi?id=30060

        Added new hidden property name to store toString result:
        * bindings/v8/V8HiddenPropertyName.cpp:
        * bindings/v8/V8HiddenPropertyName.h:

        Switched to static FunctionTemplate:
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListenerToString):
        (WebCore::V8LazyEventListener::prepareListenerObject):

2009-10-03  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        CSS Source View Should be Syntax Highlighted
        https://bugs.webkit.org/show_bug.cgi?id=14359

          Support for WebKit's CSS Variables @variables and var()

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

2009-10-03  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector should remember preferences for docked/undocked etc
        https://bugs.webkit.org/show_bug.cgi?id=29089

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._toggleLargerResources): toggle the preference
        * inspector/front-end/inspector.js:
        (WebInspector._loadPreferences): factored out loading preferences
        (WebInspector.loaded):

2009-10-03  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        CSS Source View Should be Syntax Highlighted
        https://bugs.webkit.org/show_bug.cgi?id=14359

          Trigger the Syntax Highlighter for CSS files.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.syntaxHighlightJavascript):
        (WebInspector.SourceFrame.prototype.syntaxHighlightCSS):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._contentLoaded):

          Factored out the Syntax Highlighting procedure into a "Class"
          Added CSSSourceSyntaxHighlighter and JavaScriptSourceSyntaxHighlighter

        (WebInspector.SourceSyntaxHighligher):
        (WebInspector.SourceSyntaxHighligher.prototype.createSpan):
        (WebInspector.SourceSyntaxHighligher.prototype.process.processChunk):
        (WebInspector.SourceSyntaxHighligher.prototype.process):
        (WebInspector.CSSSourceSyntaxHighligher): the CSS Highlighter
        (WebInspector.JavaScriptSourceSyntaxHighligher): the JS Highlighter

2009-10-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Factor back-forward list methods out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=30037

        This change moves these back-forward related methods from FrameLoader
        to Page.  It's possible we should move these methods into some kind of
        "page controller" object, but we can figure that out in a future patch.

        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::timerFired):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::close):
        * page/History.cpp:
        (WebCore::History::length):
        * page/Page.cpp:
        (WebCore::Page::canGoBackOrForward):
        (WebCore::Page::goBackOrForward):
        (WebCore::Page::getHistoryLength):
        * page/Page.h:
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        (WebCore::ContextMenu::checkOrEnableIfNeeded):

2009-10-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: prepare InspectorController for being used from layout tests.
        This change adds evaluateForTestInFrontend method with the callback that
        allows evaluating arbitrary code in the frontend context.

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

        * WebCore.Inspector.exp:
        * WebCore.order:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::didEvaluateForTestInFrontend):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::evaluateForTestInFrontend):
        (WebCore::InspectorController::didEvaluateForTestInFrontend):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::evaluateForTestInFrontend):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/inspector.js:
        (WebInspector.evaluateForTestInFrontend):

2009-10-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Node search mode is not getting reset on element selection.

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

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):

2009-10-02  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30036>
        Should be able to resize Cookie Columns.

        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype.update.callback):
        (WebInspector.CookieItemsView.prototype.update):
        (WebInspector.CookieItemsView.prototype.resize):

2009-09-25  Jon Honeycutt  <jhoneycutt@apple.com>

        Make WebCore::PluginView participate in plug-in halting.

        Reviewed by Sam Weinig.

        * platform/graphics/BitmapImage.h:
        Declare a create() function that takes an HBITMAP.

        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::create):
        Use GetObject() to fill out a DIBSECTION structure for the given
        HBITMAP. Call CGBitmapContextCreate() to create a CG context from the
        bits of the bitmap. Create a CG image from the context, and pass this
        when creating a new BitmapImage.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        If we successfully started, tell our parent frame's Page.
        (WebCore::PluginView::stop):
        Tell our parent frame's Page that we stopped.
        (WebCore::PluginView::node):

        * plugins/PluginView.h:
        Inherit from HaltablePlugin.
        (WebCore::PluginView::setPlatformPluginWidget):
        On platforms where the platform plug-in widget is the WebCore::Widget's
        platform widget, have setPlatformPluginWidget() call
        setPlatformWidget().

        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::halt):
        Stubbed.
        (WebCore::PluginView::restart):
        Stubbed.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::halt):
        Stubbed.
        (WebCore::PluginView::restart):
        Stubbed.

        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::halt):
        Stubbed.
        (WebCore::PluginView::restart):
        Stubbed.

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::halt):
        Stubbed.
        (WebCore::PluginView::restart):
        Stubbed.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::platformDestroy):
        After destroying the window, set the platform plug-in widget to 0 to
        ensure that Widget isn't holding a stale handle.
        (WebCore::PluginView::halt):
        Have our element's RenderWidget display a screenshot of the plug-in,
        then stop the plug-in and destroy it.
        (WebCore::PluginView::restart):
        Clear the RenderWidget's substitute image, then start the plug-in.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::showSubstituteImage):
        Set m_substituteImage to the passed image, and repaint.
        (WebCore::RenderWidget::paint):
        If we have a substitute image, paint that instead of allowing the
        widget to paint itself.

        * rendering/RenderWidget.h:
        Declare showSubstituteImage(). Added a member to store the substitute
        image.

2009-10-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Move PolicyCheck out of FrameLoader.{h,cpp}
        https://bugs.webkit.org/show_bug.cgi?id=30035

        Purely code motion (and adding a destructor).

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/PolicyCheck.cpp:
        * loader/PolicyCheck.h:

2009-10-02  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Add NPNVToolkit value quirk in plugins for nspluginwrapper.
        Plugin error message was:
        ERROR: failed to initialize brower-side RPC events listener
        https://bugs.webkit.org/show_bug.cgi?id=25053

        (WebCore::staticPluginQuirkRequiresGtkToolKit_NPN_GetValue):
        (WebCore::PluginPackage::load):

2009-10-02  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] X sync our XEmbed container window creation before sending the
        xid to plugins.
        https://bugs.webkit.org/show_bug.cgi?id=25053

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

2009-10-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Setting zero size on a container of a video element doesn't hide the controller
        https://bugs.webkit.org/show_bug.cgi?id=30031
        
        Fix a logic error in enclosingCompositingLayer() when mixing normal flow and 
        positioned layers. This resulted in enclosingCompositingLayer() giving back a different
        answer to the logic used to actually parent compositing layers, so layer positions
        and layer hierarchy would be out of agreement.
        
        Test: compositing/geometry/clipped-video-controller.html

        * rendering/RenderLayer.cpp:
        (WebCore::compositingContainer):
        (WebCore::RenderLayer::enclosingCompositingLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::setCompositingParent):

2009-10-02  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        - Move the following methods of HTMLInputElement and HTMLTextAreaElement
          to HTMLTextFormControlElement.
           setSelectionStart()
           setSelectionEnd()
           select()
           setSelectionRange()
           selectionStart()
           selectionEnd()
           selection()

        - Introduce cachedSelectionStart() and cachedSelectionEnd().

        - Unify HTMLInputElement::isTextFieldWithRenderer() and
         HTMLTextAreaElement::rendererAfterUpdateLayout() into textRendererAfterUpdateLayout().
        
        - Unify a part of parseMappedAttribute() of HTMLInputElement and HTMLTextAreaElement.

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

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::textRendererAfterUpdateLayout):
        (WebCore::HTMLTextFormControlElement::setSelectionStart):
        (WebCore::HTMLTextFormControlElement::setSelectionEnd):
        (WebCore::HTMLTextFormControlElement::select):
        (WebCore::HTMLTextFormControlElement::setSelectionRange):
        (WebCore::HTMLTextFormControlElement::selectionStart):
        (WebCore::HTMLTextFormControlElement::selectionEnd):
        (WebCore::HTMLTextFormControlElement::selection):
        (WebCore::HTMLTextFormControlElement::parseMappedAttribute):
        * html/HTMLFormControlElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::select):
        (WebCore::HTMLInputElement::cachedSelectionStart):
        (WebCore::HTMLInputElement::cachedSelectionEnd):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::cachedSelectionStart):
        (WebCore::HTMLTextAreaElement::cachedSelectionEnd):

2009-10-02  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Disconnect event listeners on navigation.
        Fixes http://crbug.com/23597.
        https://bugs.webkit.org/show_bug.cgi?id=30027

        Added V8ListenerGuard that is shared by listeners and proxy. On
        navigation proxy sets a flag in the guard turning off listeners.

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::V8AbstractEventListener):
        * bindings/v8/V8AbstractEventListener.h:
        (WebCore::V8ListenerGuard::create):
        (WebCore::V8ListenerGuard::isDisconnected):
        (WebCore::V8ListenerGuard::disconnectListeners):
        (WebCore::V8ListenerGuard::V8ListenerGuard):
        (WebCore::V8AbstractEventListener::disconnected):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getEventListener):
        * bindings/v8/V8EventListenerList.h:
        (WebCore::V8EventListenerList::findOrCreateWrapper):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::V8Proxy):
        (WebCore::V8Proxy::disconnectFrame):
        (WebCore::V8Proxy::disconnectEventListeners):
        (WebCore::V8Proxy::clearForNavigation):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::listenerGuard):
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::V8WorkerContextEventListener):
        * bindings/v8/V8WorkerContextEventListener.h:
        (WebCore::V8WorkerContextEventListener::create):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::WorkerContextExecutionProxy):
        (WebCore::WorkerContextExecutionProxy::dispose):
        (WebCore::WorkerContextExecutionProxy::findOrCreateEventListener):
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::V8EventListener):
        * bindings/v8/custom/V8CustomEventListener.h:
        (WebCore::V8EventListener::create):

2009-10-02  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        [chromium] Fix WebGL build after CustomGetter constructor changes
        https://bugs.webkit.org/show_bug.cgi?id=30020

        * page/DOMWindow.idl:
        Changed CustomGetter to JSCCustomGetter for CanvasArray constructors.

2009-10-02  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: text in a "Request Payload" section disappears on selection
        https://bugs.webkit.org/show_bug.cgi?id=29967

        No new tests.

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._refreshRequestPayload):

2009-10-02  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Recursion guard for V8Proxy::callFunction.
        Fixes http://crbug.com/23278.
        https://bugs.webkit.org/show_bug.cgi?id=29974

        Test: fast/xmlhttprequest/xmlhttprequest-recursive-sync-event.html

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::callFunction):

2009-10-02  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Jon Honeycutt.

        Fix test breakages by adding null checks, and putting inspector code in
        ENABLE(INSPECTOR).

        * dom/Document.cpp:
        (WebCore::Document::finishedParsing):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent):

2009-10-02  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Clean up the QNetworkReplyHandler to only apply HTTP headers
        for protocols in the HTTP family.

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

2009-10-02  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Move error check into sendResponseIfNeeded() as suggested
        by Eric Seidel. Also, remove some dead code.

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

2009-10-02  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        Assertion failure in CompositeEditCommand::moveParagraphs() and crash in Node::nodeIndex() when pasting.
        <rdar://problem/7148712>
        https://bugs.webkit.org/show_bug.cgi?id=28992

        Test: editing/selection/replace-selection-crash.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::mergeEndIfNeeded): Handle properly the case of
        the destination position matching the end of the paragraph to move.

2009-10-02  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement per-storage-area quotas for LocalStorage
        https://bugs.webkit.org/show_bug.cgi?id=29991

        I put 90% of the code in StorageMap since the decision to allow an update is
        closely tied to quota tracking.  The quota is set via a page's Settings class.
        Like with the local storage path and whether it's enabled, it's assumed that
        all pages in the same group will have the same settings.  The setting defaults
        to 5mb which is what the spec suggests, but it can easily be changed to
        anything else--including StorageMap::noQuota.  Any values in LocalStorage are
        grandfathered in regarudless of quota, so importItem only tracks (and will
        never block) imports.

        I believe this change is a good transition to more complex quota management.
        For example, if we wanted to track quotas in the SQLite DB, then we'd just add
        a function to the StorageMap that sets the quota.  This would be fine since all
        use of LocalStorage is blocked on the import completing, so you'd never hit a
        quota error in the mean time.  Also, if embedders wanted to ask the user
        whether to expand the quota whenever it's hit (before deciding whether or not
        to raise an exception), a callback via the chrome client should be fairly easy.
        That said, I think it's best to add these features in steps rather than one
        huge patch.  (Both of these are on my TODO list, btw.)

        Included is a layout test that verifies the behavior.  It assumes the default
        quota is 5mb (since that's what Settings defaults to).

        Test: storage/domstorage/localstorage/quota.html

        * page/PageGroup.cpp:
        (WebCore::PageGroup::localStorage):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setLocalStorageQuota):
        * page/Settings.h:
        (WebCore::Settings::localStorageQuota):
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::create):
        (WebCore::StorageAreaImpl::StorageAreaImpl):
        (WebCore::StorageAreaImpl::setItem):
        (WebCore::StorageAreaImpl::clear):
        * storage/StorageAreaImpl.h:
        * storage/StorageMap.cpp:
        (WebCore::StorageMap::create):
        (WebCore::StorageMap::StorageMap):
        (WebCore::StorageMap::copy):
        (WebCore::StorageMap::setItem):
        (WebCore::StorageMap::removeItem):
        (WebCore::StorageMap::importItem):
        * storage/StorageMap.h:
        (WebCore::StorageMap::quota):
        * storage/StorageNamespace.cpp:
        (WebCore::StorageNamespace::localStorageNamespace):
        * storage/StorageNamespace.h:
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::localStorageNamespace):
        (WebCore::StorageNamespaceImpl::sessionStorageNamespace):
        (WebCore::StorageNamespaceImpl::StorageNamespaceImpl):
        (WebCore::StorageNamespaceImpl::copy):
        (WebCore::StorageNamespaceImpl::storageArea):
        * storage/StorageNamespaceImpl.h:

2009-10-02  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Database Inspector crashes Safari when table has more than 21 columns
        https://bugs.webkit.org/show_bug.cgi?id=29924

        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.dataGridForResult): adjust the minimum column width percentage to be flexible for many columns.

2009-10-02  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <http://webkit.org/b/14370>.
        Inspector's timeline should record when certain DOM events fired.
        
        This patch adds calls into the Web Inspector when the main frame
        fires an load event, and when the document fires its DOMContent
        event. Once these values are passed in, they are sent to the Web Inspector
        as a timing change, and these are denoted by vertical lines in the resources
        panel (blue for DOM Content, red for load event).

        * English.lproj/localizedStrings.js: Added tooltip text.
        * dom/Document.cpp:
        (WebCore::Document::finishedParsing): Added an Inspector callback for DOM Content.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::mainResourceFiredDOMContentEvent): Tell the main resource it got the event.
        (WebCore::InspectorController::mainResourceFiredLoadEvent): Ditto.
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::InspectorResource): Added new variables.
        (WebCore::InspectorResource::updateScriptObject): Send new variables to inspector.js.
        (WebCore::InspectorResource::markDOMContentEventTime): Send a TimingChange event.
        (WebCore::InspectorResource::markLoadEventTime): Ditto.
        * inspector/InspectorResource.h:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.get mainResourceLoadTime):
        (WebInspector.ResourcesPanel.prototype.set mainResourceLoadTime):
        (WebInspector.ResourcesPanel.prototype.get mainResourceDOMContentTime):
        (WebInspector.ResourcesPanel.prototype.set mainResourceDOMContentTime):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype._updateGraphDividersIfNeeded): Draw dividers for event timings.
        (WebInspector.ResourceTimeCalculator.prototype.computePercentageFromEventTime):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent): Add an Inspector callback for the Load event.

2009-10-02  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Add support for blacklist patterns to user stylesheets and scripts in addition to whitelist patterns.

        * WebCore.base.exp:
        * dom/Document.cpp:
        (WebCore::Document::pageGroupUserSheets):
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScriptsForWorld):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserScript):
        (WebCore::PageGroup::addUserStyleSheet):
        (WebCore::PageGroup::removeUserContentWithURLForWorld):
        (WebCore::PageGroup::removeUserContentForWorld):
        * page/PageGroup.h:
        * page/UserContentURLPattern.cpp:
        (WebCore::UserContentURLPattern::matchesPatterns):
        * page/UserContentURLPattern.h:
        * page/UserScript.h:
        (WebCore::UserScript::UserScript):
        (WebCore::UserScript::whitelist):
        (WebCore::UserScript::blacklist):
        * page/UserStyleSheet.h:
        (WebCore::UserStyleSheet::UserStyleSheet):
        (WebCore::UserStyleSheet::whitelist):
        (WebCore::UserStyleSheet::blacklist):

2009-10-02  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Build fix when SVG is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=30011

        Move TextRenderingMode related functions out from
        the ENABLE(SVG) guard.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TextRenderingMode):

2009-10-02  Kenneth Russell  <kbr@google.com>

        Reviewed by Oliver Hunt.

        WebGL crashes with recent CanvasArray change
        https://bugs.webkit.org/show_bug.cgi?id=30018

        Test: fast/canvas/webgl/array-unit-tests.html

        * html/canvas/CanvasArray.cpp:
        (WebCore::CanvasArray::CanvasArray):
        Fix bug where PassRefPtr was tested after transferring value to RefPtr.

2009-10-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Mark Rowe.

        <https://bugs.webkit.org/show_bug.cgi?id=29989>
        Safari version number shouldn't be exposed in WebKit code
        
        For a WebKit version of 532.3.4:
        Product version is: 5.32.3.4 (was 4.0.3.0)
        File version is: 5.32.3.4 (was 4.532.3.4)

        * WebCore.vcproj/QTMovieWin.rc:

2009-10-02  Stephen White  <senorblanco@chromium.org>

        Reviewed by Dimitri Glazkov.

        Enable two point radial gradients in Chromium/Skia.

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

        Covered by the following tests:

        LayoutTests/svg/W3C-SVG-1.1/pservers-grad-13-b.svg
        LayoutTests/fast/backgrounds/svg-as-background-3.html
        LayoutTests/fast/gradients/generated-gradients.html
        LayoutTests/fast/gradients/simple-gradients.html

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

2009-10-02  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Simon Hausmann.

        Conditionally guard cursor code (cursor and updateCursor functions) with !QT_NO_CURSOR.
        Otherwise, it is inconsistent with class declaration of QCursor.

        No new tests.

        * platform/qt/QWebPageClient.h:

2009-10-02  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] missing support for anamorphic PAR video size
        https://bugs.webkit.org/show_bug.cgi?id=29717

        cleanup of caps handling in the video sink

        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_set_caps):

2009-10-02  Prasanth Ullattil  <prasanth.ullattil@nokia.com>

        Reviewed by Simon Hausmann.

        Fix compiler warnings about unused function arguments.

        * bridge/qt/qt_class.h:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::call):
        (JSC::Bindings::QtRuntimeConnectionMethod::call):
        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::initializeParserContext):
        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontCache::getTraitsInFamily):
        (WebCore::FontCache::getCachedFontPlatformData):
        * platform/graphics/qt/FontFallbackListQt.cpp:
        (WebCore::FontFallbackList::setPlatformFont):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::setURLForRect):
        * platform/graphics/qt/IconQt.cpp:
        (WebCore::Icon::createIconForFiles):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::frameBufferAtIndex):
        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::supportsType):
        (WebCore::MediaPlayerPrivate::setEndTime):
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::containsCharacters):
        * platform/graphics/qt/StillImageQt.h:
        (WebCore::StillImage::destroyDecodedData):
        * platform/network/qt/DnsPrefetchHelper.h:
        (WebCore::DnsPrefetchHelper::lookedUp):
        * platform/qt/ContextMenuQt.cpp:
        (WebCore::ContextMenu::setPlatformDescription):
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::asURL):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::populate):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::supportsFocusRing):
        (WebCore::RenderThemeQt::systemFont):
        (WebCore::RenderThemeQt::adjustButtonStyle):
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):
        (WebCore::RenderThemeQt::paintMediaSeekBackButton):
        (WebCore::RenderThemeQt::paintMediaSeekForwardButton):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::platformAddChild):
        * platform/qt/SearchPopupMenuQt.cpp:
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::paint):
        * xml/XSLStyleSheetQt.cpp:
        (WebCore::XSLStyleSheet::loadChildSheet):
        (WebCore::XSLStyleSheet::setParentStyleSheet):
        * xml/XSLTProcessorQt.cpp:
        (WebCore::XSLTMessageHandler::handleMessage):
        (WebCore::XSLTProcessor::transformToString):

2009-10-02  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] missing support for anamorphic PAR video size
        https://bugs.webkit.org/show_bug.cgi?id=29717

        Scale the cairo surface of the video sink depending on the
        pixel-aspect-ratio of the video buffer to paint. Also
        destruct/re-create the surface when setSize() is called with a new
        size.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::naturalSize):
        (WebCore::MediaPlayerPrivate::setSize):
        (WebCore::MediaPlayerPrivate::paint):
        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_idle_func):

2009-10-02  Ben Murdoch  <benm@google.com>

        Reviewed by David Kilzer.

        Stale database version persists through browser refresh (changeVersion doesn't work)
        https://bugs.webkit.org/show_bug.cgi?id=27836

        Tests: storage/change-version-handle-reuse.html
               storage/change-version.html

        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Implement the V8 binding for database.changeVersion().
        (WebCore::createTransaction): Fix a bug that was checking the wrong argument index to save the success callback.
        * storage/Database.cpp:
        (WebCore::updateGuidVersionMap): Safely update the Guid/version hash map.
        (WebCore::Database::~Database): Remove code that removes the database from the guid->database and guid->version maps.
        (WebCore::Database::setVersionInDatabase): Add a comment to explain some behaviour.
        (WebCore::Database::close): Move the code that updates the maps from the destructor to here.
        (WebCore::Database::performOpenAndVerify): Call updateGuidVersionMap instead of setting the hash map directly.
        (WebCore::Database::setExpectedVersion): Update the in memory guid->version map when we want to update the database version.

2009-10-02  Janne Koskinen <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        Partial WINSCW build fix.

        Add parentheses around the function pointer declaration, similar to the
        second hunk in r48825.

        * loader/CachedResourceHandle.h:

2009-10-02  Adam Barth  <abarth@webkit.org>

        Unreviewed attempted build fix by Xcode magic.

        * WebCore.xcodeproj/project.pbxproj:

2009-10-02  Adam Barth  <abarth@webkit.org>

        Unreviewed build fix.  Actually add the new files.

        * loader/RedirectScheduler.cpp: Added.
        (WebCore::ScheduledRedirection::):
        (WebCore::ScheduledRedirection::ScheduledRedirection):
        (WebCore::RedirectScheduler::RedirectScheduler):
        (WebCore::RedirectScheduler::~RedirectScheduler):
        (WebCore::RedirectScheduler::redirectScheduledDuringLoad):
        (WebCore::RedirectScheduler::clear):
        (WebCore::RedirectScheduler::scheduleRedirect):
        (WebCore::RedirectScheduler::mustLockBackForwardList):
        (WebCore::RedirectScheduler::scheduleLocationChange):
        (WebCore::RedirectScheduler::scheduleFormSubmission):
        (WebCore::RedirectScheduler::scheduleRefresh):
        (WebCore::RedirectScheduler::locationChangePending):
        (WebCore::RedirectScheduler::scheduleHistoryNavigation):
        (WebCore::RedirectScheduler::timerFired):
        (WebCore::RedirectScheduler::schedule):
        (WebCore::RedirectScheduler::startTimer):
        (WebCore::RedirectScheduler::cancel):
        * loader/RedirectScheduler.h: Added.

2009-10-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Move RedirectScheduler to its own file
        https://bugs.webkit.org/show_bug.cgi?id=29952

        This change is purely code motion.

        No behavior change.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/RedirectScheduler.cpp: Added.
        (WebCore::ScheduledRedirection::):
        (WebCore::ScheduledRedirection::ScheduledRedirection):
        (WebCore::RedirectScheduler::RedirectScheduler):
        (WebCore::RedirectScheduler::~RedirectScheduler):
        (WebCore::RedirectScheduler::redirectScheduledDuringLoad):
        (WebCore::RedirectScheduler::clear):
        (WebCore::RedirectScheduler::scheduleRedirect):
        (WebCore::RedirectScheduler::mustLockBackForwardList):
        (WebCore::RedirectScheduler::scheduleLocationChange):
        (WebCore::RedirectScheduler::scheduleFormSubmission):
        (WebCore::RedirectScheduler::scheduleRefresh):
        (WebCore::RedirectScheduler::locationChangePending):
        (WebCore::RedirectScheduler::scheduleHistoryNavigation):
        (WebCore::RedirectScheduler::timerFired):
        (WebCore::RedirectScheduler::schedule):
        (WebCore::RedirectScheduler::startTimer):
        (WebCore::RedirectScheduler::cancel):
        * loader/RedirectScheduler.h: Added.

2009-10-02  Dave MacLachlan  <dmaclach@gmail.com>

        Reviewed by David Levin.

        Clean up warnings in WebCore/bindings/v8/npruntime.cpp
        https://bugs.webkit.org/show_bug.cgi?id=29971

        Gets rid of warnings on gcc about using anonymous namespaces 
          warning: 'StringKeyHashTraits' has a base
          'WTF::GenericHashTraits<<unnamed>::StringKey>' 
          whose type uses the anonymous namespace
        and
          warning: 'WTF::PairHashTraits<StringKeyHashTraits,
          WTF::HashTraits<PrivateIdentifier*> >' has a base
          'WTF::GenericHashTraits<std::pair<<unnamed>::StringKey,
          PrivateIdentifier*> >' whose type uses the anonymous namespace

        No tests required.

        * bindings/v8/npruntime.cpp:

2009-10-01  Mark Rowe  <mrowe@apple.com>

        Fix the Tiger build.  Don't unconditionally enable 3D canvas as it is not supported on Tiger.

        * Configurations/FeatureDefines.xcconfig:

2009-10-01  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Turn on ENABLE_3D_CANVAS in TOT
        https://bugs.webkit.org/show_bug.cgi?id=29906

        Fixed a bug found when running tests with flag on

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.base.exp:
        * bindings/js/JSCanvasArrayBufferConstructor.h:
        (WebCore::construct):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * html/canvas/CanvasArray.cpp:
        (WebCore::CanvasArray::CanvasArray):
        * html/canvas/CanvasByteArray.cpp:
        (WebCore::CanvasByteArray::create):
        * html/canvas/CanvasFloatArray.cpp:
        (WebCore::CanvasFloatArray::create):
        * html/canvas/CanvasIntArray.cpp:
        (WebCore::CanvasIntArray::create):
        * html/canvas/CanvasShortArray.cpp:
        (WebCore::CanvasShortArray::create):
        * html/canvas/CanvasUnsignedByteArray.cpp:
        (WebCore::CanvasUnsignedByteArray::create):
        * html/canvas/CanvasUnsignedIntArray.cpp:
        (WebCore::CanvasUnsignedIntArray::create):
        * html/canvas/CanvasUnsignedShortArray.cpp:
        (WebCore::CanvasUnsignedShortArray::create):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setWebGLEnabled):
        * page/Settings.h:
        (WebCore::Settings::webGLEnabled):

2009-10-01  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/7264725> Re-add a vendor prefix to box-
        shadow (29927)
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=29927

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::ShadowParseContext::ShadowParseContext):
        (WebCore::ShadowParseContext::commitValue):
        (WebCore::ShadowParseContext::commitLength):
        (WebCore::ShadowParseContext::commitColor):
        (WebCore::cssPropertyID):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/animation/AnimationBase.cpp:
        (WebCore::ensurePropertyMap):

2009-10-01  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Sam Weinig.

        At bad merge at some point in the development of my patch must have 
        put TextRenderMode.h in a weird spot in the xcodeproj. Moving it 
        back where it belongs!

        * WebCore.xcodeproj/project.pbxproj:

2009-09-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Remove FrameLoader::schedule* APIs
        https://bugs.webkit.org/show_bug.cgi?id=29950

        Change clients of FrameLoader::schedule* to call redirectScheduler
        directly.

        No behavior change.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::createWindow):
        (WebCore::JSDOMWindow::open):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::setLocation):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::navigateIfAllowed):
        (WebCore::JSLocation::reload):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::navigateIfAllowed):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::createWindow):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        (WebCore::Document::processHttpEquiv):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::write):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestFrame):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::receivedFirstData):
        * loader/FrameLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::selectCache):
        * page/History.cpp:
        (WebCore::History::back):
        (WebCore::History::forward):
        (WebCore::History::go):

2009-10-01  Beth Dakin  <bdakin@apple.com>

        Just removing a comment I accidentally committed earlier. 

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

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

        Reviewed by Darin Adler.

        Clean up use of const and mutable in StorageMap
        https://bugs.webkit.org/show_bug.cgi?id=29933

        What's the point of having every single member variable be mutable and nearly
        every method be const?  Let's clean it up.

        * storage/StorageMap.cpp:
        (WebCore::StorageMap::setIteratorToIndex):
        (WebCore::StorageMap::key):
        (WebCore::StorageMap::importItem):
        * storage/StorageMap.h:

2009-10-01  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for <rdar://problem/6934421> Support CSS for Text Kerning and 
        ligature
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=6136

        This patch makes the SVG CSS property text-rendering work with any 
        HTML, much like it does in Firefox. It accepts four possible input 
        values: auto, optimizeSpeed, optimizeLegibility, and 
        geometricPrecision. Right now, in this implementation, here is what 
        those values correspond to:

        auto = optimizeSpeed = what we normally when the value's not set
        optimizeLegibility = geometricPrecision = ligatures kerning

        Add new file TextRenderingMode.h to the project files.
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

        CSS support for the new CSSPropertyTextRendering
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TextRenderingMode):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:

        All the old SVG CSS support for this property can go away. When 
        it's used in SVG, it will just fall into the normal HTML case.
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * css/SVGCSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * css/SVGCSSValueKeywords.in:

        FontDescription stores the m_textRendering bit.
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::textRenderingMode):
        (WebCore::FontDescription::setTextRenderingMode):
        (WebCore::FontDescription::operator==):

        We want to fall into the complex text rendering code path if 
        kerning and ligatures have been enabled with this property.
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::canUseGlyphCache):

        Now takes a TextRenderingMode as a parameter.
        * platform/graphics/SimpleFontData.h:

        New header for the enum.
        * platform/graphics/TextRenderingMode.h: Added.
        (WebCore::):

        getCFStringAttributes() now takes a TextRenderingMode as an 
        attribute.
        * platform/graphics/mac/CoreTextController.cpp:
        (WebCore::CoreTextController::collectCoreTextRunsForCharacters):

        Enable kerning and ligatures whenever the TextRenderingMode is 
        OptimizeLegibility or GeometricPrecision
        * platform/graphics/mac/FontMacATSUI.mm:
        (WebCore::disableLigatures):
        (WebCore::initializeATSUStyle):
        (WebCore::ATSULayoutParameters::initialize):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::getCFStringAttributes):

        More SVG CSS stuff that isn't needed anymore since SVG will use the 
        new HTML CSS implementation.
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::InheritedFlags::operator==):
        (WebCore::SVGRenderStyle::setBitDefaults):
        * rendering/style/SVGRenderStyleDefs.h:

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

        Reviewed by Timothy Hatcher.

        Use isClosure property of scope proxy to decide whether the
        scope is a closure.

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

        * inspector/front-end/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update):

2009-10-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Odd color transitions on anchors with transition-property: all
        https://bugs.webkit.org/show_bug.cgi?id=29911

        When transitioning maybe-invalid colors, if the source and destination
        color are both invalid, then don't animate.
        
        This fixes an issue where a child element of an element running a color
        transition, with -webkit-transition-property:all, would show a color change.
        This happened because the "maybe invalid color" logic copied the color style
        into -webkit-text-fill-color for both endpoints, causing -webkit-text-fill-color
        to animate while the transition ran, and to then to disappear when the transition
        finished.
        
        Test: transitions/color-transition-all.html

        * page/animation/AnimationBase.cpp:
        (WebCore::PropertyWrapperMaybeInvalidColor::equals):
        (WebCore::PropertyWrapperMaybeInvalidColor::blend):

2009-10-01  Victor Wang  <victorw@chromium.org>

        Reviewed by Oliver Hunt.

        Allow dragging a node who has child nodes.

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

        Test: fast/events/drag-parent-node.html

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

2009-10-01  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] media player: better mute support
        https://bugs.webkit.org/show_bug.cgi?id=29960

        Handle volume and mute state with the two corresponding properties
        of playbin2.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::setMuted):
        (WebCore::MediaPlayerPrivate::setVolume):

2009-10-01  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] video sink pad template colorspace is wrong
        https://bugs.webkit.org/show_bug.cgi?id=29953

        Set sink pad template colorspace depending on byte order.

        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_idle_func):

2009-10-01  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Refactored V8 event listeners:
        (This change should fix http://crbug.com/21079 and
        https://bugs.webkit.org/show_bug.cgi?id=29093.)
         o All listeners use weak handles to JS objects to avoid creating
           cycles and leaking memory.
         o "Object" variants of listeners removed.
         o All event accessor callbacks are generated.
         o Custom event accessors removed.
         o All wrappers have hidden dependencies on their listeners to
           prevent listeners from being collected.
         o All variats of getEventListener function grouped in V8DOMWrapper.
         o Pointers to C+EventListener wrappers are stored in JS objects
           instead of event listener lists.
        https://bugs.webkit.org/show_bug.cgi?id=29825

        * WebCore.gypi: Removed "Object" listeners.
        * bindings/scripts/CodeGeneratorV8.pm: Now handles event accessors.
        * bindings/v8/DOMObjectsInclude.h:

        V8AbstractEventListener manages weak JS handle:
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::weakEventListenerCallback):
        (WebCore::V8AbstractEventListener::V8AbstractEventListener):
        (WebCore::V8AbstractEventListener::~V8AbstractEventListener):
        (WebCore::V8AbstractEventListener::handleEvent):
        (WebCore::V8AbstractEventListener::disposeListenerObject):
        (WebCore::V8AbstractEventListener::setListenerObject):
        * bindings/v8/V8AbstractEventListener.h:
        (WebCore::V8AbstractEventListener::cast):
        (WebCore::V8AbstractEventListener::isLazy):
        (WebCore::V8AbstractEventListener::getListenerObject):
        (WebCore::V8AbstractEventListener::getExistingListenerObject):
        (WebCore::V8AbstractEventListener::hasExistingListenerObject):
        (WebCore::V8AbstractEventListener::disconnectFrame):
        (WebCore::V8AbstractEventListener::disconnected):
        (WebCore::V8AbstractEventListener::prepareListenerObject):
        (WebCore::V8AbstractEventListener::lineNumber):
        (WebCore::V8AbstractEventListener::virtualisAttribute):

        Grouped getEventListener functions:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8DOMWrapper::getEventListener):
        * bindings/v8/V8DOMWrapper.h:

        Removed most event listener objects bookkeeping:
        * bindings/v8/V8EventListenerList.cpp:
        * bindings/v8/V8EventListenerList.h:
        (WebCore::V8EventListenerList::findWrapper):
        (WebCore::V8EventListenerList::clearWrapper):
        (WebCore::V8EventListenerList::doFindWrapper):
        (WebCore::V8EventListenerList::getHiddenProperty):
        (WebCore::V8EventListenerList::findOrCreateWrapper):

        Added hidden properties for storing EventListener wrappers:
        * bindings/v8/V8HiddenPropertyName.cpp:
        (WebCore::V8HiddenPropertyName::listener):
        (WebCore::V8HiddenPropertyName::attributeListener):
        * bindings/v8/V8HiddenPropertyName.h:

        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener):
        (WebCore::V8LazyEventListener::callListenerFunction):
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8LazyEventListener.h:
        (WebCore::V8LazyEventListener::isLazy):
        * bindings/v8/V8ObjectEventListener.cpp: Removed.
        * bindings/v8/V8ObjectEventListener.h: Removed.
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::disconnectFrame):
        (WebCore::V8Proxy::disconnectEventListeners):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::reportError):
        (WebCore::V8WorkerContextEventListener::getReceiverObject):
        * bindings/v8/V8WorkerContextEventListener.h:
        * bindings/v8/V8WorkerContextObjectEventListener.cpp: Removed.
        * bindings/v8/V8WorkerContextObjectEventListener.h: Removed.
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::dispose):
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):
        (WebCore::WorkerContextExecutionProxy::findOrCreateEventListener):
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/custom/V8AbstractWorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::V8EventListener):
        (WebCore::V8EventListener::getListenerFunction):
        (WebCore::V8EventListener::callListenerFunction):
        * bindings/v8/custom/V8CustomEventListener.h:
        * bindings/v8/custom/V8DOMApplicationCacheCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::getEventListener):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGElementInstanceCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp:

2009-10-01  Alexis Menard  <alexis.menard@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Rename QWebGraphicsItem to QGraphicsWebView

        * WebCore.pro:

2009-10-01  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Read-only transactions do not change file sizes and therefore
        should not trigger quota updates.

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

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::openTransactionAndPreflight):
        (WebCore::SQLTransaction::runStatements):

2009-09-30  Timothy Hatcher  <timothy@apple.com>

        Fix list box scrolling by correctly overriding the scroll()
        function on RenderBox.

        <rdar://problem/7255440> REGRESSION (r48683): Mousewheel scrolling
        of listboxes is broken (29756)

        Reviewed by Dan Bernstein.

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::scroll):
        * rendering/RenderListBox.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::scroll):
        * rendering/RenderTextControlSingleLine.h:

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

        Reviewed by Timothy Hatcher.

        Make a copy of listeners array before dispatching an event in
        WebInspector.Object.prototype.dispatchEventToListeners. Otherwise if current
        listener removes itself from the array next listener will be skipped.

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

        * inspector/front-end/Object.js:
        (WebInspector.Object.prototype.dispatchEventToListeners): make a copy of listeners array before dispatching an event

2009-10-01  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Xan Lopez.

        [GTK] GtkIMContext filtering interferes with DOM key events
        https://bugs.webkit.org/show_bug.cgi?id=28733

        Ensure that keyboard events filtered by the GtkIMContext still create
        the proper DOM events.

        No tests added. Instead previously skipped tests have been enabled.

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::keyIdentifierForGdkKeyCode):
        (WebCore::singleCharacterString):

2009-10-01  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] data: uri support in media player
        https://bugs.webkit.org/show_bug.cgi?id=29842

        New GStreamer element to handle data: uris. For now only base64
        encoded data is supported. Decoded data is handed over to
        giostreamsrc.

        * GNUmakefile.am:
        * platform/graphics/gtk/DataSourceGStreamer.cpp: Added.
        (_do_init):
        (webkit_data_src_base_init):
        (webkit_data_src_class_init):
        (webkit_data_src_reset):
        (webkit_data_src_init):
        (webkit_data_src_finalize):
        (webkit_data_src_uri_get_type):
        (webkit_data_src_uri_get_protocols):
        (webkit_data_src_uri_get_uri):
        (webkit_data_src_uri_set_uri):
        (webkit_data_src_uri_handler_init):
        * platform/graphics/gtk/DataSourceGStreamer.h: Added.
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::do_gst_init):
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::mimeTypeCache):

2009-09-30  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=29944
        
        Reduces false positives in the XSSAuditor by explicitly allowing requests
        that do not contain illegal URI characters.
        
        As a side effect of this change, the tests property-inject.html, 
        property-escape-noquotes.html, and property-escape-noquotes-tab-slash-chars.html 
        fail because these attacks do not contain any illegal URI characters and 
        thus are now allowed by the XSSAuditor, where previously they weren't. A future
        change may reinstate this functionality.

        Tests: http/tests/security/xssAuditor/script-tag-safe2.html
               http/tests/security/xssAuditor/script-tag-safe3.html

        * page/XSSAuditor.cpp:
        (WebCore::isIllegalURICharacter): Added method.
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canCreateInlineEventListener):
        (WebCore::XSSAuditor::findInRequest): Added parameter 
        allowRequestIfNoIllegalURICharacters.
        * page/XSSAuditor.h:

2009-09-30  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        reproducible freeze and crash on closing form popup at bosch-home.nl
        https://bugs.webkit.org/show_bug.cgi?id=28948

        showModalDialog calls getDirect on what is actually a window shell,
        so ends up not getting a value (since no value can ever be placed
        directly on the shell), which leads to incorrect behaviour.

        We use a manual test rather than automatic as it was not
        possible to get a modal run loop to work inside DRT.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::showModalDialog):
        * manual-tests/showModalDialog-returnValue.html: manual testcase.

2009-09-30  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Adds ValidityState.tooLong support for <input> and <textarea>.

        Introduces tooLong() in HTMLFormControlElement and it always returns false.
        HTMLInputElement and HTMLTextAreaElement overrides it and checks the text
        length and maxLength.  tooLong() should work only for `dirty' values.
        So, introduces m_isDirty flag for HTMLTextAreaElement, and
        !m_data.value().isNull() works as a dirty flag for HTMLInputElement.

        Renames parameter names of setMaxLength().

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

        Tests: fast/forms/ValidityState-tooLong-input.html
               fast/forms/ValidityState-tooLong-textarea.html

        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::tooLong):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::tooLong):
        (WebCore::HTMLInputElement::setMaxLength):
        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::HTMLTextAreaElement):
        (WebCore::HTMLTextAreaElement::reset):
        (WebCore::HTMLTextAreaElement::updateValue):
        (WebCore::HTMLTextAreaElement::setMaxLength):
        (WebCore::HTMLTextAreaElement::tooLong):
        * html/HTMLTextAreaElement.h:
        * html/ValidityState.h:
        (WebCore::ValidityState::tooLong):

2009-09-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        Factor RedirectScheduler out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=29948

        This change introduces a new sub-object of Frame, redirectScheduler.
        The redirectScheduler is responsible for scheduling redirects.

        This change leaves the code for the redirectScheduler in
        FrameLoader.cpp.  A future change will move the class into its own
        file.

        No behavior change (hopefully!).

        * loader/FrameLoader.cpp:
        (WebCore::RedirectScheduler::RedirectScheduler):
        (WebCore::RedirectScheduler::~RedirectScheduler):
        (WebCore::RedirectScheduler::redirectScheduledDuringLoad):
        (WebCore::RedirectScheduler::clear):
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::setDefersLoading):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::didOpenURL):
        (WebCore::FrameLoader::didExplicitOpen):
        (WebCore::FrameLoader::cancelAndClear):
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::checkCompleted):
        (WebCore::FrameLoader::isScheduledLocationChangePending):
        (WebCore::FrameLoader::scheduleHTTPRedirection):
        (WebCore::RedirectScheduler::scheduleRedirect):
        (WebCore::RedirectScheduler::mustLockBackForwardList):
        (WebCore::FrameLoader::scheduleLocationChange):
        (WebCore::RedirectScheduler::scheduleLocationChange):
        (WebCore::FrameLoader::scheduleFormSubmission):
        (WebCore::RedirectScheduler::scheduleFormSubmission):
        (WebCore::FrameLoader::scheduleRefresh):
        (WebCore::RedirectScheduler::scheduleRefresh):
        (WebCore::RedirectScheduler::locationChangePending):
        (WebCore::FrameLoader::scheduleHistoryNavigation):
        (WebCore::RedirectScheduler::scheduleHistoryNavigation):
        (WebCore::RedirectScheduler::timerFired):
        (WebCore::FrameLoader::provisionalLoadStarted):
        (WebCore::RedirectScheduler::schedule):
        (WebCore::RedirectScheduler::startTimer):
        (WebCore::RedirectScheduler::cancel):
        (WebCore::FrameLoader::completed):
        (WebCore::FrameLoader::open):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::committedFirstRealDocumentLoad):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::redirectScheduler):
        * page/Frame.h:

2009-09-30  Maciej Stachowiak  <mjs@apple.com>

        Build fix, not reviewed.

        More Windows build fixes for https://bugs.webkit.org/show_bug.cgi?id=29943

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):

2009-09-30  Maciej Stachowiak  <mjs@apple.com>

        Build fix, not reviewed.

        Fix windows build for fix for https://bugs.webkit.org/show_bug.cgi?id=29943

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):

2009-09-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        [V8] HTMLAudioElement, HTMLImageElement, and HTMLOptionElement are constructable, but they shouldn't be.
        Only Audio, Image, and Option should be constructable.
        https://bugs.webkit.org/show_bug.cgi?id=29940

        Test: fast/dom/dom-constructor.html

        * WebCore.gypi: Added new files to project.
        * bindings/scripts/CodeGeneratorV8.pm: Modified to generate custom constructors.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate): Removed handling of HTMLImageElement, HTMLOptionElement
          and HTMLAudioElement construction.
        * bindings/v8/V8HTMLAudioElementConstructor.h: Added.
        * bindings/v8/V8HTMLImageElementConstructor.h: Added.
        * bindings/v8/V8HTMLOptionElementConstructor.h: Added.
        * bindings/v8/V8Index.cpp: Added new headers.
        * bindings/v8/V8Index.h: Added Audio, Image and Option decls.
        * bindings/v8/custom/V8CustomBinding.h: Ditto.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_GETTER): Added custom constructors.
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        (WebCore::V8HTMLImageElementConstructor::GetTemplate): Added custom template creator.
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        (WebCore::V8HTMLOptionElementConstructor::GetTemplate): Ditto.
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::V8HTMLImageElementConstructor::GetTemplate): Ditto.

2009-09-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Brady Eidson.

        307 redirects should pass along http body and Content-Type header
        https://bugs.webkit.org/show_bug.cgi?id=29943

        Follow-up fix for:
        <rdar://problem/3802660> SAP: 307 (Temporary Redirect) responses should use POST, not GET
        
        Test: http/tests/loading/resources/redirect-methods-result.php

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest): Pass along http body and Content-Type header.
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]): ditto

2009-09-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Mark Rowe.

        Fixed https://bugs.webkit.org/show_bug.cgi?id=29941
        REGRESSION (r48882-r48888): Many memory leaks on SnowLeopard leaks bot

        Forgot to implement a destructor for JSDOMWindowBaseData, so it was
        leaking its RefPtr data member.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::destroyJSDOMWindowBaseData):
        * bindings/js/JSDOMWindowBase.h:
        (WebCore::JSDOMWindowBase::JSDOMWindowBaseData::JSDOMWindowBaseData::JSDOMWindowBaseData):

2009-09-30  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Tim Hatcher.

        Make sure the removal of user stylesheets results in all of the WebViews being updated to
        reflect the changes.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::removeUserContentWithURLForWorld):
        (WebCore::PageGroup::removeUserContentForWorld):

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

        Reviewed by Sam Weinig.

        REGRESSION(r47440): drop down menus at americanexpress.com disappear on mouse out
        https://bugs.webkit.org/show_bug.cgi?id=29209

        Test: fast/inline/relative-positioned-overflow.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeVerticalOverflow): Add self-painting
        inlines to overflow to ensure that they are included in hit-testing.

2009-09-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Mark Rowe.

        transforms/3d tests are not run in Release builds
        https://bugs.webkit.org/show_bug.cgi?id=29827

        Make sure we export the WebCoreHas3DRendering symbol in Release builds,
        because this symbols is used by run-webkit-tests (via 'nm') to detect whether
        WebCore was built with ENABLE_3D_RENDERING turned on.

        * DerivedSources.make:
        * WebCore.3DRendering.exp: Added.
        * WebCore.xcodeproj/project.pbxproj:

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

        Build fix for QT.  Didn't know WebCore.pro existed.

        * WebCore.pro:

2009-09-30  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Add a method for removal of user scripts and stylesheets by URL from a specific world.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::removeUserContentURLForWorld):
        * page/PageGroup.h:

2009-09-30  Chris Hawk  <hawk@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix for conditionals in the WebCore gyp file, which contained two separate
        'conditions' values for the webcore target. The first entry was ignored,
        resulting in some missine defines.
        https://bugs.webkit.org/show_bug.cgi?id=29907

        * WebCore.gyp/WebCore.gyp:

2009-09-21  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Adam Barth.

        DOM Storage needs to be more careful about where "ThreadSafe" objects are destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=29265

        DOM Storage needs to be more careful about where "ThreadSafe" objects are
        destroyed.  With the current code, there actually isn't a race condition, but
        it sure would be easy for someone to introduce one.  A bunch of
        ThreadSafeShared objects have RefPtrs to objects that are NOT ThreadSafeShared
        objects.  If it were possible any of these objects' destructors to be fired off
        the main thread, then the you'd have a race condition.  The code should be more
        clear and self-documenting about how things related to each other.

        Since the lifetime of a LocalStorageTask is bounded by the LocalStorageThread
        which is bounded by the StorageSyncManager, StorageAreaImpl, and
        StorageAreaSync, there's no reason for LocalStorageTask to store anything other
        than pointers.  By breaking this dependency, we can eliminate the risk.

        Note that we _could_ have LocalStorageThread's task queue just store
        LocalStorageTask*'s rather than RefPtr<LocalStorageTask>s but then we'd need to
        manually take care of deleting.  It'd probably also be possible to change
        LocalStorageThread around so that it needn't hold onto a reference of itself
        and have a more deterministic shutdown, but my initial attempts to do so
        failed, and I decided it wasn't worth changing.  The queue is killed before
        hand, so the thread is 100% impotent before the main thread continues anyway.

        The constructors and destructors of StorageSyncManager, StorageAreaImpl, and
        StorageAreaSync now have ASSERTs to verify they're running on the main thread. 
        I'm fairly positive that it'd be impossible to hit these asserts and the fact
        that these classes are no longer ThreadSafeShared should make it clear how
        they're meant to be used, but I think it's worth it to be extra sure.  Of
        course, ideally, we'd have such an assert every time a ref is incremented or
        decremented.

        Behavior should be unchanged and this is just an internal code cleanup, so no
        new tests.

        * storage/LocalStorageTask.cpp:
        (WebCore::LocalStorageTask::LocalStorageTask):
        (WebCore::LocalStorageTask::performTask):
        * storage/LocalStorageTask.h:
        (WebCore::LocalStorageTask::createImport):
        (WebCore::LocalStorageTask::createSync):
        (WebCore::LocalStorageTask::createTerminate):
        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::scheduleImport):
        (WebCore::LocalStorageThread::scheduleSync):
        * storage/LocalStorageThread.h:
        * storage/StorageArea.h:
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::~StorageAreaImpl):
        (WebCore::StorageAreaImpl::StorageAreaImpl):
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):
        (WebCore::StorageAreaSync::~StorageAreaSync):
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::StorageSyncManager):
        (WebCore::StorageSyncManager::~StorageSyncManager):
        (WebCore::StorageSyncManager::scheduleImport):
        (WebCore::StorageSyncManager::scheduleSync):
        * storage/StorageSyncManager.h:

2009-09-28  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Chromium needs to be able to override the way storage events are delivered
        https://bugs.webkit.org/show_bug.cgi?id=29655

        Chromium needs to be able to override the way storage events are delivered.
        This replaced https://bugs.webkit.org/show_bug.cgi?id=29257 because it'll be
        faster (no vtables and extra allocation) and somewhat cleaner (no dependency
        injection).  This is necessary because Chromium needs to transport events across
        a process barrier and then dispatch them without use of a Frame*.

        Behavior should not change with this, so no updates to tests.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::setItem):
        (WebCore::StorageAreaImpl::removeItem):
        (WebCore::StorageAreaImpl::clear):
        * storage/StorageAreaImpl.h:
        * storage/StorageEventDispatcher.cpp: Copied from WebCore/storage/StorageAreaImpl.cpp.
        (WebCore::StorageEventDispatcher::dispatch):
        * storage/StorageEventDispatcher.h: Added.  (Well, technically in the other half of this patch.)

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

        Reviewed by Darin Adler.

        Need to check NULL frame in EventHandler::updateDragAndDrop.
        https://bugs.webkit.org/show_bug.cgi?id=29929

        Test: http/tests/misc/drag-over-iframe-invalid-source-crash.html

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

2009-09-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        ASSERTION FAILED: !repaintContainer || repaintContainer == this
        https://bugs.webkit.org/show_bug.cgi?id=29755
        
        Generalize the fix for this bug to account for cases where there may be multiple
        containing blocks between the repaint container, and the container of the element
        being repainted.

        Test: compositing/repaint/opacity-between-absolute2.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer):
        Call offsetFromAncestorContainer() to get the correct offset.
        
        (WebCore::RenderBox::computeRectForRepaint): Ditto
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::computeRectForRepaint): Ditto.
        
        * rendering/RenderObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetFromAncestorContainer):
        New method that computes an offset from some object in the ancestor container() chain.

2009-09-30  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] Fix TextCodecQt::decode method after r48752 to return a non-null string if the length of the input is 0.
        This fixes https://bugs.webkit.org/show_bug.cgi?id=29736.

        * platform/text/qt/TextCodecQt.cpp:
        (WebCore::TextCodecQt::decode):

2009-09-29  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Jon Honeycutt.

        Fix a couple of bugs with patterns.  Move the setting of the document URL to before the style
        selector gets constructed so that pattern match testing gets the correct URL.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        * page/UserContentURLPattern.cpp:
        (WebCore::UserContentURLPattern::parse):

2009-09-29  Alexey Proskuryakov  <ap@apple.com>

        Rubber-stamped by Brady Eidson.

        Assertion failure in http/tests/xmlhttprequest/failed-auth.html.

        I couldn't find out why this only started to happen now, but it was incorrect to check
        persistence of a credential returned by CredentialStorage::get() without checking that it
        was non-null. When there is no credential for the protection space in storage, get()
        returns a new object, and Credentil constructor doesn't initialize m_persistence.

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreSynchronousLoader connection:didReceiveAuthenticationChallenge:]): Moved the
        assertion after credential null check.
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Added the same persistence
        assertion, matching sync code (and CF one, as well).

2009-09-29  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Darin Adler.

        Add an ASSERT for UTF8Encoding().isValid()
        https://bugs.webkit.org/show_bug.cgi?id=29908

        * platform/text/TextEncoding.cpp:
        (WebCore::UTF8Encoding):

2009-09-29  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Jon Honeycutt.

        https://bugs.webkit.org/show_bug.cgi?id=29892
        Add support for whitelist patterns to control conditional injection of user scripts and
        user stylesheets.

        No new tests. Not testable until WebKit portion is added in followup patch.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::pageGroupUserSheets):
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScriptsForWorld):
        * page/UserContentURLPattern.cpp: Added.
        (WebCore::UserContentURLPattern::matchesPatterns):
        (WebCore::UserContentURLPattern::parse):
        (WebCore::UserContentURLPattern::matches):
        (WebCore::UserContentURLPattern::matchesHost):
        (WebCore::MatchTester::MatchTester):
        (WebCore::MatchTester::testStringFinished):
        (WebCore::MatchTester::patternStringFinished):
        (WebCore::MatchTester::eatWildcard):
        (WebCore::MatchTester::eatSameChars):
        (WebCore::MatchTester::test):
        (WebCore::UserContentURLPattern::matchesPath):
        * page/UserContentURLPattern.h: Added.
        (WebCore::UserContentURLPattern::UserContentURLPattern):
        (WebCore::UserContentURLPattern::scheme):
        (WebCore::UserContentURLPattern::host):
        (WebCore::UserContentURLPattern::path):
        (WebCore::UserContentURLPattern::matchSubdomains):

2009-09-29  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        Reproducible crash pressing return inside quoted content
        at WebCore::BreakBlockquoteCommand::doApply.
        <rdar://problem/7085453>
        In some case, like the one provided in the test case, m_downStreamEnd
        refers to a node that gets deleted when executing the DeleteSelectionCommand.
        We shouldn't use m_downStreamEnd to recalculate the new m_endPosition when
        pruning is needed, because it may be point to a node that has been deleted, but
        rather rely on removeNode in CompositeEditCommand to update m_endPosition correctly.

        Test: editing/selection/blockquote-crash.html

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply): Added check for invalid position
        to avoid dereferencing a null node pointer.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs): Don't reset m_endPosition
        using the value in m_downStreamEnd when it is necessary to prune the start block.
        
2009-09-29  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        Basic authentication credentials are not sent automatically to top resources
        https://bugs.webkit.org/show_bug.cgi?id=29901

        No new tests - I don't want to pollute root directory of http tests to check for this rather
        minor issue.

        * platform/network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::set): Changed to always preserve leading slash.
        (WebCore::CredentialStorage::getDefaultAuthenticationCredential): Made breaking out of the
        loop more explicit.

2009-09-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Oliver Hunt.

        Web Inspector REGRESSION(r47820-r47822): Profiles aren't
        added to the inspector unless the inspector is already open
        when the profile completes.

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

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._populateProfiles):

2009-09-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by David Hyatt.

        Fix to logic of earlier commit 48902.

        When merging two if's before committing, I forgot to invert the
        bool check.

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

2009-09-29  Stephen White  <senorblanco@chromium.org>

        Unreviewed, build fix.

        Fixing Chromium build, following r48884.

        [https://bugs.webkit.org/show_bug.cgi?id=29894]

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::handleEvent):
        * bindings/v8/V8AbstractEventListener.h:
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::handleEvent):
        * bindings/v8/V8WorkerContextEventListener.h:

2009-09-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Follows HTML5's maxLength change in September 2009.
        - Change HTMLTextAreaElement.maxLength type to signed.
        - HTMLTextAreaElement.maxLength returns -1 if maxlength= attribute is missing.
        - HTMLTextAreaElement.maxLength and HTMLInputElement.maxLength
          throw INDEX_SIZE_ERR for setting negative values.
        https://bugs.webkit.org/show_bug.cgi?id=29796

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setMaxLength):
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::handleBeforeTextInsertedEvent):
        (WebCore::HTMLTextAreaElement::maxLength):
        (WebCore::HTMLTextAreaElement::setMaxLength):
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextAreaElement.idl:

2009-09-29  Dimitri Glazkov  <dglazkov@chromium.org>

        No review, rolling out r48894, because review discussion was not complete.
        http://trac.webkit.org/changeset/48894

        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::begin):

2009-09-29  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG Filter feComposite implementation is missing
        [https://bugs.webkit.org/show_bug.cgi?id=28362]

        feComposite implementation for SVG.

        Test: svg/filters/feComposite.svg

        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::arithmetic):
        (WebCore::FEComposite::apply):

2009-09-29  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Starting all read-only transactions with an explicit BEGIN
        DEFERRED command instead of BEGIN, since some ports (chromium)
        might compile their own SQLite library and set BEGIN to BEGIN
        IMMEDIATE by default; which would result in a deadlock in case of
        two concurrent read-only transactions on the same DB, and would
        unnecessarily delay other potential transactions to the same DB.

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

        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::begin):

2009-09-29  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Add support for run-time flag for 3D canvas
        https://bugs.webkit.org/show_bug.cgi?id=29826

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext): Check page settings for
        experimental WebGL flag before returning 3D graphics context.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize new flag to false.
        (WebCore::Settings::setExperimentalWebGLEnabled):
        * page/Settings.h: Set new flag.
        (WebCore::Settings::experimentalWebGLEnabled): Return new flag.

2009-09-29  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Chromium needs to be able to override the way storage events are delivered - part 1
        https://bugs.webkit.org/show_bug.cgi?id=29889

        Chromium needs to be able to override the way storage events are delivered.
        This replaced https://bugs.webkit.org/show_bug.cgi?id=29257 because it'll be
        faster (no vtables and extra allocation) and somewhat cleaner (no dependency
        injection).  This is necessary because Chromium needs to transport events across
        a process barrier and then dispatch them without use of a Frame*.

        This patch should be a no-op for all ports other than Chromium.

        * WebCore.gypi:
        * storage/StorageEventDispatcher.h: Added.

2009-09-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (missed file).

        Adding file missed in previous commit.

        * manual-tests/gtk/resources/long_cell.cur: Copied from WebCore/dom/PositionCreationFunctions.h.

2009-09-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        [V8] Correct an issue with XMLHttpRequest attribute event listeners never being cleared.
        https://bugs.webkit.org/show_bug.cgi?id=29888

        Test: LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-abort-readyState-shouldDispatchEvent.html

        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::getEventListener): Added isAttribute parameter.
        (WebCore::ACCESSOR_SETTER): Made all event listener setters create attribute listeners.
        (WebCore::CALLBACK_FUNC_DECL): Made addEventListener create object listener.

2009-09-22  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Eric Seidel.

        Fix corruption for non-square images.

        [GTK] REGRESSION: BitmapImage::getGdkPixbuf fails for non-square images
        https://bugs.webkit.org/show_bug.cgi?id=29654

        Added an additional manual-test for this issue to the existing Gtk
        cursor image test.

        * manual-tests/gtk/cursor-image.html:
        * manual-tests/gtk/resources/long_cell.cur: Added.
        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::BitmapImage::getGdkPixbuf):

2009-09-29  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Timothy Hatcher.

        Build fix - pass a proper ScriptExecutipnContext to getEventListenerHandlerBody()

        * bindings/js/ScriptEventListener.cpp:
        (WebCore::getEventListenerHandlerBody):
        * bindings/js/ScriptEventListener.h:
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::getEventListenerHandlerBody):
        * bindings/v8/ScriptEventListener.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):

2009-09-29  Nate Chapin  <japhet@chromium.org>

        Reviewed by Eric Seidel.

        Ensure that we don't scroll lock to an anchor node after a
        user-initiated scroll, even if that scroll doesn't propagate
        all the way up to FrameView.

        Test: fast/events/node-event-anchor-lock.html

        * page/EventHandler.cpp: Call setFrameWasScrolledByUser() when a scroll is handled by a node rather than a frame.
        (WebCore::EventHandler::scrollOverflow):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::sendScrollEvent): Use setFrameWasScrolledByUser();
        (WebCore::EventHandler::setFrameWasScrolledByUser): Split out of sendScrollEvent();
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * page/EventHandler.h: Declare setFrameWasScrolledByUser().

2009-09-28  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler and Sam Weinig.

        Onclick not fired for an element copied with cloneContents() or cloneNode()
        https://bugs.webkit.org/show_bug.cgi?id=25130

        The change here is that JS event listeners don't keep a reference to a global object from
        where they were created, and instead take it as a parameter when parsing source code. Also,
        the listener creation won't fail just because it happens for an element in a frameless
        document.
        Thus, moving nodes between documents no longer results in having incorrect registered
        lazy event listeners on them.

        Tests: fast/events/attribute-listener-cloned-from-frameless-doc-context-2.html
               fast/events/attribute-listener-cloned-from-frameless-doc-context.html
               fast/events/attribute-listener-cloned-from-frameless-doc.xhtml
               fast/events/attribute-listener-extracted-from-frameless-doc-context-2.html
               fast/events/attribute-listener-extracted-from-frameless-doc-context.html

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener): Don't take a reference to JSDOMGlobalObject.
        (WebCore::JSEventListener::jsFunction): Take ScriptExecutionContext as a parameter for
        getting to JSDOMGlobalObject. It's not used in base class, but is in JSLazyEventListner.
        (WebCore::JSEventListener::markJSFunction): Don't mark the global object.
        (WebCore::JSEventListener::handleEvent): Get global object from ScriptExecutionContext.
        (WebCore::JSEventListener::reportError): Ditto.

        * bindings/js/JSEventListener.h: (WebCore::JSEventListener::create): Don't keep a reference
        to JSDOMGlobalObject.

        * bindings/js/JSLazyEventListener.cpp: (WebCore::JSLazyEventListener::parseCode): Listener
        creation was split between this function and ScriptEventListener; moved it here, as JS
        global object can be different now.

        * bindings/js/JSLazyEventListener.h: (WebCore::JSLazyEventListener::create): Keep source URL,
        which can not be determined at parsing time.

        * bindings/js/ScriptEventListener.cpp: (WebCore::createAttributeEventListener): Moved code
        for listener creation to JSLazyEventListener. XSSAuditor code remains here, because tests
        expect that errors are logged at document parsing time, and because I don't know what other
        side effects moving it vould have.

        * dom/EventListener.h: handleEvent() and reportError() now take ScriptExecutionContext,
        because JSC needs a global context here.

        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::addEventListener):
        (WebCore::JSAbstractWorker::removeEventListener):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::createJSAttributeEventListener):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        * bindings/js/JSEventSourceCustom.cpp:
        (WebCore::JSEventSource::addEventListener):
        (WebCore::JSEventSource::removeEventListener):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/objc/ObjCEventListener.h:
        * bindings/objc/ObjCEventListener.mm:
        (WebCore::ObjCEventListener::handleEvent):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::handleEvent):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::handleEvent):
        * inspector/InspectorDOMStorageResource.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageEventListener::handleEvent):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::ConditionEventListener::handleEvent):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::reportException):
        Don't pass global object to JSEventListener::create(), which no longer needs it.
        Note that some of these functions still have an early return for null global object, which
        can probably be removed in a later patch.
        Pass ScriptExecutionContext to EventListener methods that now need it.

        * bindings/scripts/CodeGeneratorCOM.pm: Don't force EventTarget implementation on Node -
        it doesn't work yet (it didn't quite work before this patch, too, because it assumed that
        any object implementing EventTarget COM interface originated from WebCore).

        * dom/EventListener.idl: Just like in ObjC, EventListener should be a pure interface in
        COM bindings.

2009-09-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Removed virtual destructor from JSGlobalObjectData to eliminate pointer
        fix-ups when accessing JSGlobalObject::d.
        
        Replaced with an explicit destructor function pointer.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::destroyJSDOMGlobalObjectData):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObjectData::JSDOMGlobalObjectData):

2009-09-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Don't rely on QNetworkReply::NetworkError codes, but
        on HTTP error codes instead.

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

2009-09-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Use const references when using Qt's foreach.

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

2009-09-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Fix handling of QNetworkReply errors.

        In the QNetworkReplyHandler::finish() a response was sent even when
        the reply contained an error. This resulted in a sendResponseIfNeeded()
        calling didReceiveResponse on the client, leading to the destruction
        of the m_resourceHandle, discontinuing further processing in finish(),
        and thus not calling didFail on the client.

        Instead it continued as everything went fine, and
        FrameLoaderClientQt::dispatchDecidePolicyForMIMEType() changed the
        policy to PolicyDownload due to not being able to show the non existing
        MIMEType. As the download also obviously fails, it ended up with a
        policy change error.

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

2009-09-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        The code for showing error pages when the response was
        a 401/403/404, was not actually doing so. This patch
        fixes that.

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

2009-09-28  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        <rdar://problem/7259965> REGRESSION: http/tests/xmlhttprequest/cross-origin-authorization.html
        is failing/crashing intermittently
        https://bugs.webkit.org/show_bug.cgi?id=29322

        This was caused by CStringBuffer::encodeBase64() returning a buffer that wasn't zero terminated.
        The code had other issues as well, so I removed it altogether:
        - it claimed to avoid some buffer copies, but it didn't;
        - and I don't think that base64 encoding should be part of CString interface.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::encodeBasicAuthorization): Encode username and password using Base64.h directly.
        (WebCore::ResourceHandle::start): Use encodeBasicAuthorization().
        (+[WebCoreSynchronousLoader loadRequest:allowStoredCredentials:returningResponse:error:]): Ditto.
        (-[WebCoreSynchronousLoader connection:willSendRequest:redirectResponse:]): Extended logging
        to synchronous case.
        (-[WebCoreSynchronousLoader connectionShouldUseCredentialStorage:]): Ditto.
        (-[WebCoreSynchronousLoader connection:didReceiveAuthenticationChallenge:]): Ditto.
        (-[WebCoreSynchronousLoader connection:didReceiveResponse:]): Ditto.
        (-[WebCoreSynchronousLoader connection:didReceiveData:]): Ditto.
        (-[WebCoreSynchronousLoader connectionDidFinishLoading:]): Ditto.
        (-[WebCoreSynchronousLoader connection:didFailWithError:]): Ditto.

        * platform/network/cf/ResourceHandleCFNet.cpp: Matched Mac changes.

        * platform/text/CString.cpp:
        * platform/text/CString.h:
        (WebCore::CStringBuffer::create):
        (WebCore::CStringBuffer::CStringBuffer):
        Removed code that was added for Base64 in r48363.

2009-09-29  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Fix typo in Localizations.cpp

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

        * platform/qt/Localizations.cpp:
        (WebCore::localizedMediaControlElementHelpText):

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

        Reviewed by Tor Arne Vestbø.

        Make the XSLT conditional in DOMWindow.idl's xsltProcessor
        attribute conditional in the generated files, similar to
        r44116.

        * page/DOMWindow.idl:

2009-09-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann and Tor Arne Vestbø.

        Use the ResourceError as it is supposed to and handle
        not HTTP errors from QNetworkReply.

        Thanks to Adam Roben for his input.

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

2009-09-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Encapsulate JS listeners specifics into ScriptEventListener.

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

        * bindings/js/ScriptEventListener.cpp:
        (WebCore::getEventListenerHandlerBody):
        * bindings/js/ScriptEventListener.h:
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::getEventListenerHandlerBody):
        * bindings/v8/ScriptEventListener.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):

2009-09-29  Xan Lopez  <xlopez@igalia.com>

        Unreviewed attempt to fix the build.

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

2009-09-28  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel.

        Add experimentalWebSocketsEnabled in Settings.
        https://bugs.webkit.org/show_bug.cgi?id=28941

        * WebCore.base.exp:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::webSocket):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getConstructor):
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setExperimentalWebSocketsEnabled):
        * page/Settings.h:
        (WebCore::Settings::experimentalWebSocketsEnabled):
        
2009-09-11  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Adam Barth.

        Add platform code to support WebSocket for chromium.
        https://bugs.webkit.org/show_bug.cgi?id=29171

        To build within chromium tree, it requires a patch in bug 29174.
        Real implementation will be landed in chromium tree.

        * WebCore.gypi:
        * platform/network/chromium/SocketStreamError.h: Added.
        (WebCore::SocketStreamError::SocketStreamError):
        * platform/network/chromium/SocketStreamHandle.h: Added.
        (WebCore::SocketStreamHandle::create):

2009-09-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7157288> Crash in RenderStyle::computedLineHeight()
        when Times New Roman is not installed

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::getLastResortFallbackFont): If Times New Roman is
        not available, use the Windows default GUI font.

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

        Reviewed by David Levin.

        Do not add platform-specific methods to cross-platform header
        FileSystem.h per Darin's feedback for 29109.
        https://bugs.webkit.org/show_bug.cgi?id=29830

        * platform/FileSystem.h:
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asURL):
        * platform/chromium/FileSystemChromium.cpp:

2009-09-28  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Register Chromium's VFSs with a proper sqlite3_io_methods
        finder. This should only affect the POSIX implementation. The
        Windows change is included for consistency and in case sqlite
        starts using something similar in its Windows VFS in the future.

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

        * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:
        (WebCore::SQLiteFileSystem::registerSQLiteVFS):
        * platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp:
        (WebCore::SQLiteFileSystem::registerSQLiteVFS):

2009-09-28  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Change the V8 bindings' handling of window.toString(),
        so we return [object DOMWindow] (like JSC), not [object global].

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

        This will fix a couple of Chromium port test failures and enable us to
        use the default expectations for a bunch more.

        * bindings/v8/custom/V8DOMWindowCustom.cpp: Use the DOMWindow wrapper instead
        of the global object wrapper when it's available in the DOMWindow toString callback.

2009-09-28  Nate Chapin  <japhet@chromium.org>

        Rubber stamped by David Levin.

        Chromium build fix, add back in #include of V8Proxy.h in V8WebKitPointConstructor.cpp.

        * bindings/v8/custom/V8WebKitPointConstructor.cpp: Re-include V8Proxy.h.

2009-09-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        NotNullPassRefPtr: smart pointer optimized for passing references that are not null
        https://bugs.webkit.org/show_bug.cgi?id=29822
        
        Added NotNullPassRefPtr, and deployed it in all places that initialize
        JavaScript objects.

        * bindings/js/DOMObjectWithSVGContext.h:
        (WebCore::DOMObjectWithSVGContext::DOMObjectWithSVGContext):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::cacheDOMStructure):
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObject::DOMObject):
        (WebCore::DOMObjectWithGlobalPointer::DOMObjectWithGlobalPointer):
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        (WebCore::DOMConstructorWithDocument::DOMConstructorWithDocument):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObject):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::JSHTMLAllCollection):
        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::JSInspectedObjectWrapper):
        * bindings/js/JSInspectedObjectWrapper.h:
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::JSInspectorCallbackWrapper):
        * bindings/js/JSInspectorCallbackWrapper.h:
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::JSQuarantinedObjectWrapper):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore::JSWorkerContextBase::JSWorkerContextBase):
        * bindings/js/JSWorkerContextBase.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::RuntimeObjectImp):
        * bridge/runtime_object.h:

2009-09-28  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Allow V8 to handle x/y parameters in a WebKitPoint constructor.
        https://bugs.webkit.org/show_bug.cgi?id=29823

        Fixes V8's handling of LayoutTests/fast/dom/Window/webkitConvertPoint.html

        * bindings/v8/custom/V8WebKitPointConstructor.cpp: Allow for x/y parameters in constructor.

2009-09-28  Mark Rowe  <mrowe@apple.com>

        Fix the build by doing something approximating reasonableness in the Xcode project.

        * WebCore.xcodeproj/project.pbxproj:

2009-09-28  Simon Hausmann  <hausmann@webkit.org>

        Prospective Tiger build fix.

        * WebCore.xcodeproj/project.pbxproj: Try to use unique IDs for the new files.

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

        Reviewed by Timothy Hatcher.

        Web Inspector: Add explicit frontend event for commit load.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didCommitLoad):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._setDocument):
        * inspector/front-end/inspector.js:
        (WebInspector.addResource):
        (WebInspector.didCommitLoad):

2009-09-28  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Dimitri Glazkov.

        Chromium port - recognize we are being built independently
        of chromium and look for dependencies under webkit/chromium rather
        than chromium/src.

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

        * WebCore.gyp/WebCore.gyp: See above. Also removed a few files from
          the sources list, since they are not supposed to be built here.

2009-09-28  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement XSLT support with QtXmlPatterns.
        https://bugs.webkit.org/show_bug.cgi?id=28303

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::setTransformSource):
        * dom/Document.h:
        (WebCore::Document::transformSource):
        * dom/TransformSource.h: Added.
        (WebCore::TransformSource::platformSource):
        * dom/TransformSourceLibxslt.cpp: Added.
        (WebCore::TransformSource::TransformSource): Wraps a libxml2 document.
        (WebCore::TransformSource::~TransformSource):
        * dom/TransformSourceQt.cpp: Added.
        (WebCore::TransformSource::TransformSource): Wraps a plain string.
        (WebCore::TransformSource::~TransformSource):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::doEnd):
        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::doEnd):
        (WebCore::XMLTokenizer::parseProcessingInstruction):
        * xml/XSLStyleSheet.h:
        (WebCore::XSLStyleSheet::sheetString):
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::document):
        * xml/XSLStyleSheetQt.cpp: Added.
        * xml/XSLTProcessor.h:
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::xmlDocPtrFromNode):
        * xml/XSLTProcessorQt.cpp: Added.
        (WebCore::XSLTMessageHandler::XSLTMessageHandler): A subclass of QAbstractMessageHandler.
        (WebCore::XSLTMessageHandler::handleMessage): Forwards all processor messages to the Console.
        (WebCore::XSLTProcessor::transformToString): Uses QXmlQuery.

2009-09-28  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Carlson.

        Delegate implementation of rendererIsNeeded() for media control elements to RenderTheme.

        https://bugs.webkit.org/show_bug.cgi?id=28689

        Covered by LayoutTests/media/video-no-audio.html

        * rendering/MediaControlElements.cpp: Removed subclass implementations of rendererIsNeeded().
        (WebCore::MediaControlElement::rendererIsNeeded): Include calling shouldRenderMediaControlPart().
        (WebCore::MediaControlInputElement::rendererIsNeeded): Include calling shouldRenderMediaControlPart().
        * rendering/MediaControlElements.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::shouldRenderMediaControlPart): New method.  Contains logic moved from subclass implementations of rendererIsNeeded().
        * rendering/RenderTheme.h:
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::shouldRenderMediaControlPart): Override to always render mute button.
        * rendering/RenderThemeChromiumSkia.h:

2009-09-28  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        [chromium] DragData::asURL should return file URL.
        https://bugs.webkit.org/show_bug.cgi?id=29109

        Tested by LayoutTests/fast/events/drag-to-navigate.html.

        * platform/FileSystem.h:
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asURL):
        * platform/chromium/FileSystemChromium.cpp:
        (WebCore::getAbsolutePath):
        (WebCore::isDirectory):
        (WebCore::filePathToURL):

2009-09-28  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by David Levin.

        [V8] Add a special case to handle index arguments, because we need to be
        able to see if they're < 0.
        https://bugs.webkit.org/show_bug.cgi?id=29810

        Test: LayoutTests/dom/html/level1/core/hc_characterdataindexsizeerrdeletedatacountnegative.html

        * bindings/scripts/CodeGeneratorV8.pm: Added special case (matching CodeGeneratorJS.pm)
          for index arguments.

2009-09-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Extend the MediaWiki/KHTMLFixes.css workaround to cover older MediaWiki versions
        https://bugs.webkit.org/show_bug.cgi?id=29792

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet): If site specific hacks are
        enabled, check if the linked style sheet is one of two versions of the
        MediaWiki KHTMLFixes.css. If so, remove the offending rule.

2009-09-28  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        [V8] Fix an error in type logic in CodeGeneratorV8.pm, where
        unsigned ints are accidentally used as signed.
        https://bugs.webkit.org/show_bug.cgi?id=29810

        Test: LayoutTests/fast/forms/textarea-maxlength.html

        * bindings/scripts/CodeGeneratorV8.pm: Made sure "unsigned long" in IDL is
          properly generates on "unsigned" return value.

2009-09-28  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Rename XSLStyleSheet.cpp to XSLStyleSheetLibxslt.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=28303

        In preparation for adding XSLT support with QtXmlPatterns to the Qt
        port, rename XSLStyleSheet.cpp to XSLStyleSheetLibxslt.cpp as we will
        have our own implementation which most likely will not share any code
        with the current one.

        Additionally, fix some coding style issues.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * xml/XSLStyleSheet.cpp: Renamed to XSLStyleSheetLibxslt.cpp.
        * xml/XSLStyleSheetLibxslt.cpp: Added.

2009-09-28  Simon Hausmann  <simon.hausmann@nokia.com>

        Prospective build fix for r48812.

        Forgot to remove the inline reset() implementation when reverting the indentation
        changes in the file.

        * xml/XSLTProcessor.h:

2009-09-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by nobody (trivial follow up fix), Joseph Pecoraro LGTM-ed.

        Web Inspector: Follow up to r48809.
        InspectorController.wrapObject should only be called on the inspectable page side.

        https://bugs.webkit.org/show_bug.cgi?id=17429

        * inspector/front-end/EventListenersSidebarPane.js:
        (WebInspector.EventListenersSidebarPane.prototype.update.callback):
        (WebInspector.EventListenersSidebarPane.prototype.update):
        (WebInspector.EventListenersSection):
        (WebInspector.EventListenersSection.prototype.update):
        (WebInspector.EventListenerBar):
        (WebInspector.EventListenerBar.prototype.update):

2009-09-28  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Move the libxslt specific part of XSLTProcessor to a separate file.
        https://bugs.webkit.org/show_bug.cgi?id=28303

        In preparation for adding XSLT support with QtXmlPatterns to the Qt
        port, move the libxslt part of the XSLTProcessor implementation into
        another file and leave the part that can be reused and shared.

        Additionally, fix some coding style issues.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource): Remove trailing whitespaces.
        (WebCore::createFragmentFromSource): Remove trailing whitespaces.
        (WebCore::XSLTProcessor::transformToFragment): Remove trailing whitespaces.
        (WebCore::XSLTProcessor::reset): Moved out of the class definition.
        * xml/XSLTProcessorLibxslt.cpp: Added.
        (WebCore::XSLTProcessor::genericErrorFunc): Moved.
        (WebCore::XSLTProcessor::parseErrorFunc): Moved.
        (WebCore::docLoaderFunc): Moved.
        (WebCore::setXSLTLoadCallBack): Moved.
        (WebCore::writeToVector): Moved.
        (WebCore::saveResultToString): Moved.
        (WebCore::xsltParamArrayFromParameterMap): Moved.
        (WebCore::freeXsltParamArray): Moved.
        (WebCore::xsltStylesheetPointer): Moved.
        (WebCore::xmlDocPtrFromNode): Moved.
        (WebCore::resultMIMEType): Moved.
        (WebCore::XSLTProcessor::transformToString): Moved.

2009-09-28  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by Nikolas Zimmermann.

        Fix the crash of SVG that crashes when use a non-exist symbol
        https://bugs.webkit.org/show_bug.cgi?id=27693

        Test: svg/custom/use-non-existing-symbol-crash.svg

        * svg/SVGUseElement.cpp:
        (WebCore::shadowTreeContainsChangedNodes):

2009-09-28  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector Should Show Event Listeners/Handlers Registered on each Node
        https://bugs.webkit.org/show_bug.cgi?id=17429
        
          Extracted a method from dispatchEvent to get the event ancestor chain
        
        * dom/Node.cpp:
        (WebCore::Node::eventAncestors): the extracted method
        (WebCore::Node::dispatchGenericEvent): use eventAncestors
        * dom/Node.h:

          Asynchronous Flow For the Inspector, Backend -> DOM Agent -> Frontend
          The DOMAgent's getEventListenersForNode handles the logic of finding
          all the relevant listeners in the event flow.

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getEventListenersForNode):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        (WebCore::InspectorDOMAgent::buildObjectForNode): added localName
        * inspector/InspectorDOMAgent.h:
        (WebCore::EventListenerInfo::EventListenerInfo):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didGetEventListenersForNode):
        * inspector/InspectorFrontend.h:
        (WebCore::InspectorFrontend::scriptState):
        * inspector/front-end/DOMAgent.js: added localName to WebInspector.DOMNode from payload
        (WebInspector.EventListeners.getEventListenersForNodeAsync.mycallback):
        (WebInspector.EventListeners.getEventListenersForNodeAsync):

          New Sidebar Pane in the Element's Panel
          Includes Gear Menu for filtering the Event Listeners on the
          "Selected Node Only" or "All Nodes"

        * inspector/front-end/ElementsPanel.js: Handles refreshing the Pane when necessary
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.updateEventListeners):
        * inspector/front-end/EventListenersSidebarPane.js: Added. 
        (WebInspector.EventListenersSidebarPane): The 1st level in the Pane
        (WebInspector.EventListenersSidebarPane.prototype.update.callback):
        (WebInspector.EventListenersSidebarPane.prototype.update):
        (WebInspector.EventListenersSection): The 2nd level in the Pane
        (WebInspector.EventListenersSection.prototype.update): filters on Preference
        (WebInspector.EventListenersSection.prototype.addListener):
        (WebInspector.EventListenerBar): The 3rd level in the Pane
        (WebInspector.EventListenerBar.prototype._getNodeDisplayName):
        (WebInspector.EventListenerBar.prototype._getFunctionDisplayName):
        (WebInspector.EventListenersSidebarPane.prototype._changeSetting): For the Gear Menu
        
          Consolidated "appropriateSelectorForNode"

        * inspector/front-end/StylesSidebarPane.js:
        * inspector/front-end/utilities.js:

          Miscellaneous Updates

        * English.lproj/localizedStrings.js: "Event Listeners", "No Event Listeners", "Selected Node Only", "All Nodes"
        * WebCore.gypi: included the new inspector files
        * WebCore.vcproj/WebCore.vcproj: included source files that were missing
        * inspector/front-end/Images/grayConnectorPoint.png: Added. Thanks to Timothy Hatcher.
        * inspector/front-end/Images/whiteConnectorPoint.png: Added. Thanks to Timothy Hatcher.
        * inspector/front-end/inspector.js: Preferences for the Gear Menu Event Listeners filter
        * inspector/front-end/inspector.css: reused as much as possible
        * inspector/front-end/inspector.html: include the new script
        * inspector/front-end/WebKit.qrc: included the new inspector files

2009-09-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=29760
        Implement CSSOM Range.getClientRects/getBoundingClientRect 

        Tests: fast/dom/Range/getBoundingClientRect-getClientRects-relative-to-viewport.html
               fast/dom/Range/getBoundingClientRect.html
               fast/dom/Range/getClientRects.html

        * dom/Range.cpp:
        (WebCore::Range::getClientRects):
        (WebCore::Range::getBoundingClientRect):
        (WebCore::adjustFloatQuadsForScrollAndAbsoluteZoom):
        (WebCore::Range::getBorderAndTextQuads):
        * dom/Range.h:
        * dom/Range.idl:
        Implement Range.getClientRects/getBoundingClientRect.

        * dom/Element.cpp:
        * rendering/RenderObject.h: 
        (WebCore::adjustForAbsoluteZoom):
        (WebCore::adjustIntRectForAbsoluteZoom):
        (WebCore::adjustFloatPointForAbsoluteZoom):
        (WebCore::adjustFloatQuadForAbsoluteZoom):
        Move point/quad adjustment methods from Element.cpp to RenderObject.h
        so that Range.cpp can use them as well.

2009-09-27  Simon Hausmann  <hausmann@webkit.org>

        Unreviewed fix for WebInspector with Qt build.

        Simply re-generate the Qt resource file by running
        WebKitTools/Scripts/generate-qt-inspector-resource

        * inspector/front-end/WebKit.qrc:

2009-09-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by nobody (trivial ChangeLog fix).

        Restore WebCore/ChangeLog truncated in r48778.

2009-09-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: DOM store is being unbound twice, leading to assertion failure.

        https://bugs.webkit.org/show_bug.cgi?id=29770

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didOpenDatabase):
        (WebCore::InspectorController::didUseDOMStorage):
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::unbind):

2009-09-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Do not track DOM changes while inspector window is closed.

        https://bugs.webkit.org/show_bug.cgi?id=29769

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setDocument):
        * inspector/InspectorDOMAgent.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchWindowObjectAvailable):
        * page/android/InspectorControllerAndroid.cpp:
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):

2009-09-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: [REGRESSION] Double Clicking Resources Fails to Open in New Window

        https://bugs.webkit.org/show_bug.cgi?id=29762

        * inspector/front-end/InjectedScript.js:
        (InjectedScript.setStyleText):
        (InjectedScript.openInInspectedWindow):
        * inspector/front-end/InjectedScriptAccess.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.ondblclick):

2009-09-26  David Kilzer  <ddkilzer@apple.com>

        Part 2 of 2: <http://webkit.org/b/29753> DerivedSources.make broken for non-Mac targets

        Reviewed by Darin Adler.

        Fix ENABLE_ORIENTATION_EVENTS for non-Mac platforms.

        * DerivedSources.make: Moved Platform.h check for
        ENABLE_ORIENTATION_EVENTS into Mac-only section and added
        default of ENABLE_ORIENTATION_EVENTS = 0 to non-Mac section.
        Added ifndef test to make it possible to override both
        ENABLE_DASHBOARD_SUPPORT and ENABLE_ORIENTATION_EVENTS external
        to the makefile.  Moved addition of ENABLE_ORIENTATION_EVENTS to
        ADDITIONAL_IDL_DEFINES to common section.
        * GNUmakefile.am: Added support for ENABLE_ORIENTATION_EVENTS if
        it is ever used.
        * WebCore.pro: Ditto.

2009-09-26  Kent Tamura  <tkent@chromium.org>

        Reviewed by David Kilzer.

        Move placeholder-related code to HTMLTextFormControlElement from
        HTMLInputElement, WMLInputElement, InputElement, and
        HTMLTextAreaElement.
        https://bugs.webkit.org/show_bug.cgi?id=28703

        * dom/InputElement.cpp:
        (WebCore::InputElement::dispatchFocusEvent):
        (WebCore::InputElement::dispatchBlurEvent):
        (WebCore::InputElement::setValueFromRenderer):
        * dom/InputElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::HTMLTextFormControlElement):
        (WebCore::HTMLTextFormControlElement::~HTMLTextFormControlElement):
        (WebCore::HTMLTextFormControlElement::dispatchFocusEvent):
        (WebCore::HTMLTextFormControlElement::dispatchBlurEvent):
        (WebCore::HTMLTextFormControlElement::placeholderShouldBeVisible):
        (WebCore::HTMLTextFormControlElement::updatePlaceholderVisibility):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLTextFormControlElement::handleFocusEvent):
        (WebCore::HTMLTextFormControlElement::handleBlurEvent):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        (WebCore::HTMLInputElement::handleFocusEvent):
        (WebCore::HTMLInputElement::handleBlurEvent):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::createRenderer):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::supportsPlaceholder):
        (WebCore::HTMLInputElement::isEmptyValue):
        * html/HTMLIsIndexElement.cpp:
        (WebCore::HTMLIsIndexElement::parseMappedAttribute):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::HTMLTextAreaElement):
        (WebCore::HTMLTextAreaElement::createRenderer):
        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::supportsPlaceholder):
        (WebCore::HTMLTextAreaElement::isEmptyValue):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::RenderTextControlMultiLine):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        * rendering/RenderTextControlSingleLine.h:
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::setValue):
        (WebCore::WMLInputElement::createRenderer):
        * wml/WMLInputElement.h:

2009-09-26  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Alexey Proskuryakov.

        Optimize the code so only the text from start to end is scanned.
        https://bugs.webkit.org/show_bug.cgi?id=29092

        On a platform with webkit+Qt+Symbian, the parsing time for a 600K text
        file improved from 400ms to 40ms (10x faster).

        * dom/Text.cpp:
        (WebCore::Text::createWithLengthLimit):

2009-09-26  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Eric Seidel.

        This Patch fixes [chromium] the drop-down is always left-aligned even
        for RTL element.
        https://bugs.webkit.org/show_bug.cgi?id=29612

        For auto-complete, the items in drop-down should be right-aligned if
        the directionality of <input> field is RTL.
        For <select><option>, the items in drop-down should be right-aligned
        if the directionality of <select> is RTL.

        No automatic test is possible. Manual tests are added.

        * manual-tests/autofill_alignment.html: Added.
        * manual-tests/select_alignment.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::paintRow): Adjust the starting x-axis of text to
        be paint if it should be right-aligned.

2009-09-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION (r48775) FontList.plist written by TOT WebKit causes Safari 4
        to crash on launch
        https://bugs.webkit.org/show_bug.cgi?id=29759

        * platform/graphics/win/FontDatabase.cpp:
        (WebCore::writeFontDatabaseToPlist): Reverted to saving the CG font DB
        property list at the root of FontList.plist, but with an additional
        key for the last value of the Fonts registry key.
        (WebCore::populateFontDatabase): Pass the FontList.plist in its entirety
        to populatFontDatabaseFromPlist.

2009-09-25  Kevin Ollivier  <kevino@theolliviers.com>

        Build fix. Adding missing header files.

        * bindings/js/JSNamedNodeMapCustom.cpp:

2009-09-25  David Kilzer  <ddkilzer@apple.com>

        Part 1 of 2: <http://webkit.org/b/29753> DerivedSources.make broken for non-Mac targets

        Reviewed by Darin Adler.

        * DerivedSources.make: Move tests for ENABLE_CONTEXT_MENUS,
        ENABLE_DRAG_SUPPORT and ENABLE_INSPECTOR into Mac-only section.

2009-09-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Load blocks during unload should not affect targeted loads
        https://bugs.webkit.org/show_bug.cgi?id=29747

        Move the check of the unload state after checking for targeted links.

        Test: fast/loader/unload-hyperlink-targeted.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):

2009-09-25  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        [Chromium] Add initial V8 bindings for WebGL
        https://bugs.webkit.org/show_bug.cgi?id=29664

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8CanvasArrayBufferCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8CanvasArrayCustom.h: Added.
        (WebCore::constructCanvasArray):
        * bindings/v8/custom/V8CanvasByteArrayCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasFloatArrayCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasIntArrayCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasRenderingContext3DCustom.cpp: Added.
        (WebCore::jsArrayToFloatArray):
        (WebCore::jsArrayToIntArray):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::):
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):
        * bindings/v8/custom/V8CanvasShortArrayCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasUnsignedByteArrayCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasUnsignedIntArrayCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasUnsignedShortArrayCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * platform/graphics/GraphicsContext3D.h:

2009-09-25  Jeremy Orlow  <jorlow@chromium.org>

        This is breaking Chromium try bots, so I'm counting this as a build fix.

        Add more svn:ignore exceptions.  On different platforms, these files are
        generated with different case for WebCore.

        * WebCore.gyp: Changed property svn:ignore.

2009-09-25  Alexey Proskuryakov  <ap@apple.com>

        Reverting r48767, as it broke Windows build in a non-trivial way.

        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::addEventListener):
        (WebCore::JSAbstractWorker::removeEventListener):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::createJSAttributeEventListener):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::jsFunction):
        (WebCore::JSEventListener::markJSFunction):
        (WebCore::JSEventListener::handleEvent):
        (WebCore::JSEventListener::reportError):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::create):
        * bindings/js/JSEventSourceCustom.cpp:
        (WebCore::JSEventSource::addEventListener):
        (WebCore::JSEventSource::removeEventListener):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::JSLazyEventListener::jsFunction):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/JSLazyEventListener.h:
        (WebCore::JSLazyEventListener::create):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/objc/ObjCEventListener.h:
        * bindings/objc/ObjCEventListener.mm:
        (WebCore::ObjCEventListener::handleEvent):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/EventListener.h:
        (WebCore::EventListener::reportError):
        (WebCore::EventListener::jsFunction):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::handleEvent):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::handleEvent):
        * inspector/InspectorDOMStorageResource.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageEventListener::handleEvent):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::ConditionEventListener::handleEvent):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::reportException):

2009-09-24  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        Add a gyp variable to allow building a debug webcore without debug
        symbols.  This allows for faster compile, link, and gdb times.

        https://bugs.webkit.org/show_bug.cgi?id=29721

        No new tests, build config change.

        * WebCore.gyp/WebCore.gyp:

2009-09-25  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

        Declare RegisteredEventListener as a class instead of a struct.
        This fixes a warning in the Chromium build.

        * dom/RegisteredEventListener.h:

2009-09-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Jon Honeycutt.

        WebCore part of
        <rdar://problem/7211635> 2 byte characters are displayed as garbaged
        <rdar://problem/7212626> garbled/gibberish text (off-by-one)

        When the Windows Fonts directory contains more than one font file for a
        given font name, which of the fonts gets assigned to the name in the
        Core Graphics font database was determined arbitrarily and did not
        always match the font GDI used for the same font name. The mismatch
        caused character-to-glyph mapping to use one font and glyph rendering to
        use another.

        The fix is to update the Core Graphics font database from the registry
        entries (that reflect the name-to-font mapping that GDI uses) after
        populating it with the result of scanning the Fonts directory. As a
        consequence, the directory needs to be scanned at startup every time the
        registry key changes, so the last value of the registry key is kept
        in the property list on disk so that it could be compared to the current
        value on startup.

        * platform/graphics/win/FontDatabase.cpp:
        (WebCore::populateFontDatabaseFromPlist): Now takes a property list as
        a parameter and avoids round-tripping through XML by calling
        wkAddFontsFromPlist() instead of wkAddFontsFromPlistRepresentation().
        (WebCore::fontFilenamesFromRegistryKey):
        (WebCore::cgFontDBKey):
        (WebCore::writeFontDatabaseToPlist): Now takes the CG font DB property
        list and a property list with the font filenames from the registry and
        writes a dictionary with those property lists as values.
        (WebCore::fontFilenamesFromRegistry): Added. Returns an array with the
        values in the HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
        registry key.
        (WebCore::populateFontDatabase): Changed to read the contents of the
        Fonts registry key and compare it with the last-saved value from the
        property list, and to call wkAddFontsFromRegistry() after populating the
        CG font DB from the file system. Uses wkCreateFontsPlist() instead of
        wkCreateFontsPlistRepresentation() to avoid round-tripping through XML.

2009-09-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Inlined some object creation code, including lexicalGlobalObject access
        https://bugs.webkit.org/show_bug.cgi?id=29750

        * bindings/js/JSInspectorBackendCustom.cpp:
        (WebCore::JSInspectorBackend::currentCallFrame):
        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::hasBreakpoint): Updated for JavaScriptCore
        API changes.

2009-09-25  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=24399
        Make @import work in user stylesheets.  The first bug was that the URL wasn't being set on the
        user sheets themselves, so relative @import URLs couldn't resolve properly.  The second bug
        was that the loads would be denied.  This is fixed by using the requestUserCSSStyleSheet method
        instead of the normal request method.  In order to know when to do this, CSSStyleSheets now have
        a propagated boolean, m_isUserStyleSheet, that lets them know if they are user stylesheets or not.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::setIsUserStyleSheet):
        (WebCore::CSSStyleSheet::isUserStyleSheet):
        * dom/Document.cpp:
        (WebCore::Document::pageUserSheet):
        (WebCore::Document::pageGroupUserSheets):

2009-09-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        ASSERTION FAILED: !repaintContainer || repaintContainer == this
        https://bugs.webkit.org/show_bug.cgi?id=29755
        
        It's possible for RenderObject::container() to return an object that is higher
        in the hierarchy than the repaintContainer that is being used to repaint an
        object. For example, this can happen when running an accelerated opacity
        transition on an element with a position:absolute parent, and a position:absolute child.
        
        In this case we need to detect when RenderObject::container() will skip over
        repaintContainer, and in that case adjust the coords to shift into repaintContainer's space.

        Test: compositing/repaint/opacity-between-absolute.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer):
        (WebCore::RenderBox::computeRectForRepaint):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::computeRectForRepaint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::container):
        * rendering/RenderObject.h:

2009-09-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Crash with hardware accelerated rotation of a PDF image in a data URL
        <rdar://problem/7250378>
        
        PDF images don't return a color space from CGImageGetColorSpace(),
        so we need to null-check the return value before use.

        Test: compositing/color-matching/pdf-image-match.html

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setContentsToImage):

2009-09-25  Darin Adler  <darin@apple.com>

        Reviewed by Geoffrey Garen.

        Null-deref when first access to an Attr node is after its Element is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=29748

        Test: fast/dom/Attr/access-after-element-destruction.html

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::markChildren): Added. Keeps the ownerElement alive as
        long as the Attr is alive.

        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::markChildren): Added. Keeps the Element alive as
        long as the NamedNodeMap is alive.

        * dom/Attr.idl: Added CustomMarkFunction attribute.

        * dom/NamedAttrMap.cpp:
        (WebCore::NamedNodeMap::getAttributeItem): Tweaked formatting.
        (WebCore::NamedNodeMap::detachFromElement): Call clearAttributes so we don't
        have attributes hanging around that might need an Attr node created; that way
        we won't crash with a null-dereference trying to deal with one of them. This
        can't happen when working with JavaScript since the Element will be kept
        alive due to the change above.
        (WebCore::NamedNodeMap::addAttribute): Fix function name in comment.
        (WebCore::NamedNodeMap::removeAttribute): Removed unneeded "1" and added
        missing braces.

        * dom/NamedAttrMap.h: Made the element function public so it can be used by
        the JavaScript binding to keep the Element alive.

        * dom/NamedNodeMap.idl: Added CustomMarkFunction attribute.

2009-09-24  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler and Sam Weinig.

        Onclick not fired for an element copied with cloneContents() or cloneNode()
        https://bugs.webkit.org/show_bug.cgi?id=25130

        The change here is that JS event listeners don't keep a reference to a global object from
        where they were created, and instead take it as a parameter when parsing source code. Also,
        the listener creation won't fail just because it happens for an element in a frameless
        document.
        Thus, moving nodes between documents no longer results in having incorrect registered
        lazy event listeners on them.

        Tests: fast/events/attribute-listener-cloned-from-frameless-doc-context-2.html
               fast/events/attribute-listener-cloned-from-frameless-doc-context.html
               fast/events/attribute-listener-cloned-from-frameless-doc.xhtml
               fast/events/attribute-listener-extracted-from-frameless-doc-context-2.html
               fast/events/attribute-listener-extracted-from-frameless-doc-context.html

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener): Don't take a reference to JSDOMGlobalObject.
        (WebCore::JSEventListener::jsFunction): Take ScriptExecutionContext as a parameter for
        getting to JSDOMGlobalObject. It's not used in base class, but is in JSLazyEventListner.
        (WebCore::JSEventListener::markJSFunction): Don't mark the global object.
        (WebCore::JSEventListener::handleEvent): Get global object from ScriptExecutionContext.
        (WebCore::JSEventListener::reportError): Ditto.

        * bindings/js/JSEventListener.h: (WebCore::JSEventListener::create): Don't keep a reference
        to JSDOMGlobalObject.

        * bindings/js/JSLazyEventListener.cpp: (WebCore::JSLazyEventListener::parseCode): Listener
        creation was split between this function and ScriptEventListener; moved it here, as JS
        global object can be different now.

        * bindings/js/JSLazyEventListener.h: (WebCore::JSLazyEventListener::create): Keep source URL,
        which can not be determined at parsing time.

        * bindings/js/ScriptEventListener.cpp: (WebCore::createAttributeEventListener): Moved code
        for listener creation to JSLazyEventListener. XSSAuditor code remains here, because tests
        expect that errors are logged at document parsing time, and because I don't know what other
        side effects moving it vould have.

        * dom/EventListener.h: handleEvent() and reportError() now take ScriptExecutionContext,
        because JSC needs a global context here.

        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::addEventListener):
        (WebCore::JSAbstractWorker::removeEventListener):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::createJSAttributeEventListener):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        * bindings/js/JSEventSourceCustom.cpp:
        (WebCore::JSEventSource::addEventListener):
        (WebCore::JSEventSource::removeEventListener):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/objc/ObjCEventListener.h:
        * bindings/objc/ObjCEventListener.mm:
        (WebCore::ObjCEventListener::handleEvent):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::handleEvent):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::handleEvent):
        * inspector/InspectorDOMStorageResource.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageEventListener::handleEvent):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::ConditionEventListener::handleEvent):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::reportException):
        Don't pass global object to JSEventListener::create(), which no longer needs it.
        Note that some of these functions still have an early return for null global object, which
        can probably be removed in a later patch.
        Pass ScriptExecutionContext to EventListener methods that now need it.

2009-09-25  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler, Dan Bernstein, Adele Peterson, and others.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=29740
        <rdar://problem/7168738> Gmail: After changing a foreground text color, pressing return doesn't apply background to new line

        Change the way style is preserved when inserting a new paragraph.
        The original code handled insertion at the beginning and at the end of a paragraph as special
        cases. The newly created paragraph contained a set of nodes generated starting from the
        computed style of the insertion node. This approach has two problems:
        1. if the insertion node has a non opaque background color and one of the parent element did have
        a solid background color the new paragraph did not have the element with the solid color in the tree.
        2. in some circumstances it generated more markup than the original paragraph had (a span with bold, italic,
        background color and some font attribute was being reproduced as span bold italic font as separate tags.
        The new approach is to recreate in the new paragraph the same hierarchy of nodes found in the
        paragraph where the insertion point is.

        Test: editing/inserting/insert-bg-font.html

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::getAncestorsInsideBlock): retrieves the list of all the ancestors
        between the insert node and the outer block.
        (WebCore::InsertParagraphSeparatorCommand::cloneHierarchyUnderNewBlock): uses the list of ancestors to recreate
        in the new paragraph the same element hierarchy present in the starting paragraph.
        (WebCore::InsertParagraphSeparatorCommand::doApply): changed the code to handle the general case of insertion
        in the middle of the paragraph to use the new methods. Changed the handling of the insertion at the beginning and
        at the end of the paragraph to use the new methods instead of applying the calculated style.
        * editing/InsertParagraphSeparatorCommand.h: added methods getAncestorsInsideBlock and cloneHierarchyUnderNewBlock.

2009-09-25  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Content-type parameters not taken into account when building form-data
        https://bugs.webkit.org/show_bug.cgi?id=28970

        existing manual test case extended with new tests

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._refreshFormData):
        (WebInspector.ResourceView.prototype._refreshParms):
        * manual-tests/inspector/display-form-data.html:

2009-09-25  Yuan Song  <song.yuan@ericsson.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=14566

        Raise SECURITY_ERR exception if an attempt is made to change document.domain to an invalid value.

        Test: fast/js/invalid-domain-change-throws-exception.html

        * dom/Document.cpp:
        (WebCore::Document::setDomain):
        * dom/Document.h:
        * dom/Document.idl:

2009-09-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Teach ScheduledAction::execute about isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=27703

        When setTimeout is called with a string argument in an isolated
        world, we now compile the string in the isolated world.

        Last time we tried this change, we got a lot of crashes.  This
        time we're using a fresh local handle as our context to avoid
        trouble if the peristent handle gets disposed before we leave
        the context.

        Test: fast/dom/timer-clear-interval-in-handler-and-generate-error.html

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):

2009-09-25  Paul Godavari  <paul@chromium.org>

        Reviewed by Darin Fisher.

        Fix a regression in Mac Chromium popup menus, where the user's
        selection was ignored and the popup became unresponsive.
        https://bugs.webkit.org/show_bug.cgi?id=29726

        The fix is to notify the popup's client that the popup was hidden,
        even if the popup has no parent.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::hidePopup):

2009-09-25  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Dan Bernstein.

        Enable Pasteboard::writePlainText for Chromium and fix code style nits.
        https://bugs.webkit.org/show_bug.cgi?id=29734

        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writePlainText):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::writeURL):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::writeURL):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writePlainText):

2009-09-25  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Ariya Hidayat.

        https://bugs.webkit.org/show_bug.cgi?id=28876
        [Qt] reduce peak memory consumption of text decoding.

        Chop large input buffer into small buffers to reduce peak memory
        during decoding.

        * platform/text/qt/TextCodecQt.cpp:
        (WebCore::TextCodecQt::decode):

2009-09-24  Jon Honeycutt  <jhoneycutt@apple.com>

        Add a mechanism for automatically halting plug-ins.

        Reviewed by Oliver Hunt and Alice Liu.

        * GNUmakefile.am:

        * WebCore.base.exp:
        Update export of Page constructor.

        * WebCore.gypi:

        * WebCore.pro:

        * WebCore.vcproj/WebCore.vcproj:
        Add PluginHalter.{h,cpp}, PluginHalterClient.h, and
        HaltablePlugin.h.

        * WebCore.xcodeproj/project.pbxproj:
        Add files to Mac project.

        * loader/EmptyClients.h:
        Added an empty PluginHalterClient.
        (WebCore::EmptyPluginHalterClient::shouldHaltPlugin):
        Return false.

        * page/PluginHalter.cpp: Added.
        (WebCore::PluginHalter::PluginHalter):
        (WebCore::PluginHalter::didStartPlugin):
        Add the object to the plug-in set. If this is the only item in the set,
        set m_oldestStartTime to this object's time, and start the timer.
        (WebCore::PluginHalter::didStopPlugin):
        Remove the plug-in from the set.
        (WebCore::PluginHalter::timerFired):
        Find the cut-off time as the current time minus the allowed run time;
        plug-ins older than this may be halted. Iterate over the plug-ins. Find
        the object with the oldest start time that is too young to be halted;
        we'll use its start time to set the timer's next fire time. For all
        plug-ins that are candidates to be halted, call the
        PluginHalterClient's shouldHaltPlugin(). If this function returns true,
        call the plug-in's halt() function. Remove these objects from the set
        of tracked plug-ins. Call startTimerIfNecessary() to restart the timer.
        (WebCore::PluginHalter::startTimerIfNecessary):
        If the timer is set to fire, or the set of tracked plug-ins is empty,
        return early. Set the timer to fire after the oldest plug-in has run
        for the allowed run time.

        * page/PluginHalter.h: Added.
        (WebCore::PluginHalter::setPluginAllowedRunTime):

        * page/PluginHalterClient.h: Added.
        (WebCore::PluginHalterClient::~PluginHalterClient):

        * page/Page.cpp:
        (WebCore::Page::Page):
        Initialize m_pluginHalterClient. Call pluginHalterEnabledStateChanged()
        to create the PluginHalter if necessary.
        (WebCore::Page::pluginHalterEnabledStateChanged):
        If plug-in halting is enabled, create the PluginHalter. If it is
        disabled, clear it.
        (WebCore::Page::pluginAllowedRunTimeChanged):
        If there is a plug-in halter, call its setPluginAllowedRunTime().
        (WebCore::Page::didStartPlugin):
        If there is a plug-in halter, call its didStartPlugin().
        (WebCore::Page::didStopPlugin):
        If there is a plug-in halter, call its didStopPlugin().

        * page/Page.h:
        Add a parameter to the Page constructor for the PluginHalterClient.
        Added declarations for didStartPlugin() and didStopPlugin(), which are
        called when HaltablePlugins are added to or removed from the page. Adds
        pluginAllowedRunTimeChanged() and pluginHalterEnabledStateChanged() to
        notify the Page when these settings are changed. Added members to hold
        the PluginHalter and the PluginHalterClient.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setPluginHalterEnabled):
        If the enabled state has changed, call the Page's
        pluginHalterEnabledStateChanged().
        (WebCore::Settings::setPluginAllowedRunTime):
        Call the Page's pluginAllowedRunTimeChanged().

        * page/Settings.h:
        (WebCore::Settings::pluginHalterEnabled):
        (WebCore::Settings::pluginAllowedRunTime):

        * page/HaltablePlugin.h: Added. Defines an interface for plug-ins that
        can be automatically halted.
        (WebCore::HaltablePlugin::~HaltablePlugin):

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):
        Pass a dummy PluginHalterClient.

2009-09-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION: webkit-transform scale no longer works properly in nightly build
        https://bugs.webkit.org/show_bug.cgi?id=29730
        
        When the initial or final state of a scale animation does not specify a transform,
        use a default scale of 1, rather than zero.

        Test: compositing/transitions/scale-transition-no-start.html

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::getTransformFunctionValue):

2009-09-24  John Gregg  <johnnyg@google.com>

        Reviewed by Eric Seidel.

        isEnabled switch for notifications (experimental) in Page Settings
        https://bugs.webkit.org/show_bug.cgi?id=28930

        Adds a run-time flag in Settings object that controls whether
        to expose desktop notifications.

        No new test, but test code also modified to set this preference.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitNotifications): check preference before returning notifications object
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setExperimentalNotificationsEnabled):
        * page/Settings.h:
        (WebCore::Settings::experimentalNotificationsEnabled):

2009-09-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Fix <rdar://problem/7162000> Crash while trying to
        calculate the horizontal position of image

        Test: fast/inline-block/relative-positioned-rtl-crash.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced): Corrected an
        isInline() test to isRenderInline(). This is similar to r41259.

2009-09-24  Jessie Berlin  <jberlin@webkit.org>

        Reviewed by Timothy Hatcher.

        Fix expanding profile call stacks being broken after sorting.
        https://bugs.webkit.org/show_bug.cgi?id=26423

        * inspector/front-end/ProfileDataGridTree.js:
        (WebInspector.ProfileDataGridNode.prototype.sort):
        Set shouldRefreshChildren to true on collapsed nodes with children so that expanding it
        causes the children to be placed in the right positions.

2009-09-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Stephanie Lewis.

        Fixed sudden termination console spew due to too many calls to
        enableSuddenTermination.
        
        <rdar://problem/7063125> 10A410: Safari logging enableSuddenTermination errors

        * page/DOMWindow.cpp:
        (WebCore::removeUnloadEventListener):
        (WebCore::removeAllUnloadEventListeners):
        (WebCore::removeBeforeUnloadEventListener):
        (WebCore::removeAllBeforeUnloadEventListeners): Only
        enableSuddenTermination if the set of listeners is empty *and* this
        window was in the set. Otherwise, a no-op will cause us to enableSuddenTermination.

2009-09-24  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Alexey Proskuryakov.

        WebKit returns "" instead of null when getting
        inexistent, forbidden or invalidly named headers.
        https://bugs.webkit.org/show_bug.cgi?id=29140

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getResponseHeader):
        Changed to return null as it should according to the spec.

2009-09-24  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add GYP generated files to svn:ignore
        https://bugs.webkit.org/show_bug.cgi?id=29724

        Adding the following files to the svn:ignore list (all in the
        WebCore/WebCore.gyp directory)

        WebCore.xcodeproj
        WebCore.sln
        WebCore.vcproj
        WebCore_Debug.rules
        WebCore_Release.rules
        WebCore_Release - no tcmalloc.rules
        WebCore_Purify.rules
        WebCore.mk
        WebCore_Debug_rules.mk
        WebCore_Release_rules.mk
        WebCore_Release - no tcmalloc_rules.mk
        WebCore_Purify_rules.mk
        WebCore.scons
        WebCore_main.scons

        * WebCore.gyp: Changed property svn:ignore.

2009-09-24  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Mac build fix.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::shouldTurnVerticalTicksIntoHorizontal):
        remove unused parameter from function signature;

2009-09-24  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Oliver Hunt.

        Implement correct horizontal scrollbar behavior for GTKalso on
        styled scrollbars.

        https://bugs.webkit.org/show_bug.cgi?id=29348
        [Gtk] Scrollwheel on horizontal scrollbars should slide horizontally

        Test: platform/gtk/scrollbars/overflow-scrollbar-horizontal-wheel-scroll.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent): on GTK+, when using the
        wheel with the pointer on the horizontal scrollbar, scroll
        horizontally;
        * platform/PlatformWheelEvent.h:
        * platform/gtk/WheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::swapOrientation): allow adding a
        vertical scroll to the horizontal one;

2009-09-24  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Eric Seidel.

        StorageNamespace::storageArea() should take in a PassRefPtr<StorageOrigin>
        https://bugs.webkit.org/show_bug.cgi?id=29290

        Modified StorageNamespace::storageArea() to take in a PassRefPtr<StorageOrigin>
        per http://webkit.org/coding/RefPtr.html

        No behavior change, so no tests.

        * storage/StorageNamespace.h:
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::storageArea):
        * storage/StorageNamespaceImpl.h:

2009-09-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Added back enable/disableSuddenTermination() functionality I accidentally
        removed in my last patch.

        * page/DOMWindow.cpp:
        (WebCore::addUnloadEventListener):
        (WebCore::removeUnloadEventListener):
        (WebCore::removeAllUnloadEventListeners):
        (WebCore::addBeforeUnloadEventListener):
        (WebCore::removeBeforeUnloadEventListener):
        (WebCore::removeAllBeforeUnloadEventListeners):
        (WebCore::DOMWindow::dispatchAllPendingUnloadEvents):
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):

2009-09-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Steve Falkenburg and Mark Rowe.

        Don't pass -F to GCC on non-mac platforms since it is an darwin only.

        * DerivedSources.make:

2009-09-24  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * dom/Element.idl:

2009-09-23  Stephen White  <senorblanco@chromium.org>

        Reviewed by Eric Seidel.

        Revert the relevant parts of r47925, and implement an alternate
        fix (localize the coordinate check to GraphicsContext::clipPath()).
        This fixes http://crbug.com/21174.

        Covered by LayoutTests/svg/dynamic-updates/SVGClipPathElement-dom-clipPathUnits-attr.html.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clipPath):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::currentPathInLocalCoordinates):

2009-09-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Merge changes from Mozilla's FTP directory parser.
        <rdar://problem/7227620> and https://bugs.webkit.org/show_bug.cgi?id=29294

        FTP layout tests not possible at this time.
        https://bugs.webkit.org/show_bug.cgi?id=29719 tracks making them possible.

        * loader/FTPDirectoryParser.cpp:
        (WebCore::ParsingFailed):
        (WebCore::parseOneFTPLine):

2009-09-24  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] re-enable some media tests
        https://bugs.webkit.org/show_bug.cgi?id=29716

        make canPlayType() return "probably" if mime-type is known
        and codecs string is not empty. If codecs is empty return
        "maybe".

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::supportsType):

2009-09-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=29703
        Add a function to element to check whether it matches a CSS selector

        Implement Element.webkitMatchesSelector.

        * css/CSSSelectorList.cpp:
        (WebCore::forEachTagSelector):
        (WebCore::forEachSelector):
        (WebCore::SelectorNeedsNamespaceResolutionFunctor::operator()):
        (WebCore::CSSSelectorList::selectorsNeedNamespaceResolution):
        * css/CSSSelectorList.h:
        Moved code to iterate the CSSSelectorList and determine if any
        selectors need namespace resolution from a static function in
        Node.cpp to CSSSelectorList so that it can be used by webkitMatchesSelector
        as well as querySelector/querySelectorAll.

        * dom/Element.cpp:
        (WebCore::Element::webkitMatchesSelector):
        * dom/Element.h: 
        * dom/Element.idl:
        Implement the new function. Handles exceptional cases identically to
        querySelector/querySelectorAll.

        * dom/Node.cpp:
        (WebCore::Node::querySelector):
        (WebCore::Node::querySelectorAll):
        Moved selectorsNeedNamespaceResolution to CSSSelectorList from here.

2009-09-24  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fixed bindings build after http://trac.webkit.org/changeset/48701
        https://bugs.webkit.org/show_bug.cgi?id=29713

        Got rid of isWindowEvent in function signatures:
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        (WebCore::V8AbstractEventListener::handleEvent):
        (WebCore::V8AbstractEventListener::getReceiverObject):
        * bindings/v8/V8AbstractEventListener.h:
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::callListenerFunction):
        * bindings/v8/V8LazyEventListener.h:
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::handleEvent):
        (WebCore::V8WorkerContextEventListener::callListenerFunction):
        (WebCore::V8WorkerContextEventListener::getReceiverObject):
        * bindings/v8/V8WorkerContextEventListener.h:
        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::callListenerFunction):
        * bindings/v8/custom/V8CustomEventListener.h:

        Switched to EventTarget methods of adding/removing listeners:
        * bindings/v8/custom/V8DOMApplicationCacheCustom.cpp:
        (WebCore::toEventID):
        (WebCore::ACCESSOR_SETTER):

        * dom/EventTarget.h: Some functions were incorrectly marked
        as JSC-specific.

2009-09-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Color-code watch expression errors with red.

        https://bugs.webkit.org/show_bug.cgi?id=29707

        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):
        (WebInspector.WatchExpressionTreeElement.prototype.update):
        * inspector/front-end/inspector.css:

2009-09-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Fix formatting for messages derived from resource warnings,
        couple of drive-by formatting fixes.

        https://bugs.webkit.org/show_bug.cgi?id=29705

        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addMessageToConsole):
        * inspector/front-end/ConsoleView.js:
        * inspector/front-end/InjectedScript.js:
        (InjectedScript._evaluateAndWrap):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):

2009-09-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Implement InspectorController::copyNode(id).

        https://bugs.webkit.org/show_bug.cgi?id=28357

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::copyNode):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.handleCopyEvent):

2009-09-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY(rollout)

        Roll out r48712 as it is incorrect.

        Overriding getPropertyNames is incorrect.

        * bridge/runtime_array.cpp:
        * bridge/runtime_array.h:

2009-09-24  Xan Lopez  <xlopez@igalia.com>

        Revert r48697, since it broke key handling notification to GTK+.

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::keyIdentifierForGdkKeyCode):
        (WebCore::singleCharacterString):

2009-09-24  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] GStreamer MediaPlayer is unable to correctly querry duration
        https://bugs.webkit.org/show_bug.cgi?id=24639

        check duration returned by gst_element_query_duration() only
        when using GStreamer < 0.10.23.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::duration):

2009-09-24  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Eric Seidel.

        The indices of RuntimeArray should be enumerated like for a regular array.
        https://bugs.webkit.org/show_bug.cgi?id=29005

        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getPropertyNames):
        * bridge/runtime_array.h:

2009-09-23  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Eric Seidel.

        Introduce Pasteboard::writePlaintext(const String&) so that copying
        of the inspected elements HTML will be possible in WebInspector.
        https://bugs.webkit.org/show_bug.cgi?id=29634

        * platform/Pasteboard.h:
        * platform/android/TemporaryLinkStubs.cpp:
        (Pasteboard::writePlainText):
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writePlainText):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writePlainText):
        * platform/haiku/PasteboardHaiku.cpp:
        (WebCore::Pasteboard::writePlainText):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writePlainText):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writePlainText):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writePlainText):
        * platform/wince/PasteboardWince.cpp:
        (WebCore::Pasteboard::writePlainText):
        * platform/wx/PasteboardWx.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::writeURL):

2009-09-24  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        Reviewed by Simon Hausmann.

        Fix QApp::translate() calls to provide the correct class name without
        a trailing comma.

        * platform/qt/Localizations.cpp:
        (WebCore::localizedMediaTimeDescription):

2009-09-24  Geoffrey Garen  <ggaren@apple.com>

        More build fix: Removed JSSharedWorkerContextCustom.cpp from project
        files, since it no longer exists in the repository.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:

2009-09-24  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: Declare set/unsetPendingActivity public, so
        SharedWorkerScriptLoader can call them.

        * dom/ActiveDOMObject.h:

2009-09-24  Geoffrey Garen  <ggaren@apple.com>

        Fixed a bit of the Windows build.

        * workers/SharedWorker.idl: Declare a custom mark function. (I accidentally
        removed this in my last patch.)
        * WebCore.xcodeproj/project.pbxproj: Added JSSharedWorkerCustom.cpp back
        to the build. (I accidentally removed this in my last patch.)

2009-09-23  Geoffrey Garen  <ggaren@apple.com>

        32-bit build fix: restore previous cast that I thought was unnecessary.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didSendData):
        (WebCore::XMLHttpRequest::didReceiveData):

2009-09-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Bring a little sanity to this crazy EventTarget world of ours
        https://bugs.webkit.org/show_bug.cgi?id=29701

        Lots of EventTarget refactoring to achieve a single shared implementation
        that fixes some of the performance and correctness bugs of the many individual
        implementations, and makes reasoning about EventTargets and EventListeners
        much easier.
        
        The basic design is this:
            - EventTarget manages a set of EventListeners.
            - onXXX EventListener attributes forward to standard EventTarget APIs.
            - Since the onXXX code is repetitive, it is usually done with macros
              of the form DEFINE_ATTRIBUTE_EVENT_LISTENER(attributeName).
            - EventTarget provides a shared implementation of dispatchEvent,
              which subclasses with special event dispatch rules, like Node, override.
            - To support Node, which lazily instantiates its EventTarget data,
              EventTarget has no data members, and instead makes a virtual call
              to get its data from wherever its subclass chose to store it.
              
        Code that used to call dispatchEvent, passing an ExceptionCode paratmeter,
        even though no exception could be thrown, has been changed not to do so,
        to improve clarity and performance.
        
        Code that used to call a special dispatchXXXEvent function, which just
        turned around and called dispatchEvent, has been changed to call
        dispatchEvent, to improve clarity and performance.

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj: Another day in the life of a WebKit
        engineer.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::isObservableThroughDOM): Updated for Node API change. Added
        "is not in the document but is firing event listeners" as a condition
        that makes a Node observable in the DOM, so that event listeners firing
        on removed nodes are not destroyed midstream. (This was a long-standing
        bug that was somewhat hidden by the old implementation's habit of
        copying the RegisteredEventListener vector before firing events, which
        would keep almost all the relevant objects from being destroyed.)

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent): Removed the isWindowEvent flag
        because it was one of the most elaborately planned no-ops in the history
        of software crime, and one of the reasons clients thought they needed more
        than one dispatchEvent function even though they didn't.
        * bindings/js/JSEventListener.h:

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::markChildren):
        (WebCore::JSMessagePort::markChildren):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::markChildren):
        * bindings/js/JSAbstractWorkerCustom.cpp:
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        * bindings/js/JSDedicatedWorkerContextCustom.cpp:
        * bindings/js/JSEventSourceCustom.cpp:
        * bindings/js/JSMessagePortCustom.cpp:
        * bindings/js/JSSharedWorkerContextCustom.cpp: Removed.
        * bindings/js/JSWebSocketCustom.cpp:
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::markChildren):
        * bindings/js/JSWorkerCustom.cpp:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::markChildren):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::markChildren): EventListener marking is
        now autogenerated. Classes that still have custom mark functions for other
        reasons now call a shared EventTarget API to mark their EventListeners.

        * bindings/objc/ObjCEventListener.h:
        * bindings/objc/ObjCEventListener.mm:
        (WebCore::ObjCEventListener::handleEvent): Bye bye isWindowEvent.

        * bindings/scripts/CodeGeneratorJS.pm: Autogeneration support for
        marking and invalidating event listeners.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::willRemoveChild):
        (WebCore::ContainerNode::appendChild):
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):
        * dom/Document.cpp:
        (WebCore::Document::removeAllEventListeners):
        (WebCore::Document::implicitClose):
        (WebCore::Document::setFocusedNode):
        (WebCore::Document::dispatchWindowEvent):
        (WebCore::Document::dispatchWindowLoadEvent):
        (WebCore::Document::finishedParsing):
        * dom/Document.h: Use dispatchEvent directly.

        * dom/Element.h: Moved a few event listener attributes down from Node,
        since they don't apply to all Nodes, only Elements.

        * dom/EventListener.h: Removed isWindowEvent parameter.

        * dom/EventNames.h: Added the "display" event name, so it works correctly
        with attribute macros, and for performance.

        * dom/EventTarget.cpp:
        (WebCore::forbidEventDispatch):
        (WebCore::allowEventDispatch):
        (WebCore::eventDispatchForbidden): Made this code (embarrasingly) thread
        safe, since it's now called on multiple threads. (Currently, we only forbid
        event dispatch on the main thread. If we ever want to forbid event dispatch
        on secondary threads, we can improve it then.)

        (WebCore::EventTarget::addEventListener):
        (WebCore::EventTarget::removeEventListener):
        (WebCore::EventTarget::setAttributeEventListener):
        (WebCore::EventTarget::getAttributeEventListener):
        (WebCore::EventTarget::clearAttributeEventListener):
        (WebCore::EventTarget::dispatchEvent):
        (WebCore::EventTarget::fireEventListeners):
        (WebCore::EventTarget::getEventListeners):
        (WebCore::EventTarget::removeAllEventListeners):
        * dom/EventTarget.h:
        (WebCore::FiringEventEndIterator::FiringEventEndIterator):
        (WebCore::EventTarget::ref):
        (WebCore::EventTarget::deref):
        (WebCore::EventTarget::markEventListeners):
        (WebCore::EventTarget::invalidateEventListeners):
        (WebCore::EventTarget::isFiringEventListeners):
        (WebCore::EventTarget::hasEventListeners): The ONE TRUE IMPLEMENTATION of
        EventTarget APIs, crafted from an amalgam of all the different versions
        we used to have. The most significant change here is that we no longer
        make a copy of an EventListener vector before firing the events in the
        vector -- instead, we use a reference to the original vector, along with
        a notification mechanism for the unlikely case when an EventListener is
        removed from the vector. This substantially reduces malloc, copying, and
        refcount overhead, and complexity.

        * dom/InputElement.cpp:
        (WebCore::InputElement::setValueFromRenderer):
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::create): Use dispatchEvent directly.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::eventTargetData):
        (WebCore::MessagePort::ensureEventTargetData):
        * dom/MessagePort.h:
        (WebCore::MessagePort::setOnmessage):
        (WebCore::MessagePort::onmessage):
        * dom/MessagePort.idl: Removed custom EventTarget implementation.

        * dom/MutationEvent.h:
        (WebCore::MutationEvent::create): Added some default values so callers
        can construct MutationEvents more easily, without calling a custom dispatch
        function.

        * dom/Node.cpp:
        (WebCore::Node::addEventListener):
        (WebCore::Node::removeEventListener):
        (WebCore::Node::eventTargetData):
        (WebCore::Node::ensureEventTargetData):
        (WebCore::Node::handleLocalEvents):
        (WebCore::Node::dispatchEvent):
        (WebCore::Node::dispatchGenericEvent):
        (WebCore::Node::dispatchSubtreeModifiedEvent):
        (WebCore::Node::dispatchUIEvent):
        (WebCore::Node::dispatchKeyEvent):
        (WebCore::Node::dispatchMouseEvent):
        (WebCore::Node::dispatchWheelEvent):
        (WebCore::Node::dispatchFocusEvent):
        (WebCore::Node::dispatchBlurEvent):
        * dom/Node.h:
        (WebCore::Node::preDispatchEventHandler):
        (WebCore::Node::postDispatchEventHandler):
        * dom/Node.idl:
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::eventTargetData):
        (WebCore::NodeRareData::ensureEventTargetData): Use the shared EventTarget
        interface, and call dispatchEvent directly instead of custom dispatchXXXEvent
        functions that just forwarded to dispatchEvent.

        * dom/RegisteredEventListener.cpp:
        * dom/RegisteredEventListener.h:
        (WebCore::RegisteredEventListener::RegisteredEventListener):
        (WebCore::operator==): This is just a simple struct now, since we no longer
        do a complicated copy / refCount / isRemoved dance just to honor the rule
        that an EventListener can be removed during event dispatch.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore): Removed another custom dispatchEvent.

        * html/HTMLBodyElement.cpp:
        * html/HTMLBodyElement.h: Use the shared EventTarget API.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::dispatchFormControlChangeEvent):
        (WebCore::HTMLFormControlElement::checkValidity):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::handleLocalEvents):
        (WebCore::HTMLFormElement::prepareSubmit):
        (WebCore::HTMLFormElement::reset):
        * html/HTMLFormElement.h: Use the standard dispatchEvent API.

        * html/HTMLFrameSetElement.cpp:
        * html/HTMLFrameSetElement.h: Use the shared EventTarget API.

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::onSearch):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadInternal):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::dispatchLoadEvent):
        (WebCore::HTMLScriptElement::dispatchErrorEvent):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::errorEventTimerFired):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::notifyFinished): Use the standard dispatchEvent API.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::handleEvent):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::handleEvent):
        * inspector/InspectorDOMStorageResource.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::logCanCacheFrameDecision):
        (WebCore::HashChangeEventTask::performTask):
        (WebCore::FrameLoader::pageHidden): No more isWindowEvent.

        * loader/ImageDocument.cpp:
        (WebCore::ImageEventListener::handleEvent):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::CallCacheListenerTask::performTask):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::notifyDOMApplicationCache):
        * loader/appcache/ApplicationCacheHost.h:
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::eventTargetData):
        (WebCore::DOMApplicationCache::ensureEventTargetData):
        * loader/appcache/DOMApplicationCache.h:
        * loader/appcache/DOMApplicationCache.idl: Switched to the standard
        EventTarget API. As a part of this, I switched this class from using a
        custom internal event name enumeration to using the standard EventNames.

        * notifications/Notification.cpp:
        (WebCore::Notification::eventTargetData):
        (WebCore::Notification::ensureEventTargetData):
        * notifications/Notification.h:
        (WebCore::Notification::scriptExecutionContext):
        * notifications/Notification.idl: Switched to the standard EventTarget API.

        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::event):
        (WebCore::windowsWithUnloadEventListeners):
        (WebCore::windowsWithBeforeUnloadEventListeners):
        (WebCore::allowsBeforeUnloadListeners):
        (WebCore::DOMWindow::dispatchAllPendingBeforeUnloadEvents):
        (WebCore::DOMWindow::pendingUnloadEventListeners):
        (WebCore::DOMWindow::dispatchAllPendingUnloadEvents): Changed the "pending"
        unload / beforeunload listener tracker just to track which windows had
        such listeners, instead of actually keeping a copy of the listeners. Now,
        this code can use the standard EventTarget API.

        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::postMessageTimerFired):
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::dispatchLoadEvent):
        (WebCore::DOMWindow::dispatchEvent):
        (WebCore::DOMWindow::removeAllEventListeners):
        (WebCore::DOMWindow::captureEvents):
        (WebCore::DOMWindow::releaseEvents):
        (WebCore::DOMWindow::eventTargetData):
        (WebCore::DOMWindow::ensureEventTargetData):
        * page/DOMWindow.h:
        * page/DOMWindow.idl: Use the standard EventTarget APIs.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::canMouseDownStartSelect):
        (WebCore::EventHandler::canMouseDragExtendSelect):
        (WebCore::EventHandler::sendResizeEvent):
        (WebCore::EventHandler::sendScrollEvent): Use dispatchEvent directly.

        * page/EventSource.cpp:
        (WebCore::EventSource::endRequest):
        (WebCore::EventSource::didReceiveResponse):
        (WebCore::EventSource::parseEventStreamLine):
        (WebCore::EventSource::stop):
        (WebCore::EventSource::createMessageEvent):
        (WebCore::EventSource::eventTargetData):
        (WebCore::EventSource::ensureEventTargetData):
        * page/EventSource.h:
        * page/EventSource.idl: Use the standard EventTarget APIs.

        * page/FocusController.cpp:
        (WebCore::dispatchEventsOnWindowAndFocusedNode):
        (WebCore::FocusController::setFocusedFrame):
        * page/Frame.cpp:
        (WebCore::Frame::shouldClose):
        * page/Frame.h:
        * page/Page.cpp:
        (WebCore::networkStateChanged):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::valueChanged):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::selectionChanged):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::subtreeHasChanged): Use dispatchEvent.

        * svg/SVGElement.cpp:
        (WebCore::hasLoadListener): Rewritten for new EventTarget API.

        * svg/SVGElementInstance.cpp:
        (WebCore::dummyEventTargetData):
        (WebCore::SVGElementInstance::addEventListener):
        (WebCore::SVGElementInstance::removeEventListener):
        (WebCore::SVGElementInstance::removeAllEventListeners):
        (WebCore::SVGElementInstance::dispatchEvent):
        (WebCore::SVGElementInstance::eventTargetData):
        (WebCore::SVGElementInstance::ensureEventTargetData): Use the EventTarget API.

        * svg/SVGElementInstance.h:
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::dispatchErrorEvent): Use dispatchEvent directly.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::transferEventListenersToShadowTree): Updated for
        new EventTarget API.

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::ConditionEventListener::handleEvent): No more isWindowEvent.

        * websockets/WebSocket.cpp:
        (WebCore::ProcessWebSocketEventTask::create):
        (WebCore::ProcessWebSocketEventTask::performTask):
        (WebCore::ProcessWebSocketEventTask::ProcessWebSocketEventTask):
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didReceiveMessage):
        (WebCore::WebSocket::didClose):
        (WebCore::WebSocket::eventTargetData):
        (WebCore::WebSocket::ensureEventTargetData):
        * websockets/WebSocket.h:
        * websockets/WebSocket.idl:
        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::eventTargetData):
        (WebCore::AbstractWorker::ensureEventTargetData):
        * workers/AbstractWorker.h:
        * workers/AbstractWorker.idl:
        * workers/DedicatedWorkerContext.cpp:
        * workers/DedicatedWorkerContext.h:
        * workers/DedicatedWorkerContext.idl:
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerConnectTask::performTask):
        (WebCore::SharedWorkerScriptLoader::load):
        (WebCore::SharedWorkerScriptLoader::notifyFinished):
        * workers/SharedWorker.idl:
        * workers/SharedWorkerContext.cpp:
        (WebCore::createConnectEvent):
        * workers/SharedWorkerContext.h:
        * workers/SharedWorkerContext.idl:
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):
        * workers/Worker.h:
        * workers/Worker.idl:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::eventTargetData):
        (WebCore::WorkerContext::ensureEventTargetData):
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerContextTask::performTask):
        (WebCore::MessageWorkerTask::performTask):
        (WebCore::WorkerExceptionTask::performTask):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::networkError):
        (WebCore::XMLHttpRequest::abortError):
        (WebCore::XMLHttpRequest::didSendData):
        (WebCore::XMLHttpRequest::didReceiveData):
        (WebCore::XMLHttpRequest::eventTargetData):
        (WebCore::XMLHttpRequest::ensureEventTargetData):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestProgressEvent.h:
        (WebCore::XMLHttpRequestProgressEvent::create):
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::eventTargetData):
        (WebCore::XMLHttpRequestUpload::ensureEventTargetData):
        * xml/XMLHttpRequestUpload.h:
        * xml/XMLHttpRequestUpload.idl: Use new EventTarget API.

2009-09-23  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        - Support for maxLength of <textarea>
        - Move numGraphemeClusters() and numCharactersInGraphemeClusters() from InputElement to String.
        https://bugs.webkit.org/show_bug.cgi?id=29292

        Test: fast/forms/textarea-maxlength.html

        * dom/InputElement.cpp:
        (WebCore::InputElement::sanitizeUserInputValue):
        (WebCore::InputElement::handleBeforeTextInsertedEvent):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::defaultEventHandler):
        (WebCore::HTMLTextAreaElement::handleBeforeTextInsertedEvent):
        (WebCore::HTMLTextAreaElement::sanitizeUserInputValue):
        (WebCore::HTMLTextAreaElement::maxLength):
        (WebCore::HTMLTextAreaElement::setMaxLength):
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextAreaElement.idl:
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        (WebCore::String::numGraphemeClusters):
        (WebCore::String::numCharactersInGraphemeClusters):

2009-09-23  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Xan Lopez.

        [GTK] REGRESSION: BitmapImage::getGdkPixbuf fails for non-square images
        https://bugs.webkit.org/show_bug.cgi?id=29654

        Give GDK_Backspace key events the proper text properties.

        Instead of adding new tests, this change removes existing tests
        from Gtk's skipped list.

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::keyIdentifierForGdkKeyCode):
        (WebCore::singleCharacterString):

2009-09-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Barth.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=26989
        Should allow navigation of top-level openers
        <rdar://problem/7034025>

        Allow navigation of cross-origin window.opener if it is top-level frame.

        Test: http/tests/security/frameNavigation/cross-origin-opener.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldAllowNavigation):

2009-09-23  Marshall Culpepper  <mculpepper@appcelerator.com>

        Reviewed by Eric Seidel.

        Added $(WebKitLibrariesDir)/include/cairo so cairo.h is found by
        default when the necessary dependencies are extracted into the
        WebKitLibrariesDir.
        https://bugs.webkit.org/show_bug.cgi?id=29661

        * WebCore.vcproj/WebCoreCairo.vsprops:

2009-09-23  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Crash when website does a history.back() followed by an alert()
        https://bugs.webkit.org/show_bug.cgi?id=29686
        rdar://problem/6984996

        When loading is deferred, we need to defer timer-based loads
        too, not just networking-driven loads. Otherwise we can get
        syncronouse navigation while running a script, which leads to
        crashes and other badness.

        This patch includes a manual test; an automated test may be
        possible some time in the future.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv): Use scheduleLocationChange
        instead of scheduleHTTPRedirection to implement the navigation
        needed for x-frame-options.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader): Updated for data members with
        new names and new data members.
        (WebCore::FrameLoader::setDefersLoading): When turning deferral
        off, call startRedirectionTimer and startCheckCompleteTimer, since
        either of them might have been fired and ignored while defersLoading
        was true.
        (WebCore::FrameLoader::clear): Updated for replacement of the
        m_checkCompletedTimer and m_checkLoadCompleteTimer timers.
        (WebCore::FrameLoader::allAncestorsAreComplete): Added.
        (WebCore::FrameLoader::checkCompleted): Added code to set
        m_shouldCallCheckCompleted to false. Changed code that calls
        startRedirectionTimer to call it unconditionally, since that
        function now knows when to do work and doesn't expect callers
        to handle that any more.
        (WebCore::FrameLoader::checkTimerFired): Added. Replaces the old
        timer fired callbacks. Calls checkCompleted and checkLoadComplete
        as appropriate, but not when defersLoading is true.
        (WebCore::FrameLoader::startCheckCompleteTimer): Added. Replaces
        the two different calls to start timers before. Only starts the
        timers if they are needed.
        (WebCore::FrameLoader::scheduleCheckCompleted): Changed to call
        startCheckCompleteTimer after setting boolean.
        (WebCore::FrameLoader::scheduleCheckLoadComplete): Ditto.
        (WebCore::FrameLoader::scheduleHistoryNavigation): Removed
        canGoBackOrForward check. The logic works more naturally when
        we don't do anything until the timer fires.
        (WebCore::FrameLoader::redirectionTimerFired): Do nothing if
        defersLoading is true. Also moved canGoBackOrForward check here.
        (WebCore::FrameLoader::scheduleRedirection): Changed code that
        calls startRedirectionTimer to do so unconditionally. That
        function now handles the rules about when to start the timer
        rather than expecting the caller to do so.
        (WebCore::FrameLoader::startRedirectionTimer): Added code to
        handle the case where there is no redirection scheduled,
        where the timer is already active, or where this is a classic
        redirection and there is an ancestor that has not yet completed
        loading.
        (WebCore::FrameLoader::completed): Call startRedirectionTimer
        here directly instead of calling a cover named parentCompleted.
        Hooray! One less function in the giant FrameLoader class!
        (WebCore::FrameLoader::checkLoadComplete): Added code to set
        m_shouldCallCheckLoadComplete to false.

        * loader/FrameLoader.h: Replaced the two functions
        checkCompletedTimerFired and checkLoadCompleteTimerFired with
        one function, checkTimerFired. Removed the parentCompleted
        function. Added the startCheckCompleteTimer and
        allAncestorsAreComplete functions. Replaced the
        m_checkCompletedTimer and m_checkLoadCompleteTimer data
        members with m_checkTimer, m_shouldCallCheckCompleted, and
        m_shouldCallCheckLoadComplete.

        * manual-tests/go-back-after-alert.html: Added.
        * manual-tests/resources/alert-and-go-back.html: Added.

2009-09-23  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/29660> Move "Generate 64-bit Export File" build phase script into DerivedSources.make

        Reviewed by Mark Rowe.

        The "Generate 64-bit Export File" build phase script generated
        the WebCore.LP64.exp export file used to link 64-bit WebCore.
        Instead of having a separate build phase script, move its
        generation into DerivedSources.make where WebCore.exp is
        generated.

        * DerivedSources.make: Added a rule to make WebCore.LP64.exp.
        Added code to append WebCore.PluginHostProcess.exp to
        $(WEBCORE_EXPORT_DEPENDENCIES) when WTF_USE_PLUGIN_HOST_PROCESS
        is set to 1.
        * WebCore.PluginHostProcess.exp: Renamed from WebCore/WebCore.LP64.exp.
        * WebCore.xcodeproj/project.pbxproj: Removed the "Generate
        64-bit Export File" build phase script. Renamed WebCore.LP64.exp
        to WebCore.PluginHostProcess.exp.

2009-09-23  Peter Kasting  <pkasting@google.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=29694
        [Chromium] Eliminate dependency on gfx::Rect from ImageSkia.

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::drawResampledBitmap):

2009-09-22  Timothy Hatcher  <timothy@apple.com>

        Prevent scrolling multiple elements during latched wheel events.

        Reviewed by Anders Carlsson.

        * page/EventHandler.cpp:
        (WebCore::scrollAndAcceptEvent):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleWheelEvent):
        * page/EventHandler.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scroll):
        * rendering/RenderBox.h:

2009-09-23  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=29523
        
        Fixes an issue where a JavaScript URL that was URL-encoded twice can bypass the
        XSSAuditor.
        
        The method FrameLoader::executeIfJavaScriptURL decodes the URL escape 
        sequences in a JavaScript URL before it is eventually passed to the XSSAuditor.
        Because the XSSAuditor also decodes the URL escape sequences as part of its
        canonicalization, the double decoding of a JavaScript URL would
        not match the canonicalization of the input parameters.

        Tests: http/tests/security/xssAuditor/iframe-javascript-url-url-encoded.html
               http/tests/security/xssAuditor/javascript-link-url-encoded.html

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate): Moved call to 
        XSSAuditor::canEvaluateJavaScriptURL into FrameLoader::executeIfJavaScriptURL.
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluate): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::executeIfJavaScriptURL): Modified to call 
        XSSAuditor::canEvaluateJavaScriptURL on the JavaScript URL before it is
        decoded.

2009-09-22  Dave Hyatt  <hyatt@apple.com>

        Reviewed by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=29657
        Columns don't break properly in positioned elements with a fixed height.  Make sure that
        a block is still considered to have columns even when the column count is 1 if the column
        width is non-auto.
    
        Added fast/multicol/positioned-with-constrained-height.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::setDesiredColumnCountAndWidth):

2009-09-23  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber-stamped by Simon Hausmann.

        Add a null check for the Document*. In the mirror benchmarking
        application a crash from a call from JavaScript was observed.

        I was not able to come up with a test case for this issue.

        * platform/qt/CookieJarQt.cpp:
        (WebCore::cookieJar):

2009-09-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fix the Qt/Windows build, after the introduction of
        the page client.

        * plugins/win/PluginViewWin.cpp:
        (windowHandleForPageClient):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::platformStart):

2009-09-23  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        [GTK] media tests failing after their rework
        https://bugs.webkit.org/show_bug.cgi?id=29532

        Correctly advertise the mime types used by the common formats used
        in the tests.

        Tests that regressed, and will pass again:

           media/video-canvas-source.html
           media/video-controls.html
           media/video-currentTime-set2.html
           media/video-dom-autoplay.html
           media/video-dom-src.html
           media/video-error-abort.html
           media/video-load-networkState.html
           media/video-load-readyState.html
           media/video-muted.html
           media/video-no-autoplay.html
           media/video-pause-empty-events.html
           media/video-play-empty-events.html
           media/video-seekable.html
           media/video-seeking.html
           media/video-size.html
           media/video-source-type-params.html
           media/video-source-type.html
           media/video-source.html
           media/video-src-change.html
           media/video-src-invalid-remove.html
           media/video-src-remove.html
           media/video-src-set.html
           media/video-src-source.html
           media/video-src.html
           media/video-timeupdate-during-playback.html
           media/video-volume.html

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache):

2009-09-22  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by Eric Seidel.

        Fix the crash problem with absolte positioned children in foreignobject
        htts://bugs.webkit.org/show_bug.cgi?id=26342

        Test: svg/custom/foreignobject-crash-with-absolute-positioned-children.svg

        * rendering/RenderForeignObject.h:
        (WebCore::RenderForeignObject::isSVGForeignObject):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGForeignObject):

2009-09-22  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        SharedWorkers "name" attribute is now optional.
        https://bugs.webkit.org/show_bug.cgi?id=28897

        Test: fast/workers/shared-worker-name.html

        * bindings/js/JSSharedWorkerConstructor.cpp:
        (WebCore::constructSharedWorker):
        Default 'name' attribute to empty string if it is not provided.
        * bindings/v8/custom/V8SharedWorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        Default 'name' attribute to empty string if it is not provided.
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::matches):
        Now matches URLs if names are empty strings.
        (WebCore::DefaultSharedWorkerRepository::getProxy):
        Pass URL in to SharedWorkerProxy::matches().

2009-09-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, another build fix.

        [Chromium] Add another missing include.
        https://bugs.webkit.org/show_bug.cgi?id=29536

        * inspector/InspectorController.cpp: Added DOMWindow.h include.

2009-09-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Add missing include.
        https://bugs.webkit.org/show_bug.cgi?id=29536

        * inspector/InspectorDOMStorageResource.cpp: Added DOMWindow.h include.

2009-09-22  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Tighten up the ScheduledRedirection machinery to prepare for a bug fix
        https://bugs.webkit.org/show_bug.cgi?id=29663

        * loader/FrameLoader.cpp:
        (WebCore::ScheduledRedirection::ScheduledRedirection): Added a boolean,
        initialized to false, to keep track if the redirection has been
        communicated to the client.
        (WebCore::FrameLoader::stopLoading): Tweaked a comment.
        (WebCore::FrameLoader::cancelRedirection): Removed code to clear
        m_scheduledRedirection.clear since stopRedirectionTimer does that now.
        (WebCore::FrameLoader::allChildrenAreComplete): Added.
        (WebCore::FrameLoader::checkCompleted): Use allChildrenAreComplete
        function for clarity.
        (WebCore::FrameLoader::checkCallImplicitClose): Ditto.
        (WebCore::FrameLoader::scheduleRedirection): Changed to take a PassOwnPtr.
        (WebCore::FrameLoader::startRedirectionTimer): Added code to set the
        toldClient flag and not call clientRedirected a second time if it is set.
        (WebCore::FrameLoader::stopRedirectionTimer): Changed so this can be safely
        called multiple times and it will call clientRedirectCancelledOrFinished
        only once.

        * loader/FrameLoader.h: Changed scheduleRedirection to be a PassOwnPtr.
        Added allChildrenAreComplete function.

2009-09-22  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Migrate Databases tab to InjectedScript /
        serialized interaction.

        DOMStorage interaction is now serialized into JSON messages
        and doesn't require quarantined objects.
        
        https://bugs.webkit.org/show_bug.cgi?id=28873

        * dom/EventListener.h:
        (WebCore::EventListener::):
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::selectDOMStorage):
        (WebCore::InspectorBackend::getDOMStorageEntries):
        (WebCore::InspectorBackend::setDOMStorageItem):
        (WebCore::InspectorBackend::removeDOMStorageItem):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::selectDOMStorage):
        (WebCore::InspectorController::getDOMStorageEntries):
        (WebCore::InspectorController::setDOMStorageItem):
        (WebCore::InspectorController::removeDOMStorageItem):
        (WebCore::InspectorController::getDOMStorageResourceForId):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::InspectorDOMStorageResource):
        (WebCore::InspectorDOMStorageResource::bind):
        (WebCore::InspectorDOMStorageResource::unbind):
        (WebCore::InspectorDOMStorageResource::startReportingChangesToFrontend):
        (WebCore::InspectorDOMStorageResource::handleEvent):
        (WebCore::InspectorDOMStorageResource::operator==):
        * inspector/InspectorDOMStorageResource.h:
        (WebCore::InspectorDOMStorageResource::cast):
        (WebCore::InspectorDOMStorageResource::id):
        (WebCore::InspectorDOMStorageResource::domStorage):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::selectDOMStorage):
        (WebCore::InspectorFrontend::didGetDOMStorageEntries):
        (WebCore::InspectorFrontend::didSetDOMStorageItem):
        (WebCore::InspectorFrontend::didRemoveDOMStorageItem):
        (WebCore::InspectorFrontend::updateDOMStorage):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorage):
        (WebInspector.DOMStorage.prototype.get id):
        (WebInspector.DOMStorage.prototype.get domStorage):
        (WebInspector.DOMStorage.prototype.get isLocalStorage):
        (WebInspector.DOMStorage.prototype.getEntriesAsync):
        (WebInspector.DOMStorage.prototype.setItemAsync):
        (WebInspector.DOMStorage.prototype.removeItemAsync):
        * inspector/front-end/DOMStorageDataGrid.js:
        (WebInspector.DOMStorageDataGrid):
        (WebInspector.DOMStorageDataGrid.prototype._startEditingColumnOfDataGridNode):
        (WebInspector.DOMStorageDataGrid.prototype._startEditing):
        (WebInspector.DOMStorageDataGrid.prototype._editingCommitted):
        (WebInspector.DOMStorageDataGrid.prototype._editingCancelled):
        (WebInspector.DOMStorageDataGrid.prototype.deleteSelectedRow):
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype.update):
        (WebInspector.DOMStorageItemsView.prototype._showDOMStorageEntries):
        (WebInspector.DOMStorageItemsView.prototype._dataGridForDOMStorageEntries):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.show):
        (WebInspector.StoragePanel.prototype.reset):
        (WebInspector.StoragePanel.prototype.selectDOMStorage):
        (WebInspector.StoragePanel.prototype.updateDOMStorage):
        (WebInspector.StoragePanel.prototype._domStorageForId):
        * inspector/front-end/inspector.js:
        (WebInspector.addDOMStorage):
        (WebInspector.updateDOMStorage):

2009-09-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Fix for XMLHttpRequest.abort() should destroy the response text.
        https://bugs.webkit.org/show_bug.cgi?id=29658
        <rdar://problem/5301430>

        Clearing the response text after calling XMLHttpRequest.abort() is necessary
        per spec and matches Firefox. It is also a potential memory win.

        Test: http/tests/xmlhttprequest/abort-should-destroy-responseText.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::abort): Clear the response text making sure to
        keep the actual ResourceReponse around so that the response status and response
        status text are kept around.

2009-09-22  Dimitri Glazkov  <dglazkov@chromium.org>

        No review, rolling out r48639.
        http://trac.webkit.org/changeset/48639

        * bindings/v8/V8GCController.cpp:
        (WebCore::ObjectGrouperVisitor::visitDOMWrapper):

2009-09-22  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Changing the transaction coordinator to (re-)allow multiple read
        transactions on the same database to run concurrently (without
        risking a deadlock this time).

        https://bugs.webkit.org/show_bug.cgi?id=29115

        Tests: storage/read-and-write-transactions-dont-run-together.html
               storage/read-transactions-running-concurrently.html

        * storage/SQLTransaction.h:
        (WebCore::SQLTransaction::isReadOnly): Returns the type of the
        transaction.
        * storage/SQLTransactionCoordinator.cpp:
        (WebCore::SQLTransactionCoordinator::acquireLock): Changed to
        allow multiple read transactions on the same DB to run
        concurrently.
        (WebCore::SQLTransactionCoordinator::releaseLock): Changed to
        allow multiple read transactions on the same DB to run
        concurrently.
        (WebCore::SQLTransactionCoordinator::shutdown): Renamed the map.
        * storage/SQLTransactionCoordinator.h:

2009-09-22  Peter Kasting  <pkasting@google.com>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=29652
        Support true system colors for CSS system colors in Chromium/Win.

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::cssValueIdToSysColorIndex):
        (WebCore::RenderThemeChromiumWin::systemColor):
        * rendering/RenderThemeChromiumWin.h:

2009-09-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for <rdar://problem/6925121> SAP: Wrong width calculation in 
        table with fixed layout
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=29501

        New Tests:
        * fast/table/fixed-table-with-percent-inside-percent-table.html: Added.
        * fast/table/fixed-table-with-percent-width-inside-auto-table.html: Added.
        * fast/table/fixed-table-with-percent-width-inside-div.html: Added.
        * fast/table/fixed-table-with-percent-width-inside-extra-large-div.html: Added.
        * fast/table/fixed-table-with-percent-width-inside-fixed-width-table.html: Added.
        * fast/table/fixed-table-with-small-percent-width.html: Added.

        This new quirk is very similar to an existing one that was 
        implemented in revision 4316.
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcPrefWidths):

2009-09-22  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        List HTTP status code with response headers in resources tab of Web Inspector.
        http://webkit.org/b/19945

        This patch adds a new top level list in the resources tab, HTTP Information, that 
        for now, contains the Request Method (GET, POST, etc.) and the Status Code (200, 404, etc.).
        Additionally, it adds a colored dot next to the requested URL to show the status 
        (green for success, orange for redirect, red for error).

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView):
        * inspector/front-end/Images/errorRedDot.png: Added.
        * inspector/front-end/Images/successGreenDot.png: Added.
        * inspector/front-end/Images/warningOrangeDot.png: Added.
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.StatusTextForCode):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):
        (WebInspector.ResourceView.prototype._refreshURL):
        (WebInspector.ResourceView.prototype._refreshHTTPInformation):
        * inspector/front-end/inspector.css:

2009-09-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Back list isn't properly updated for fragment changes after a redirect.
        <rdar://problem/6142803> and https://bugs.webkit.org/show_bug.cgi?id=20355

        Test: fast/loader/fragment-after-redirect-gets-back-entry.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL): Properly reset the policy FrameLoadType before
          consulting the policy delegate for fragment scrolling.

2009-09-22  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

        Drop down selects get stuck in the non-visible state and cannot be opened.
        https://bugs.webkit.org/show_bug.cgi?id=29645

        All paths that lead to hiding the popup menu must call popupDidHide on
        the PopupMenuClient.  This change makes it so by moving all of the
        hiding logic to PopupListBox::hidePopup.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::hidePopup):
        (WebCore::PopupListBox::hidePopup):
        * platform/chromium/PopupMenuChromium.h:

2009-09-22  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        WebInspector.log() function not protected if console not yet created
        https://bugs.webkit.org/show_bug.cgi?id=29336
        
        No new tests.  Only affects Web Inspector developers adding logging
        to their code during development.

        * inspector/front-end/inspector.js:
        (WebInspector.log.isLogAvailable):
        (WebInspector.log.flushQueue):
        (WebInspector.log.flushQueueIfAvailable):
        (WebInspector.log.logMessage):
        (WebInspector.log):

2009-09-22  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by David Levin.

        Ported chromium.org's webcore.gyp for the webkit chromium port.

        https://bugs.webkit.org/show_bug.cgi?id=29617

        * WebCore.gyp/WebCore.gyp: Added.

2009-09-22  Christian Plesner Hansen  <christian.plesner.hansen@gmail.com>

        Reviewed by Adam Barth.

        [v8] Don't keep clean wrappers artificially alive        
        We currently keep all DOM node wrappers alive, even when there are
        no more references to them from JS, in case they have properties
        that we need to keep around if new JS references are created.
        This changes the policy to only keep wrappers artificially alive
        if they have changed since they were created. Empty wrappers are
        discarded and recreated as needed.
        https://bugs.webkit.org/show_bug.cgi?id=29330

        * bindings/v8/V8GCController.cpp:
        (WebCore::ObjectGrouperVisitor::visitDOMWrapper):

2009-09-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: console.count and console.timeEnd
        crash when inspector is opened.

        https://bugs.webkit.org/show_bug.cgi?id=29632

        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addMessageToConsole):

2009-09-22  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Fix bogus build fix I did last night.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):

2009-09-22  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        NPAPI/Mac: Don't paint plugins if we don't have a CGContextRef

        * plugins/mac/PluginViewMac.cpp:

2009-09-22  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reivewed by Simon Hausmann.

        Fix the Qt/Mac build after r48604 (Implement new QWebPageClient class)

        There's no QWidget::x11Info() on Mac, and setPlatformPluginWidget()
        takes a QWidget*, not a QWebPageClient*

        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::platformStart):

2009-09-21  Adam Barth  <abarth@webkit.org>

        Attempted fix for the V8 build.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):

2009-09-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Don't re-enter JavaScript after performing access checks
        https://bugs.webkit.org/show_bug.cgi?id=29531

        Moved the access check slightly later in this functions to avoid
        re-entering the JavaScript interpreter (typically via toString)
        after performing the access check.

        I can't really think of a meaningful test for this change.  It's more
        security hygiene.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::JSDOMWindow::open):
        (WebCore::JSDOMWindow::showModalDialog):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::setHref):
        (WebCore::JSLocation::replace):
        (WebCore::JSLocation::assign):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):
        (WebCore::if):
        (CALLBACK_FUNC_DECL):
        (V8Custom::WindowSetLocation):
        (V8Custom::ClearTimeoutImpl):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):

2009-09-21  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Eric Seidel.

        Make all write transaction start with a BEGIN IMMEDIATE command
        instead of BEGIN.

        We cannot test this change in a layout test, because in order to
        test it we need to spawn two database threads and execute
        transaction steps on these two threads in a very specific order,
        which seems impossible to do when they share the same main thread
        (as they would in a layout test). The SQLite docs and the case
        described in the bug though should be enough proof that we do have
        a problem here and that this patch will fix it.

        Relevant SQLite documentation:
        http://www.sqlite.org/lang_transaction.html
        http://www.sqlite.org/lockingv3.html#locking

        https://bugs.webkit.org/show_bug.cgi?id=29218

        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::SQLiteTransaction): Added a readOnly
        parameter.
        (WebCore::SQLiteTransaction::begin): Changed to BEGIN IMMEDIATE
        for write transactions.
        * platform/sql/SQLiteTransaction.h:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::openTransactionAndPreflight): Passing
        the read-only flag to the SQLiteTransaction instance.

2009-09-21  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Mark Rowe.

        * DerivedSources.make: Fix the Xcode build on SnowLeopard.

2009-09-15  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Darin Fisher.

        Prevent sleeps in unload handlers.
        https://bugs.webkit.org/show_bug.cgi?id=29193

        Test: fast/dom/Window/slow_unload_handler.html

        * WebCore.gypi:
        * bindings/v8/DateExtension.cpp: Added.
        (WebCore::DateExtension::DateExtension):
        (WebCore::DateExtension::get):
        (WebCore::DateExtension::setAllowSleep):
        (WebCore::DateExtension::GetNativeFunction):
        (WebCore::DateExtension::weakCallback):
        (WebCore::DateExtension::GiveEnableSleepDetectionFunction):
        (WebCore::DateExtension::OnSleepDetected):
        * bindings/v8/DateExtension.h: Added.
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::createNewContext):
        (WebCore::V8Proxy::registerExtensionWithV8):
        (WebCore::V8Proxy::registeredExtensionWithV8):
        * bindings/v8/V8Proxy.h:

2009-09-21  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        [V8] Run-time exception in onmessage handler is not forwarded to the
        worker object.
        https://bugs.webkit.org/show_bug.cgi?id=28980

        The previous fix was partially reverted due to a reliability build break
        in chromium. The break happens when an exception is thrown without
        setting a message. We need to check for this scenario and handle it.

        Tested by worker-close.html.

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::reportException):

2009-09-21  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Simon Fraser & Sam Weinig.

        Add ENABLE(ORIENTATION_EVENTS)
        https://bugs.webkit.org/show_bug.cgi?id=29508
        
        See documentation here:
        http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW16

        * DerivedSources.make: Use new WebCore.OrientationEvents.exp file if ENABLE_ORIENTATION_EVENTS.
        Add ENABLE_ORIENTATION_EVENTS to the new ADDITIONAL_IDL_DEFINES variable that is passed to the IDL
        code generator. This is because ENABLE_ORIENTATION_EVENTS is not in FEATURE_DEFINES.
        * WebCore.OrientationEvents.exp: Added.
        * WebCore.xcodeproj/project.pbxproj: Add WebCore.OrientationEvents.exp.
        * dom/EventNames.h: Add onorientationchange.
        * html/HTMLAttributeNames.in: Ditto.
        * html/HTMLBodyElement.cpp: Handle onorientationchange properly.
        (WebCore::HTMLBodyElement::parseMappedAttribute):
        (WebCore::HTMLBodyElement::onorientationchange):
        (WebCore::HTMLBodyElement::setOnorientationchange):
        * html/HTMLBodyElement.h: Ditto.
        * html/HTMLBodyElement.idl: Ditto.
        * html/HTMLFrameSetElement.cpp: Ditto.
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        (WebCore::HTMLFrameSetElement::onorientationchange):
        (WebCore::HTMLFrameSetElement::setOnorientationchange):
        * html/HTMLFrameSetElement.h: Ditto.
        * html/HTMLFrameSetElement.idl: Ditto.
        * page/DOMWindow.cpp: Ditto.
        (WebCore::DOMWindow::orientation): Calls up the to the Frame for the orientation value.
        (WebCore::DOMWindow::onorientationchange):
        (WebCore::DOMWindow::setOnorientationchange):
        * page/DOMWindow.h: Handle onorientationchange properly.
        * page/DOMWindow.idl: Ditto.
        * page/Frame.cpp: Ditto.
        (WebCore::Frame::Frame):
        (WebCore::Frame::sendOrientationChangeEvent):
        * page/Frame.h: Ditto.
        (WebCore::Frame::orientation):

2009-09-18  Anders Carlsson  <andersca@apple.com>

        Try fixing the build again.
        
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::wndProc):

2009-09-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: completions are always evaluated against
        window (discarding call frames).

        https://bugs.webkit.org/show_bug.cgi?id=29616

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.getCompletions):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.selectedCallFrameId):

2009-09-21  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix for Windows (Cairo) target.

        Add stubs for SocketStream classes added in @r47788, which
        broke the WinCairo build.

        No new tests. (Build failure).

        * WebCore.vcproj/WebCore.vcproj:  Add references to new files
          to Cairo build, exclude from standard Apple build.
        * platform/network/curl/SocketStreamError.h: Added.
        * platform/network/curl/SocketStreamHandle.h: Added.
        * platform/network/curl/SocketStreamHandleCurl.cpp: Added.

2009-09-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Expose InspectorResource fields.

        https://bugs.webkit.org/show_bug.cgi?id=29537

        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::sourceString):
        (WebCore::InspectorResource::resourceData):
        * inspector/InspectorResource.h:
        (WebCore::InspectorResource::requestHeaderFields):
        (WebCore::InspectorResource::responseHeaderFields):
        (WebCore::InspectorResource::responseStatusCode):
        (WebCore::InspectorResource::requestMethod):
        (WebCore::InspectorResource::requestFormData):

2009-09-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: JS error drilling down childless node.
        No need to dispatch double click twice - it is already handled
        in TreeElement.treeElementDoubleClicked.

        https://bugs.webkit.org/show_bug.cgi?id=22144

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline):

2009-09-21  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Implement new QWebPageClient class and let our classes
        QWebViewPrivate and QWebGraphicsItemPrivate inherit from it.

        For Qt, platformPageClient() will now return a class derived from
        the QWebPageClient, so the patch adapts our Qt hooks to go though
        this class and not depend on the QWebView.

        * WebCore.pro:
        * platform/Widget.h:
        * platform/qt/PlatformScreenQt.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::show):
        * platform/qt/QWebPageClient.h: Added.
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::setCursor):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::platformStart):

2009-09-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Evaluating on call frame always returns "undefined".

        https://bugs.webkit.org/show_bug.cgi?id=29613

        * inspector/front-end/InjectedScript.js:
        (InjectedScript.evaluate):
        (InjectedScript._evaluateAndWrap):
        (InjectedScript._evaluateOn):
        (InjectedScript.evaluateInCallFrame):

2009-09-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Exception formatting is broken in console.

        https://bugs.webkit.org/show_bug.cgi?id=29608

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleCommandResult):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.evaluate):
        (InjectedScript.createProxyObject):

2009-09-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Console object formatting is broken.

        https://bugs.webkit.org/show_bug.cgi?id=29607

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype._format):
        * inspector/front-end/ObjectProxy.js:
        (WebInspector.ObjectProxy.wrapPrimitiveValue):

2009-09-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Crash When Logging an Element Before Opening Inspector

        https://bugs.webkit.org/show_bug.cgi?id=29514

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):

2009-09-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Incorrect clipping with accelerated compositing content, and position:fixed
        https://bugs.webkit.org/show_bug.cgi?id=29347
        
        Fix the compositing clipping logic to behave correctly when position:fixed
        elements clip, by using the new backgroundClipRect() method to determine
        when we need to clip, and to compute the clipping layer position.

        Test: compositing/overflow/fixed-position-ancestor-clip.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::clippedByAncestor):

2009-09-21  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Add back in a special case for window.top in the V8 bindings.

        https://bugs.webkit.org/show_bug.cgi?id=29605

        Fixes LayoutTests/fast/dom/Window/window-property-shadowing.html in the Chromium port.

        * bindings/scripts/CodeGeneratorV8.pm: Ensure window.top is not marked as read only, as this breaks the shadowing disabling.

2009-09-21  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Brady Eidson.

        HTMLMediaElement: media file should not reload when page comes out of page cache
        https://bugs.webkit.org/show_bug.cgi?id=29604

        Test: media/restore-from-page-cache.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::userCancelledLoad): Do nothing unless the element
        is still loading. Only fire an 'emptied' event if the readyState is HAVE_NOTHING,
        otherwise set the network state to NETWORK_IDLE.

2009-09-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey "Sean/Shawn/Shaun" Garen.

        Clarify two FIXMEs.

        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):

2009-09-21  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

        Drop down selects fail to close when a value is selected
        https://bugs.webkit.org/show_bug.cgi?id=29582

        Implement PopupListBox::hidePopup, which was previously
        declared but unimplemented.  Removes the declaration of
        showPopup since that method is not implemented.

        PopupListBox::hidePopup takes care of hiding the popup,
        by invoking hidePopup on its parent PopupContainer, and
        then informs the PopupMenuClient that popupDidHide.
        This mimics the old behavior prior to r48370.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::handleKeyEvent):
        (WebCore::PopupListBox::abandon):
        (WebCore::PopupListBox::acceptIndex):
        (WebCore::PopupListBox::hidePopup):

2009-09-21  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Rubber-stamped by Simon Hausmann.

        [Qt] Windows build fix.
        https://bugs.webkit.org/show_bug.cgi?id=29535

        * platform/network/qt/DnsPrefetchHelper.cpp: Missing #include "config.h"  added.

2009-09-21  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed make dist build fix. Missing files.

        * GNUmakefile.am:

2009-09-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        Crash when clicking link in unload handler
        https://bugs.webkit.org/show_bug.cgi?id=29525

        Test that the first navigation always wins when the page tries to start
        a new navigation in an unload handler.

        Tests: fast/loader/unload-form-about-blank.html
               fast/loader/unload-form-post-about-blank.html
               fast/loader/unload-form-post.html
               fast/loader/unload-form.html
               fast/loader/unload-hyperlink.html
               fast/loader/unload-javascript-url.html
               fast/loader/unload-reload.html
               fast/loader/unload-window-location.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):

2009-09-18  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Sometimes crashes when a page is destroyed/loads another URL while playing video
        https://bugs.webkit.org/show_bug.cgi?id=29496

        Protect the video sink object, and destroy it in an idle callback
        to hopefully avoid a race condition that leads to a crash.

        This is already tested by media/video-seekable.html

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::idleUnref):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):

2009-09-19  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed build fix for GTKand a blind one for Qt after r48566.

        * GNUmakefile.am:
        * WebCore.pro:

2009-09-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=29519
        Remove JSNameNodeCollection and just use StaticNodeList

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSNamedNodesCollection.cpp: Removed.
        * bindings/js/JSNamedNodesCollection.h: Removed.

2009-09-19  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=29511
        
        Fixes an issue where script code that contains non-ASCII characters may bypass the 
        XSSAuditor.
        
        Before performing a comparison between the script source code and input parameters, we
        remove all non-ASCII characters, including non-printable ASCII characters from the
        script source code and input parameters.

        Tests: http/tests/security/xssAuditor/img-onerror-non-ASCII-char.html
               http/tests/security/xssAuditor/img-onerror-non-ASCII-char-default-encoding.html
               http/tests/security/xssAuditor/img-onerror-non-ASCII-char2-default-encoding.html
               http/tests/security/xssAuditor/img-onerror-non-ASCII-char2.html

        * page/XSSAuditor.cpp:
        (WebCore::isNonCanonicalCharacter): Modified to remove all non-ASCII characters,
        including non-printable ASCII characters.

2009-09-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Incorrect animation with scale(0) transform (singular matrix)
        https://bugs.webkit.org/show_bug.cgi?id=29465
        
        Make accelerated scale() and translate() animations go through the component animation
        path (rather than just matrix animation) to avoid problems with singular scale matrices,
        and be slightly more efficient.

        Test: compositing/transitions/singular-scale-transition.html

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::getTransformFunctionValue):
        (WebCore::getValueFunctionNameForTransformOperation):

2009-09-19  Alex Milowski  <alex@milowski.com>

        Reviewed by Maciej Stachowiak.

        Adds CSS styling and basic DOM element support for MathML

        * DerivedSources.make:
          Added user stylesheet and tag factory generation

        * WebCore.xcodeproj/project.pbxproj:
          Added new DOM element code

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseAttr):
          Added check for document since stylesheet can be added before there is a document

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
          Added check to add MathML user agent stylesheet

        * css/mathml.css: Added.
          MathML user agent stylesheet

        * dom/Document.cpp:
        (WebCore::Document::createElement):
          Added support for creation of MathML DOM objects

        * dom/Node.h:
        (WebCore::Node::isMathMLElement):
          Added check method for whether the node is a MathML node

        * mathml: Added.
        * mathml/MathMLElement.cpp: Added.
        (WebCore::MathMLElement::MathMLElement):
        (WebCore::MathMLElement::create):
        (WebCore::MathMLElement::createRenderer):
        * mathml/MathMLElement.h: Added.
        (WebCore::MathMLElement::isMathMLElement):
          MathML DOM base class


        * mathml/MathMLInlineContainerElement.cpp: Added.
        (WebCore::MathMLInlineContainerElement::MathMLInlineContainerElement):
        (WebCore::MathMLInlineContainerElement::create):
        (WebCore::MathMLInlineContainerElement::createRenderer):
        * mathml/MathMLInlineContainerElement.h: Added.
          Base class for non-text containers

        * mathml/MathMLMathElement.cpp: Added.
        (WebCore::MathMLMathElement::MathMLMathElement):
        (WebCore::MathMLMathElement::create):
        * mathml/MathMLMathElement.h: Added.
          Root Math element

        * mathml/mathtags.in: Added.
          Element list mappings

        * page/Frame.cpp:
        (WebCore::Frame::Frame):
          Added MathML name initialization
2009-09-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Oliver Hunt.

        Canvas drawn with data URL image raises SECURITY_ERR when toDataUrl() called.
        https://bugs.webkit.org/show_bug.cgi?id=29305

        We need to special-case data URLs when tainting a canvas because we
        treat data URLs has having no security origin, unlike other
        browsers.  The reason we do this is to help sites avoid XSS via data
        URLs, but that consideration doesn't apply to canvas taint.

        Also, we were previously incorrectly taking document.domain state
        into account when tainting canvas.

        Tests: http/tests/security/canvas-remote-read-data-url-image.html
               http/tests/security/canvas-remote-read-data-url-svg-image.html
               http/tests/security/canvas-remote-read-remote-image-document-domain.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::checkOrigin):
        (WebCore::CanvasRenderingContext2D::createPattern):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::taintsCanvas):
        * page/SecurityOrigin.h:

2009-09-18  Simon Fraser  <simon.fraser@apple.com>

        Fix stylistic issue raised in code review for previous commit.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::hasNonZeroTransformOrigin):

2009-09-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Element is misplaced during opacity transition with certain configuration of transform-origin and clipping
        https://bugs.webkit.org/show_bug.cgi?id=29495
        
        If an element has zero size, but has a transform origin with absolute values,
        then the transform origin would not be applied because it is implemented via
        anchorPoint, which is expressed as a fraction of the layer size.
        
        Work around this by artificially inflating the size of the backing store when we need to.

        Test: compositing/geometry/transfrom-origin-on-zero-size-layer.html

        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        Init m_artificiallyInflatedBounds to false.
        
        (WebCore::hasNonZeroTransformOrigin):
        Utility function that describes whether the transform-origin contains non-percentage
        x or y offsets.
        
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        New wrapper method around setCompositedBounds() that applies the size inflation
        when necessary, setting the m_artificiallyInflatedBounds as appropriate.
        
        (WebCore::RenderLayerBacking::updateAfterLayout): Call updateCompositedBounds().
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Ditto
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): Ditto
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry): Ditto

2009-09-18  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=29512
        Don't recalculate style when restoring from the page cache

        FrameLoaderClient::forceLayout() also forces style recalc. Instead call FrameView::forceLayout() 
        directly to update the scrollbars while keeping the existing style.
        
        Makes back/forward really fast on complex pages (in cases where page cache works).

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):

2009-09-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Implement ES5 Object.defineProperty function
        https://bugs.webkit.org/show_bug.cgi?id=29503

        Override defineOwnProperty on JSDOMWindowShell to forward appropriately,
        and then override defineOwnProperty on JSDOMWindow to disallow cross origin
        defineOwnProperty usage.  We also override defineOwnProperty on QuarantinedObjectWrapper
        to ensure correct wrapping semantics of quarantined objects.

        One major caveat in this patch is that it currently disallows the use
        of Object.defineProperty on DOMObjects other than the window due to
        the significant work involved in correctly propagating attributes and
        ensuring correct semantics on dom objects.

        Tests: fast/js/Object-defineProperty.html
               http/tests/security/xss-DENIED-defineProperty.html

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::DOMObject::defineOwnProperty):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::defineGetter):
        (WebCore::JSDOMWindow::defineSetter):
        (WebCore::JSDOMWindow::defineOwnProperty):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::defineOwnProperty):
        (WebCore::JSDOMWindowShell::defineGetter):
        (WebCore::JSDOMWindowShell::defineSetter):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::defineGetter):
        (WebCore::JSLocationPrototype::defineGetter):
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::getOwnPropertyDescriptor):
        (WebCore::JSQuarantinedObjectWrapper::defineOwnProperty):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/scripts/CodeGeneratorJS.pm:

2009-09-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=29510
        Active DOM objects should be suspended while a modal dialog is displayed

        * manual-tests/js-timers-beneath-modal-dialog.html: Added a test for JS timers.

        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):
        Match other platforms, and make Mac also suspend active DOM objects. Since a page that
        currently displays a modal dialog cannot go into page cache, there is no danger of suspending
        an object twice.        

2009-09-18  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        [Qt] Buildfix caused by http://trac.webkit.org/changeset/48513
        https://bugs.webkit.org/show_bug.cgi?id=29351

        * bridge/qt/qt_instance.h: createRuntimeObject method renamed to newRuntimeObject.
        * bridge/runtime.h: Visibility of newRuntimeObject method modified to protected.

2009-09-18  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Fix parameter substitutions in console.log().

        https://bugs.webkit.org/show_bug.cgi?id=29366

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype._format):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.getPrototypes):
        (InjectedScript.CallFrameProxy.prototype._wrapScopeChain):
        * inspector/front-end/utilities.js:
        ():

2009-09-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen and Brady Eidson.

        Temporarily remove an assertion that was getting hit when going
        back to a page in the page cache while a banner in Safari was visible.
        We should re-enable this once that is fixed. See <rdar://problem/7218118>

        * page/FrameView.cpp:
        (WebCore::FrameView::scheduleRelayout):

2009-09-18  Anders Carlsson  <andersca@apple.com>

        Try fixing the build again.
        
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::wndProc):

2009-09-18  Anders Carlsson  <andersca@apple.com>

        Fix windows build.
        
        * platform/win/PopupMenuWin.cpp:

2009-09-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin 'BearClaw' Barraclough.

        Convert another callback type object to store the global object
        instead of the frame.

        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create):
        (WebCore::JSCustomXPathNSResolver::JSCustomXPathNSResolver):
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSCustomXPathNSResolver.h:

2009-09-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=29332
        <rdar://problem/7231652> 
        REGRESSION (r48446): While a <select> popup menu is open, the
        rest of the WebView doesn't respond to mouse move events.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::translatePoint):
        New helper function that translates a point between HWND coordinates.
        
        (WebCore::PopupMenu::show):
        Protect the PopupMenu if someone removes the <select> in response to a mouse
        event. Handle WM_HOST_WINDOW_MOUSEMOVE events.
        
        (WebCore::PopupMenu::wndProc):
        in the WM_MOUSEMOVE handler, if the mouse is not over the popup, post a 
        WM_HOST_WINDOW_MOUSEMOVE event so that the host window (the WebView) gets the
        mouse move event.

2009-09-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Compositing layers are incorrectly positioned after scrolling with position:fixed
        https://bugs.webkit.org/show_bug.cgi?id=29262
        
        When scrolling a page with compositing layers inside a position:fixed element,
        we need to update the compositing layer positions when the scroll position changes.

        Test: compositing/geometry/fixed-position.html

        * WebCore.base.exp:
        Export FrameView::scrollPositionChanged()
        
        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChanged):
        New method that sends the scroll event, and updates compositing layers positions if necessary.

2009-09-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Transformed elements inside position:fixed container are clipped incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=29346
        
        Fix clipping and hit testing on transformed elements inside a position:fixed element.
        Previously, the code used the overflowClipRect of the parent clip rects, but
        this is not correct for fixed postion elements. Instead, share code that is
        already present in calculateRects() to get the correct rect.

        Test: fast/overflow/position-fixed-transform-clipping.html

        * rendering/RenderLayer.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        Call the new backgroundClipRect() to get the correct clipRect.
        
        (WebCore::RenderLayer::backgroundClipRect):
        New method, factored out of calculateRects(), that computes the clip rect,
        doing the right thing for fixed position elements.
        
        (WebCore::RenderLayer::calculateRects):
        Call the new backgroundClipRect() method.
        
2009-09-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Fix <rdar://problem/7050773> REGRESSION (r40098) Crash at
        WebCore::RenderBlock::layoutBlock()
        https://bugs.webkit.org/show_bug.cgi?id=29498

        Test: accessibility/nested-layout-crash.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::updateBackingStore): Changed to
            call Document::updateLayoutIgnorePendingStylesheets() instead of
            calling RenderObject::layoutIfNeeded(). The latter requires that
            there be no pending style recalc, which allows methods that call
            Document::updateLayout() to be called during layout without risking
            re-entry into layout.
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityActionNames]): Null-check
            m_object after calling updateBackingStore(), since style recalc may
            destroy the renderer, which destroys the accessibility object and
            detaches it from the wrapper.
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]): Ditto.
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]): Ditto.
        (-[AccessibilityObjectWrapper accessibilityFocusedUIElement]): Ditto.
        (-[AccessibilityObjectWrapper accessibilityHitTest:]): Ditto.
        (-[AccessibilityObjectWrapper accessibilityIsAttributeSettable:]):
            Ditto.
        (-[AccessibilityObjectWrapper accessibilityIsIgnored]): Ditto.
        (-[AccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
             Ditto.
        (-[AccessibilityObjectWrapper accessibilityPerformPressAction]): Ditto.
        (-[AccessibilityObjectWrapper accessibilityPerformIncrementAction]):
            Ditto.
        (-[AccessibilityObjectWrapper accessibilityPerformDecrementAction]):
            Ditto.
        (-[AccessibilityObjectWrapper accessibilityPerformAction:]): Ditto.
        (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
            Ditto.
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
            Ditto.
        (-[AccessibilityObjectWrapper accessibilityIndexOfChild:]): Ditto.
        (-[AccessibilityObjectWrapper accessibilityArrayAttributeCount:]):
            Ditto.
        (-[AccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):
            Ditto.

2009-09-18  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Simon Hausmann.

        Update Qt build system for Web Socket.
        https://bugs.webkit.org/show_bug.cgi?id=29270

        * WebCore.pro:
        * platform/network/qt/SocketStreamError.h: Added.
        * platform/network/qt/SocketStreamHandle.h: Added.
        * platform/network/qt/SocketStreamHandleSoup.cpp: Added.

2009-09-18  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        NULL check HTMLMediaElement::m_playedTimeRanges.
        Fix for https://bugs.webkit.org/show_bug.cgi?id=29494

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::addPlayedRange): New. Create m_playedTimeRanges if
        necessary, add range specified.
        (WebCore::HTMLMediaElement::seek): Use addPlayedRange. 
        (WebCore::HTMLMediaElement::played): Use addPlayedRange. Change time comparison 
        to be more readable.
        (WebCore::HTMLMediaElement::updatePlayState): Ditto.
        * html/HTMLMediaElement.h:

2009-09-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Adele Peterson.

        Follow up fix for https://bugs.webkit.org/show_bug.cgi?id=29276
        REGRESSION(r48334): WebKit crashes on file select by drag

        Don't use Document.elementFromPoint since it returns null if the point
        is outside the viewport.  Instead, just hit test ourselves.

        Test: fast/events/drag-file-crash.html

        * page/DragController.cpp:
        (WebCore::elementUnderMouse):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::concludeEditDrag):

2009-09-18  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Each wrapped Objective-C object should use a single RuntimeObjectImp
        https://bugs.webkit.org/show_bug.cgi?id=29351
        rdar://problem/7142294

        * WebCore.base.exp: Added a newly-needed exported symbol.

        * bindings/objc/DOMInternal.h: Eliminated unused
        createWrapperCacheWithIntegerKeys; it has not been needed since the
        RGBColor wrappers were reworked.
        * bindings/objc/DOMInternal.mm: Ditto.

        * bridge/objc/objc_instance.h: Made the create function non-inline.
        * bridge/objc/objc_instance.mm:
        (createInstanceWrapperCache): Added. Creates an appropriate map table.
        (ObjcInstance::create): Moved here from header. Uses NSMapGet and
        NSMapInsert to cache the instance in a map table.
        (ObjcInstance::~ObjcInstance): Added a call to NSMapRemove to remove
        the instance from the map table.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::~QtInstance): Remove unneeded code to remove
        the instance from cachedObjects, which no longer exists.
        (JSC::Bindings::QtInstance::newRuntimeObject): Renamed to overload new
        bottleneck. Caching is now handled by the base class.

        * bridge/runtime.cpp:
        (JSC::Bindings::Instance::Instance): Initialize m_runtimeObject to 0.
        (JSC::Bindings::Instance::~Instance): Assert m_runtimeObject is 0.
        (JSC::Bindings::Instance::createRuntimeObject): Use m_runtimeObject
        if it's already set. Set m_runtimeObject and call addRuntimeObject
        if it's not.
        (JSC::Bindings::Instance::newRuntimeObject): Added. Virtual function,
        used only by createRuntimeObject.
        (JSC::Bindings::Instance::willDestroyRuntimeObject): Added.
        Calls removeRuntimeObject and then clears m_runtimeObject.
        (JSC::Bindings::Instance::willInvalidateRuntimeObject): Added.
        Clears m_runtimeObject.

        * bridge/runtime.h: Made createRuntimeObject non-virtual. Added
        willDestroyRuntimeObject, willInvalidateRuntimeObject,
        newRuntimeObject, and m_runtimeObject.

        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::RuntimeObjectImp): Removed addRuntimeObject
        call, now handled by caller.
        (JSC::RuntimeObjectImp::~RuntimeObjectImp): Replaced removeRuntimeObject
        call with willDestroyRuntimeObject call; the latter nows calls
        removeRuntimeObject.
        (JSC::RuntimeObjectImp::invalidate): Added willInvalidateRuntimeObject
        call.

        * bridge/runtime_object.h: Made invalidate non-virtual.

2009-09-18  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Make PlatformWindow return something else than PlatformWidget
        https://bugs.webkit.org/show_bug.cgi?id=29085

        Make platformWindow return a PlatformPageClient
        (for now typedef'ed to PlatformWidget)

        Also, change the name of platformWindow to platformPageClient()

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getPangoLayoutForAtk):
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::platformPageClient):
        * page/Chrome.cpp:
        (WebCore::Chrome::platformPageClient):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::wheelEvent):
        (WebCore::EventHandler::currentPlatformMouseEvent):
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::eventMayStartDrag):
        * platform/HostWindow.h:
        * platform/Widget.h:
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::getVisual):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::show):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::platformAddChild):
        (WebCore::ScrollView::platformRemoveChild):
        (WebCore::ScrollView::visibleContentRect):
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::setFocus):
        (WebCore::Widget::setCursor):
        * platform/qt/PlatformScreenQt.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::show):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::setCursor):
        * platform/win/PlatformScreenWin.cpp:
        (WebCore::monitorInfoForWidget):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::calculatePositionAndSize):
        (WebCore::PopupMenu::wndProc):
        * platform/wx/RenderThemeWx.cpp:
        (WebCore::nativeWindowForRenderObject):
        * platform/wx/ScrollbarThemeWx.cpp:
        (WebCore::ScrollbarThemeWx::paint):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::platformStart):
        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::platformStart):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::platformStart):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::platformStart):

2009-09-18  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Web inspector UI adjustments specific to the Qt platform:
        - Hide the close button
        - Hide the dock button
        - Disable the draggable toolbar

        https://bugs.webkit.org/show_bug.cgi?id=29384

        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector.toolbarDragStart):

2009-09-18  Joerg Bornemann  <joerg.bornemann@nokia.com>

        Reviewed by Simon Hausmann.

        QtWebKit Windows CE compile fixes

        Exclude certain pure-WINCE specific code paths from the Qt build.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/FontCache.h:
        * platform/graphics/MediaPlayer.cpp:
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):
        (WebCore::extendTextCodecMaps):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::stop): Guard this code block with NETSCAPE_PLUGIN_API as
        the corresponding PluginViewWndProc has the same guard in the header file.

2009-09-18  Steve Block  <steveblock@google.com>

        Reviewed by Dimitri Glazkov.

        Geolocation does not correctly handle Infinity for PositionOptions properties.
        https://bugs.webkit.org/show_bug.cgi?id=29099

        * bindings/js/JSGeolocationCustom.cpp: Modified.
        (WebCore::createPositionOptions): Modified. If timeout or maximumAge is positive infinity, applies these values as a special case.
        * page/PositionOptions.h: Modified.
        (WebCore::PositionOptions::hasMaximumAge): Added. Determines whether the object has a maximum age.
        (WebCore::PositionOptions::maximumAge): Modified. Asserts that the object has a maximum age.
        (WebCore::PositionOptions::clearMaximumAge): Added. Clears the maximum age.
        (WebCore::PositionOptions::setMaximumAge): Modified. Registers that the maximum age has been set.
        (WebCore::PositionOptions::PositionOptions): Modified. Registers that the maximum age has been set.

2009-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Adele Peterson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=29276
        REGRESSION(r48334): WebKit crashes on file select by drag

        Document.elementFromPoint now takes point in client space, not page space.

        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::concludeEditDrag):

2009-09-17  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by David Levin.

        Reimplement default media UI for Mac Chromium to match the style
        of the Windows and Linux versions.  Also breaks the dependency
        on the internal wk* functions that were previously used to
        render the media controller widgets.
        https://bugs.webkit.org/show_bug.cgi?id=29161

        No media layout tests are currently enabled in Mac Chromium, so
        nothing needs rebaselineing, etc.

        This is a recommit of r48438 with a compile fix and merges of
        recent changes to the file.

        * css/mediaControlsChromium.css:
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::mediaElementParent):
        (WebCore::RenderThemeChromiumMac::extraMediaControlsStyleSheet):
        (WebCore::mediaSliderThumbImage):
        (WebCore::mediaVolumeSliderThumbImage):
        (WebCore::RenderThemeChromiumMac::paintSliderTrack):
        (WebCore::RenderThemeChromiumMac::adjustSliderThumbSize):
        (WebCore::RenderThemeChromiumMac::paintMediaButtonInternal):
        (WebCore::RenderThemeChromiumMac::paintMediaPlayButton):
        (WebCore::RenderThemeChromiumMac::paintMediaMuteButton):
        (WebCore::RenderThemeChromiumMac::paintMediaSliderTrack):
        (WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeChromiumMac::paintMediaSliderThumb):
        (WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderThumb):
        (WebCore::RenderThemeChromiumMac::paintMediaControlsBackground):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::adjustSliderThumbSize):

2009-09-17  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        The Console scope bar should have a divider between All and the other possible
        values (Errors, Warnings, Logs). It will look something like:
        
        All | Errors Warnings Logs.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.createDividerElement):
        (WebInspector.ConsoleView):
        * inspector/front-end/inspector.css:

2009-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Remove additional references to JSVoidCallback which no longer exists.

        * DerivedSources.cpp:
        * WebCore.vcproj/WebCore.vcproj:

2009-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        Remove commented out onhashchange attribute now that it is implemented.

        * page/DOMWindow.idl:

2009-09-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/7007541> 
        CrashTracer: 4800crashes in Safari at com.apple.WebKit • WTF::HashTableIterator...
        
        Make RuntimeObjectImp more robust against m_instance being a null (which can happen if an OOP plug-in
        crashes while we're calling into it).
        
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::RuntimeObjectImp):
        (JSC::RuntimeObjectImp::~RuntimeObjectImp):
        (JSC::RuntimeObjectImp::invalidate):
        (JSC::RuntimeObjectImp::fallbackObjectGetter):
        (JSC::RuntimeObjectImp::fieldGetter):
        (JSC::RuntimeObjectImp::methodGetter):
        (JSC::RuntimeObjectImp::getOwnPropertySlot):
        (JSC::RuntimeObjectImp::getOwnPropertyDescriptor):
        (JSC::RuntimeObjectImp::put):
        (JSC::RuntimeObjectImp::defaultValue):
        (JSC::RuntimeObjectImp::getCallData):
        (JSC::RuntimeObjectImp::getConstructData):
        (JSC::RuntimeObjectImp::getPropertyNames):
        * bridge/runtime_object.h:
        (JSC::RuntimeObjectImp::getInternalInstance):

2009-09-17  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Wrap primitive values (as objects) in InspectorController::wrap.

        https://bugs.webkit.org/show_bug.cgi?id=28983

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::wrapObject): objects of any type will be wrapped into proxies,
         only object proxies will have objectId.
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions): there is InjectedScript.getCompletionsi
         that accepts an expression and returns possible completions. This way we don't need to wrap
         and unwrap the completions result into a proxy object.
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.getCompletions):
        (InjectedScript.evaluate):
        (InjectedScript._evaluateOn):
        (InjectedScript.createProxyObject):
        * inspector/front-end/InjectedScriptAccess.js:

2009-09-17  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Wrap PageTransitionEvents properly for V8's use.

        https://bugs.webkit.org/show_bug.cgi?id=29340

        Fixes Chromium's failures for LayoutTests/fast/events/pageshow-pagehide.html.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventToV8Object): Wrap PageTransitionEvents properly.

2009-09-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Hardware-accelerated opacity transition on inline asserts
        https://bugs.webkit.org/show_bug.cgi?id=29342
        
        Remove an erroneous toRenderBox() that could be called on a RenderInline; we can just
        pass an empty size, because the box size is only required for transform animations.

        Test: compositing/transitions/opacity-on-inline.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startTransition):

2009-09-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [V8] OwnHandle might get a weak callback after destruction
        https://bugs.webkit.org/show_bug.cgi?id=29172

        Be sure to clear out weak reference so we don't get a weak callback
        after we've destructed ourselves.  Also, removed some tricky methods
        that had no clients.

        * bindings/v8/OwnHandle.h:
        (WebCore::OwnHandle::clear):

2009-09-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [V8] Partial roll out of http://trac.webkit.org/changeset/48455 to
        fix crashes that started happening in V8Proxy::getEnteredContext().

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):

2009-09-17  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: labels of checkboxes should, when hit-tested, return the checkbox
        https://bugs.webkit.org/show_bug.cgi?id=29335

        When an accessibility hit test is done and it hits the label of a control element,
        the control element should be returned instead of nothing, since the label
        itself is usually ignored.

        Test: accessibility/label-for-control-hittest.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::correspondingControlForLabelElement):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::doAccessibilityHitTest):
        (WebCore::AccessibilityRenderObject::correspondingControlForLabelElement):
        * accessibility/AccessibilityRenderObject.h:

2009-09-17  Avi Drissman  <avi@chromium.org>

        Reviewed by Dimitri Glazkov, build fix.

        Change to make RenderThemeChromiumMac compile inside of non PLATFORM(MAC).
        https://bugs.webkit.org/show_bug.cgi?id=29243

        Covered by existing tests.

        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::paintMediaSliderTrack):

2009-09-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        [V8] Accessing properties/methods of an object, created with document.implementation.createDocumentType
        creates nodes that have no document (ScriptExecutionContext), which in turn produces NULL-ref crashes.
        https://bugs.webkit.org/show_bug.cgi?id=26402

        Test: fast/dom/DOMImplementation/detached-doctype.html
              fast/dom/doctype-event-listener-crash.html

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getEventListener): Added an extra NULL-check.

2009-09-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        FontDescription.h includes RenderStyleConstants.h, which violates layering
        https://bugs.webkit.org/show_bug.cgi?id=29327

        * GNUmakefile.am: Added FontSmoothingMode.h.
        * WebCore.gypi: Added FontSmoothingMode.h.
        * WebCore.vcproj/WebCore.vcproj: Added FontSmoothingMode.h.
        * WebCore.xcodeproj/project.pbxproj: Added FontSmoothingMode.h and made
            it a private header.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Get the
            font smoothing mode via the font description.
        * css/CSSPrimitiveValueMappings.h: Include FontSmoothingMode.h
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Updated for the rename
            of FontSmoothing to FontSmoothingMode.
        (WebCore::CSSPrimitiveValue::operator FontSmoothingMode): Ditto.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Get the font smoothing mode
            via the font description.
        * platform/graphics/FontDescription.h: Do not include
            RenderStyleConstants.h.
        (WebCore::FontDescription::fontSmoothing): Updated for the rename of
            FontSmoothing to FontSmoothingMode.
        (WebCore::FontDescription::setFontSmoothing): Ditto.
        * platform/graphics/FontSmoothingMode.h: Added.
        (WebCore::FontSmoothingMode): Moved the FontSmoothing enum from
            RenderStyleConstants here and renamed it to this.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::fontSmoothing): Removed this getter, since
            this can be accessed via the font description.
        * rendering/style/RenderStyleConstants.h: Moved the FontSmoothing enum
            from here to FontSmoothingMode.h.

2009-09-17  Kevin Ollivier  <kevino@theolliviers.com>

        wx 2.9 build fix.

        * platform/wx/wxcode/gtk/scrollbar_render.cpp:
        (wxGetGdkWindowForDC):

2009-09-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Elements appear behind <video> when they should be in front sometimes
        https://bugs.webkit.org/show_bug.cgi?id=29314
        
        r45598 added logic that tests for overlap with <video> to determine when to throw
        a layer into compositing mode. That logic was incorrect in some cases, and this patch
        fixes it. When testing overlap, the layer needs to be composited iff some previous layer
        is composited (which adds a rect to the overlay map), and there is overlap.

        Test: compositing/geometry/video-opacity-overlay.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::CompositingState::CompositingState):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2009-09-17  Avi Drissman  <avi@google.com>

        Reviewed by Darin Fisher.

        Update the Chromium Mac theming files (RenderTheme and Theme) to be
        up-to-date.
        
        https://bugs.webkit.org/show_bug.cgi?id=29243
        http://crbug.com/19604

        Covered by existing tests.

        * WebCore.gypi:
        * platform/chromium/ThemeChromiumMac.h: Added.
        (WebCore::ThemeChromiumMac::ThemeChromiumMac):
        (WebCore::ThemeChromiumMac::~ThemeChromiumMac):
        (WebCore::ThemeChromiumMac::controlRequiresPreWhiteSpace):
        * platform/chromium/ThemeChromiumMac.mm: Added.
        (WebCore::):
        (WebCore::platformTheme):
        (WebCore::controlSizeForFont):
        (WebCore::sizeFromFont):
        (WebCore::setControlSize):
        (WebCore::updateStates):
        (WebCore::inflateRect):
        (WebCore::checkboxSizes):
        (WebCore::checkboxMargins):
        (WebCore::checkboxSize):
        (WebCore::checkbox):
        (WebCore::paintCheckbox):
        (WebCore::radioSizes):
        (WebCore::radioMargins):
        (WebCore::radioSize):
        (WebCore::radio):
        (WebCore::paintRadio):
        (WebCore::buttonSizes):
        (WebCore::buttonMargins):
        (WebCore::button):
        (WebCore::paintButton):
        (WebCore::ThemeChromiumMac::baselinePositionAdjustment):
        (WebCore::ThemeChromiumMac::controlFont):
        (WebCore::ThemeChromiumMac::controlSize):
        (WebCore::ThemeChromiumMac::minimumControlSize):
        (WebCore::ThemeChromiumMac::controlBorder):
        (WebCore::ThemeChromiumMac::controlPadding):
        (WebCore::ThemeChromiumMac::inflateControlPaintRect):
        (WebCore::ThemeChromiumMac::paint):
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.h:
        * platform/graphics/IntRect.h:
        * rendering/RenderThemeChromiumMac.h:
        (WebCore::RenderThemeChromiumMac::supportsControlTints):
        (WebCore::RenderThemeChromiumMac::scrollbarControlSizeForPart):
        (WebCore::RenderThemeChromiumMac::supportsSelectionForegroundColors):
        * rendering/RenderThemeChromiumMac.mm:
        (-[WebCoreRenderThemeNotificationObserver systemColorsDidChange:]):
        (-[RTCMFlippedView isFlipped]):
        (-[RTCMFlippedView currentEditor]):
        (WebCore::):
        (WebCore::FlippedView):
        (WebCore::RenderTheme::themeForPage):
        (WebCore::RenderThemeChromiumMac::platformActiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeChromiumMac::platformInactiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeChromiumMac::platformInactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumMac::systemFont):
        (WebCore::convertNSColorToColor):
        (WebCore::menuBackgroundColor):
        (WebCore::RenderThemeChromiumMac::systemColor):
        (WebCore::RenderThemeChromiumMac::isControlStyled):
        (WebCore::RenderThemeChromiumMac::adjustRepaintRect):
        (WebCore::RenderThemeChromiumMac::inflateRect):
        (WebCore::RenderThemeChromiumMac::convertToPaintingRect):
        (WebCore::RenderThemeChromiumMac::setFontFromControlSize):
        (WebCore::RenderThemeChromiumMac::paintTextField):
        (WebCore::RenderThemeChromiumMac::paintCapsLockIndicator):
        (WebCore::RenderThemeChromiumMac::paintTextArea):
        (WebCore::RenderThemeChromiumMac::paintMenuList):
        (WebCore::TopGradientInterpolate):
        (WebCore::BottomGradientInterpolate):
        (WebCore::MainGradientInterpolate):
        (WebCore::TrackGradientInterpolate):
        (WebCore::RenderThemeChromiumMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeChromiumMac::paintMenuListButton):
        (WebCore::RenderThemeChromiumMac::popupInternalPaddingLeft):
        (WebCore::RenderThemeChromiumMac::popupInternalPaddingRight):
        (WebCore::RenderThemeChromiumMac::popupInternalPaddingTop):
        (WebCore::RenderThemeChromiumMac::popupInternalPaddingBottom):
        (WebCore::RenderThemeChromiumMac::adjustMenuListButtonStyle):
        (WebCore::RenderThemeChromiumMac::adjustSliderTrackStyle):
        (WebCore::RenderThemeChromiumMac::adjustSliderThumbStyle):
        (WebCore::RenderThemeChromiumMac::paintSliderThumb):
        (WebCore::RenderThemeChromiumMac::paintSearchField):
        (WebCore::RenderThemeChromiumMac::setSearchCellState):
        (WebCore::RenderThemeChromiumMac::adjustSearchFieldStyle):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeChromiumMac::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeChromiumMac::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldDecoration):
        (WebCore::RenderThemeChromiumMac::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeChromiumMac::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldResultsButton):
        (WebCore::mediaControllerTheme):
        (WebCore::RenderThemeChromiumMac::adjustSliderThumbSize):
        (WebCore::getMediaUIPartStateFlags):
        (WebCore::getUnzoomedRectAndAdjustCurrentContext):
        (WebCore::RenderThemeChromiumMac::paintMediaFullscreenButton):
        (WebCore::RenderThemeChromiumMac::paintMediaMuteButton):
        (WebCore::RenderThemeChromiumMac::paintMediaPlayButton):
        (WebCore::RenderThemeChromiumMac::paintMediaSeekBackButton):
        (WebCore::RenderThemeChromiumMac::paintMediaSeekForwardButton):
        (WebCore::RenderThemeChromiumMac::paintMediaSliderTrack):
        (WebCore::RenderThemeChromiumMac::paintMediaSliderThumb):
        (WebCore::RenderThemeChromiumMac::paintMediaRewindButton):
        (WebCore::RenderThemeChromiumMac::paintMediaReturnToRealtimeButton):
        (WebCore::RenderThemeChromiumMac::paintMediaControlsBackground):
        (WebCore::RenderThemeChromiumMac::paintMediaCurrentTime):
        (WebCore::RenderThemeChromiumMac::paintMediaTimeRemaining):
        (WebCore::RenderThemeChromiumMac::extraMediaControlsStyleSheet):

2009-09-16  Daniel Bates  <dbates@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=29306
        
        Fixes an issue where an attack that contains accented characters can
        bypass the XSSAuditor.
        
        XSSAuditor::decodeURL used the wrong length for the input string. 
        When the input string was decoded, the decoded result was truncated.
        Hence, XSSAuditor was comparing the source code of the script to the 
        truncated input parameters.

        Test: http/tests/security/xssAuditor/img-onerror-accented-char.html

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::decodeURL):

2009-09-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Explore allowing pages with unload handlers into the Page Cache
        https://bugs.webkit.org/show_bug.cgi?id=29021

        No new tests. (All previous tests continue to pass)

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading): If the document is in the page cache, don't fire the unload event.

2009-09-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Teach ScheduledAction::execute about isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=27703

        We now save a handle to the original context.  We use that handle to
        call the timeout in the right context / world.

        Tests: http/tests/security/isolatedWorld/window-setTimeout-function.html
               http/tests/security/isolatedWorld/window-setTimeout-string.html

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::execute):
        * bindings/v8/ScheduledAction.h:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval):

2009-09-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Teach ScheduledAction::execute about isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=27703

        We now save a handle to the original context.  We use that handle to
        call the timeout in the right context / world.

        Tests: http/tests/security/isolatedWorld/window-setTimeout-function.html
               http/tests/security/isolatedWorld/window-setTimeout-string.html

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::execute):
        * bindings/v8/ScheduledAction.h:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval):

2009-09-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add some groups to the xcode project to make the bindings/js/ group
        a little nicer.

        * WebCore.xcodeproj/project.pbxproj:

2009-09-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=29320
        JS callback objects should store the global object

        This just changes the callback objects to store the global object instead
        of the frame. A follow up patch will change them to store the 'current' 
        global object instead of the lexical or dynamic.

        * DerivedSources.make: Remove unused VoidCallback.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSCustomPositionCallback.cpp:
        (WebCore::JSCustomPositionCallback::JSCustomPositionCallback):
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionCallback.h:
        (WebCore::JSCustomPositionCallback::create):
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        (WebCore::JSCustomPositionErrorCallback::JSCustomPositionErrorCallback):
        (WebCore::JSCustomPositionErrorCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.h:
        (WebCore::JSCustomPositionErrorCallback::create):
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::JSCustomSQLStatementCallback):
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.h:
        (WebCore::JSCustomSQLStatementCallback::create):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::JSCustomSQLStatementErrorCallback):
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.h:
        (WebCore::JSCustomSQLStatementErrorCallback::create):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::Data::Data):
        (WebCore::JSCustomSQLTransactionCallback::Data::globalObject):
        (WebCore::JSCustomSQLTransactionCallback::JSCustomSQLTransactionCallback):
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.h:
        (WebCore::JSCustomSQLTransactionCallback::create):
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::JSCustomSQLTransactionErrorCallback):
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.h:
        (WebCore::JSCustomSQLTransactionErrorCallback::create):
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::JSCustomVoidCallback):
        (WebCore::JSCustomVoidCallback::handleEvent):
        * bindings/js/JSCustomVoidCallback.h:
        (WebCore::JSCustomVoidCallback::create):
        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::changeVersion):
        (WebCore::createTransaction):
        (WebCore::JSDatabase::transaction):
        (WebCore::JSDatabase::readTransaction):
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::createPositionCallback):
        (WebCore::createPositionErrorCallback):
        (WebCore::JSGeolocation::getCurrentPosition):
        (WebCore::JSGeolocation::watchPosition):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):

2009-09-15  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        <input maxlength=> should restrict only values specified by users.
        https://bugs.webkit.org/show_bug.cgi?id=21271

        * dom/InputElement.cpp:
        (WebCore::InputElement::setValueFromRenderer):
        (WebCore::InputElement::sanitizeValue):
        (WebCore::InputElement::sanitizeUserInputValue): Rename from constrainValue().
        (WebCore::InputElement::handleBeforeTextInsertedEvent):
        (WebCore::InputElement::updateValueIfNeeded):
        * dom/InputElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::value):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::sanitizeValue):
        * html/HTMLInputElement.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::constrainValue):
        * wml/WMLInputElement.h:
        (WebCore::WMLInputElement::sanitizeValue):

2009-09-16  Enrica Casucci  <enrica@apple.com>

        Reviewed by Eric Seidel.

        Reorganizing helper functions in htmlediting.h to group them by type of object they return/operate upon.
        https://bugs.webkit.org/show_bug.cgi?id=29319

        * editing/IndentOutdentCommand.cpp:
        Removed implementation of isAtUnsplittableElement.

        * editing/IndentOutdentCommand.h:
        Removed member function isAtUnsplittableElement, because it was not class specific and belonged logically among the helper functions.

        * editing/htmlediting.cpp:
        (WebCore::isAtUnsplittableElement): added. The code was taken from IndentOutdentCommand.

        * editing/htmlediting.h:
        Reordered functions to group them by type of object returned or operate upon.
        Added comments.
        Added isAtUnsplittableElement declaration.

2009-09-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig and Anders Carlsson.

        Removed some vestigial and potentially crashy code that makes consolidating
        event listeners hard.

        * dom/Node.cpp:
        (WebCore::Node::addEventListener): No need to limit when event listeners
        can be added. Other EventTargets don't do this.
        
        Also, check for null when accessing document(). Technically, the JS bindings
        do this check for us, but let's not rely on that.

2009-09-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/7155710>
        HTML selects on windows cause containing window to become inactive when opened
        
        Redo the way we handle events when a popup menu is shown, based on
        http://blogs.msdn.com/oldnewthing/archive/2004/08/20/217684.aspx
        
        Since a non-active window can't capture the mouse, we use the owning window 
        (the WebView) as the capture window. We then run a recursive message pump that 
        forwards all mouse and keyboard events to the popup menu.
        
        * platform/PopupMenu.h:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::wndProc):

2009-09-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Ada Chan.

        Speculative fix for
        <rdar://problem/6937089> Crashes at RenderWidget::destroy()

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy): Avoid calling renderArena() if node()
        is null. Add two assertions that can help determine how this crash
        happens (in particular, whether node() becomes null during destroy() or
        it is null before destroy() is called).

2009-09-16  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2009-09-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/7083741> Implement a CSS extension to 
        adjust sub-pixel anti-aliasing for text
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=29291

        Added tests:
        * fast/css/font-smoothing.html: Added.
        * fast/css/parsing-webkit-font-smoothing.html: Added.

        This patch adds a new CSS property called -webkit-font-smoothing 
        that accepts the following as valid input: auto | none | 
        antialiased | subpixel-antialiased

        Return appropriate computed style for -webkit-font-smoothing
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

        Add a case for CSSPropertyWebkitFontSmoothing, and accept valid 
        input.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):

        Add mappings for FontSmoothing to the right CSS values.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator FontSmoothing):

        Add -webkit-font-smoothing
        * css/CSSPropertyNames.in:

        Set fontSmoothing on the FontDescription.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

        Add antialiased and subpixel-antialiased as possible new CSS 
        values.
        * css/CSSValueKeywords.in:
        Store the font smoothing CSS value in the FontDescription.
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::fontSmoothing):
        (WebCore::FontDescription::setFontSmoothing):
        (WebCore::FontDescription::operator==):

        Call setShouldAntialias() and setShouldUseSmoothing() appropriately 
        based on the CSS fontSmoothing() value.
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs):

        New function fontSmoothing()
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::fontSmoothing):

        New enum FontSmoothing.
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-09-16  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Remove style property if empty string is entered.

        https://bugs.webkit.org/show_bug.cgi?id=29163

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._onmouseout): fixed null pointer exception
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.applyStyleText): if styletext to apply is empty it will return an array to confirm the property removal
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.):
        (WebInspector.StylePropertyTreeElement.prototype):

2009-09-16  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Always reset m_implicitShorthand to false after parsing
        background-repeat style property otherwise properties
        following after it may be erroneously marked as implicit.

        https://bugs.webkit.org/show_bug.cgi?id=28972
        https://bugs.webkit.org/show_bug.cgi?id=28973

        Test: fast/backgrounds/repeat/margin-shorthand.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):

2009-09-16  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Alexey Proskuryakov.

        Incorrect behavior of XMLHttpRequest::getAllResponseHeaders and
        XMLHttpRequest::getResponseHeader in the
        HEADERS_RECEIVED readyState.
        https://bugs.webkit.org/show_bug.cgi?id=29121

        Tests: http/tests/xmlhttprequest/getAllResponseHeaders.html
               http/tests/xmlhttprequest/getResponseHeader.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getAllResponseHeaders):
        (WebCore::XMLHttpRequest::getResponseHeader):
        Changed the minimum valid state from LOADING to HEADERS_RECEIVED.

2009-09-16  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix style violation in V8AbstractEventListener.
        https://bugs.webkit.org/show_bug.cgi?id=29303

        * bindings/v8/V8AbstractEventListener.h:
        (WebCore::V8AbstractEventListener::operator==):

2009-09-16  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Add Watch Expression support to inspector
        https://bugs.webkit.org/show_bug.cgi?id=27514

        Manual test added.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions):
        (WebInspector.ConsoleView.prototype.evalInInspectedWindow):
        (WebInspector.ConsoleView.prototype._enterKeyPressed):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.update.callback):
        (WebInspector.ObjectPropertiesSection.prototype.update):
        (WebInspector.ObjectPropertiesSection.prototype.updateProperties):
        (WebInspector.ObjectPropertiesSection.CompareProperties):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate.callback):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        * inspector/front-end/WatchExpressionsSidebarPane.js: Added.
        (WebInspector.WatchExpressionsSidebarPane):
        (WebInspector.WatchExpressionsSidebarPane.prototype.refreshExpressions):
        (WebInspector.WatchExpressionsSection):
        (WebInspector.WatchExpressionsSection.prototype.update):
        (WebInspector.WatchExpressionsSection.prototype.addExpression):
        (WebInspector.WatchExpressionsSection.prototype.updateExpression):
        (WebInspector.WatchExpressionsSection.prototype.findAddedTreeElement):
        (WebInspector.WatchExpressionsSection.prototype.loadSavedExpressions):
        (WebInspector.WatchExpressionsSection.prototype.saveExpressions):
        (WebInspector.WatchExpressionsSection.CompareProperties):
        (WebInspector.WatchExpressionTreeElement):
        (WebInspector.WatchExpressionTreeElement.prototype.update):
        (WebInspector.WatchExpressionTreeElement.prototype._deleteButtonClicked):
        (WebInspector.WatchExpressionTreeElement.prototype.startEditing):
        (WebInspector.WatchExpressionTreeElement.prototype.editingCancelled):
        (WebInspector.WatchExpressionTreeElement.prototype.applyExpression):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * manual-tests/inspector/debugger-watch-expressions.html: Added.

2009-09-16  Greg Bolsinga  <bolsinga@apple.com>

        Add ENABLE(INSPECTOR)
        https://bugs.webkit.org/show_bug.cgi?id=29260

        Reviewed by David Kilzer.

        No new tests. (No change in default behavior.)

        * DerivedSources.make: Use new WebCore.Inspector.exp file if ENABLE_DRAG_SUPPORT.
        * WebCore.base.exp: Move Inspector only exports to WebCore.Inspector.exp.
        * WebCore.xcodeproj/project.pbxproj: Add WebCore.Inspector.exp.
        * bindings/js/JSDOMWindowBase.cpp: Use ENABLE(INSPECTOR) where applicable.
        (WebCore::JSDOMWindowBase::supportsProfiling):
        * bindings/js/JSInspectedObjectWrapper.cpp: Wrap entire file in ENABLE(INSPECTOR).
        * bindings/js/JSInspectorBackendCustom.cpp: Ditto.
        * bindings/js/JSInspectorCallbackWrapper.cpp: Ditto.
        * bindings/js/ScriptObject.cpp: Use ENABLE(INSPECTOR) where applicable.
        * bindings/js/ScriptObject.h: Ditto.
        * bindings/js/ScriptObjectQuarantine.cpp: Wrap entire file in ENABLE(INSPECTOR).
        * dom/Document.cpp: Use ENABLE(INSPECTOR) where applicable.
        (WebCore::Document::recalcStyle):
        (WebCore::Document::addMessage):
        (WebCore::Document::resourceRetrievedByXMLHttpRequest):
        (WebCore::Document::scriptImported):
        * dom/Document.h: Ditto.
        * dom/Node.cpp: Ditto.
        (WebCore::Node::dispatchGenericEvent):
        * dom/ScriptExecutionContext.h: Ditto.
        (WebCore::):
        * html/HTMLDocument.cpp: Ditto.
        (WebCore::HTMLDocument::createTokenizer):
        * html/HTMLTokenizer.cpp: Ditto.
        (WebCore::HTMLTokenizer::write):
        * inspector/ConsoleMessage.cpp: Ditto.
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::isEqual):
        * inspector/ConsoleMessage.h: Ditto.
        * inspector/DOMDispatchTimelineItem.cpp: Wrap entire file in ENABLE(INSPECTOR).
        * inspector/InspectorBackend.cpp: Ditto.
        * inspector/InspectorController.cpp: Ditto.
        * inspector/InspectorDOMAgent.cpp: Ditto.
        * inspector/InspectorDOMStorageResource.cpp: Ditto.
        * inspector/InspectorDatabaseResource.cpp: Ditto.
        * inspector/InspectorFrontend.cpp: Ditto.
        * inspector/InspectorResource.cpp: Ditto.
        * inspector/InspectorTimelineAgent.cpp: Ditto.
        * inspector/TimelineItem.cpp: Ditto.
        * loader/FrameLoader.cpp: Use ENABLE(INSPECTOR) where applicable.
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        (WebCore::FrameLoader::dispatchWindowObjectAvailable):
        (WebCore::FrameLoader::dispatchDidCommitLoad):
        (WebCore::FrameLoader::dispatchAssignIdentifierToInitialRequest):
        (WebCore::FrameLoader::dispatchWillSendRequest):
        (WebCore::FrameLoader::dispatchDidReceiveResponse):
        (WebCore::FrameLoader::dispatchDidReceiveContentLength):
        (WebCore::FrameLoader::dispatchDidFinishLoading):
        * page/Chrome.cpp: Ditto.
        (WebCore::Chrome::mouseDidMoveOverElement):
        * page/Console.cpp: Ditto.
        (WebCore::Console::addMessage):
        (WebCore::Console::count):
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):
        (WebCore::Console::time):
        (WebCore::Console::timeEnd):
        (WebCore::Console::group):
        (WebCore::Console::groupEnd):
        * page/ContextMenuController.cpp: Ditto.
        (WebCore::ContextMenuController::handleContextMenuEvent):
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/DOMWindow.cpp: Ditto.
        (WebCore::DOMWindow::sessionStorage):
        (WebCore::DOMWindow::localStorage):
        * page/EventHandler.cpp: Ditto.
        (WebCore::EventHandler::handleMousePressEvent):
        * page/FrameView.cpp: Ditto.
        (WebCore::FrameView::layout):
        (WebCore::FrameView::paintContents):
        * page/FrameView.h: Ditto.
        * page/Page.cpp: Ditto.
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        * page/Page.h: Ditto.
        * platform/ContextMenu.cpp: Ditto.
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        * platform/ContextMenuItem.h: Ditto.
        (WebCore::):
        * storage/Database.cpp: Ditto.
        (WebCore::Database::openDatabase):
        * workers/WorkerContext.cpp: Ditto.
        (WebCore::WorkerContext::importScripts):
        * xml/XMLHttpRequest.cpp: Ditto.
        (WebCore::XMLHttpRequest::didFinishLoading):

2009-09-16  Greg Bolsinga  <bolsinga@apple.com>

        Add ENABLE(CONTEXT_MENUS)
        https://bugs.webkit.org/show_bug.cgi?id=29225

        Reviewed by David Kilzer.

        No new tests. (No change in default behavior.)

        * DerivedSources.make: Use new WebCore.ContextMenus.exp file if ENABLE_CONTEXT_MENUS.
        * WebCore.base.exp: Move ContextMenu only exports to WebCore.ContextMenus.exp.
        * WebCore.xcodeproj/project.pbxproj: Add WebCore.ContextMenus.exp.
        * dom/Node.cpp: Use ENABLE(CONTEXT_MENUS) where applicable.
        (WebCore::Node::defaultEventHandler):
        * loader/EmptyClients.h: Ditto.
        * page/ContextMenuController.cpp: Wrap entire file in ENABLE(CONTEXT_MENUS).
        * page/EventHandler.cpp: Use ENABLE(CONTEXT_MENUS) where applicable.
        * page/EventHandler.h: Ditto.
        * page/Page.cpp: Ditto.
        (WebCore::Page::Page):
        * page/Page.h: Ditto.
        * page/mac/EventHandlerMac.mm: Ditto.
        * page/mac/WebCoreViewFactory.h: Ditto.
        * platform/ContextMenu.cpp: Wrap entire file in ENABLE(CONTEXT_MENUS).
        * platform/LocalizedStrings.h: Use ENABLE(CONTEXT_MENUS) where applicable.
        * platform/mac/ContextMenuItemMac.mm: Wrap entire file in ENABLE(CONTEXT_MENUS).
        * platform/mac/ContextMenuMac.mm: Ditto.
        * platform/mac/LocalizedStringsMac.mm: Use ENABLE(CONTEXT_MENUS) where applicable.
        * svg/graphics/SVGImage.cpp: Ditto.
        (WebCore::SVGImage::dataChanged):

2009-09-16  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Clean up invalidation for repainting.  Hoist the dirty rect intersection test in ScrollViewMac up
        into ScrollView so that all platforms do it.
        
        Patch deferred repaints in FrameView::repaintContentRectangle to only add the visible portion of
        the rectangle for repainting.

        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::repaintContentRectangle):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformRepaintContentRectangle):

2009-09-16  Greg Bolsinga  <bolsinga@apple.com>

        Add ENABLE(DRAG_SUPPORT)
        https://bugs.webkit.org/show_bug.cgi?id=29233

        Reviewed by David Kilzer.

        No new tests. (No change in default behavior.)

        * DerivedSources.make: Use new WebCore.DragSupport.exp file if ENABLE_DRAG_SUPPORT.
        * WebCore.base.exp: Move Drag Support only exports to WebCore.DragSupport.exp.
        * WebCore.xcodeproj/project.pbxproj: Add WebCore.DragSupport.exp.
        * dom/Clipboard.h: Use ENABLE(DRAG_SUPPORT) where applicable.
        * loader/EmptyClients.h: Ditto.
        * page/DragController.cpp: Wrap entire file in ENABLE(DRAG_SUPPORT).
        * page/EventHandler.cpp: Use ENABLE(DRAG_SUPPORT) where applicable.
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        * page/EventHandler.h: Ditto.
        * page/Page.cpp: Ditto.
        (WebCore::Page::Page):
        * page/Page.h: Ditto.
        * page/mac/DragControllerMac.mm: Wrap entire file in ENABLE(DRAG_SUPPORT).
        * page/mac/EventHandlerMac.mm: Use ENABLE(DRAG_SUPPORT) where applicable.
        (WebCore::EventHandler::passSubframeEventToSubframe):
        * platform/DragData.cpp: Wrap entire file in ENABLE(DRAG_SUPPORT).
        * platform/DragImage.cpp: Wrap entire file in ENABLE(DRAG_SUPPORT).
        * platform/mac/ClipboardMac.h: Use ENABLE(DRAG_SUPPORT) where applicable.
        * platform/mac/ClipboardMac.mm: Ditto.
        * platform/mac/DragDataMac.mm: Wrap entire file in ENABLE(DRAG_SUPPORT).
        * platform/mac/DragImageMac.mm: Wrap entire file in ENABLE(DRAG_SUPPORT).
        * rendering/RenderLayer.cpp: Use ENABLE(DRAG_SUPPORT) where applicable.
        (WebCore::RenderLayer::autoscroll):
        * rendering/RenderObject.cpp: Ditto.
        * rendering/RenderObject.h: Ditto.
        * svg/graphics/SVGImage.cpp: Ditto.
        (WebCore::SVGImage::dataChanged):

2009-09-16  Kevin Ollivier  <kevino@theolliviers.com>

        wxMSW build fix after adding support for high resolution times in Win.

        * page/Settings.cpp:
        * page/Settings.h:

2009-09-16  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Added operator==() to event listeners. This fixes V8 bindings
        build broken in http://trac.webkit.org/changeset/48402.
        https://bugs.webkit.org/show_bug.cgi?id=29298

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::V8AbstractEventListener): Now
        uses JSEventListenerType.
        * bindings/v8/V8AbstractEventListener.h:
        (WebCore::V8AbstractEventListener::operator==): Only compares
        pointers since we create at most one wrapper for a JS object.

2009-09-16  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Crash when visiting http://flipper.googlelabs.com/
        https://bugs.webkit.org/show_bug.cgi?id=29293

        Check type for being null or empty before looking it up in the
        hash of supported types.

        Tested by http/tests/loading/redirect-with-no-location-crash.html

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::supportsType):

2009-09-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Removed the notion of "disconnected nodes with event listeners" because
        it was vestigial. The reference cycle it tried to solve was solved another
        way in https://bugs.webkit.org/show_bug.cgi?id=21260.

        * dom/Document.cpp:
        (WebCore::Document::removeAllEventListeners):
        * dom/Document.h:
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::insertedIntoDocument):
        (WebCore::Node::removedFromDocument):
        (WebCore::Node::willMoveToNewOwnerDocument):
        (WebCore::Node::didMoveToNewOwnerDocument):
        (WebCore::Node::addEventListener):
        (WebCore::Node::removeEventListener):
        (WebCore::Node::clearAttributeEventListener):

2009-09-15  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        WAI-ARIA: add support for ranges, including the progressbar, slider, and spinbutton roles
        https://bugs.webkit.org/show_bug.cgi?id=28841

        Allow certain ARIA roles to change value with AXIncrement and AXDecrement. 
        Consolidate increment/decrement/changeValue methods. 

        Test: accessibility/aria-slider-value-change.html

        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::increment):
        (WebCore::AccessibilityRenderObject::decrement):
        (WebCore::AccessibilityRenderObject::changeValueByPercent):
        (WebCore::AccessibilityRenderObject::setValue):
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySlider.cpp:
        * accessibility/AccessibilitySlider.h:
        * dom/Element.cpp:
        (WebCore::Element::updateAfterAttributeChanged):

2009-09-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Removed the jsEventListeners set from JSDOMGlobalObject, to simplify
        creation and destruction of JSDOMGlobalObject and event listeners.
        
        Added an abstract operator==() to EventListener, to replace the
        jsEventListeners set's role in determining if two event listeners are
        equal from the DOM's perspective.
        
        Added a type field to EventListener, and casting operations, to support
        operator==() and other abstract operations.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::addEventListener):
        (WebCore::JSAbstractWorker::removeEventListener):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        * bindings/js/JSDesktopNotificationsCustom.cpp:
        (WebCore::JSNotification::addEventListener):
        (WebCore::):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::~JSEventListener):
        (WebCore::JSEventListener::markJSFunction):
        (WebCore::JSEventListener::handleEvent):
        (WebCore::JSEventListener::reportError):
        (WebCore::JSEventListener::operator==):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::cast):
        * bindings/js/JSEventSourceCustom.cpp:
        (WebCore::JSEventSource::addEventListener):
        (WebCore::JSEventSource::removeEventListener):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/objc/ObjCEventListener.h:
        (WebCore::ObjCEventListener::cast):
        * bindings/objc/ObjCEventListener.mm:
        (WebCore::ObjCEventListener::ObjCEventListener):
        (WebCore::ObjCEventListener::operator==):
        * dom/EventListener.h:
        (WebCore::EventListener::):
        (WebCore::EventListener::type):
        (WebCore::EventListener::EventListener):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::addEventListener):
        (WebCore::MessagePort::removeEventListener):
        * dom/Node.cpp:
        (WebCore::Node::removeEventListener):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::mainFrameDocument):
        (WebCore::InspectorDOMAgent::operator==):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::cast):
        * loader/ImageDocument.cpp:
        (WebCore::ImageEventListener::cast):
        (WebCore::ImageEventListener::ImageEventListener):
        (WebCore::ImageEventListener::operator==):
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::addEventListener):
        (WebCore::DOMApplicationCache::removeEventListener):
        * notifications/Notification.cpp:
        (WebCore::Notification::removeEventListener):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::removeEventListener):
        * page/EventSource.cpp:
        (WebCore::EventSource::addEventListener):
        (WebCore::EventSource::removeEventListener):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::ConditionEventListener::cast):
        (WebCore::ConditionEventListener::ConditionEventListener):
        (WebCore::ConditionEventListener::operator==):
        (WebCore::ConditionEventListener::handleEvent):
        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::addEventListener):
        (WebCore::AbstractWorker::removeEventListener):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::addEventListener):
        (WebCore::WorkerContext::removeEventListener):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::addEventListener):
        (WebCore::XMLHttpRequest::removeEventListener):
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::addEventListener):
        (WebCore::XMLHttpRequestUpload::removeEventListener):

2009-09-15  Alex Milowski  <alex@milowski.com>

        Reviewed by Tor Arne Vestbø.

        Added ENABLE_MATHML to feature defines

        * Configurations/FeatureDefines.xcconfig:

2009-09-14  Andrew Richards  <randrew@gmail.com>

        Reviewed by Sam Weinig.

        Document.elementFromPoint() and Document.caretRangeFromPoint() erroneously returning null at points visible only after scrolling.
        https://bugs.webkit.org/show_bug.cgi?id=29245

        Use visibleContentRect() instead of boundsRect() when checking hit point bounds on viewport.

        * dom/Document.cpp:
        (WebCore::Document::elementFromPoint):
        (WebCore::Document::caretRangeFromPoint):

2009-09-15  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Eric Seidel

        http://bugs.webkit.org/show_bug.cgi?id=26660

        Chromium Windows: When rotated, the baseline for a span of complex
        script is completely misaligned with that of the adjacent 
        simple script text. It's fixed by not applying the baseline offset for
        the Skia code path.

        Test: transforms/2d/hindi-rotated.html

        * platform/graphics/chromium/UniscribeHelper.cpp:
        (WebCore::UniscribeHelper::draw):

2009-09-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Pass the PopupMenu pointer to CreateWindowEx and then get it from the LPCREATESTRUCT in
        the WM_CREATE handler. This way we don't have to first create an zero size window and then size it.
        
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::PopupMenuWndProc):

2009-09-15  Drew Wilson  <atwilson@google.com>

        Reviewed by Darin Adler.

        MessageEvent should not be cancelable by default
        https://bugs.webkit.org/show_bug.cgi?id=27846

        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        Changed constructor to set cancelable=false by default, per the HTML5 spec.

2009-09-15  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by George Staikos.

        Fix SVG path parsing error if a command starts with dot '.'
        https://bugs.webkit.org/show_bug.cgi?id=29123

        * svg/SVGParserUtilities.cpp:
        (WebCore::SVGPathParser::parseSVG):

2009-09-15  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Implement conditional breakpoints in the Web Inspector frontend.
        https://bugs.webkit.org/show_bug.cgi?id=28908

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint.prototype.set condition):
        * inspector/front-end/Popup.js: Added.
        (WebInspector.Popup):
        (WebInspector.Popup.prototype.show):
        (WebInspector.Popup.prototype.hide):
        (WebInspector.Popup.prototype.get visible):
        (WebInspector.Popup.prototype.set element):
        (WebInspector.Popup.prototype.get element):
        (WebInspector.Popup.prototype.positionElement):
        (WebInspector.Popup.prototype.set anchor):
        (WebInspector.Popup.prototype.get anchor):
        (WebInspector.Popup.prototype.set autoHide):
        (WebInspector.Popup.prototype._checkNotVisible):
        (WebInspector.Popup.prototype._keyEventHandler):
        (WebInspector.Popup.prototype._mouseDownEventHandler):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.revealLine):
        (WebInspector.SourceFrame.prototype._loaded):
        (WebInspector.SourceFrame.prototype._documentContextMenu):
        (WebInspector.SourceFrame.prototype._documentMouseDown):
        (WebInspector.SourceFrame.prototype._editBreakpointCondition.committed):
        (WebInspector.SourceFrame.prototype._editBreakpointCondition.dismissed):
        (WebInspector.SourceFrame.prototype._editBreakpointCondition):
        (WebInspector.SourceFrame.prototype._showBreakpointConditionPopup):
        (WebInspector.SourceFrame.prototype._createPopupElement):
        (WebInspector.SourceFrame.prototype._addBreakpointToSource):
        (WebInspector.SourceFrame.prototype._removeBreakpointFromSource):
        (WebInspector.SourceFrame.prototype._drawBreakpointImagesIfNeeded.drawBreakpoint):
        (WebInspector.SourceFrame.prototype._drawBreakpointImagesIfNeeded):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.set currentFocusElement):
        (WebInspector.set currentPanel):
        (WebInspector.loaded):
        (WebInspector.contextMenu):
        (WebInspector.elementDragStart):
        (WebInspector.updateResource):
        (WebInspector.drawLoadingPieChart):
        (WebInspector.linkifyURLAsNode):
        (WebInspector.startEditing.getContent):
        (WebInspector.startEditing.editingCancelled):
        (WebInspector.startEditing.editingCommitted):
        * inspector/front-end/utilities.js:
        (Element.prototype.positionAt):
        (Element.prototype.offsetRelativeToWindow):

2009-09-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Page cache should support pages with unload handlers as an experiment.
        <rdar://problem/7196485> and https://bugs.webkit.org/show_bug.cgi?id=29021

        For the experiment, only allow pages with unload handlers into the Page Cache on
        Mac and Windows.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::logCanCacheFrameDecision):

2009-09-14  Simon Fraser  <simon.fraser@apple.com>

        Fix the change in r48376 to do a null-check to fix a crashing test.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::menuListDefaultEventHandler):

2009-09-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7047282> Safari crashes at WebCore::RenderMenuList::adjustInnerStyle() 436
        
        Avoid a crash when a mouse event handler on a <select> changes the select from a popup
        to a list (by setting the 'size' property) inside the event handler.

        Test: fast/forms/select-change-popup-to-listbox-in-event-handler.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::menuListDefaultEventHandler):

2009-09-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Jon Honeycutt.

        More PopupMenu cleanup.
        
        * platform/PopupMenu.h:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        Call registerClass.
        
        (WebCore::PopupMenu::registerClass):
        Make this a private static member function so it can refer to PopupMenuWndProc.
        
        (WebCore::PopupMenu::PopupMenuWndProc):
        Try to get the PopupMenu and call its wndProc member function.
        
        (WebCore::PopupMenu::wndProc):
        Make this a member function.

2009-09-14  Brady Eidson  <beidson@apple.com>

        Not reviewed, maybe should've been:

        Cleaning up more Windows-specific fallout from the fix for:
        <rdar://problem/7174050> and https://bugs.webkit.org/show_bug.cgi?id=29160

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::WebCoreSynchronousLoader::load): Don't allow empty CFStrings as the stored credentials,
          as related checks all look at nullity when they really mean to be looking for emptiness. 

2009-09-14  Anders Carlsson  <andersca@apple.com>

        Speculative Qt build fix.
        
        * platform/qt/QWebPopup.cpp:
        (WebCore::QWebPopup::hidePopup):

2009-09-14  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Darin Fisher.

        Fix RenderThemeChromiumWin::determineClassicState so that classic_state
        matches the state values (and you get a single classic_state value
        for a given {part,state} value. This change will be tested by a 
        chromium patch that will land after this.

        This will be tested by code landing downstream on Chromium.org; the
        code does not execute on webkit.org.

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::determineClassicState):
        (WebCore::RenderThemeChromiumWin::getThemeData):

2009-09-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=29138
        Simplify popup menu handling.

        * platform/PopupMenuClient.h:
        Rename hidePopup to popupDidHide.
        
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::handleKeyEvent):        
        (WebCore::PopupListBox::abandon):
        (WebCore::PopupListBox::acceptIndex):
        Call popupDidHide instead of hidePopup.
        
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::menuUnmapped):
        Ditto.
        
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::show):
        Ditto.
        
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::hide):
        Call popupDidHide.
        
        (WebCore::PopupWndProc):
        Call PopupMenu::hide.
        
        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenu::OnMenuItemSelected):
        Call popupDidHide.
        
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::hidePopup):
        (WebCore::RenderMenuList::popupDidHide):
        * rendering/RenderMenuList.h:
        Set the "popup is visible" flag in popupDidHide.
        
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::hidePopup):
        (WebCore::RenderTextControlSingleLine::popupDidHide):
        * rendering/RenderTextControlSingleLine.h:
        Ditto.

2009-09-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt.

        - Fix <rdar://problem/7182275>.

        Make sure that the newly created scrollbar's style is up to date.
        
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::~PopupMenu):
        Call setParent so that the scrollbar's parts are torn down correctly.
        
        (WebCore::PopupMenu::show):
        Call styleChanged.

2009-09-11  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/7197644> WebKit should broadcast an MSAA event when
        jumping to a named anchor

        https://bugs.webkit.org/show_bug.cgi?id=28899

        Reviewed by Adam Roben.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::):
        Added declaration for handleScrolledToAnchor(). Added a new entry to
        the enum of accessibility notifications.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::firstAccessibleObjectFromNode):
        Code moved from AccessibilityRenderObject::internalLinkElement() and
        refactored slightly; walks the tree until it finds a Node (with a
        renderer) whose accessibility is not ignored.

        * accessibility/AccessibilityObject.h:
        Added a declaration for firstAccessibleObjectFromNode().

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::internalLinkElement):
        Code moved to AccessibilityObject::firstAccessibleObjectFromNode().

        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::handleScrolledToAnchor):
        Stubbed.

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::handleScrolledToAnchor):
        Stubbed.

        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        Add a default case that returns early for notifications that Mac
        doesn't handle.
        (WebCore::AXObjectCache::handleScrolledToAnchor):
        Stubbed.

        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::handleScrolledToAnchor):
        Post an AXScrolledToAnchor notification for the first accessible from
        the anchor Node.
        (WebCore::AXObjectCache::postPlatformNotification):
        If the notification is AXFocusedUIElementChanged, fire an
        EVENT_OBJECT_FOCUS. If the notification is AXScrolledToAnchor, fire
        EVENT_SYSTEM_SCROLLINGSTART, matching Firefox.
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        Code moved to postPlatformNotification().

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToAnchor):
        Call AXObjectCache::handleScrolledToAnchor().

2009-09-14  Anthony Ricaud  <rik@webkit.org>

        Reviewed by Timothy Hatcher.

        Cookies are not inspectable after reloading a page
        https://bugs.webkit.org/show_bug.cgi?id=29222

        Create the cookieTreeElement on initialization instead of when the view is shown.
        Reset the selected element of the sidebar on reset.

        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.show):
        (WebInspector.StoragePanel.prototype.reset):


2009-09-14  Brady Eidson  <beidson@apple.com>

        Windows build fix.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::WebCoreSynchronousLoader::didReceiveChallenge):
        (WebCore::WebCoreSynchronousLoader::load):

2009-09-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Alexey Proskuryakov.

        Safari 4 cannot be used to update firmware on Linksys routers.
        <rdar://problem/7174050> and https://bugs.webkit.org/show_bug.cgi?id=29160

        In http://trac.webkit.org/changeset/42483, we disabled CFNetwork's session credential storage and 
        implemented our own in WebCore.

        One feature we lost is that CFNetwork would automatically send previously authenticated credentials
        with new connections when the paths match, as allowed by RFC 2617 for HTTP Basic and Digest Authentication.  

        Even though it's optional for User Agents to do this, (some?) Linksys routers rely on this behavior for
        HTTP Basic Authentication.  So now WebCore's CredentialStorage will track URL paths for Basic credentials.

        We're not making this enhancement for Digest at this time, since we don't know of anything that broke
        due to the change in Digest behavior.

        Test: http/tests/loading/basic-credentials-sent-automatically.html
              http/tests/loading/basic-auth-resend-wrong-credentials.html

        * WebCore.base.exp:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

        * platform/network/Credential.cpp:
        (WebCore::Credential::isEmpty):
        * platform/network/Credential.h:

        Add a slightly more full featured CredentialStore that will track URL paths a credential belongs to:
        * platform/network/CredentialStorage.cpp: Added.
        (WebCore::protectionSpaceToCredentialMap):
        (WebCore::originToDefaultCredentialMap):
        (WebCore::originStringFromURL):
        (WebCore::CredentialStorage::set):
        (WebCore::CredentialStorage::get):
        (WebCore::CredentialStorage::getDefaultAuthenticationCredential):
        * platform/network/CredentialStorage.h: Added.

        Allow ProtectionSpace to be a hash key:
        * platform/network/ProtectionSpace.cpp:
        (WebCore::ProtectionSpace::ProtectionSpace):
        * platform/network/ProtectionSpace.h:
        (WebCore::ProtectionSpace::ProtectionSpace):
        (WebCore::ProtectionSpace::isHashTableDeletedValue):
        * platform/network/ProtectionSpaceHash.h: Added.
        (WebCore::ProtectionSpaceHash::hash):
        (WebCore::ProtectionSpaceHash::equal):

        Allow ResourceHandles to remember the initial credential they used:
        * platform/network/ResourceHandleInternal.h:

        Allow mutable ResourceRequests to update their platform object if HTTP header fields change:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::addHTTPHeaderField):

        Remove WebCoreCredentialStorage:
        * platform/network/cf/AuthenticationCF.cpp:
        * platform/network/cf/AuthenticationCF.h:
        * platform/network/mac/AuthenticationMac.h:
        * platform/network/mac/AuthenticationMac.mm:

        Change ResourceHandleCFNet to try to use stored credentials on new connections, if appropriate:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Only try the ProtectionSpace key'ed
          Credential if it does not match the initially used Credential.
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::WebCoreSynchronousLoader::didReceiveChallenge): Only try the ProtectionSpace key'ed
          Credential if it does not match the initially used Credential.
        (WebCore::WebCoreSynchronousLoader::load):

        Change ResourceHandleMac to try to use stored credentials on new connections, if appropriate:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Only try the ProtectionSpace key'ed
          Credential if it does not match the initially used Credential.
        (WebCore::ResourceHandle::receivedCredential):
        (-[WebCoreSynchronousLoader connection:didReceiveAuthenticationChallenge:]): Only try the 
          ProtectionSpace key'ed Credential if it does not match the initially used Credential.
        (+[WebCoreSynchronousLoader loadRequest:allowStoredCredentials:returningResponse:error:]):

        Add base64-ability to CString:
        * platform/text/CString.cpp:
        (WebCore::CStringBuffer::base64Encode):
        (WebCore::CString::base64Encode):
        * platform/text/CString.h:
        (WebCore::CStringBuffer::create):
        (WebCore::CStringBuffer::CStringBuffer):

2009-09-12  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Fix <rdar://problem/6954546> Crashes in WebCore::RenderPart::setWidget below FrameLoader::loadPlugin.

        The calls to FrameLoader::requestObject within RenderPartObject::updateWidget can result in a plug-in
        being initialized.  This can run cause arbitrary JavaScript to run and may result in the RenderPartObject
        being detached from the render tree and destroyed, causing a crash like <rdar://problem/6954546>.

        No test is possible until <rdar://problem/7090444> is fixed.

        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget): Ensure that we stay alive for the duration of plug-in initialization.

2009-09-12  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Add RenderWidgetProtector to simplify protecting a RenderWidget from destruction for the
        duration of a function.  Deploy it within RenderWidget.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):
        (WebCore::RenderWidget::updateWidgetPosition): Use a RefPtr rather than explicitly
        ref'ing and deref'ing the node.
        * rendering/RenderWidget.h:
        * rendering/RenderWidgetProtector.h:
        (WebCore::RenderWidgetProtector::RenderWidgetProtector):
        (WebCore::RenderWidgetProtector::~RenderWidgetProtector):

2009-09-14  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        CodeGenerator.pm needs some cleaning up
        https://bugs.webkit.org/show_bug.cgi?id=29238

        * bindings/scripts/CodeGenerator.pm:
        (FindParentsRecursively): Removed; its functionality is now handled in
        AddMethodsConstantsAndAttributesFromParentClasses.
        (ForAllParents): New function that visits an interface's ancestors and
        invokes a callback for each one.
        (AddMethodsConstantsAndAttributesFromParentClasses): Simplified by using
        ForAllParents.
        (GetMethodsAndAttributesFromParentClasses): Ditto.
        (IDLFileForInterface): Factored out previous calls to ScanDirectory into
        this new function, which returns the filename containing a given IDL
        interface definition.
        (ParseInterface): Simplified by using IDLFileForInterface.
        (ScanDirectory): Removed in lieu of IDLFileForInterface.
        * bindings/scripts/CodeGeneratorV8.pm: Drop call to
        FindParentsRecursively and get the list of parents from the
        AddMethodsConstantsAndAttributesFromParentClasses call instead.

2009-09-14  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Assert hit when dropping a file in QtLauncher
        https://bugs.webkit.org/show_bug.cgi?id=29242

        Qt's implementation of DropData::asURL does not return a URL encoded string
        as expected.

        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::asURL):

2009-09-13  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix, file was missed during TLS.cpp removal.

        * page/wx/FrameWx.cpp: Added.
        (WebCore::Frame::dragImageForSelection):

2009-09-13  Anthony Ricaud  <rik@webkit.org>

        Reviewed by Oliver Hunt.

        Web Inspector: Add "New Style Rule" to the localizedStrings
        https://bugs.webkit.org/show_bug.cgi?id=29237

        * English.lproj/localizedStrings.js:

2009-09-13  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Implement filesystem functions.

        https://bugs.webkit.org/show_bug.cgi?id=29196

        * platform/wx/FileSystemWx.cpp:
        (WebCore::fileExists):
        (WebCore::deleteFile):
        (WebCore::deleteEmptyDirectory):
        (WebCore::getFileSize):
        (WebCore::getFileModificationTime):
        (WebCore::makeAllDirectories):
        (WebCore::pathByAppendingComponent):
        (WebCore::homeDirectoryPath):
        (WebCore::directoryName):

2009-09-12  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes for wx 2.9.

        * platform/wx/ScrollbarThemeWx.cpp:
        * platform/wx/wxcode/gtk/scrollbar_render.cpp:
        (wxGetGdkWindowForDC):

2009-09-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        [ES5] Implement Object.keys
        https://bugs.webkit.org/show_bug.cgi?id=29170

        Switch from getPropertyNames to getOwnPropertyNames, and provide custom
        getPropertyNames to DOMWindow, DOMWindowShell and QuarantinedObjectWrapper
        in order to ensure correct semantics are maintained.

        Test: fast/js/Object-keys.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertyNames):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::getOwnPropertyNames):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::getOwnPropertyNames):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertyNames):
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::getPropertyNames):
        (WebCore::JSQuarantinedObjectWrapper::getOwnPropertyNames):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::getOwnPropertyNames):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::getPropertyNames):
        (JSC::RuntimeObjectImp::getOwnPropertyNames):
        * bridge/runtime_object.h:

2009-09-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=29219
        Document.elementFromPoint() should take page scroll into consideration

        Test: fast/dom/elementFromPoint-relative-to-viewport.html

        * dom/Document.cpp:
        (WebCore::Document::elementFromPoint):
        (WebCore::Document::caretRangeFromPoint):

2009-09-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=29217
        Document.caretRangeFromPoint should take the scroll offset into account before hit testing

        In accordance with the CSSOM View Module spec, Document.caretRangeFromPoint should interpret
        the point passed to it as relative to the viewport, not the document.

        Test: fast/dom/Document/CaretRangeFromPoint/hittest-relative-to-viewport.html

        * dom/Document.cpp:
        (WebCore::Document::caretRangeFromPoint):

2009-09-11  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Added some manual tests to show WebGL in action
        https://bugs.webkit.org/show_bug.cgi?id=29215

        * manual-tests/webgl: Added.
        * manual-tests/webgl/Earth.html: Added.
        * manual-tests/webgl/ManyPlanetsDeep.html: Added.
        * manual-tests/webgl/SpinningBox.html: Added.
        * manual-tests/webgl/TeapotPerPixel.html: Added.
        * manual-tests/webgl/TeapotPerVertex.html: Added.
        * manual-tests/webgl/resources: Added.
        * manual-tests/webgl/resources/CanvasMatrix.js: Added.
        * manual-tests/webgl/resources/earthmap1k.jpg: Added.
        * manual-tests/webgl/resources/mars500x250.png: Added.
        * manual-tests/webgl/resources/teapot.obj: Added.
        * manual-tests/webgl/resources/utils3d.js: Added.
 
2009-09-10  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        aria definition role spelled wrong "defintion"
        https://bugs.webkit.org/show_bug.cgi?id=28840

        Test: accessibility/aria-slider-value-change.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::RoleEntry::):

2009-09-11  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Eric Seidel.

        Fixes an assert in Node::isFocusable which was causing crashes in certain cases.
        https://bugs.webkit.org/show_bug.cgi?id=29210

        * dom/Node.cpp:
        (WebCore::Node::isFocusable):

2009-09-11  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Added variants to uniform* and vertexAttrib* calls which take sequence<> in place of CanvasArray
        https://bugs.webkit.org/show_bug.cgi?id=29139
        
        I also added a data() call to each of the CanvasArray subclasses to give back a types pointer
        to the baseAddress().

        * Configurations/FeatureDefines.xcconfig:
        * bindings/js/JSCanvasRenderingContext3DCustom.cpp:
        (WebCore::toArray):
        (WebCore::):
        (WebCore::dataFunctionf):
        (WebCore::dataFunctioni):
        (WebCore::dataFunctionMatrix):
        (WebCore::JSCanvasRenderingContext3D::uniform1fv):
        (WebCore::JSCanvasRenderingContext3D::uniform1iv):
        (WebCore::JSCanvasRenderingContext3D::uniform2fv):
        (WebCore::JSCanvasRenderingContext3D::uniform2iv):
        (WebCore::JSCanvasRenderingContext3D::uniform3fv):
        (WebCore::JSCanvasRenderingContext3D::uniform3iv):
        (WebCore::JSCanvasRenderingContext3D::uniform4fv):
        (WebCore::JSCanvasRenderingContext3D::uniform4iv):
        (WebCore::JSCanvasRenderingContext3D::uniformMatrix2fv):
        (WebCore::JSCanvasRenderingContext3D::uniformMatrix3fv):
        (WebCore::JSCanvasRenderingContext3D::uniformMatrix4fv):
        (WebCore::JSCanvasRenderingContext3D::vertexAttrib1fv):
        (WebCore::JSCanvasRenderingContext3D::vertexAttrib2fv):
        (WebCore::JSCanvasRenderingContext3D::vertexAttrib3fv):
        (WebCore::JSCanvasRenderingContext3D::vertexAttrib4fv):
        * html/canvas/CanvasByteArray.h:
        (WebCore::CanvasByteArray::data):
        * html/canvas/CanvasFloatArray.h:
        (WebCore::CanvasFloatArray::data):
        * html/canvas/CanvasIntArray.h:
        (WebCore::CanvasIntArray::data):
        * html/canvas/CanvasRenderingContext3D.cpp:
        (WebCore::CanvasRenderingContext3D::uniform1fv):
        (WebCore::CanvasRenderingContext3D::uniform1iv):
        (WebCore::CanvasRenderingContext3D::uniform2fv):
        (WebCore::CanvasRenderingContext3D::uniform2iv):
        (WebCore::CanvasRenderingContext3D::uniform3fv):
        (WebCore::CanvasRenderingContext3D::uniform3iv):
        (WebCore::CanvasRenderingContext3D::uniform4fv):
        (WebCore::CanvasRenderingContext3D::uniform4iv):
        (WebCore::CanvasRenderingContext3D::uniformMatrix2fv):
        (WebCore::CanvasRenderingContext3D::uniformMatrix3fv):
        (WebCore::CanvasRenderingContext3D::uniformMatrix4fv):
        (WebCore::CanvasRenderingContext3D::vertexAttrib1fv):
        (WebCore::CanvasRenderingContext3D::vertexAttrib2fv):
        (WebCore::CanvasRenderingContext3D::vertexAttrib3fv):
        (WebCore::CanvasRenderingContext3D::vertexAttrib4fv):
        * html/canvas/CanvasRenderingContext3D.h:
        * html/canvas/CanvasRenderingContext3D.idl:
        * html/canvas/CanvasShortArray.h:
        (WebCore::CanvasShortArray::data):
        * html/canvas/CanvasUnsignedByteArray.h:
        (WebCore::CanvasUnsignedByteArray::data):
        * html/canvas/CanvasUnsignedIntArray.h:
        (WebCore::CanvasUnsignedIntArray::data):
        * html/canvas/CanvasUnsignedShortArray.h:
        (WebCore::CanvasUnsignedShortArray::data):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        (WebCore::GraphicsContext3D::vertexAttrib1fv):
        (WebCore::GraphicsContext3D::vertexAttrib2fv):
        (WebCore::GraphicsContext3D::vertexAttrib3fv):
        (WebCore::GraphicsContext3D::vertexAttrib4fv):

2009-09-11  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel.

        Add ENABLE(WEB_SOCKETS) guards.
        https://bugs.webkit.org/show_bug.cgi?id=29174

        * bindings/v8/custom/V8WebSocketCustom.cpp:

2009-09-11  Eric Seidel  <eric@webkit.org>

        No review, rolling out r48229.
        http://trac.webkit.org/changeset/48229

        * WebCore.base.exp:
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard):
        (WebCore::Clipboard::sourceOperation):
        * page/DragController.cpp:
        (WebCore::DragController::DragController):
        (WebCore::DragController::dragExited):
        (WebCore::DragController::performDrag):
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::tryDHTMLDrag):
        (WebCore::DragController::startDrag):
        * page/DragController.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::dragSourceMovedTo):
        (WebCore::EventHandler::handleDrag):
        * page/EventHandler.h:

2009-09-11  Michelangelo De Simone  <micdesim@gmail.com>

        Fix the build.

        * html/ValidityState.cpp:
        (WebCore::ValidityState::typeMismatch):

2009-09-11  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Antti Koivisto.

        https://bugs.webkit.org/show_bug.cgi?id=27456
        Added support for static validation of url in
        ValidityState, for url state inputs.
        From HTML5 specs:
        http://www.whatwg.org/specs/web-apps/current-work/#url-state

        Test: fast/forms/ValidityState-typeMismatch-url.html

        * html/ValidityState.cpp:
        (WebCore::ValidityState::typeMismatch):

2009-09-11  Evan Stade  <estade@chromium.org>

        Reviewed by Darin Adler.

        Revert r47992: Expose functions to change the focus ring color for
        Linux Chromium.

        As Darin Fisher has pointed out, there is a better way to do this.

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::RenderThemeChromiumLinux):
        * rendering/RenderThemeChromiumLinux.h:

2009-09-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=29207
        Add checks for using WebCore JS context on secondary threads

        * bindings/js/JSDOMWindowBase.cpp: (WebCore::JSDOMWindowBase::commonJSGlobalData):
        Set the new debug-only mainThreadOnly flag.

2009-09-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        The inspector should have scope bars.
        https://bugs.webkit.org/show_bug.cgi?id=14353
        
        Add scope bars to the console, so the user can choose which category
        of messages they want to see (All, Errors, Warnings, Logs), and they
        can choose from one or more of {Errors, Warnings, Logs}.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.createFilterElement):
        (WebInspector.ConsoleView):
        (WebInspector.ConsoleView.prototype._updateFilter):
        (WebInspector.ConsoleView.prototype.filter):
        (WebInspector.ConsoleView.prototype.attach):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:

2009-09-11  Yusuke Sato  <yusukes@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Complex text doesn't show up with text stroking
        https://bugs.webkit.org/show_bug.cgi?id=28707

        Added extra NULL checks for HDC. This is the second fix for issue 28707,
        and the fix is similar to http://trac.webkit.org/changeset/45482.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/chromium/UniscribeHelper.cpp:
        (WebCore::UniscribeHelper::draw):

2009-09-11  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        Make ElementTimeControl methods return void and not throw.
        https://bugs.webkit.org/show_bug.cgi?id=28831

        SVG 1.1 erratum:
        http://www.w3.org/2003/01/REC-SVG11-20030114-errata#elementtimecontrol-interface

        Test: svg/dom/smil-methods.svg

        * svg/ElementTimeControl.h: Change return type from bool to void and remove exception argument.
        * svg/ElementTimeControl.idl: Change return type from bool to void and remove raises claus.
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::beginElement): Change return type from bool to void and remove exception argument.
        (WebCore::SVGAnimationElement::beginElementAt): Ditto.
        (WebCore::SVGAnimationElement::endElement): Ditto.
        (WebCore::SVGAnimationElement::endElementAt): Ditto.
        * svg/SVGAnimationElement.h: Ditto.

2009-09-11  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Added support for texImage2D which takes CanvasArray
        https://bugs.webkit.org/show_bug.cgi?id=29191

        * bindings/js/JSCanvasRenderingContext3DCustom.cpp:
        (WebCore::JSCanvasRenderingContext3D::texImage2D):
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::texImage2D):

2009-09-11  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Allow WebKit clients to opt out of high resolution timers on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=29192

        * page/Settings.cpp:
        (WebCore::Settings::setShouldUseHighResolutionTimers): Added.
        * page/Settings.h: Added getter/setter for shouldUseHighResolutionTimers.
        (WebCore::Settings::shouldUseHighResolutionTimers): Added.
        * platform/win/SharedTimerWin.cpp:
        (WebCore::setSharedTimerFireTime): Don't run high resolution timer code if it is disabled.

2009-09-11  Christian Plesner Hansen  <christian.plesner.hansen@gmail.com>

        Reviewed by Adam Barth.

        [v8] Share persistent context handles between events        
        Change events to use a single ref-counted shared persistent handle
        to the context in which to run, rather than create a new
        persistent handle for each new event which puts pressure on the
        gc.
        
        https://bugs.webkit.org/show_bug.cgi?id=29077

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/v8/SharedPersistent.h: Added.
        (WebCore::SharedPersistent::set):
        (WebCore::SharedPersistent::get):
        (WebCore::SharedPersistent::disposeHandle):
        (WebCore::SharedPersistent::create):
        (WebCore::SharedPersistent::SharedPersistent):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::V8AbstractEventListener):
        (WebCore::V8AbstractEventListener::handleEvent):
        * bindings/v8/V8AbstractEventListener.h:
        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::V8IsolatedWorld):
        (WebCore::V8IsolatedWorld::~V8IsolatedWorld):
        * bindings/v8/V8IsolatedWorld.h:
        (WebCore::V8IsolatedWorld::context):
        (WebCore::V8IsolatedWorld::shared_context):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInNewContext):
        (WebCore::V8Proxy::createWrapperFromCacheSlowCase):
        (WebCore::V8Proxy::isContextInitialized):
        (WebCore::V8Proxy::updateDocumentWrapperCache):
        (WebCore::V8Proxy::clearDocumentWrapperCache):
        (WebCore::V8Proxy::disposeContextHandles):
        (WebCore::V8Proxy::clearForClose):
        (WebCore::V8Proxy::clearForNavigation):
        (WebCore::V8Proxy::setSecurityToken):
        (WebCore::V8Proxy::updateDocument):
        (WebCore::V8Proxy::initContextIfNeeded):
        (WebCore::V8Proxy::shared_context):
        (WebCore::V8Proxy::mainWorldContext):
        (WebCore::V8Proxy::setContextDebugId):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::V8Proxy):
        (WebCore::V8Proxy::context):
        (WebCore::V8Proxy::shared_context):

2009-09-11  Anton Muhin  <antonm@chromium.org>

        Reviewed by David Levin.

        Create a real handle (one which would save an object from GC).
        https://bugs.webkit.org/show_bug.cgi?id=29150

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8ExternalString):

2009-09-11  Anton Muhin  <antonm@chromium.org>

        Reviewed by David Levin.

        Inline WebCore::v8String as it only invokes WebCore::v8ExternalString.
        https://bugs.webkit.org/show_bug.cgi?id=29152

        * bindings/v8/V8Binding.cpp:
        * bindings/v8/V8Binding.h:
        (WebCore::v8String):

2009-09-11  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Simon Hausmann.

        Changed URLs from qtsoftware.com to qt.nokia.com, as part of a general
        renaming.

        * ChangeLog-2009-06-16:

2009-09-11  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon Hausmann.

        Use LIBS_PRIVATE on Qt/Mac.

        On the Mac, it means "-framework ApplicationServices -framework Carbon
        -framework AppKit" are no longer part of the default LIBS in Qt
        applications. This required a lot of fixes where we used Mac-specific
        code in Qt.

        * WebCore.pro:

2009-09-11  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        Remove duplicated WK_{u,l}cfirst subs from CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=29165

        * bindings/scripts/CodeGeneratorV8.pm: Remove WK_ucfirst and
        WK_lcfirst, and call the ones in CodeGenerator.pm instead.

2009-09-11  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=29132
        Symbian winscw compiler fails compiling WebCore/text/RegularExpression.cpp.

        Add RegularExpression class qualifier before Private.

        * platform/text/RegularExpression.cpp:

2009-09-11  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=29131
        Use a different variadic macro format for Symbian compiler.
        
        Use arg... instead of ellipsis in variadic macro.        

        * platform/StaticConstructors.h:

2009-09-11  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=28806

        [Qt] Make the WebInspector available as a QWidget.

        * WebCore.pro:

2009-09-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed fix for the Web Inspector with the Qt build.

        Re-generate the Qt resource file by running
        WebKitTools/Scripts/generate-qt-inspector-resource

        * inspector/front-end/WebKit.qrc:

2009-09-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build, remove stray semicolon from function definition.

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::buffered):

2009-09-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Detect mixed content
        https://bugs.webkit.org/show_bug.cgi?id=29003

        Detect some basic kinds of mixed content (HTTP content loaded into an
        HTTPS context).  This new detection logic isn't perfect, but it's a
        place to start.

        Tests: http/tests/security/mixedContent/about-blank-iframe-in-main-frame.html
               http/tests/security/mixedContent/data-url-iframe-in-main-frame.html
               http/tests/security/mixedContent/data-url-script-in-iframe.html
               http/tests/security/mixedContent/insecure-css-in-iframe.html
               http/tests/security/mixedContent/insecure-css-in-main-frame.html
               http/tests/security/mixedContent/insecure-iframe-in-iframe.html
               http/tests/security/mixedContent/insecure-iframe-in-main-frame.html
               http/tests/security/mixedContent/insecure-image-in-iframe.html
               http/tests/security/mixedContent/insecure-image-in-main-frame.html
               http/tests/security/mixedContent/insecure-script-in-iframe.html
               http/tests/security/mixedContent/redirect-http-to-https-iframe-in-main-frame.html
               http/tests/security/mixedContent/redirect-http-to-https-script-in-iframe.html
               http/tests/security/mixedContent/redirect-https-to-http-iframe-in-main-frame.html
               http/tests/security/mixedContent/redirect-https-to-http-script-in-iframe.html

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::canRequest):
        (WebCore::DocLoader::requestResource):
        (WebCore::DocLoader::checkCacheObjectStatus):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isMixedContent):
        (WebCore::FrameLoader::checkIfDisplayInsecureContent):
        (WebCore::FrameLoader::checkIfRunInsecureContent):
        * loader/FrameLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest):

2009-09-10  Mark Rowe  <mrowe@apple.com>

        Fix the Windows build.

        Restore platform/mock to the header search path after it was removed in r48270.

        * WebCore.vcproj/WebCoreCommon.vsprops:

2009-09-08  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Move the option to create a new style rule under the Styles' gear menu.

        https://bugs.webkit.org/show_bug.cgi?id=29039

        Reviewed by Sam Weinig.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane): Add "New Style Rule" option to the gear menu.
        (WebInspector.StylesSidebarPane.prototype._update): Check instanceof BlankStylePropertiesSection instead.
        (WebInspector.StylesSidebarPane.prototype._changeSetting): Added. Keeps the color format setting selected
        while calling the correct action.
        (WebInspector.StylesSidebarPane.prototype._createNewRule): Creates a new section and edits the selector.
        (WebInspector.StylesSidebarPane.prototype.addBlankSection): Insert the section in a cleaner way.
        (WebInspector.StylesSidebarPane.prototype.removeSection): Added. Removes the passed in section.
        (WebInspector.StylesSidebarPane.prototype.appropriateSelectorForNode): Return an empty string if there is no node.
        (WebInspector.StylePropertiesSection.prototype.expand): Removed the check for _blank.
        (WebInspector.StylePropertiesSection.prototype.startEditingSelector): No need for the context, the original selector
        is remembered by the editing code.
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCancelled): Do nothing. The original text is already
        restored by the editing code.
        (WebInspector.BlankStylePropertiesSection): Call the StylePropertiesSection constructor with appropriate data.
        Remove event listener code.
        (WebInspector.BlankStylePropertiesSection.prototype.expand): Added. Does nothing to prevent expanding.
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted.callback): Correctly construct the
        WebInspector.CSSStyleDeclaration. Call editingSelectorCancelled instead of editingCancelled.
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted): Renamed from editingCommitted to
        override the base class.
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCancelled): Remove the section.
        (WebInspector.BlankStylePropertiesSection.prototype.makeNormal): Removed event listener code. Removed the delete lines
        since they were doing nothing (deleting nonexistent properties that exist only on the prototype.) Change prototypes at
        the end to correctly swtich to a real StylePropertiesSection.
        * inspector/front-end/inspector.js:
        (WebInspector.startEditing.editingCancelled): Ceck for null/undefined callbacks.
        (WebInspector.startEditing.editingCommitted): Ditto.

2009-09-10  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Fix comparison between signed and unsigned integer warnings
        https://bugs.webkit.org/show_bug.cgi?id=29162

        No functional change.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::findMethodIndex):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::duration):
        (WebCore::ImageDecoderQt::imageAtIndex):
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::fetchInfo):

2009-09-10  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Gustavo Noronha.

        Build fix for GTKafter r48267.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::buffered):

2009-09-08  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Dimitri Glazkov.

        Remove unneeded define for ActiveX.
        https://bugs.webkit.org/show_bug.cgi?id=29054

        * rendering/RenderPartObject.cpp:
        (WebCore::createClassIdToTypeMap):
        (WebCore::serviceTypeForClassId):
        (WebCore::RenderPartObject::updateWidget):

2009-09-10  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig.

        Don't copy IDL files in to the built framework.

        * WebCore.xcodeproj/project.pbxproj:

2009-09-10  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Eric Seidel.

        Implment Range.expand().
        https://bugs.webkit.org/show_bug.cgi?id=27632

        Test: fast/dom/Range/range-expand.html

        * dom/Range.cpp:
        (WebCore::Range::expand):
        * dom/Range.h:
        * dom/Range.idl:

2009-09-10  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket API implementation.
        https://bugs.webkit.org/show_bug.cgi?id=28038
        
        Add build systems for GNUmakefile.am, WebCore.xcodeproj and
        WebCore.vcproj.
        Add websockets directory and WebSocket.idl in qt build system.
        Tests will be landed once the code is completed and functional.

        * DerivedSources.cpp:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::webSocket):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        (WebCore::toEventTarget):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toWebSocket):
        * dom/EventTarget.h:
        * page/DOMWindow.idl:
        * websockets/WebSocket.cpp:
        (WebCore::ProcessWebSocketEventTask::create):
        (WebCore::ProcessWebSocketEventTask::performTask):
        (WebCore::ProcessWebSocketEventTask::ProcessWebSocketEventTask):
        (WebCore::isValidProtocolString):
        (WebCore::WebSocket::connect):
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::bufferedAmount):
        (WebCore::WebSocket::addEventListener):
        (WebCore::WebSocket::removeEventListener):
        (WebCore::WebSocket::dispatchEvent):
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didReceiveMessage):
        (WebCore::WebSocket::didClose):
        (WebCore::WebSocket::dispatchOpenEvent):
        (WebCore::WebSocket::dispatchMessageEvent):
        (WebCore::WebSocket::dispatchCloseEvent):
        * websockets/WebSocket.h:
        (WebCore::WebSocket::create):
        (WebCore::WebSocket::):
        (WebCore::WebSocket::setOnopen):
        (WebCore::WebSocket::onopen):
        (WebCore::WebSocket::setOnmessage):
        (WebCore::WebSocket::onmessage):
        (WebCore::WebSocket::setOnclose):
        (WebCore::WebSocket::onclose):
        (WebCore::WebSocket::toWebSocket):
        (WebCore::WebSocket::eventListeners):
        (WebCore::WebSocket::refEventTarget):
        (WebCore::WebSocket::derefEventTarget):
        * websockets/WebSocketChannel.cpp: Added.
        * websockets/WebSocketChannel.h: Added.
        * websockets/WebSocketChannelClient.h: Added.
        * websockets/WebSocketHandshake.cpp: Added.
        * websockets/WebSocketHandshake.h: Added.

2009-09-10  Albert J. Wong  <ajwong@chromium.org>

        No review, windows build fix only.
        
        Spurious semicolon causing parse error in chromium build on windows.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::buffered):

2009-09-10  Albert J. Wong  <ajwong@chromium.org>

        No review, build fix only.

        Adding in a missed include from the last patch that is breaking the
        chromium build.

        * rendering/RenderThemeChromiumMac.mm: include TimeRanges.h

2009-09-10  Alpha Lam  <hclam@chromium.org>

        Reviewed by Eric Carlson.

        HTMLMediaElement buffered attribute should report a list of time ranges
        https://bugs.webkit.org/show_bug.cgi?id=29041

        Changed MediaPlayerPrivateInterface and MediaPlayer's definition to
        report a list of buffered time ranges as WebCore::TimeRanges. This
        change also got rid of the maxTimeBuffered() method.

        No new tests since this is a API change.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::percentLoaded):
        Use MediaPlaier::buffered() instead of maxTimeBuffered().
        (WebCore::HTMLMediaElement::buffered):
        ditto.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::buffered):
        Use MediaPlayerPrivateInterface::buffered() instead of maxTimeBuffered().
        (WebCore::MediaPlayer::buffered):
        ditto.
        * platform/graphics/MediaPlayer.h:
        Removed maxTimeBuffered() and defines PassRefPtr<TimeRanges> buffered().
        * platform/graphics/MediaPlayerPrivate.h:
        ditto.
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        Implements PassRefPtr<TimeRanges> buffered();
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
        Removed maxTimeBuffered() and defines PassRefPtr<TimeRanges> buffered().
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        Removed maxTimeBuffered() and defines PassRefPtr<TimeRanges> buffered().
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::buffered):
        Implementation of buffered().
        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        Implements PassRefPtr<TimeRanegs> buffered().
        * platform/graphics/qt/MediaPlayerPrivatePhonon.h:
        Removed maxTimeBuffered() and defines PassRefPtr<TimeRanges> buffered().
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        Implements PassRefPtr<TimeRanges> buffered().
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
        Removed maxTimeBuffered() and defines PassRefPtr<TimeRanges> buffered().
        * platform/graphics/wince/MediaPlayerPrivateWince.h:
        ditto.
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::paintMediaSliderTrack):
        Use buffered() instead of maxTimeBuffered().
        * rendering/RenderThemeChromiumSkia.cpp:
        ditto.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMediaSliderTrack):
        ditto.

2009-09-10  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        Make bindings generators more aware of IDL dependencies
        https://bugs.webkit.org/show_bug.cgi?id=29114

        Make the JS and ObjC bindings generators able to output dependency
        rules for DerivedSources.make to consume.  These rules make a given
        generated binding class file header, JSWhatever.h, depend on Whatever's
        ancestor interfaces.

        * DerivedSources.make: Pass --write-dependencies to generate-bindings.pl
        when generating JS and ObjC bindings.  Include dependency fies that are
        generated due to that.
        * bindings/scripts/CodeGenerator.pm: Make
        AddMethodsConstantsAndAttributesFromParentClasses accumulate a list of
        the ancestor interfaces that were visited.
        * bindings/scripts/CodeGeneratorJS.pm: Optionally write out a dependency
        file.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
        * bindings/scripts/generate-bindings.pl: Add a --write-dependencies
        option.

2009-09-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez and Dan Winship.

        Give all requests to libsoup, to let it queue, and schedule them
        itself, instead of throttling the number of requests in WebCore.

        * platform/network/ResourceRequestBase.cpp:
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::initializeMaximumHTTPConnectionCountPerHost):

2009-09-10  Jian Li  <jianli@chromium.org>

        Reviewed by Eric Seidel.

        [V8] Make XMLHttpRequest.send handle File object.
        https://bugs.webkit.org/show_bug.cgi?id=28924

        Test: http/tests/local/send-dragged-file.html

        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-09-10  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Use fastNew and fastDelete instead of operator new and delete for CSSSelector class. 
        https://bugs.webkit.org/show_bug.cgi?id=25930

        Change using of operator new to fastNew and operator delete to
        fastDeleteSkippingDestructor for CSSSelector class to avoid mismatched function call.

        This change fixes valgrind's 'mismatched free' notification.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::~CSSParser):
        (WebCore::CSSParser::createFloatingSelector):
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::adoptSelectorVector):

2009-09-10  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Geolocation does not correctly handle reentrant calls from callbacks.
        https://bugs.webkit.org/show_bug.cgi?id=29040

        Tests: fast/dom/Geolocation/reentrant-error.html
               fast/dom/Geolocation/reentrant-success.html

        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::handleError): Modified. Call sendError directly, clearing notifier lists before making callback.
        (WebCore::Geolocation::makeSuccessCallbacks): Modified. Call sendPosition directly, clearing notifier lists before making callback.
        * page/Geolocation.h: Modified. Deleted sendErrorToXX and sendPositionToXXX methods.

2009-09-10  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Eric Seidel.

        Fixes issue where focused elements did not get blur and focus events when the window was blurred and focused.
        https://bugs.webkit.org/show_bug.cgi?id=27105

        Test: fast/events/blur-focus-window-should-blur-focus-element.html

        * page/FocusController.cpp:
        (WebCore::dispatchEventsOnWindowAndFocusedNode):
        (WebCore::FocusController::setFocused):
        (WebCore::FocusController::setActive):

2009-09-10  Adam Roben  <aroben@apple.com>

        Make the play/pause button in <video> controls indicate the button's
        action, not the movie state

        This matches the Mac behavior, iTunes, and many other media players.

        No test possible.

        Fixes <http://webkit.org/b/29126> Play/pause button in <video>
        controls shows the wrong image

        Reviewed by Eric Carlson.

        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart): Reversed when
        we show the play vs. pause artwork, so that the button reflects what
        will happen when you click it, rather than the current state of the
        movie.

2009-09-09  Steve Block  <steveblock@google.com>

        Reviewed by Maciej Stachowiak.

        Geolocation Coordinates::toString() prints bogus values for unspecified properties.
        https://bugs.webkit.org/show_bug.cgi?id=29080

        Test: fast/dom/Geolocation/position-string.html

        * GNUmakefile.am: Modified. Removes Geoposition.cpp and Coordinates.cpp.
        * WebCore.gypi: Modified. Removes Geoposition.cpp and Coordinates.cpp.
        * WebCore.pro: Modified. Removes Geoposition.cpp and Coordinates.cpp.
        * WebCore.vcproj/WebCore.vcproj: Modified. Removes Geoposition.cpp and Coordinates.cpp.
        * WebCore.xcodeproj/project.pbxproj: Modified. Removes Geoposition.cpp and Coordinates.cpp.
        * WebCoreSources.bkl: Modified. Removes Geoposition.cpp and Coordinates.cpp.
        * page/Coordinates.cpp: Removed.
        * page/Coordinates.h: Modified. Removes toString method.
        * page/Coordinates.idl: Modified. Removes toString method.
        * page/Geoposition.cpp: Removed.
        * page/Geoposition.h: Modified. Removes toString method.
        * page/Geoposition.idl: Modified. Removes toString method.

2009-09-09  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Correctly applies the Geolocation timeout property.
        https://bugs.webkit.org/show_bug.cgi?id=27256

        If a timeout is specified, the timer is started as soon as the location acquistion process starts.
        If a position fix is not obtained within the timeout interval, the position request is cancelled
        and the error callback (if specified) is invoked. If a position fix is obtained within the timeout
        interval, the timer is stopped. Permissions are then requested from the user if required. See
        http://www.w3.org/TR/geolocation-API/#position-options.

        Note that this logic means that the time required to obtain permissions from the user is not
        included in the timeout interval.

        Tests: fast/dom/Geolocation/timeout.html
               fast/dom/Geolocation/timeout-zero.html

        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::GeoNotifier::GeoNotifier): Modified. Takes Geolocation object as parameter.
        (WebCore::Geolocation::GeoNotifier::hasZeroTimeout): Added. Determines whether this request has a zero timeout.
        (WebCore::Geolocation::GeoNotifier::startTimerIfNeeded): Renamed from startTimer. Starts the timer if a timeout was specified.
        (WebCore::Geolocation::GeoNotifier::timerFired): Modified. Calls the error callback if specified, and reports the timeout to the Geolocation object.
        (WebCore::Geolocation::getCurrentPosition): Modified. Calls maybeStartTimer when starting the location acquisition process.
        (WebCore::Geolocation::watchPosition): Modified. Calls maybeStartTimer when starting the location acquisition process.
        (WebCore::Geolocation::requestTimedOut): Added. Cancels a request when it times out.
        (WebCore::Geolocation::setIsAllowed): Modified. No longer starts timers.
        (WebCore::Geolocation::sendPosition): Modified. No longer stops timers.
        (WebCore::Geolocation::stopTimer): Added. Stops the timers for a vector of notifiers.
        (WebCore::Geolocation::stopTimersForOneShots): Added. Stops the timers for all one-shots.
        (WebCore::Geolocation::stopTimersForWatchers): Added. Stops the timers for all watchers.
        (WebCore::Geolocation::stopTimers): Added. Stops the timers for all requests.
        (WebCore::Geolocation::geolocationServicePositionChanged): Modfified. Stops the timers for all requests.
        * page/Geolocation.h: Modified.
        (WebCore::Geolocation::GeoNotifier::create): Modified. Takes Geolocation object as parameter.

2009-09-09  Chris Fleizach  <cfleizach@apple.com>

        AX notifications should be an ENUM type instead of strings
        https://bugs.webkit.org/show_bug.cgi?id=28963

        Build fix for Qt.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::postPlatformNotification):

2009-09-08  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX notifications should be an ENUM type instead of strings
        https://bugs.webkit.org/show_bug.cgi?id=28963

        Moves AX notifications over to an ENUM type instead of
        using the actual string values that are used on OS X.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::selectedChildrenChanged):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::handleActiveDescendantChanged):
        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        * dom/Element.cpp:
        (WebCore::Element::updateAfterAttributeChanged):
        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedContents):
        * editing/mac/SelectionControllerMac.mm:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setInnerTextValue):

2009-09-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Missing checkout for getSVGDocument()
        https://bugs.webkit.org/show_bug.cgi?id=29064

        The V8 code generator didn't understand SVGCheckSecurityDocument.

        Tests: http/tests/security/xss-DENIED-getSVGDocument-iframe.html
               http/tests/security/xss-DENIED-getSVGDocument-object.html

        * bindings/scripts/CodeGeneratorV8.pm:

2009-09-09  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        Make SVGStyleElement inherit from SVGLangSpace
        https://bugs.webkit.org/show_bug.cgi?id=29058

        Required by SVG 1.1 Second Edition:
        http://dev.w3.org/SVG/profiles/1.1F2/publish/styling.html#InterfaceSVGStyleElement

        Test: svg/dom/SVGStyleElement/style-langspace.html

        * svg/SVGStyleElement.cpp: Drop methods xmlspace and setXmlspace.
        (WebCore::SVGStyleElement::SVGStyleElement): Add SVGLangSpace()
        initializer.
        (WebCore::SVGStyleElement::parseMappedAttribute): Call
        parseMappedAttribute on SVGLangSpace.
        * svg/SVGStyleElement.h: Drop xmlspace and setXmlspace declarations.
        * svg/SVGStyleElement.idl: Drop xmlspace attribute and add SVGLangSpace
        as a superinterface.

2009-09-09  Nate Chapin  <japhet@chromium.org>

        Reviewed by David Levin.

        Remove unnecessary includes and forward declarations in V8Proxy.h

        https://bugs.webkit.org/show_bug.cgi?id=29111

        * bindings/v8/V8Proxy.h:

2009-07-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add more position constructors
        positionBeforeNode, positionAfterNode
        firstPositionInNode, lastPositionInNode
        https://bugs.webkit.org/show_bug.cgi?id=25494

        I also added a lastOffsetInNode and deployed it to a couple places.

        There are no callers to these new constructors yet, but those
        will be coming in future patches.

        * dom/Position.cpp:
        (WebCore::Position::computeOffsetInContainerNode):
        * dom/Position.h:
        (WebCore::positionBeforeNode):
        (WebCore::positionAfterNode):
        (WebCore::lastOffsetInNode):
        (WebCore::firstPositionInNode):
        (WebCore::lastPositionInNode):
        * editing/ApplyStyleCommand.cpp:
        * editing/TextIterator.cpp:
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        * editing/htmlediting.cpp:
        (WebCore::lastOffsetForEditing):

2009-04-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Rename positionBeforeNode to positionInParentBeforeNode
        and positionAfterNode to positionInParentAfterNode
        in preparation for adding a positionBeforeNode
        which returns a neighbor-anchored position.
        https://bugs.webkit.org/show_bug.cgi?id=25494

        No functional changes, thus no tests.

        * dom/PositionConstructors.h:
        (WebCore::positionInParentBeforeNode):
        (WebCore::positionInParentAfterNode):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::operator Position):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::positionOutsideTabSpan):
        (WebCore::CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph):
        (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary):
        * editing/CreateLinkCommand.cpp:
        (WebCore::CreateLinkCommand::doApply):
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::deleteTarget):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializeStartEnd):
        (WebCore::updatePositionForNodeRemoval):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::positionAtStartOfInsertedContent):
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries):
        * editing/htmlediting.cpp:
        (WebCore::firstEditablePositionAfterPositionInRoot):
        (WebCore::lastEditablePositionBeforePositionInRoot):
        (WebCore::rangeCompliantEquivalent):
        (WebCore::positionBeforeContainingSpecialElement):
        (WebCore::positionAfterContainingSpecialElement):
        (WebCore::positionBeforeTabSpan):

2009-04-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Re-organize position creation functions in preparation for adding more
        https://bugs.webkit.org/show_bug.cgi?id=25494

        Make position functions inline to avoid ref-churn.
        Remove startPosition/endPosition as they were only used in one place.

        No functional changes, thus no tests.

        * dom/Position.cpp:
        * dom/Position.h:
        (WebCore::positionBeforeNode):
        (WebCore::positionAfterNode):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::moveTo):
        * editing/TypingCommand.cpp:
        * editing/htmlediting.cpp:
        * editing/htmlediting.h:
        (WebCore::firstDeepEditingPositionForNode):
        (WebCore::lastDeepEditingPositionForNode):
        * rendering/RenderObject.cpp:

2009-09-09  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.
        
        [wx] Add wxSize conversions for IntSize.
        https://bugs.webkit.org/show_bug.cgi?id=29104

        * platform/graphics/IntSize.h:
        * platform/graphics/wx/IntSizeWx.cpp: Added.
        (WebCore::IntSize::IntSize):
        (WebCore::IntSize::operator wxSize):

2009-09-09  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by David Levin.
        
        Chromium uses its own config.h file that was forked from webkit's config.h.
        By merging in Chromium's defines, Chromium would again be able to use webkit's
        config.h.

        https://bugs.webkit.org/show_bug.cgi?id=28882 

        * config.h: Added chromium-specific defines. 

2009-09-09  Jens Alfke  <snej@chromium.org>

        Reviewed by Eric Seidel.

        Initialize DataTransfer's effectAllowed and dropEffect properties correctly
        according to HTML5 spec (sec. 7.9.2-7.9.3).
        https://bugs.webkit.org/show_bug.cgi?id=26700
        - At the start of a drag operation, the value of effectAllowed should be
          the string "uninitialized".
        - At end of dragstart handler, if effectAllowed hasn't been set yet, it
          should be set to "copy".
        - on dragenter and dragover event, dropEffect should be initialized to a
          default value based on the value of effectAllowed.
        - at end of dragenter and dragover the dropEffect should be set to "none"
          if the value set by the handler doesn't match the effectAllowed.
        - on dragleave event, dropEffect should be "none".
        - on drop event, dropEffect should be the previously negotiated value.

        Test: fast/events/drag-dropeffect.html

        * WebCore.base.exp:
            Added a parameter to EventHandler::dragSourceMovedTo.
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard):
            Initialize m_effectAllowed to "uninitialized".
        (WebCore::Clipboard::sourceOperation):
            Treat "uninitialized" as meaning no value has been set.
        * page/DragController.cpp:
        (WebCore::DragController::DragController):
            Initialize new member m_destinationDragOperation.
        (WebCore::DragController::dragExited):
            Set m_destinationDragOperation to none on dragExit.
        (WebCore::DragController::performDrag):
            Set m_destinationDragOperation to current dropEffect.
        (WebCore::DragController::dragEnteredOrUpdated):
            Make sure to clear the operation if drag source doesn't allow it.
        (WebCore::DragController::tryDHTMLDrag):
            Set a default value for the dst drag op before sending dragEnter/Over.
        (WebCore::DragController::startDrag):
            Clear m_destinationDragOperation at start of drag.
        * page/DragController.h:
        (WebCore::DragController::destinationDragOperation):
            Added new member m_destinationDragOperation, and its public getter.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateDragAndDrop):
            dropEffect should be 'none' during dropleave handler, per spec.
        (WebCore::EventHandler::dragSourceMovedTo):
            Added DragOperation parameter, so the handler sees the current dropEffect.
        (WebCore::EventHandler::handleDrag):
            Assume DragOperationEvery for non-DHTML drags.
        * page/EventHandler.h:
            Added DragOperation parameter to dragSourceMovedTo().

2009-09-09  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        1. Adding support/bindings for read-only transactions.
        2. Disallowing the SQLITE_*_VIEW and REINDEX operations in the
        private browsing mode.
        3. Adding an authorizer test.

        https://bugs.webkit.org/show_bug.cgi?id=28918

        Test: storage/test-authorizer.html

        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::createTransaction): Parses all arguments and executes a
        transaction.
        (WebCore::JSDatabase::transaction): Refactored to use
        createTransaction().
        (WebCore::JSDatabase::readTransaction): Added to execute read-only
        transactions using createTransaction().
        * bindings/v8/custom/V8CustomBinding.h: Added the binding for
        Database::readTransaction().
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::createTransaction): Parses all arguments and executes a
        transaction.
        (WebCore::transaction): Refactored to use createTransaction().
        (WebCore::readTransaction): Added to execute read-only
        transactions using createTransaction().
        * storage/Database.cpp:
        (WebCore::Database::transaction): Added support for read-only
        transactions.
        * storage/Database.h: Added support for read-only transactions.
        * storage/Database.idl: Added support for read-only transactions.
        * storage/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::createTempTable): Make it obvious
        that the statement will be denied in private browsing mode and
        read-only transactions.
        (WebCore::DatabaseAuthorizer::dropTempTable): Same.
        (WebCore::DatabaseAuthorizer::createTempIndex): Same.
        (WebCore::DatabaseAuthorizer::dropTempIndex): Same.
        (WebCore::DatabaseAuthorizer::createTempTrigger): Same.
        (WebCore::DatabaseAuthorizer::dropTempTrigger): Same.
        (WebCore::DatabaseAuthorizer::createView): Deny in private
        browsing mode and read-only transactions.
        (WebCore::DatabaseAuthorizer::createTempView): Same.
        (WebCore::DatabaseAuthorizer::dropView): Same.
        (WebCore::DatabaseAuthorizer::dropTempView): Same.
        (WebCore::DatabaseAuthorizer::allowReindex): Same.
        * storage/DatabaseAuthorizer.h:
        * storage/SQLTransaction.cpp: Added support for read-only
        transactions.
        (WebCore::SQLTransaction::create):
        (WebCore::SQLTransaction::SQLTransaction):
        (WebCore::SQLTransaction::executeSQL):
        (WebCore::SQLTransaction::acquireLock):
        * storage/SQLTransaction.h:
        * storage/SQLTransactionCoordinator.cpp:
        (WebCore::SQLTransactionCoordinator::acquireLock): Added a new
        parameter in preparation for a change that will allow multiple
        read-only transactions on the same DB to run concurrently.
        * storage/SQLTransactionCoordinator.h:

2009-09-09  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=29102, add support for user stylesheet injection.  This is similar
        to user script injection but allows for user stylesheets to be added.  The stylesheets are applied immediately
        to all Frames in the PageGroup.

        Added userscripts/simple-stylesheet.html test case.

        * WebCore.base.exp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        * css/CSSStyleSelector.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::attach):
        (WebCore::Document::pageGroupUserSheets):
        (WebCore::Document::clearPageGroupUserSheets):
        (WebCore::Document::recalcStyleSelector):
        * dom/Document.h:
        * loader/PlaceholderDocument.cpp:
        (WebCore::PlaceholderDocument::attach):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserStyleSheet):
        (WebCore::PageGroup::removeUserContentForWorld):
        (WebCore::PageGroup::removeAllUserContent):
        * page/PageGroup.h:
        (WebCore::PageGroup::userStyleSheets):
        * page/UserStyleSheet.h: Added.
        (WebCore::UserStyleSheet::UserStyleSheet):
        (WebCore::UserStyleSheet::source):
        (WebCore::UserStyleSheet::url):
        (WebCore::UserStyleSheet::patterns):
        (WebCore::UserStyleSheet::worldID):
        * page/UserStyleSheetTypes.h: Added.

2009-09-09  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] CSS Style -webkit-box-shadow is not rendered correctly on
        Qt platform
        https://bugs.webkit.org/show_bug.cgi?id=23291

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
         Added the ability to draw shadows for all these curves.

2009-09-09  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Add the qwebgraphicsitem.cpp to the build system.

        https://bugs.webkit.org/show_bug.cgi?id=28862

        * WebCore.pro:

2009-09-09  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx port] Move functions in TemporaryLinkStubs.cpp out to files where
        they belong.

        https://bugs.webkit.org/show_bug.cgi?id=29088

        * editing/wx/EditorWx.cpp:
        (WebCore::Editor::showColorPanel):
        (WebCore::Editor::showFontPanel):
        (WebCore::Editor::showStylesPanel):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::clearPlatformShadow):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        * platform/graphics/wx/IconWx.cpp: Added.
        (WebCore::Icon::~Icon):
        (WebCore::Icon::createIconForFile):
        (WebCore::Icon::createIconForFiles):
        (WebCore::Icon::paint):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::Image::loadPlatformResource):
        (WebCore::Image::drawPattern):
        * platform/wx/CursorWx.cpp:
        (WebCore::moveCursor):
        * platform/wx/FileChooserWx.cpp: Added.
        (WebCore::FileChooser::basenameForWidth):
        * platform/wx/KURLWx.cpp: Added.
        (WebCore::KURL::fileSystemPath):
        * platform/wx/SSLKeyGeneratorWx.cpp: Added.
        (WebCore::getSupportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/wx/SearchPopupMenuWx.cpp: Added.
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::enabled):
        * platform/wx/SharedBufferWx.cpp: Added.
        (WebCore::SharedBuffer::createWithContentsOfFile):
        * platform/wx/SystemTimeWx.cpp: Added.
        (WebCore::userIdleTime):
        * platform/wx/TemporaryLinkStubs.cpp: Removed.
        * platform/wx/TextBreakIteratorInternalICUWx.cpp: Added.
        (WebCore::currentSearchLocaleID):
        (WebCore::currentTextBreakLocaleID):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::setIsSelected):

2009-09-09  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Geolocation incorrectly calls error callback in case of exception in success callback.
        https://bugs.webkit.org/show_bug.cgi?id=27255

        Test: fast/dom/Geolocation/callback-exception.html

        * bindings/js/JSCustomPositionCallback.cpp: Modified.
        (WebCore::JSCustomPositionCallback::handleEvent): Modified. Removed raisedException out param.
        * bindings/js/JSCustomPositionCallback.h: Modified. Removed raisedException out param from handleEvent method and made handleEvent private.
        * bindings/js/JSCustomPositionErrorCallback.h: Modified. Made handleEvent private.
        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::sendPosition): Modified. No longer call error callback in case of exception in success callback.
        * page/PositionCallback.h: Modified. Removed raisedException out param from handleEvent method.

2009-09-09  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        When Geolocation permission is denied, stops watches as well as one-shots.
        https://bugs.webkit.org/show_bug.cgi?id=28305.

        Tests: fast/dom/Geolocation/watch.html
               fast/dom/Geolocation/permission-denied-stops-watches.html

        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::setIsAllowed): Modified. Marks the permission error as fatal.
        (WebCore::Geolocation::handleError): Modified. If the error is fatal, stops watchers as well as one-shots.
        * page/PositionError.h: Modified.
        (WebCore::PositionError::setIsFatal): Added. Marks an error as fatal.
        (WebCore::PositionError::isFatal): Added. Determines whether an error is fatal.

2009-09-09  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Eric Seidel.

        Bug 28964 -  [Chromium] ChromiumDataObject should have getter/setter interface

        Added getter/setter methods and trivial inline implementations for each.
        (Note that they are not yet actually used.)
        Once the Chromium code is changed to use them instead of directly accessing the
        member variables, the member variables should be made private and cleaned up.

        No new tests (no functional behavior changed).

        * platform/chromium/ChromiumDataObject.h:
        (WebCore::ChromiumDataObject::mainURL):
        (WebCore::ChromiumDataObject::setMainURL):
        (WebCore::ChromiumDataObject::mainURLTitle):
        (WebCore::ChromiumDataObject::setMainURLTitle):
        (WebCore::ChromiumDataObject::textPlain):
        (WebCore::ChromiumDataObject::setTextPlain):
        (WebCore::ChromiumDataObject::textHTML):
        (WebCore::ChromiumDataObject::setTextHTML):
        (WebCore::ChromiumDataObject::htmlBaseURL):
        (WebCore::ChromiumDataObject::setHTMLBaseURL):
        (WebCore::ChromiumDataObject::content):
        (WebCore::ChromiumDataObject::releaseContent):
        (WebCore::ChromiumDataObject::setContent):
        (WebCore::ChromiumDataObject::contentFileExtension):
        (WebCore::ChromiumDataObject::setContentFileExtension):
        (WebCore::ChromiumDataObject::contentFileName):
        (WebCore::ChromiumDataObject::setContentFileName):
        (WebCore::ChromiumDataObject::fileNames):
        (WebCore::ChromiumDataObject::setFileNames):
        (WebCore::ChromiumDataObject::takeFileNames):

2009-09-08  Pat Bradley  <vincent.bradley@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] locale date displays incorrect date format in symbian.
        https://bugs.webkit.org/show_bug.cgi?id=29032

        strftime() in Symbian does not support #
        Layout tests cannot be run on Symbian yet, so they are not updated.

        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):

2009-09-09  Rohini Ananth <rohini.ananth@nokia.com>

        Reviewed by Simon Hausmann.

        NPAPI Plugin NPP_AsFile not working on Qt Webkit
        https://bugs.webkit.org/show_bug.cgi?id=29068

        * platform/qt/FileSystemQt.cpp:
        (WebCore::openTemporaryFile)
        Autoremove property of QTemporaryFile has been set to false. Hence closeFile() just closes and does not delete the file.
        This solves the deletion of created temp file in PluginStream::destroyStream() before passing to plugin in NPP_AsFile.

2009-09-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Remove a few incorrect changes I left in.

        * bindings/scripts/CodeGeneratorJS.pm:

2009-09-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        Support numeric index getters in bindings
        https://bugs.webkit.org/show_bug.cgi?id=29067

        Add HasNumericIndexGetter to indicate a non-custom getter that
        returns a number.  The numeric index getter also uses PropertySlot's
        setValue rather than setCustomIndex to avoid an additional indirect
        call.

        * bindings/js/JSCanvasByteArrayCustom.cpp:
        * bindings/js/JSCanvasFloatArrayCustom.cpp:
        * bindings/js/JSCanvasIntArrayCustom.cpp:
        * bindings/js/JSCanvasShortArrayCustom.cpp:
        * bindings/js/JSCanvasUnsignedByteArrayCustom.cpp:
        * bindings/js/JSCanvasUnsignedIntArrayCustom.cpp:
        * bindings/js/JSCanvasUnsignedShortArrayCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * html/canvas/CanvasByteArray.h:
        (WebCore::CanvasByteArray::item):
        * html/canvas/CanvasByteArray.idl:
        * html/canvas/CanvasFloatArray.h:
        (WebCore::CanvasFloatArray::get):
        (WebCore::CanvasFloatArray::item):
        * html/canvas/CanvasFloatArray.idl:
        * html/canvas/CanvasIntArray.h:
        (WebCore::CanvasIntArray::get):
        (WebCore::CanvasIntArray::item):
        * html/canvas/CanvasIntArray.idl:
        * html/canvas/CanvasPixelArray.idl:
        * html/canvas/CanvasShortArray.h:
        (WebCore::CanvasShortArray::get):
        (WebCore::CanvasShortArray::item):
        * html/canvas/CanvasShortArray.idl:
        * html/canvas/CanvasUnsignedByteArray.h:
        (WebCore::CanvasUnsignedByteArray::get):
        (WebCore::CanvasUnsignedByteArray::item):
        * html/canvas/CanvasUnsignedByteArray.idl:
        * html/canvas/CanvasUnsignedIntArray.h:
        (WebCore::CanvasUnsignedIntArray::get):
        (WebCore::CanvasUnsignedIntArray::item):
        * html/canvas/CanvasUnsignedIntArray.idl:
        * html/canvas/CanvasUnsignedShortArray.h:
        (WebCore::CanvasUnsignedShortArray::item):
        * html/canvas/CanvasUnsignedShortArray.idl:

2009-09-08  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for 2.8.

        * platform/wx/wxcode/mac/carbon/scrollbar_render.cpp:
        (wxRenderer_DrawScrollbar):

2009-09-08  Jens Alfke  <snej@chromium.org>

        Reviewed by Eric Seidel.

        In Mac Chromium, clicking below the last line of an editable area (textarea or
        contenteditable) should put the caret at the end of the last line, as in Mac Safari.

        Tests: LayoutTests/editing/selection/click-in-margins-inside-editable-div.html
               LayoutTests/editing/selection/click-in-padding-with-multiple-line-boxes.html

        * page/Settings.cpp:
        (WebCore::Settings::Settings): Change #if PLATFORM_MAC to be Mac-Chrome-inclusive.

2009-09-08  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Mark Rowe.

        Make sure not to do an early return when a data URL stylesheet successfully loads.  We need to still
        clear the old cached sheet out of all existing Frames.  Fixes the data URL stylesheet layout test failure.

        * page/Page.cpp:
        (WebCore::Page::userStyleSheetLocationChanged):

2009-09-08  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * dom/Document.idl:

2009-09-08  Kevin Ollivier  <kevino@theolliviers.com>

        More robust wx build fix for 2.9.

        * platform/wx/wxcode/mac/carbon/scrollbar_render.cpp:
        (wxRenderer_DrawScrollbar):

2009-09-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Timothy Hatcher.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=27046
        Implement CSSOM DocumentView.caretRangeFromPoint

        Tests: fast/dom/Document/CaretRangeFromPoint/basic.html
               fast/dom/Document/CaretRangeFromPoint/replace-element.html

        * dom/Document.cpp:
        (WebCore::Document::caretRangeFromPoint):
        * dom/Document.h:
        * dom/Document.idl:

2009-09-08  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix, generate derived sources earlier in order to make sure
        they're found by the build system when generating the list of sources to build.

        * wscript:

2009-09-08  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        <iterator> include in V8Proxy.h is spurious and causing ObjC compile issues for Chromium.

        Test: Chromium mac canary build is fixed.

        * bindings/v8/V8Proxy.h: Remove <iterator> include.

2009-09-08  Xan Lopez  <xlopez@igalia.com>

        Unreviewed attempt to fix the GTKbuild.

        * GNUmakefile.am:

2009-09-04  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28987, make the Document cache the page's user stylesheet in
        parsed form.  Allows the sheet to survive across destruction/re-creation of the CSSStyleSelector.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        * css/CSSStyleSelector.h:
        * dom/Document.cpp:
        (WebCore::Document::attach):
        (WebCore::Document::pageUserSheet):
        (WebCore::Document::clearPageUserSheet):
        (WebCore::Document::recalcStyleSelector):
        * dom/Document.h:
        * loader/PlaceholderDocument.cpp:
        (WebCore::PlaceholderDocument::attach):
        * page/Page.cpp:
        (WebCore::Page::userStyleSheetLocationChanged):
        * page/Settings.cpp:
        (WebCore::Settings::setUserStyleSheetLocation):

2009-09-08  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed buildfix.

        Fix Qt build after 48167, by adding the new cpp/h files
        added to WebCore.gypi to WebCore.pro as well.

        * WebCore.pro:

2009-09-08  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        should not pass URI fragments to libsoup
        https://bugs.webkit.org/show_bug.cgi?id=28687

        Strip the fragment from the URI before passing it to soup, since
        it forwards it to servers in some cases (like when using a proxy)
        which confuses them and makes them return 403/404.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startHttp):
        (WebCore::):

2009-09-08  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Add QGraphicsScene events support to the Qt platform events.

        * platform/PlatformMouseEvent.h:
        * platform/PlatformWheelEvent.h:
        * platform/qt/PlatformMouseEventQt.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/qt/WheelEventQt.cpp:
        (WebCore::PlatformWheelEvent::applyDelta):
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2009-09-08  Michael Nordman  <michaeln@google.com>

        Reviewed by Eric Seidel.

        [Chromium] Cleanup: remove a few deprecated methods.
        https://bugs.webkit.org/show_bug.cgi?id=28960

        No new tests, just syntactic sugar.

        * platform/network/chromium/ResourceRequest.h:
        * platform/network/chromium/ResourceResponse.h:

2009-09-08  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Ariya Hidayat.

        https://bugs.webkit.org/show_bug.cgi?id=28981

        [Qt] make npapi.h compile in winscw compiler.

        Add XP_SYMBIAN macro to identify Symbian OS; this macro should be used for Symbian
        specific changes in npapi.h.
        Undefine XP_WIN when building for Symbian to avoid including Windows specific code.

        * bridge/npapi.h:

2009-09-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Web Inspector assertion failure related to marking
        https://bugs.webkit.org/show_bug.cgi?id=28997

        When wrapping the callback the JSInspectorCallbackWrapper creator was using
        inheritorID for the prototype structure which is unsafe for anything other
        than a pure JS object.  Instead we now create a new structure, which while
        inefficient is not problematic as this code is not hit frequently.

        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::wrap):

2009-09-08  Kelly Norton  <knorton@google.com>

        Reviewed by Dimitri Glazkov.

        Add missing extension to the file entry in WebCore.vcproj.

        * WebCore.vcproj/WebCore.vcproj: Added "cpp".

2009-09-08  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        dataTransfer.types() should not return Files if file list is empty in the clipboard.
        https://bugs.webkit.org/show_bug.cgi?id=28891

        We change the behavior to handle the empty file list in order to match the spec.

        Tested by clipboard-file-access.html.

        * platform/mac/ClipboardMac.mm:
        (WebCore::addHTMLClipboardTypesForCocoaType):
        (WebCore::ClipboardMac::types):

2009-09-08  Steve VanDeBogart  <vandebo@chromium.org>

        Reviewed by Eric Seidel.

        Handle middle click in Chromium like QT
        https://bugs.webkit.org/show_bug.cgi?id=28696

        Tested by middle-click-onpaste.html.

        * platform/Pasteboard.h:
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::getData):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::isSelectionMode):
        (WebCore::Pasteboard::setSelectionMode):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        * platform/chromium/PasteboardPrivate.h:
        (WebCore::PasteboardPrivate::):

2009-09-08  Kelly Norton  <knorton@google.com>

        Reviewed by Eric Seidel.

        WebInspector: Adds a timeline agent to InspectorController that collects
        high-level timing data about event dispatch, layout, painting and HTML
        parsing and makes it available to Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=25503

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * dom/Document.h:
        (WebCore::Document::inspectorTimelineAgent):
        * dom/Node.cpp:
        (WebCore::Node::dispatchGenericEvent):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::write):
        * inspector/DOMDispatchTimelineItem.cpp: Added.
        (WebCore::DOMDispatchTimelineItem::DOMDispatchTimelineItem):
        (WebCore::DOMDispatchTimelineItem::convertToScriptObject):
        * inspector/DOMDispatchTimelineItem.h: Added.
        (WebCore::DOMDispatchTimelineItem::~DOMDispatchTimelineItem):
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::enableTimeline):
        (WebCore::InspectorBackend::disableTimeline):
        (WebCore::InspectorBackend::timelineEnabled):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::enableTimeline):
        (WebCore::InspectorController::disableTimeline):
        (WebCore::InspectorController::timelineEnabled):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::timelineAgent):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::timelineWasEnabled):
        (WebCore::InspectorFrontend::timelineWasDisabled):
        (WebCore::InspectorFrontend::addItemToTimeline):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorTimelineAgent.cpp: Added.
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::~InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::willDispatchDOMEvent):
        (WebCore::InspectorTimelineAgent::didDispatchDOMEvent):
        (WebCore::InspectorTimelineAgent::willLayout):
        (WebCore::InspectorTimelineAgent::didLayout):
        (WebCore::InspectorTimelineAgent::willRecalculateStyle):
        (WebCore::InspectorTimelineAgent::didRecalculateStyle):
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::didPaint):
        (WebCore::InspectorTimelineAgent::willWriteHTML):
        (WebCore::InspectorTimelineAgent::didWriteHTML):
        (WebCore::InspectorTimelineAgent::reset):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        (WebCore::InspectorTimelineAgent::currentTimeInMilliseconds):
        (WebCore::InspectorTimelineAgent::sessionTimeInMilliseconds):
        * inspector/InspectorTimelineAgent.h: Added.
        * inspector/TimelineItem.cpp: Added.
        (WebCore::TimelineItem::TimelineItem):
        (WebCore::TimelineItem::addToTimeline):
        (WebCore::TimelineItem::convertToScriptObject):
        (WebCore::TimelineItem::convertChildrenToScriptArray):
        (WebCore::TimelineItem::addChildItem):
        * inspector/TimelineItem.h: Added.
        (WebCore::):
        (WebCore::TimelineItem::~TimelineItem):
        (WebCore::TimelineItem::previous):
        (WebCore::TimelineItem::releasePrevious):
        (WebCore::TimelineItem::setEndTime):
        (WebCore::TimelineItem::type):
        * inspector/front-end/TimelineAgent.js: Added.
        (WebInspector.TimelineAgent):
        (WebInspector.addItemToTimeline):
        (WebInspector.timelineWasEnabled):
        (WebInspector.timelineWasDisabled):
        * inspector/front-end/inspector.html:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::paintContents):
        * page/FrameView.h:
        (WebCore::FrameView::inspectorTimelineAgent):
        * page/Page.cpp:
        (WebCore::Page::inspectorTimelineAgent):
        * page/Page.h:

2009-09-08  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix unused variable warnings
        https://bugs.webkit.org/show_bug.cgi?id=29018

        No functional change, no tests.

        * history/qt/HistoryItemQt.cpp:
        (WebCore::HistoryItem::restoreState):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::putImageData):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintMenuList):

2009-09-08  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Use the declaration order in initializer lists
        https://bugs.webkit.org/show_bug.cgi?id=29017

        No functional change, no new tests.

        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):

2009-09-08  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Implement ValidityState::typeMismatch() for <input type=number>.
        https://bugs.webkit.org/show_bug.cgi?id=28934

        Test: fast/forms/ValidityState-typeMismatch-number.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::formStringToDouble):
        * html/HTMLInputElement.h:
        * html/ValidityState.cpp:
        (WebCore::ValidityState::typeMismatch):
        * html/ValidityState.h:

2009-09-08  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Gustavo Noronha.

        [Gtk] Another attempt of a buildfix.

        * GNUmakefile.am: Modified. Remove some extra IDL files added in r48153.

2009-09-08  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Make cursor set cleaner in QtWebKit Api: eliminate SetCursorEvent hack.
        https://bugs.webkit.org/show_bug.cgi?id=28865

        Save the QCursor as a property in WidgetQt::setCursor
        and actually change the cursor in QWebView::event() by making use
        of the QEvent::DynamicPropertyChange event type.
        When unsetCursor() is called on the QWidget we can fallback to
        the cursor set by WebCore.

        Patch by Kenneth Rohde Christiansen <kenneth@webkit.org> and
                 Antonio Gomes <antonio.gomes@openbossa.org> on 2009-09-07

        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::setCursor):

2009-09-08  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Gustavo Noronha.

        [Gtk] Buildfix for build error introduced in r48150.

        * GNUmakefile.am: Modified. Added missing IDL files.

2009-09-08  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Tor Arne Vestbø.

        [Qt] Buildfix. Build error caused by r48150.

        * WebCore.pro: missing IDL files added

2009-09-07  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Update Canvas 3D implementation to match spec
        https://bugs.webkit.org/show_bug.cgi?id=29010

        This adds several new CanvasXXXArray classes each of which has a custom constructor
        and custom getters and setters. Also changed CanvasRenderingContext3D and GraphicsContext3D
        to match the new and changed API.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCanvasArrayBufferConstructor.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasArrayBufferConstructor.h: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasArrayCustom.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasByteArrayConstructor.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasByteArrayConstructor.h: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasByteArrayCustom.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasFloatArrayConstructor.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasFloatArrayConstructor.h: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasFloatArrayCustom.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasIntArrayConstructor.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasIntArrayConstructor.h: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasIntArrayCustom.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasRenderingContext3DCustom.cpp:
        (WebCore::JSCanvasRenderingContext3D::bufferData):
        (WebCore::JSCanvasRenderingContext3D::bufferSubData):
        (WebCore::JSCanvasRenderingContext3D::texImage2D):
        (WebCore::JSCanvasRenderingContext3D::texSubImage2D):
        * bindings/js/JSCanvasShortArrayConstructor.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasShortArrayConstructor.h: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasShortArrayCustom.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasUnsignedByteArrayConstructor.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasUnsignedByteArrayConstructor.h: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasUnsignedByteArrayCustom.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasUnsignedIntArrayConstructor.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasUnsignedIntArrayConstructor.h: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasUnsignedIntArrayCustom.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasUnsignedShortArrayConstructor.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasUnsignedShortArrayConstructor.h: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasUnsignedShortArrayCustom.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::canvasArrayBuffer):
        (WebCore::JSDOMWindow::canvasByteArray):
        (WebCore::JSDOMWindow::canvasUnsignedByteArray):
        (WebCore::JSDOMWindow::canvasIntArray):
        (WebCore::JSDOMWindow::canvasUnsignedIntArray):
        (WebCore::JSDOMWindow::canvasShortArray):
        (WebCore::JSDOMWindow::canvasUnsignedShortArray):
        (WebCore::JSDOMWindow::canvasFloatArray):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::paint):
        * html/canvas/CanvasArray.cpp: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasArray.h: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasArray.idl: Added.
        * html/canvas/CanvasArrayBuffer.cpp: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasArrayBuffer.h: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasArrayBuffer.idl: Added.
        * html/canvas/CanvasByteArray.cpp:
        * html/canvas/CanvasByteArray.h:
        * html/canvas/CanvasByteArray.idl:
        * html/canvas/CanvasFloatArray.cpp: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasFloatArray.h: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasFloatArray.idl: Added.
        * html/canvas/CanvasIntArray.cpp: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasIntArray.h: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasIntArray.idl: Added.
        * html/canvas/CanvasRenderingContext3D.cpp:
        (WebCore::CanvasRenderingContext3D::CanvasRenderingContext3D):
        (WebCore::CanvasRenderingContext3D::markContextChanged):
        (WebCore::CanvasRenderingContext3D::beginPaint):
        (WebCore::CanvasRenderingContext3D::endPaint):
        (WebCore::CanvasRenderingContext3D::reshape):
        (WebCore::CanvasRenderingContext3D::sizeInBytes):
        (WebCore::CanvasRenderingContext3D::bindTexture):
        (WebCore::CanvasRenderingContext3D::bufferData):
        (WebCore::CanvasRenderingContext3D::bufferSubData):
        (WebCore::CanvasRenderingContext3D::checkFramebufferStatus):
        (WebCore::CanvasRenderingContext3D::clear):
        (WebCore::CanvasRenderingContext3D::createBuffer):
        (WebCore::CanvasRenderingContext3D::createFramebuffer):
        (WebCore::CanvasRenderingContext3D::createTexture):
        (WebCore::CanvasRenderingContext3D::createProgram):
        (WebCore::CanvasRenderingContext3D::createRenderbuffer):
        (WebCore::CanvasRenderingContext3D::createShader):
        (WebCore::CanvasRenderingContext3D::deleteBuffer):
        (WebCore::CanvasRenderingContext3D::deleteFramebuffer):
        (WebCore::CanvasRenderingContext3D::deleteProgram):
        (WebCore::CanvasRenderingContext3D::deleteRenderbuffer):
        (WebCore::CanvasRenderingContext3D::deleteShader):
        (WebCore::CanvasRenderingContext3D::deleteTexture):
        (WebCore::CanvasRenderingContext3D::drawArrays):
        (WebCore::CanvasRenderingContext3D::drawElements):
        (WebCore::CanvasRenderingContext3D::getBoolean):
        (WebCore::CanvasRenderingContext3D::getBooleanv):
        (WebCore::CanvasRenderingContext3D::getBufferParameteri):
        (WebCore::CanvasRenderingContext3D::getBufferParameteriv):
        (WebCore::CanvasRenderingContext3D::getFloat):
        (WebCore::CanvasRenderingContext3D::getFloatv):
        (WebCore::CanvasRenderingContext3D::getFramebufferAttachmentParameteri):
        (WebCore::CanvasRenderingContext3D::getFramebufferAttachmentParameteriv):
        (WebCore::CanvasRenderingContext3D::getInteger):
        (WebCore::CanvasRenderingContext3D::getIntegerv):
        (WebCore::CanvasRenderingContext3D::getProgrami):
        (WebCore::CanvasRenderingContext3D::getProgramiv):
        (WebCore::CanvasRenderingContext3D::getProgramInfoLog):
        (WebCore::CanvasRenderingContext3D::getRenderbufferParameteri):
        (WebCore::CanvasRenderingContext3D::getRenderbufferParameteriv):
        (WebCore::CanvasRenderingContext3D::getShaderi):
        (WebCore::CanvasRenderingContext3D::getShaderiv):
        (WebCore::CanvasRenderingContext3D::getShaderInfoLog):
        (WebCore::CanvasRenderingContext3D::getShaderSource):
        (WebCore::CanvasRenderingContext3D::getTexParameterf):
        (WebCore::CanvasRenderingContext3D::getTexParameterfv):
        (WebCore::CanvasRenderingContext3D::getTexParameteri):
        (WebCore::CanvasRenderingContext3D::getTexParameteriv):
        (WebCore::CanvasRenderingContext3D::getUniformf):
        (WebCore::CanvasRenderingContext3D::getUniformfv):
        (WebCore::CanvasRenderingContext3D::getUniformi):
        (WebCore::CanvasRenderingContext3D::getUniformiv):
        (WebCore::CanvasRenderingContext3D::getUniformLocation):
        (WebCore::CanvasRenderingContext3D::getVertexAttribf):
        (WebCore::CanvasRenderingContext3D::getVertexAttribfv):
        (WebCore::CanvasRenderingContext3D::getVertexAttribi):
        (WebCore::CanvasRenderingContext3D::getVertexAttribiv):
        (WebCore::CanvasRenderingContext3D::getVertexAttribOffset):
        (WebCore::CanvasRenderingContext3D::texImage2D):
        (WebCore::CanvasRenderingContext3D::texParameterf):
        (WebCore::CanvasRenderingContext3D::texParameteri):
        (WebCore::CanvasRenderingContext3D::texSubImage2D):
        (WebCore::CanvasRenderingContext3D::uniform1f):
        (WebCore::CanvasRenderingContext3D::uniform1fv):
        (WebCore::CanvasRenderingContext3D::uniform1i):
        (WebCore::CanvasRenderingContext3D::uniform1iv):
        (WebCore::CanvasRenderingContext3D::uniform2f):
        (WebCore::CanvasRenderingContext3D::uniform2fv):
        (WebCore::CanvasRenderingContext3D::uniform2i):
        (WebCore::CanvasRenderingContext3D::uniform2iv):
        (WebCore::CanvasRenderingContext3D::uniform3f):
        (WebCore::CanvasRenderingContext3D::uniform3fv):
        (WebCore::CanvasRenderingContext3D::uniform3i):
        (WebCore::CanvasRenderingContext3D::uniform3iv):
        (WebCore::CanvasRenderingContext3D::uniform4f):
        (WebCore::CanvasRenderingContext3D::uniform4fv):
        (WebCore::CanvasRenderingContext3D::uniform4i):
        (WebCore::CanvasRenderingContext3D::uniform4iv):
        (WebCore::CanvasRenderingContext3D::uniformMatrix2fv):
        (WebCore::CanvasRenderingContext3D::uniformMatrix3fv):
        (WebCore::CanvasRenderingContext3D::uniformMatrix4fv):
        (WebCore::CanvasRenderingContext3D::useProgram):
        (WebCore::CanvasRenderingContext3D::validateProgram):
        (WebCore::CanvasRenderingContext3D::vertexAttrib1f):
        (WebCore::CanvasRenderingContext3D::vertexAttrib1fv):
        (WebCore::CanvasRenderingContext3D::vertexAttrib2f):
        (WebCore::CanvasRenderingContext3D::vertexAttrib2fv):
        (WebCore::CanvasRenderingContext3D::vertexAttrib3f):
        (WebCore::CanvasRenderingContext3D::vertexAttrib3fv):
        (WebCore::CanvasRenderingContext3D::vertexAttrib4f):
        (WebCore::CanvasRenderingContext3D::vertexAttrib4fv):
        (WebCore::CanvasRenderingContext3D::vertexAttribPointer):
        (WebCore::CanvasRenderingContext3D::viewport):
        * html/canvas/CanvasRenderingContext3D.h:
        * html/canvas/CanvasRenderingContext3D.idl:
        * html/canvas/CanvasShortArray.cpp: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasShortArray.h: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasShortArray.idl: Added.
        * html/canvas/CanvasTexture.cpp:
        (WebCore::CanvasTexture::CanvasTexture):
        * html/canvas/CanvasTexture.h:
        (WebCore::CanvasTexture::isCubeMapRWrapModeInitialized):
        (WebCore::CanvasTexture::setCubeMapRWrapModeInitialized):
        * html/canvas/CanvasUnsignedByteArray.cpp: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasUnsignedByteArray.h: Added with properties svn:eol-style and svn:mime-type.
         * html/canvas/CanvasUnsignedByteArray.idl: Added.
        * html/canvas/CanvasUnsignedIntArray.cpp: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasUnsignedIntArray.h: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasUnsignedIntArray.idl: Added.
        * html/canvas/CanvasUnsignedShortArray.cpp: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasUnsignedShortArray.h: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasUnsignedShortArray.idl: Added.
        * page/DOMWindow.idl:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::beginPaint):
        (WebCore::GraphicsContext3D::endPaint):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):
        (WebCore::GraphicsContext3D::checkFramebufferStatus):
        (WebCore::GraphicsContext3D::drawArrays):
        (WebCore::GraphicsContext3D::drawElements):
        (WebCore::GraphicsContext3D::texParameterf):
        (WebCore::GraphicsContext3D::texParameteri):
        (WebCore::GraphicsContext3D::uniform1f):
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform2f):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform3f):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform4f):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform1i):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2i):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3i):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4i):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        (WebCore::GraphicsContext3D::vertexAttrib1f):
        (WebCore::GraphicsContext3D::vertexAttrib1fv):
        (WebCore::GraphicsContext3D::vertexAttrib2f):
        (WebCore::GraphicsContext3D::vertexAttrib2fv):
        (WebCore::GraphicsContext3D::vertexAttrib3f):
        (WebCore::GraphicsContext3D::vertexAttrib3fv):
        (WebCore::GraphicsContext3D::vertexAttrib4f):
        (WebCore::GraphicsContext3D::vertexAttrib4fv):
        (WebCore::GraphicsContext3D::vertexAttribPointer):
        (WebCore::GraphicsContext3D::getBoolean):
        (WebCore::GraphicsContext3D::getBooleanv):
        (WebCore::GraphicsContext3D::getFloat):
        (WebCore::GraphicsContext3D::getFloatv):
        (WebCore::GraphicsContext3D::getInteger):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::getBufferParameteri):
        (WebCore::GraphicsContext3D::getBufferParameteriv):
        (WebCore::GraphicsContext3D::getFramebufferAttachmentParameteri):
        (WebCore::GraphicsContext3D::getFramebufferAttachmentParameteriv):
        (WebCore::GraphicsContext3D::getProgrami):
        (WebCore::GraphicsContext3D::getProgramiv):
        (WebCore::GraphicsContext3D::getRenderbufferParameteri):
        (WebCore::GraphicsContext3D::getRenderbufferParameteriv):
        (WebCore::GraphicsContext3D::getShaderi):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getTexParameterf):
        (WebCore::GraphicsContext3D::getTexParameterfv):
        (WebCore::GraphicsContext3D::getTexParameteri):
        (WebCore::GraphicsContext3D::getTexParameteriv):
        (WebCore::GraphicsContext3D::getUniformf):
        (WebCore::GraphicsContext3D::getUniformfv):
        (WebCore::GraphicsContext3D::getUniformi):
        (WebCore::GraphicsContext3D::getUniformiv):
        (WebCore::GraphicsContext3D::getVertexAttribf):
        (WebCore::GraphicsContext3D::getVertexAttribfv):
        (WebCore::GraphicsContext3D::getVertexAttribi):
        (WebCore::GraphicsContext3D::getVertexAttribiv):
        (WebCore::GraphicsContext3D::getVertexAttribOffset):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::texSubImage2D):
        (WebCore::GraphicsContext3D::sizeInBytes):

2009-09-08  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Timothy Hatcher.

        Make m_windowVisible more consistent with the actual visibility of the inspector.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible):

2009-09-07  Adam Barth  <abarth@webkit.org>

        Unreviewed speculative build fix for Snow Leopard.

        * platform/GeolocationService.cpp:
        (WebCore::createGeolocationServiceNull):

2009-09-07  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Adds a mock Geolocation service. This will be used to provide predictable behavior of the
        Geolocation API for use in LayoutTests. Later changes will integrate the the mock
        Geolocation service with DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=28264

        The mock Geolocation service returns a fixed position or error. This position or error can be
        set through static methods on the GeolocationService class. The position or error is shared
        between all instances of the mock Geolocation service.

        Implementation details.
        The GeolocationService object maintains a pointer to a factory function which it uses to create
        Geolocation service instances. Each platform implementing Geolocation sets this pointer
        to the factory function for their platform's implementation. When the mock Geolocation service
        is activated, the factory function pointer is reset to the factory function for the mock service.

        Test: fast/dom/Geolocation/error.html

        * WebCore.base.exp: Modified. Exports GeolocationServiceMock methods.
        * GNUMakefile.am: Modified. Added GeolocationServiceMock files.
        * WebCore.gypi: Modified. Added GeolocationServiceMock files.
        * WebCore.pro: Modified. Added GeolocationServiceMock files.
        * WebCore.vcproj/WebCore.vcproj: Modified. Added GeolocationServiceMock files.
        * WebCore.vcproj/WebCoreCommon.vsprops: Modified. Added mock directory to includes.
        * WebCore.xcodeproj/project.pbxproj: Modified. Added GeolocationServiceMock files and exports some headers.
        * WebCoreSources.bkl: Modified. Added GeolocationServiceMock files.
        * page/ChromeClient.h: Modified. Fixed comment.
        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::setIsAllowed): Modified. Fixed error string.
        * platform/GeolocationService.cpp: Modified.
        (WebCore::createGeolocationServiceNull): Added. Returns null in place of a Geolocation service. Used to avoid link errors on platforms where Geolocation is not implemented.
        (WebCore::GeolocationService::create): Added. Uses the factory function pointer to create a Geolocation service implementation.
        (WebCore::GeolocationService::useMock): Added. Configures the GeolocationServie to use the mock implementation.
        * platform/GeolocationService.h: Modified.
        * platform/mock: Added.
        * platform/mock/GeolocationServiceMock.cpp: Added.
        (WebCore::GeolocationServiceMock::create): Added. Creates a GeolocationServiceMock object.
        (WebCore::GeolocationServiceMock::GeolocationServiceMock): Added. Constructor.
        (WebCore::GeolocationServiceMock::~GeolocationServiceMock): Added. Destructor.
        (WebCore::GeolocationServiceMock::setPosition): Added. Sets the position that will be returned by the object.
        (WebCore::GeolocationServiceMock::setError): Added. Sets the error that will be returned by the object.
        (WebCore::GeolocationServiceMock::startUpdating): Added. GeolocationService implementation. Starts the service.
        (WebCore::GeolocationServiceMock::stopUpdating): Added. GeolocationService implementation. Stops the service.
        (WebCore::GeolocationServiceMock::timerFired): Added. Used to provide an asynchronous callback when the service is started.
        (WebCore::GeolocationServiceMock::makeGeolocationCallbackFromAllInstances): Added. Used to call back when the position or error is updated.
        (WebCore::GeolocationServiceMock::makeGeolocationCallback): Added. Used to call back when the service starts.
        (WebCore::GeolocationServiceMock::initStatics): Added. Initializes statics members with constructors.
        (WebCore::GeolocationServiceMock::cleanUpStatics): Added. Cleans up static members with constructors.
        * platform/mock/GeolocationServiceMock.h: Added.
        (WebCore::GeolocationServiceMock::lastPosition): Added. Returns the fixed position.
        (WebCore::GeolocationServiceMock::lastError): Added. Returns the fixed error.
        * platform/gtk/GeolocationServiceGtk.cpp: Modified.
        (WebCore::GeolocationServiceGtk::create): Added. Creates an instance of GeolocationServiceGtk.
        * platform/gtk/GeolocationServiceGtk.h: Modified.
        * platform/mac/GeolocationServiceMac.h: Modified.
        * platform/mac/GeolocationServiceMac.mm: Modified.
        (WebCore::GeolocationServiceMac::create): Added. Creates an instance of GeolocationServiceMac.

2009-09-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=28985

        We need to be slightly more careful about how we pick up a script
        execution context.  In particular, we were getting the wrong document
        for frames that had been navigated somewhere else.

        In the long term, we should think about a better algorithm for
        computing the script context.

        Fixes LayoutTests/http/tests/xmlhttprequest/detaching-frame-2.html

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::retrieveFrame):

2009-09-07  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for 2.8 compilation.

        * platform/wx/wxcode/mac/carbon/scrollbar_render.cpp:
        (wxRenderer_DrawScrollbar):

2009-09-07  Drew Wilson  <atwilson@google.com>

        Unreviewed build fix.

        Reverting r48121 to fix Windows build errors.

        * DerivedSources.cpp:
        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        (WebCore::toEventTarget):
        * dom/EventTarget.cpp:
        * dom/EventTarget.h:
        * page/DOMWindow.idl:
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::bufferedAmount):
        (WebCore::WebSocket::addEventListener):
        (WebCore::WebSocket::removeEventListener):
        (WebCore::WebSocket::dispatchEvent):
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didReceiveMessage):
        (WebCore::WebSocket::didClose):
        (WebCore::WebSocket::dispatchOpenEvent):
        (WebCore::WebSocket::dispatchMessageEvent):
        (WebCore::WebSocket::dispatchCloseEvent):
        * websockets/WebSocket.h:
        (WebCore::WebSocket::create):
        (WebCore::WebSocket::):
        (WebCore::WebSocket::setOnopen):
        (WebCore::WebSocket::onopen):
        (WebCore::WebSocket::setOnmessage):
        (WebCore::WebSocket::onmessage):
        (WebCore::WebSocket::setOnclose):
        (WebCore::WebSocket::onclose):
        (WebCore::WebSocket::toWebSocket):
        (WebCore::WebSocket::refEventTarget):
        (WebCore::WebSocket::derefEventTarget):
        * websockets/WebSocketChannel.cpp: Removed.
        * websockets/WebSocketChannel.h: Removed.
        * websockets/WebSocketChannelClient.h: Removed.
        * websockets/WebSocketHandshake.cpp: Removed.
        * websockets/WebSocketHandshake.h: Removed.

2009-09-07  Drew Wilson  <atwilson@google.com>

        Unreviewed speculative build fix.

        Reverted previous build fix as it didn't fix the problem.

        * bindings/js/JSEventTarget.cpp:
        (WebCore::toEventTarget):

2009-09-07  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed, build fix.

        [Qt] Fix build after SHARED_WORKERS are enabled by default (r48131)

        * WebCore.pro:

2009-09-07  Drew Wilson  <atwilson@google.com>

        Unreviewed build fix.

        Temporarily removed depenency between JSEventTarget.cpp and WebSocket.h in an attempt to fix a windows build break.

        * bindings/js/JSEventTarget.cpp:
        (WebCore::toEventTarget):

2009-09-07  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Enable SHARED_WORKERS by default.
        https://bugs.webkit.org/show_bug.cgi?id=28959

        Tests (enabled in a separate patch):
               fast/workers/shared-worker-constructor.html
               fast/workers/shared-worker-context-gc.html
               fast/workers/shared-worker-event-listener.html
               fast/workers/shared-worker-exception.html
               fast/workers/shared-worker-frame-lifecycle.html
               fast/workers/shared-worker-gc.html
               fast/workers/shared-worker-lifecycle.html
               fast/workers/shared-worker-load-error.html
               fast/workers/shared-worker-location.html
               fast/workers/shared-worker-navigator.html
               fast/workers/shared-worker-replace-global-constructor.html
               fast/workers/shared-worker-replace-self.html
               fast/workers/shared-worker-shared.html
               fast/workers/shared-worker-simple.html
               http/tests/workers/shared-worker-importScripts.html
               http/tests/workers/shared-worker-redirect.html
               http/tests/xmlhttprequest/workers/shared-worker-close.html
               http/tests/xmlhttprequest/workers/shared-worker-methods-async.html
               http/tests/xmlhttprequest/workers/shared-worker-methods.html
               http/tests/xmlhttprequest/workers/shared-worker-xhr-file-not-found.html

        * config.h: Removed some whitespace/touched the file to force a full rebuild on the build-bots.
        * Configurations/FeatureDefines.xcconfig:
        * WebCore.pro:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/build-generated-files.sh:
        * dom/DOMWindow.idl: Removed unnecessary whitespace to force a rebuild on the build-bots to pickup the flag change.
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerScriptLoader::load):
        Clean up bitrot in SharedWorker code - DenyCrossOriginRedirect is now DenyCrossOriginRequests.
        * workers/SharedWorkerContext.cpp:
        (WebCore::SharedWorkerContext::dispatchConnect):
        Clean up bitrot - updated SharedWorker code to reflect new MessageEvent API.

2009-09-07  Xan Lopez  <xlopez@igalia.com>

        Unreviewed build fix.

        Add new file to sources list.

        * GNUmakefile.am:

2009-09-07  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes for wx SVN trunk. 

        * config.h:
        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::paintButton):
        * platform/wx/wxcode/mac/carbon/non-kerned-drawing.cpp:
        (WebCore::drawTextWithSpacing):
        * platform/wx/wxcode/mac/carbon/scrollbar_render.cpp:
        (wxRenderer_DrawScrollbar):

2009-09-07  Chris Hills <chaz@chaz6.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Use direct includes for Phonon, not the pretty ones

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:

2009-09-07  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket API implementation.
        https://bugs.webkit.org/show_bug.cgi?id=28038
        
        Add build systems only for GNUmakefile.am and WebCore.xcodeproj now.
        Other build systems will be updated once the code is functional.
        Tests will be landed once the code is completed and functional.

        * DerivedSources.cpp:
        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::webSocket):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        (WebCore::toEventTarget):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toWebSocket):
        * dom/EventTarget.h:
        * page/DOMWindow.idl:
        * websockets/WebSocket.cpp:
        (WebCore::ProcessWebSocketEventTask::create):
        (WebCore::ProcessWebSocketEventTask::performTask):
        (WebCore::ProcessWebSocketEventTask::ProcessWebSocketEventTask):
        (WebCore::isValidProtocolString):
        (WebCore::WebSocket::connect):
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::bufferedAmount):
        (WebCore::WebSocket::addEventListener):
        (WebCore::WebSocket::removeEventListener):
        (WebCore::WebSocket::dispatchEvent):
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didReceiveMessage):
        (WebCore::WebSocket::didClose):
        (WebCore::WebSocket::dispatchOpenEvent):
        (WebCore::WebSocket::dispatchMessageEvent):
        (WebCore::WebSocket::dispatchCloseEvent):
        * websockets/WebSocket.h:
        (WebCore::WebSocket::create):
        (WebCore::WebSocket::):
        (WebCore::WebSocket::setOnopen):
        (WebCore::WebSocket::onopen):
        (WebCore::WebSocket::setOnmessage):
        (WebCore::WebSocket::onmessage):
        (WebCore::WebSocket::setOnclose):
        (WebCore::WebSocket::onclose):
        (WebCore::WebSocket::toWebSocket):
        (WebCore::WebSocket::eventListeners):
        (WebCore::WebSocket::refEventTarget):
        (WebCore::WebSocket::derefEventTarget):
        * websockets/WebSocketChannel.cpp: Added.
        * websockets/WebSocketChannel.h: Added.
        * websockets/WebSocketChannelClient.h: Added.
        * websockets/WebSocketHandshake.cpp: Added.
        * websockets/WebSocketHandshake.h: Added.

2009-09-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=26854
        [GTK] Needs API to allow more control over outgoing requests

        Add infrastructure required to provide the new
        WebKitNetworkResponse object in our API.

        * GNUmakefile.am: Add new files to the build.
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateFromSoupMessage):
        * platform/network/soup/ResourceResponse.h:
        * platform/network/soup/ResourceResponseSoup.cpp: Added.
        (WebCore::ResourceResponse::toSoupMessage):

2009-09-07  Mads Ager  <ager@chromium.org>

        Reviewed by Adam Barth.

        [V8] Cleanup document/frame null-checking in V8DOMWindowCustom.cpp
        https://bugs.webkit.org/show_bug.cgi?id=29009

        Be consistent in document and frame null checks.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::V8Custom::ClearTimeoutImpl):

2009-09-07  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [Soup] Limit the number of connections
        https://bugs.webkit.org/show_bug.cgi?id=18431

        Increase the maximum number of per host and total connections to
        similar values than those used by the other modern browsers. Seems
        to significantly improve page loading time in many cases.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ensureSessionIsInitialized):

2009-09-07  Michael Nordman  <michaeln@google.com>

        Reviewed by Darin Fisher.

        Various minor chromium appcache modifications.
        https://bugs.webkit.org/show_bug.cgi?id=28960

        No new tests.

        * bindings/v8/custom/V8DOMApplicationCacheCustom.cpp:
          Fix a null pointer exception.
        (WebCore::ACCESSOR_GETTER):
        * platform/network/chromium/ResourceRequest.h:
          Switch from appCache 'context' to 'host' terminology.
          Note: leaving the old deprecated accessors in place until the matching
          change in chrome is landed to use the new accessors.
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::appCacheHostID):
        (WebCore::ResourceRequest::setAppCacheHostID):
        (WebCore::ResourceRequest::appCacheContextID):
        (WebCore::ResourceRequest::setAppCacheContextID):
        * platform/network/chromium/ResourceResponse.h:
          Add an appCacheManifestURL getter/setter.
          Drop the 'get' prefix from the appCacheID getter.
          Note: leaving the old deprecated 'get' prefixed accessor in place until the matching
          change in chrome is landed to use the new accessor.
        (WebCore::ResourceResponse::appCacheID):
        (WebCore::ResourceResponse::appCacheManifestURL):
        (WebCore::ResourceResponse::setAppCacheManifestURL):
        (WebCore::ResourceResponse::getAppCacheID):

2009-09-07  Michael Nordman  <michaeln@google.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=28359
        Cleanup: Undo some accidental changes around DOMApplicationCache.
        - Restore support for constructing a DOMApplicationCache object with a null frame ptr.
        - Return a non-null object for window.applicationCache when the feature is disabled.
        - Simplify the swapCache method.

        Test: http/tests/appcache/disabled.html

        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::DOMApplicationCache):
        (WebCore::DOMApplicationCache::swapCache):
        (WebCore::DOMApplicationCache::scriptExecutionContext):
        * loader/appcache/DOMApplicationCache.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::applicationCache):

2009-09-06  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        hostname and host are mixed up when manipulating anchor elements.
        https://bugs.webkit.org/show_bug.cgi?id=28954

        handle the case of port 0.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::host):

2009-09-06  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Eric Seidel.

        Make hidden elements not focusable.

        Clean up supportsFocus and isFocusable.
        supportsFocus now strictly means that the node can be focused by default.
        This is true for links, form controls and content editable elements for example.
        isFocusable means that the user can actually focus it.
        All (2) calls to supportsFocus have been updated to take this into account.
        
        Make a elements without href work correctly as well.

        https://bugs.webkit.org/show_bug.cgi?id=27099

        Tests: fast/events/click-focus-anchor.html
               fast/events/tab-focus-anchor.html
               fast/events/tab-focus-hidden.html

        * dom/Element.cpp:
        (WebCore::Element::focus):
        * dom/Node.cpp:
        (WebCore::Node::supportsFocus):
        (WebCore::Node::isFocusable):
        * dom/Node.h:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::supportsFocus):
        (WebCore::HTMLAnchorElement::isMouseFocusable):
        (WebCore::HTMLAnchorElement::isKeyboardFocusable):
        * html/HTMLAnchorElement.h:
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::supportsFocus):
        * html/HTMLAreaElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::supportsFocus):
        * html/HTMLElement.h:
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::supportsFocus):
        * html/HTMLFieldSetElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::supportsFocus):
        (WebCore::HTMLFormControlElement::isFocusable):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::supportsFocus):
        * html/HTMLFrameElementBase.h:
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::supportsFocus):
        * html/HTMLLegendElement.h:
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::supportsFocus):
        (WebCore::HTMLOptGroupElement::isFocusable):
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::supportsFocus):
        (WebCore::HTMLOptionElement::isFocusable):
        * html/HTMLOptionElement.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchMouseEvent):
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocus):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::supportsFocus):
        (WebCore::SVGAElement::isFocusable):
        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::supportsFocus):
        * wml/WMLAElement.h:
        * wml/WMLFormControlElement.cpp:
        (WebCore::WMLFormControlElement::supportsFocus):
        (WebCore::WMLFormControlElement::isFocusable):
        * wml/WMLFormControlElement.h:

2009-09-06  Joel Stanley  <joel@jms.id.au>

        Reviewed by Dimitri Glazkov.

        Expose functions to set the caret blink interval for Linux Chromium.
        Default value is set to that of RenderTheme::caretBlankInterval().
        Uses caretBlinkIntervalInternal to avoid overriding
        RenderThemeChromiumSkia::caretBlankInterval to preserve the disabling
        of blinking caret required for layout tests.
        https://bugs.webkit.org/show_bug.cgi?id=28931

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::RenderThemeChromiumLinux):
        (WebCore::RenderThemeChromiumLinux::setCaretBlinkInterval):
        (WebCore::RenderThemeChromiumLinux::caretBlinkIntervalInternal):
        * rendering/RenderThemeChromiumLinux.h:

2009-09-06  Ada Chan  <adachan@apple.com>

        Remove an extra </File> in WebCore.vcproj.

        * WebCore.vcproj/WebCore.vcproj:

2009-09-06  Timothy Hatcher  <timothy@apple.com>

        Adds a persistent setting for color format in the Web Inspector.

        https://bugs.webkit.org/show_bug.cgi?id=28889

        Reviewed by Dan Bernstein.

        * English.lproj/localizedStrings.js: New strings.
        * inspector/front-end/Color.js: Minor style fixes.
        (WebInspector.Color.prototype.toString): Added. Replaces the individual
        "toFoo" functions. Takes a optional arguments for the color format to return.
        * inspector/front-end/Images/paneSettingsButtons.png: Added.
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._changeColorFormat): Update the sections to show
        the new color format.
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.processColor.changeColorDisplay):
        Use the new toString function on Color.
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.processColor): Use the persistent setting
        to format colors by default. Add a tooltip for the color swatch.
        * inspector/front-end/inspector.css: New styles for the settings menu.
        * inspector/front-end/inspector.js:
        (WebInspector.loaded): Initilize the colorFormat preference.

2009-09-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Remove Qt v4.6 check from the prefetchDNS implementation
        https://bugs.webkit.org/show_bug.cgi?id=28993

        * platform/network/qt/DnsPrefetchHelper.cpp:
        * platform/network/qt/DnsPrefetchHelper.h:

2009-09-06  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        Drop <definition-src> support
        https://bugs.webkit.org/show_bug.cgi?id=28991

        http://dev.w3.org/SVG/profiles/1.1F2/publish/changes.html#FontsChapter

        * DerivedSources.cpp: Remove references to definition-src.
        * DerivedSources.make: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap): Ditto.
        * bindings/objc/DOMSVG.h: Ditto.
        * bindings/v8/DerivedSourcesAllInOne.cpp: Ditto.
        * bindings/v8/V8DOMWrapper.cpp: Ditto.
        * bindings/v8/V8Index.cpp: Ditto.
        * bindings/v8/V8Index.h: Ditto.
        * svg/SVGAllInOne.cpp: Ditto.
        * svg/SVGDefinitionSrcElement.cpp: Removed.
        * svg/SVGDefinitionSrcElement.h: Removed.
        * svg/SVGDefinitionSrcElement.idl: Removed.
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::rebuildFontFace): Don't search for
        definition-src child.
        * svg/svgtags.in: Remove definition-src.

2009-09-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Roll out http://trac.webkit.org/changeset/48094, because the
        logic of retrieving default caret blink interval was incorrect (non-existent)
        and caused layout test flakiness.

        * rendering/RenderThemeChromiumLinux.cpp:
        * rendering/RenderThemeChromiumLinux.h:

2009-09-05  Jian Li  <jianli@chromium.org>

        Reviewed by NOBODY (Chromium reliability build break).

        Back up partial change in r48072 in order to fix chromium reliability build break.

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):

2009-09-05  Nicolas Weber  <thakis@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=28975
        Fix file upload on chrome/mac. Images that have "Hide Extension" set,
        such as screenshots by default, can now be uploaded to sites such as
        imgur.com.

        * platform/FileSystem.h:
        Add pathGetDisplayFileName().
        * platform/chromium/FileChooserChromium.cpp:
        (WebCore::FileChooser::basenameForWidth):
        Call pathGetDisplayFileName() instead of pathGetFileName().
        * platform/chromium/FileSystemChromiumLinux.cpp:
        (WebCore::pathGetDisplayFileName):
        Implement pathGetDisplayFileName() by delegating to pathGetFileName().
        * platform/chromium/FileSystemChromiumMac.mm:
        (WebCore::pathGetFileName):
        Now returns a real filename instead of a presentational one, which
        fixes the problem addressed by this change.
        (WebCore::pathGetDisplayFileName):
        New function that returns a presentational filename; does what
        pathGetDisplayFileName() did prior to this patch.
        * platform/chromium/FileSystemChromiumWin.cpp:
        (WebCore::pathGetDisplayFileName):
        Implement pathGetDisplayFileName() by delegating to pathGetFileName().

2009-09-05  Joel Stanley  <joel@jms.id.au>

        Reviewed by David Levin.

        Expose functions to set the caret blink interval for Linux Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=28931

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::setCaretBlinkInterval):
        (WebCore::RenderThemeChromiumLinux::caretBlinkInterval):
        * rendering/RenderThemeChromiumLinux.h:

2009-09-04  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Prevent UI freeze in case when too many timers are in the timer queue.
        https://bugs.webkit.org/show_bug.cgi?id=23865

        The fix measures the elapsed time while executing timers. If we have too many
        timers and it takes significant time to fire, quit the loop and reschedule.
        This lets the run loop process user input (close the window for example).

        * platform/ThreadTimers.h:
        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::sharedTimerFiredInternal):
        (WebCore::ThreadTimers::fireTimersInNestedEventLoop):
        Removed functions and members used before to grab a list of all expired timers.
        Now we fetch one by one, measuring time and quitting the loop if it takes too long.
        * platform/Timer.cpp:
        (WebCore::TimerBase::isActive):
        (WebCore::TimerBase::setNextFireTime):
        Since timers are now fired one by one, there is no need to keep track of updated timers.
        * manual-tests/input-starved-by-timers.html: Manual test that attempts to freeze browser by
        creating of enough timers. It then keeps UI frozen and after 10 seconds starts to drain the timers
        so the browser un-freezes. This is instead of a regular layout test because we don't have a way
        to inject an input events via regular run loop in DRT - instead they are directly dispatched by
        eventSender, which does not reproduce the UI freeze that happens with real input.

2009-09-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/7201063>
        
        Detach any custom scrollbars before detaching the document.
        
        * page/Frame.cpp:
        (WebCore::Frame::setView):

2009-09-04  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

                Unreviewed, build fix.

                Remove remaining references to UserStyleSheetLoader after r48075.

                * WebCore.gypi:
                * WebCore.xcodeproj/project.pbxproj:
                * page/qt/FrameQt.cpp:
                * page/wince/FrameWince.cpp:

2009-09-04  Michelangelo De Simone  <micdesim@gmail.com>

                Reviewed by David Levin.

                https://bugs.webkit.org/show_bug.cgi?id=28988
                Minor fix: "novalidate" attribute renamed in "noValidate", according to
                HTML5 specs:
                http://www.whatwg.org/specs/web-apps/current-work/#dom-fs-novalidate

                * html/HTMLFormElement.cpp:
                (WebCore::HTMLFormElement::noValidate):
                (WebCore::HTMLFormElement::setNoValidate):
                * html/HTMLFormElement.h:
                * html/HTMLFormElement.idl:

2009-09-04  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Remove unused line of code from WorkerContext
        https://bugs.webkit.org/show_bug.cgi?id=28990

        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::importScripts):

2009-09-04  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        Fix assertion seen when running buildbot.

        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWithGlobalPointer::createStructure): Create the structure without
        the HasDefaultMark bit since this has a custom mark function.

2009-09-04  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=28984, remove the remote stylesheet loader on Mac/Qt.
        Make sure the other code path (now used by everybody) can handle data URLs.

        As per the post on webkit-dev, the ability to work remotely isn't working properly anyway (it doesn't
        hold up the pending sheet count, so you'd just FOUC on every Web page), and it's extremely unlikely
        that anybody is relying on this support.
        
        Tor Arne agreed it was ok to disable (he enabled it on the Qt side), and only Mac/Qt were using this
        code.

        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::userStyleSheet):
        * dom/Document.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        * loader/UserStyleSheetLoader.cpp: Removed.
        * loader/UserStyleSheetLoader.h: Removed.
        * page/Frame.cpp:
        (WebCore::Frame::reapplyStyles):
        * page/Frame.h:
        * page/Page.cpp:
        (WebCore::Page::userStyleSheetLocationChanged):
        (WebCore::Page::userStyleSheet):
        * page/mac/FrameMac.mm:
        * page/qt/FrameQt.cpp:

2009-09-04  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Add "sampling profiler" preference, simplify data display when it's set.

        https://bugs.webkit.org/show_bug.cgi?id=28969

        * inspector/front-end/ProfileDataGridTree.js:
        (WebInspector.ProfileDataGridNode.prototype.get data.formatMilliseconds):
        (WebInspector.ProfileDataGridNode.prototype.get data):
        * inspector/front-end/ProfileView.js:
        (WebInspector.ProfileView):
        * inspector/front-end/inspector.js:

2009-09-04  Jian Li  <jianli@chromium.org>

        Reviewed by Adam Barth.

        [V8] Run-time exception in onmessage handler is not forwarded to the worker object.
        https://bugs.webkit.org/show_bug.cgi?id=28980

        Tested by worker-close.html.

        * bindings/v8/ScriptFunctionCall.cpp:
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::getScriptExecutionContext):
        (WebCore::reportException):
        * bindings/v8/V8Utilities.h:
        (WebCore::getScriptExecutionContext):
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SharedWorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-09-04  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

        Remove unused m_sheet variable and setCSSStyleSheet methods.

        * dom/Document.cpp:
        * dom/Document.h:

2009-09-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt and Adele Peterson.

        (Based on a patch from Adele).
        
        Fix <rdar://problem/7185875>.
        
        * page/Frame.cpp:
        (WebCore::Frame::setView):
        Detach any custom scroll bars from the old view.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::detachCustomScrollbars):
        Simplify the check (and make it work when body is null) by just checking that the scroll bar owner is
        not a RenderPart object.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy):
        ASSERT that frame() is not null here and also add a null check so that release builds won't crash.

2009-09-04  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Make m_userStyleSheetLoader in Frame an OwnPtr.

        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::~Frame):
        * page/Frame.h:
        * page/mac/FrameMac.mm:
        (WebCore::Frame::setUserStyleSheetLocation):
        (WebCore::Frame::setUserStyleSheet):

2009-09-04  Timothy Hatcher  <timothy@apple.com>

        Show color swatches in the Web Inspector before the color text so clicking them will not
        shift the swatch. Also makes multiple swatches in the single property toggle the color format.

        https://bugs.webkit.org/show_bug.cgi?id=28978

        Reviewed by Darin Adler.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle): Some refactoring to consolidate
        the processing we do on the property value. This eliminated the old nickname code, since the new
        WebInspector.Color class handles this. We could also simplify the color regex since more
        is handled by the Color class. Also no longer uses innerHTML for the linkify code.
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.processValue): Helper function to
        process a value given a regex and processor functions. 
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.linkifyURL): Make an anchor for the
        URL with "url()" syntax surrounding it.
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.processColor): Makes a color, if
        there was an exception just return a text node.
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.processColor.changeColorDisplay.changeTo):
        Moved from later in the file.
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.processColor.changeColorDisplay): Ditto.
        * inspector/front-end/inspector.css:

2009-09-04  Mark Mentovai  <mark@chromium.org>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=28614

        Account for scrollbar state changes that occur during layout.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

        Perform a layout prior to checking whether the scrollbar modes are
        off, on, or automatic.  The modes may change during layout.

        * WebCore.base.exp:
        * WebCore.order:
        * page/Frame.cpp:
        (WebCore::Frame::createView):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::resetScrollbars):
        (WebCore::FrameView::layout):
        * page/FrameView.h:
        * platform/ScrollView.h:

        Eliminate duplicated (and incorrect) scrollbar mode tracking between
        FrameView and ScrollView.

2009-09-04  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        hostname and host are mixed up when manipulating anchor elements.
        https://bugs.webkit.org/show_bug.cgi?id=28954

        Swapped the implementation of host and hostname, and made sure not to return
        the port number if it is default for the given protocol. 
        FireFox also avoids returning the protocol number if it is default.

        Test: fast/dom/Element/hostname-host.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::host):
        (WebCore::HTMLAnchorElement::hostname):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::isDefaultPortForProtocol):
        * page/SecurityOrigin.h:

2009-09-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler and Steve Falkenburg.

        Fix <rdar://problem/7192902>.

        Add the necessary plumbing for having QTMovieWin use WebCore timers.
        
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::TaskTimer::initialize):
        Create the timer and call QTMovieWin::setTaskTimerFuncs.
        
        (WebCore::TaskTimer::setTaskTimerDelay):
        Start the timer.
        
        (WebCore::TaskTimer::stopTaskTimer):
        Stop the timer.
        
        (WebCore::TaskTimer::fired):
        Call QTMovieWin::taskTimerFired().
        
        (WebCore::MediaPlayerPrivate::load):
        Initialize the Task timer.
        
        * platform/graphics/win/QTMovieWin.cpp:
        (updateTaskTimer):
        Call the global stopTaskTimer function and setTaskTimerDelay.
        
        (QTMovieWin::taskTimerFired):
        Make this a member function.
        
        (QTMovieWin::setTaskTimerFuncs):
        Set the global function pointers.
        
        (QTMovieWin::initializeQuickTime):
        (DllMain):
        No need to use the QT shared timer.
        * platform/graphics/win/QTMovieWin.h:

2009-09-04  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        Fix Chromium Win compile.  Missing return statement in
        WebCore::RenderThemeChromiumSkia::paintSliderThumb.
        https://bugs.webkit.org/show_bug.cgi?id=28974

        No new tests, build fix.

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintSliderThumb):

2009-09-04  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Rolling out http://trac.webkit.org/changeset/48035, because it broke
        the build.
        https://bugs.webkit.org/show_bug.cgi?id=28696

2009-09-04  Anders Carlsson  <andersca@apple.com>

        Fix vcproj file.

        * WebCore.vcproj/WebCore.vcproj:

2009-09-03  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=28890, make simple user script injection work.
        
        This patch adds new API for adding and removing user scripts from page groups.  User scripts
        are bundled together in isolated worlds (you can have multiple scripts together in the same
        world).

        Added userscripts/ directory for holding new tests (along with a simple test of script injection).

        * WebCore.base.exp:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        * bindings/js/ScriptController.h:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        * bindings/v8/ScriptController.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedParsing):
        (WebCore::FrameLoader::dispatchDocumentElementAvailable):
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScripts):
        (WebCore::Frame::injectUserScriptsForWorld):
        * page/Frame.h:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::~PageGroup):
        (WebCore::PageGroup::addUserScript):
        (WebCore::PageGroup::removeUserContentForWorld):
        (WebCore::PageGroup::removeAllUserContent):
        * page/PageGroup.h:
        (WebCore::PageGroup::userScripts):
        * page/UserScript.h: Added.
        (WebCore::UserScript::UserScript):
        (WebCore::UserScript::source):
        (WebCore::UserScript::url):
        (WebCore::UserScript::patterns):
        (WebCore::UserScript::worldID):
        (WebCore::UserScript::injectionTime):
        * page/UserScriptTypes.h: Added.
        (WebCore::):

2009-09-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26402
        Crashes when using a detached DocumentType node

        Test: fast/dom/DOMImplementation/detached-doctype.html

        DocumentType nodes are the only one that can have null document(), and they can never have
        children, so they are a degenerate case for NodeLists.

        * dom/Node.cpp:
        (WebCore::Node::childNodes): Don't try register node list with document if there's no
        document. Since there are no changes possible for a DocumentType's node list, this is not
        necessary.
        (WebCore::Node::registerDynamicNodeList): Ditto.
        (WebCore::Node::unregisterDynamicNodeList): Ditto. I couldn't find a scenario where this
        was invoked for a DocumentType node, but I also couldn't prove that it can't be (the
        de-registration code path that I saw taken was via Node destructor, and that already has
        a null check for document).

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener): Bail out if there is no document (just as we already do
        if there is no window).
        (WebCore::JSNode::removeEventListener): Ditto.

2009-09-04  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] loadFinished never emitted
        https://bugs.webkit.org/show_bug.cgi?id=28935

        Do not report errors right away from
        ResourceHandle::start. Instead return true and schedule an error
        to be reported in the handle later. Otherwise WebCore gets
        confused and thinks the resource never finished loading, making it
        not emit the finished status.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startHttp):
        (WebCore::):

2009-09-04  Ben Murdoch  <benm@google.com>

        Reviewed by Eric Seidel.

        [V8] DOM Storage bindings: Event Handler should create StorageEvents
        https://bugs.webkit.org/show_bug.cgi?id=28942
        
        Tests:
        Causes the following tests that were failing with V8 to pass:
        * storage/domstorage/localstorage/onstorage-attribute-setwindow.html
        * storage/domstorage/localstorage/complex-keys.html
        * storage/domstorage/localstorage/onstorage-attribute-markup.html
        * storage/domstorage/localstorage/simple-events.html
        * storage/domstorage/localstorage/onstorage-attribute-set-attribute.html
        * storage/domstorage/localstorage/index-get-and-set.html
        * storage/domstorage/sessionstorage/onstorage-attribute-setwindow.html
        * storage/domstorage/sessionstorage/onstorage-attribute-markup.html
        * storage/domstorage/sessionstorage/simple-events.html
        * storage/domstorage/sessionstorage/onstorage-attribute-set-attribute.html
        * storage/domstorage/sessionstorage/index-get-and-set.html

        Code changes:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventToV8Object):  Create StorageEvents.
        * bindings/v8/custom/V8StorageCustom.cpp:
        (WebCore::storageGetter): Check if we are retrieving the length property and return the number of items in the object rather than a property named length when invoking the getItem() member of local/sessionStorage.

2009-09-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=28911

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.doEvalInWindow):
        (WebInspector.ConsoleView.prototype._formatarray):
        (WebInspector.ConsoleView.prototype._formatnode):
        * inspector/front-end/DOMAgent.js:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.performSearch):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.dispatch):
        * inspector/front-end/InjectedScriptAccess.js: Added.
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.methodName):
        (InjectedScriptAccess._installHandler):
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype.update):
        (WebInspector.MetricsSidebarPane.prototype.editingCommitted):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.update):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
        (WebInspector.ObjectPropertyTreeElement.prototype.applyExpression):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.ondblclick):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.doEvalInCallFrame):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.BlankStylePropertiesSection.prototype.editingCommitted):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/inspector.html:

2009-09-04  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        Implement <input type="range"> for Chromium Linux by painting
        the slider and the thumb using skia.
        https://bugs.webkit.org/show_bug.cgi?id=28928

        Covered by existing tests (we're currently hitting an assert for them).

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::adjustSliderThumbSize):
        * rendering/RenderThemeChromiumLinux.h:
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::drawVertLine):
        (WebCore::drawHorizLine):
        (WebCore::drawBox):
        (WebCore::RenderThemeChromiumSkia::paintSliderTrack):
        (WebCore::RenderThemeChromiumSkia::paintSliderThumb):
        * rendering/RenderThemeChromiumSkia.h:

2009-09-04  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        - Implement <input type=color> as a text field.
        - ValidityState::typeMismatch supports for type=color.
        https://bugs.webkit.org/show_bug.cgi?id=28966

        Tests: fast/forms/ValidityState-patternMismatch-unsupported.html
               fast/forms/ValidityState-typeMismatch-color.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::valueMissing):
        (WebCore::HTMLInputElement::patternMismatch):
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::formControlType):
        (WebCore::HTMLInputElement::saveFormControlState):
        (WebCore::HTMLInputElement::restoreFormControlState):
        (WebCore::HTMLInputElement::accessKeyAction):
        (WebCore::HTMLInputElement::rendererIsNeeded):
        (WebCore::HTMLInputElement::createRenderer):
        (WebCore::HTMLInputElement::appendFormData):
        (WebCore::HTMLInputElement::valueWithDefault):
        (WebCore::HTMLInputElement::storesValueSeparateFromAttribute):
        (WebCore::HTMLInputElement::defaultEventHandler):
        (WebCore::HTMLInputElement::isRequiredFormControl):
        (WebCore::HTMLInputElement::dataList):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::):
        (WebCore::HTMLInputElement::isTextField):
        * html/ValidityState.cpp:
        (WebCore::ValidityState::typeMismatch):
        (WebCore::ValidityState::isValidColorString):
        * html/ValidityState.h:

2009-09-04  Mads Ager  <ager@chromium.org>

        Reviewed by David Levin.

        [V8] Crash when updating document cache
        https://bugs.webkit.org/show_bug.cgi?id=28965

        Initialization of a V8 JavaScript context can fail.  When that
        happens, do not attempt to update the document wrapper cache.

        This code path is exercised by http/tests/security/javascriptURL/javascriptURL-in-new-iframe.html.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::updateDocument):

2009-09-04  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Eric Seidel.

        Two bugs:

        https://bugs.webkit.org/show_bug.cgi?id=25489
        CSS property background-position is now serialized in shorthand string as
        background-position-x background-position-y, as the specification requires
        (See http://www.w3.org/TR/2008/WD-css3-background-20080910/#the-background-position).
        

        https://bugs.webkit.org/show_bug.cgi?id=26541
        CSS background-color is now be serialized before other background properties, 
        as CSS specification requires (See http://dev.w3.org/csswg/cssom/#css-value).  

        An existing layout test that accepted wrong order and skipped position test 
        had to be modified.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):

2009-09-03  Kent Tamura  <tkent@chromium.org>

        Reviewed by David Levin.

        Add support for HTMLTextAreaElement.textLength
        https://bugs.webkit.org/show_bug.cgi?id=28929

        Test: fast/forms/textarea-textlength.html

        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::textLength):
        * html/HTMLTextAreaElement.idl:

2009-09-03  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7180197>, https://bugs.webkit.org/show_bug.cgi?id=28822
        REGRESSION(r31231): Creating document with current document's DOCTYPE causes crashes

        Test: fast/dom/DOMImplementation/createDocument-with-used-doctype.html

        * dom/DOMImplementation.cpp: (WebCore::DOMImplementation::createDocument): Even though we
        cannot raise an exception immediately out of fear of breaking Acid3, we shouldn't use a
        DocumentType node in two documents.

2009-09-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Page Cache should support pages with Frames.
        https://bugs.webkit.org/show_bug.cgi?id=13631

        Tests: fast/events/pageshow-pagehide-on-back-cached-with-frames.html
               fast/loader/frames-with-unload-handlers-in-page-cache.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::logCanCacheFrameDecision):

2009-09-03  Steve VanDeBogart  <vandebo@chromium.org>

        Reviewed by Eric Seidel.

        Handle middle click in Chromium like QT
        https://bugs.webkit.org/show_bug.cgi?id=28696

        Tested by middle-click-onpaste.html.

        * platform/Pasteboard.h:
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::getData):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::isSelectionMode):
        (WebCore::Pasteboard::setSelectionMode):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        * platform/chromium/PasteboardPrivate.h:
        (WebCore::PasteboardPrivate::):

2009-09-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        More partial work towards "Page Cache should support pages with Frames"
        https://bugs.webkit.org/show_bug.cgi?id=13631

        Fix a bug where subframes weren't asked if they were cacheable.

        No new tests, especially since page caching for frames isn't turned on yet.
        A layout test will come in my next patch, which enables frames in the page cache.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePageContainingThisFrame):

2009-09-03  Adam Barth  <abarth@webkit.org>

        Reviewed by eric@webkit.org.

        https://bugs.webkit.org/show_bug.cgi?id=24696

        Added mixed content methods to FrameLoaderClient.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::didDisplayInsecureContent):
        (WebCore::EmptyFrameLoaderClient::didRunInsecureContent):
        * loader/FrameLoaderClient.h:

2009-09-03  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Frames support
        https://bugs.webkit.org/show_bug.cgi?id=19041

        * page/wx/EventHandlerWx.cpp:
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::tabsToAllControls):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        * platform/wx/RenderThemeWx.cpp:
        (WebCore::nativeWindowForRenderObject):
        (WebCore::RenderThemeWx::paintButton):
        (WebCore::RenderThemeWx::paintTextField):
        (WebCore::RenderThemeWx::paintMenuList):
        (WebCore::RenderThemeWx::paintMenuListButton):
        * platform/wx/ScrollbarThemeWx.cpp: Added.
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeWx::~ScrollbarThemeWx):
        (WebCore::ScrollbarThemeWx::scrollbarThickness):
        (WebCore::ScrollbarThemeWx::hasThumb):
        (WebCore::ScrollbarThemeWx::buttonSize):
        (WebCore::ScrollbarThemeWx::backButtonRect):
        (WebCore::ScrollbarThemeWx::forwardButtonRect):
        (WebCore::ScrollbarThemeWx::trackRect):
        (WebCore::ScrollbarThemeWx::paintScrollCorner):
        (WebCore::ScrollbarThemeWx::paint):
        * platform/wx/ScrollbarThemeWx.h: Added.
        (WebCore::ScrollbarThemeWx::hasButtons):
        * platform/wx/TemporaryLinkStubs.cpp:
        * platform/wx/wxcode/gtk/scrollbar_render.cpp: Added.
        (wxStyleForPart):
        (GetButtonWidget):
        (wxGetGdkWindowForDC):
        (wxRenderer_DrawScrollbar):
        * platform/wx/wxcode/mac/carbon/scrollbar_render.cpp: Added.
        (wxScrollbarPartToHIPressedState):
        (wxRenderer_DrawScrollbar):
        * platform/wx/wxcode/scrollbar_render.h: Added.
        (calcThumbStartAndLength):
        * platform/wx/wxcode/win/non-kerned-drawing.cpp:
        (WebCore::drawTextWithSpacing):
        * platform/wx/wxcode/win/scrollbar_render.cpp: Added.
        (GraphicsHDC::GraphicsHDC):
        (GraphicsHDC::~GraphicsHDC):
        (GraphicsHDC::operator HDC):
        (getTSStateForPart):
        (wxRenderer_DrawScrollbar):
        * webcore-wx.bkl:

2009-09-03  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Page content is not displayed in case of HTTP status error
        https://bugs.webkit.org/show_bug.cgi?id=28949

        If the server sent content, show it to the user instead of an error,
        even if the HTTP status code is not success.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::resetState):
        * platform/network/qt/QNetworkReplyHandler.h:

2009-09-03  Drew Wilson  <atwilson@google.com>

        Reviewed by Dimitri Glazkov.

        Need to update v8 bindings to support passing multiple ports to postMessage()
        https://bugs.webkit.org/show_bug.cgi?id=28839

        Added support for passing MessagePortArray to v8 bindings.

        New tests that now pass with V8:
               fast/events/message-port-multi.html
               fast/workers/worker-context-multi-port.html
               fast/workers/worker-multi-port.html

        * WebCore.gypi:
        Added V8MessageEventCustom.cpp and V8MessagePortCustom.h
        * bindings/v8/custom/V8CustomBinding.h:
        Added custom postMessage() handlers for various classes.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::DOMWindowPostMessage):
        Added custom handler that supports MessagePortArray.
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        (WebCore::DedicatedWorkerContextPostMessage):
        Added custom handler that supports MessagePortArray.
        * bindings/v8/custom/V8MessageEventCustom.cpp: Added.
        (WebCore::MessageEventPorts):
        Added getter for ports attribute.
        (WebCore::MessageEventInitMessageEvent):
        Added custom handler that supports MessagePortArray.
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::MessagePortPostMessage):
        Added custom handler that supports MessagePortArray.
        (WebCore::getMessagePortArray):
        Added helper function that supports converting from a sequence-like object to a MessagePortArray.
        * bindings/v8/custom/V8MessagePortCustom.h: Added.
        Added declaration for getMessagePortArray().
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::WorkerPostMessage):
        Added custom handler that supports MessagePortArray.

2009-09-03  Drew Wilson  <atwilson@google.com>

        Reviewed by Sam Weinig.

        Need to update JS bindings and IDL files to support multiple message ports in postMessage()
        https://bugs.webkit.org/show_bug.cgi?id=28460

        Added new toJSSequence() API which validates that a JSValue meets the WebIDL criteria for a sequence.

        Tests: fast/events/message-port-multi.html
               fast/workers/worker-context-multi-port.html
               fast/workers/worker-multi-port.html

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Added JSMessagePortCustom.h and JSMessageEventCustom.cpp.
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::toJSSequence):
        Added toJSSequence() API to do validation on sequence-like objects per WebIDL.
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::postMessage):
        Added custom handler for postMessage() that handles being passed MessagePortArrays.
        * bindings/js/JSDedicatedWorkerContextCustom.cpp:
        (WebCore::JSDedicatedWorkerContext::postMessage):
        Added custom handler for postMessage() that handles being passed MessagePortArrays.
        * bindings/js/JSMessageEventCustom.cpp: Added.
        (WebCore::JSMessageEvent::ports):
        Added custom ports() getter that converts from MessagePortArray to JSArray.
        (WebCore::JSMessageEvent::initMessageEvent):
        Added support for passing a MessagePortArray.
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::postMessage):
        Added custom handler for postMessage() that handles being passed MessagePortArray.
        (WebCore::fillMessagePortArray):
        New helper routine that validates/converts from a JS sequence o a WebCore::MessagePortArray.
        * bindings/js/JSMessagePortCustom.h: Added.
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorker::postMessage):
        Added custom handler for postMessage() that handles being passed MessagePortArray.
        * dom/MessageEvent.cpp:
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::ports):
        Changed ports() to return a MessagePortArray* since this value can be null.
        * dom/MessageEvent.idl:
        Updated IDL to match HTML5 spec (now accepts MessagePortArrays instead of a solitary MessagePort).
        * dom/MessagePort.cpp:
        * dom/MessagePort.h:
        * dom/MessagePort.idl:
        Updated IDL to match HTML5 spec (postMessage() now accepts MessagePortArrays instead of a solitary MessagePort).
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        Updated IDL to match HTML5 spec (postMessage() now accepts MessagePortArrays instead of a solitary MessagePort).
        * workers/DedicatedWorkerContext.cpp:
        * workers/DedicatedWorkerContext.h:
        * workers/DedicatedWorkerContext.idl:
        Updated IDL to match HTML5 spec (postMessage() now accepts MessagePortArrays instead of a solitary MessagePort).
        * workers/Worker.cpp:
        * workers/Worker.h:
        * workers/Worker.idl:
        Updated IDL to match HTML5 spec (postMessage() now accepts MessagePortArrays instead of a solitary MessagePort).

2009-09-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Do not query non-function call frames for function name.

        https://bugs.webkit.org/show_bug.cgi?id=28799

        * inspector/front-end/InjectedScript.js:
        (InjectedScript.CallFrameProxy):
        (InjectedScript.CallFrameProxy.prototype._wrapScopeChain):

2009-09-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Crash after typing "clear" and pressing return in inspector console.

        https://bugs.webkit.org/show_bug.cgi?id=28684

        * inspector/front-end/InjectedScript.js:
        (InjectedScript._clearConsoleMessages):
        (InjectedScript._inspectObject):
        (InjectedScript._ensureCommandLineAPIInstalled):

2009-09-03  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Adam Barth.

        [V8] Squeezed out some performance from string conversion.
        https://bugs.webkit.org/show_bug.cgi?id=28945

        * bindings/v8/V8Binding.cpp:
        (WebCore::WebCoreStringResource::WebCoreStringResource):
        (WebCore::WebCoreStringResource::~WebCoreStringResource):
        (WebCore::WebCoreStringResource::data):
        (WebCore::WebCoreStringResource::length):
        (WebCore::WebCoreStringResource::atomicString):
        (WebCore::WebCoreStringResource::string):
        Avoid calling virtual length method. Be more explicit with
        external memory computation. Avoid function calls in data and
        length.
        (WebCore::):
        (WebCore::v8StringToWebCoreString):
        (WebCore::v8StringToAtomicWebCoreString):
        (WebCore::v8NonStringValueToWebCoreString):
        (WebCore::v8NonStringValueToAtomicWebCoreString):
        Avoid extra calls of WebCoreStringResource::toString. When
        AtomicString is computed pass it immediately when constructing
        WebCoreStringResource. Use inline buffer for small strings.
        * bindings/v8/V8Binding.h:
        (WebCore::v8ValueToWebCoreString):
        (WebCore::v8ValueToAtomicWebCoreString):
        (WebCore::toString):
        Inline dispatch of string vs. non-string values.

2009-09-03  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Adam Barth.

        [V8] Inlined common case of V8IsolatedWorld::getEntered to speed
        up V8Proxy lookup.
        https://bugs.webkit.org/show_bug.cgi?id=28946

        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::getEnteredImpl):
        * bindings/v8/V8IsolatedWorld.h:
        (WebCore::V8IsolatedWorld::getEntered):

2009-09-03  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Fix a regression bug that maxLength doesn't work for IME input.
        https://bugs.webkit.org/show_bug.cgi?id=25253

        Tests: fast/forms/input-maxlength-ime-completed.html
               fast/forms/input-maxlength-ime-preedit.html

        * dom/InputElement.cpp:
        (WebCore::InputElement::handleBeforeTextInsertedEvent):
        * dom/InputElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::defaultEventHandler):

2009-09-03  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        Make SVGStyleElement title/media/type setters do something
        https://bugs.webkit.org/show_bug.cgi?id=28828

        Test: svg/dom/style-reflect.html

        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::setXmlspace): Actually change the attribute.
        (WebCore::SVGStyleElement::setType): Ditto.
        (WebCore::SVGStyleElement::setMedia): Ditto.
        (WebCore::SVGStyleElement::setTitle): Ditto.

2009-09-03  Ben Murdoch  <benm@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=28872
        
        Fixes a bug where handleEvent() in the V8 Custom SQL Statement Error binding would not return the correct result to WebCore after invoking the callback.

        Test: storage/statement-error-callback.html

        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8CustomSQLStatementErrorCallback::handleEvent): Return true from handleEvent() if the callback raised an exception or the callback itself returned true.

2009-09-03  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Adding three font-specific files to WebCore:
        FontCustomPlatformData.cpp, FontCustomPlatformData.h,
        and FontPlatformData.h
        https://bugs.webkit.org/show_bug.cgi?id=28131

        * platform/graphics/haiku/FontCustomPlatformData.cpp: Added.
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/haiku/FontCustomPlatformData.h: Added.
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        * platform/graphics/haiku/FontPlatformData.h: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::font):
        (WebCore::FontPlatformData::size):
        (WebCore::FontPlatformData::bold):
        (WebCore::FontPlatformData::oblique):
        (WebCore::FontPlatformData::hashTableDeletedFontValue):

2009-09-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        More partial work towards "Page Cache should support pages with Frames"
        https://bugs.webkit.org/show_bug.cgi?id=13631

        No new tests. (No change in behavior, current tests pass).

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading): Adopt the new enum form for FrameLoader::stopLoading().

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading): Take an enum to decide whether to dispatch no unload events,
          only unload, or unload and pagehide.
        (WebCore::FrameLoader::closeURL):
        (WebCore::FrameLoader::scheduleRedirection):
        (WebCore::FrameLoader::cachePageForHistoryItem): Call pageHidden().
        (WebCore::FrameLoader::pageHidden): Add to dispatch the pagehide event to all frames in the case
          where a page is added to the PageCache.
        * loader/FrameLoader.h:

        * loader/FrameLoaderTypes.h: Add an UnloadEventPolicy enum.

2009-09-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        More partial work towards "Page Cache should support pages with Frames"
        https://bugs.webkit.org/show_bug.cgi?id=13631

        - More CachedFrame destruction work.
        - Including related Frame and FrameLoader changes and cleanup.

        No new tests. (No change in behavior, current tests pass).

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore): Rebuild up the whole FrameTree when restoring.
        (WebCore::CachedFrame::CachedFrame): Tear down the entire FrameTree when caching.
        (WebCore::CachedFrame::destroy): For child frames that are being destroyed while in
          the PageCache, do lightweight cleanup to:
          A - Prevent referring to a stale Page object.
          B - Prevent World Leaks of WebKit objects.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopAllLoaders): stopAllLoaders() should never be called on Frames that are
          in the PageCache. ASSERT that fact.
        (WebCore::FrameLoader::open): Remove a bogus release-build workaround, as the comment right above it
          explains it is not effective, and it'd be better to see the crash locally instead of downstream.
        (WebCore::FrameLoader::closeAndRemoveChild): Make sure the owner element has a page pointer before
          referencing it.
        (WebCore::FrameLoader::detachFromParent): Use the new detachViewsAndDocumentLoader() call
        (WebCore::FrameLoader::detachViewsAndDocumentLoader): Does lightweight cleanup of client (WebKit) objects.
        * loader/FrameLoader.h:

        * page/Frame.cpp:
        (WebCore::Frame::detachFromPage): Simply clear the Page pointer without doing any other work.
        (WebCore::Frame::pageDestroyed): Use the new detachFromPage().
        * page/Frame.h:

2009-09-02  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Dimitri Glazkov

        [Chromium] Add 'icu::' qualifier in preparation for ICU upgrade to 4.2
        in Chromium. This is to fix a new file added in r28742 since the
        last patch for this issue.

        https://bugs.webkit.org/show_bug.cgi?id=28410

        No change in the test result.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::getNormalizedTextRun):

2009-09-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Correct a typo to fix bustage, caused by r47991.
        https://bugs.webkit.org/show_bug.cgi?id=27933

        * platform/graphics/skia/ImageBufferSkia.cpp: Changed "Unpremultipled" to "Unmultiplied".

2009-09-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Add a missing include to fix bustage, caused by r47991.
        https://bugs.webkit.org/show_bug.cgi?id=27933

        * platform/graphics/skia/ImageBufferSkia.cpp: Added SkColorPriv include.

2009-09-02  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] Implement file support for DragData.
        https://bugs.webkit.org/show_bug.cgi?id=28896

        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::containsCompatibleContent):

2009-09-02  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Protect libcurl shared data with Mutex objects via curl_set_share_opt.
        https://bugs.webkit.org/show_bug.cgi?id=28920

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::sharedResourceMutex):
        (WebCore::curl_lock_callback):
        (WebCore::curl_unlock_callback):
        (WebCore::ResourceHandleManager::ResourceHandleManager):

2009-09-02  Evan Stade  <estade@chromium.org>

        Reviewed by Eric Seidel.

        Expose functions to change the focus ring color for Linux Chromium

        https://bugs.webkit.org/show_bug.cgi?id=28887

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::RenderThemeChromiumLinux):
        (WebCore::RenderThemeChromiumLinux::setFocusRingColor):
        (WebCore::RenderThemeChromiumLinux::platformFocusRingColor):
        * rendering/RenderThemeChromiumLinux.h:

2009-09-02  Dirk Schulze  <krit@webkit.org>

        Reviewed by Eric Seidel.

        SVG Filter premultiplied color support for getImageDate/putImageData
        [https://bugs.webkit.org/show_bug.cgi?id=27933]

        Patch to get premultiplied color support for Skia on getImageDate/putImageData.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):
        (WebCore::putImageData):

2009-09-02  Brady Eidson  <beidson@apple.com>

        Forget to rename openInFrameloader() to open(), which was requested in Darin's review of my last patch.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        (WebCore::CachedFrame::open):
        * history/CachedFrame.h:
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):

2009-09-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        In http://trac.webkit.org/changeset/47943 I added new header dependencies to FrameLoader.h.
        Removing them is a little trouble, but worth it going forward.
        The pattern of creating a "CachedFrameBase" as the interface CachedFrame provides to FrameLoader
        was suggested by Darin Adler.

        No new tests. (No change in behavior)

        Make CachedFrame inherit privately from CachedFrameBase, which becomes the interface FrameLoader uses:
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::CachedFrameBase):
        (WebCore::CachedFrameBase::~CachedFrameBase):
        (WebCore::CachedFrameBase::restore):
        (WebCore::CachedFrame::CachedFrame):
        (WebCore::CachedFrame::openInFrameLoader):
        * history/CachedFrame.h:
        (WebCore::CachedFrameBase::document):
        (WebCore::CachedFrameBase::view):
        (WebCore::CachedFrameBase::domWindow):
        (WebCore::CachedFrame::create):
        (WebCore::CachedFrame::documentLoader):
        (WebCore::CachedFrame::mousePressNode):

        Call the new ::openInFrameLoader() method on the CachedFrame, as CachedFrameBase is now the only
        thing capable of interacting with FrameLoader::open(CachedFrameBase):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        * history/CachedPage.h:
        (WebCore::CachedPage::documentLoader):

        Make ::open(CachedFrame) public, and change it to ::open(CachedFrameBase):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::open):
        * loader/FrameLoader.h:

2009-09-02  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Cannot pres Enter to escape from bulleted list when <ul> is a child of <li>.
        https://bugs.webkit.org/show_bug.cgi?id=24866

        This patch modifies breakOutOfEmptyListItem to break out of a properly nested list
        (a list to break out of is inside another list item).

        When the empty list item appears at the end of another list item, WebKit breaks out of
        the outer list item, and adds new item below the outer list item.
        Otherwise, WebKit breaks out of the the inner list item and inserts new paragraph.

        Test: editing/execCommand/break-out-of-empty-list-item.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem):

2009-09-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        More partial work towards "Page Cache should support pages with Frames"
        https://bugs.webkit.org/show_bug.cgi?id=13631

        This patch is primarily about the "CachedFrame tree" and making slightly different decisions
        based on whether a CachedFrame is the main frame or a subframe.

        - Store whether a CachedFrame represents the main frame or a subframe.
        - "Chop off the frame tree" for the main frame when creating its CachedFrame, as main frames 
          are reused and need to start new page loads with an empty frame tree.
        - Reattach the frame tree to the main frame when restoring it.
        - open() the cached subframes in their respective loaders when restoring.
        - Properly clear() and destroy() cached subframes.
        - When committing to a new page load, and after caching the previous page, only clear the
          FrameView for the main frame.

        Note that all of above will eventually be necessary as I continue to land this work in pieces,
        but doesn't actually change any behavior right now because we still refuse to even *try* to
        cache pages with frames.

        No new tests. No change in behavior, and current tests continue to pass.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        (WebCore::CachedFrame::restore):
        (WebCore::CachedFrame::clear):
        (WebCore::CachedFrame::destroy):
        * history/CachedFrame.h:
        (WebCore::CachedFrame::isMainFrame):

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::open):
        * loader/FrameLoader.h:

2009-09-02  Brady Eidson  <beidson@apple.com>

        No review, build fix.

        http://trac.webkit.org/changeset/47976 broke the build.  
        Let's try compiling before we land things, shall we?

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData): Order the initialization list correctly.

2009-09-02  Kevin Ollivier  <kevino@theolliviers.com>

        waf build fixes for Windows/MSVC.

        * wscript:

2009-09-02  Ben Murdoch  <benm@google.com>

        Unreviewed build fix for Chromium.

        Missed #including V8Proxy.h in WebCore/bindings/v8/V8Binding.cpp.

        * bindings/v8/V8Binding.cpp: add V8Proxy.h as an include

2009-09-02  Kevin Ollivier  <kevino@theolliviers.com>

        waf build fix, don't define symbols we now grab from other sources.

        * platform/wx/TemporaryLinkStubs.cpp:

2009-09-02  Kevin Ollivier  <kevino@theolliviers.com>

        Build fixes for PluginViewNone.cpp and a wx build fix for PluginView.cpp.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::stop):
        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::platformDestroy):

2009-09-02  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by Eric Seidel.

        Fix the build failure of WebKit for Linux/Qt when WML is enabled

        No test cases needed since this just fixes the build problem.

        * wml/WMLElement.cpp:
        (WebCore::WMLElement::create):
        * wml/WMLTableElement.cpp:
        (WebCore::WMLTableElement::joinSuperflousColumns):
        (WebCore::WMLTableElement::padWithEmptyColumns):

2009-09-02 Yong Li <yong.li@torchmobile.com>

        Reviewed by Adam Barth.

        WINCE PORT: use shared buffer for custom font data
        https://bugs.webkit.org/show_bug.cgi?id=27734

        Refactored by Joe Mason <joe.mason@torchmobile.com>

        * loader/CachedFont.cpp:
        add WINCE to platforms using cached custom data
        * platform/graphics/opentype/OpenTypeUtilities.cpp:
        (WebCore::renameFont): implement for WinCE
        * platform/graphics/opentype/OpenTypeUtilities.h:
        build fixes
        * platform/graphics/wince/FontCustomPlatformData.cpp:
        (WebCore::setCustomFontCache): add accessor
        (WebCore::createFontCustomPlatformData): change param to SharedBuffer
        * platform/graphics/wince/FontCustomPlatformData.h:
        update function signatures 
 
2009-09-02 Yong Li <yong.li@torchmobile.com>

        Reviewed by Adam Barth.

        WINCE PORT: font-related build fixes and minor bugfixes
        https://bugs.webkit.org/show_bug.cgi?id=27734

        * platform/graphics/FontCache.h: declare functions added in https://bugs.webkit.org/show_bug.cgi?id=27509
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage): fix ambiguous overload error in min/max on Windows
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData): initialize member vars
        * platform/graphics/SimpleFontData.h: disable unused members on Wince to save space 

2009-09-02  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Adam Barth.

        Another pass at releasing the storage mutex.
        https://bugs.webkit.org/show_bug.cgi?id=28904

        Another pass at releasing the storage mutex (when applicable) when we finish
        executing JavaScript.  http://dev.w3.org/html5/spec/Overview.html#storage-mutex
        describes the required behavior.

        As it turns out, https://bugs.webkit.org/show_bug.cgi?id=28789 didn't solve
        the problem correctly.  First of all, I missed that events and timeouts go
        through a different call path.  Second of all, I didn't consider recursion
        correctly.  Third of all, my check to see if LocalStorage is alive actually
        instantiates it if it isn't yet.  Fourth, I forgot DOM_STORAGE guards around
        it.  So I'm reverting that change completely and doing it more cleanly.
        Unfortunately, the solution isn't as portable (and thus I've left out the JSC
        implementation for now).

        NOTE: This change now tracks recursion on function callbacks in V8.  I ran this
        by Mads Ager and Mike Belshe and they seemed to think adding the checks were
        fine.  Most callbacks are asynchronous and thus wouldn't be nested.  The few
        scenareos where you can have nested callbacks probably should have always been
        protected by a recursion guard.

        Unfortunately, this can't be tested without a hook added to the layout test
        controllers since the lock is (by design) not supposed to be observable by
        JavaScript.  https://bugs.webkit.org/show_bug.cgi?id=28906

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate): revert
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluate): revert
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::runScript):
            Add releaseStorageMutex call.  A small amount of clean up.
        (WebCore::V8Proxy::callFunction):
            Add releaseStorageMutex call.  A small amount of clean up.
        (WebCore::V8Proxy::releaseStorageMutex):
            Check to see if localStorage has been instantiated.  If so, tell it to
            unlock all storage areas.
        * bindings/v8/V8Proxy.h:
        * page/PageGroup.h:
        (WebCore::PageGroup::hasLocalStorage):  Make hasLocalStorage public.

2009-09-02  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Adam Barth.

        WINCE PORT: Implement ImageBuffer for WINCE
        Implement Image interface with a light class BufferedImage
        for rendering ImageBuffer
        https://bugs.webkit.org/show_bug.cgi?id=28167

        * platform/graphics/wince/ImageBufferData.h: Added.
        * platform/graphics/wince/ImageBufferWince.cpp: Added.

2009-08-31  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Eric Seidel.

        Join the various PluginView destructors into one shared implementation

        https://bugs.webkit.org/show_bug.cgi?id=27706

        The Qt port used to delete the platform plugin widget as the last step.
        Now this is done before cleaning up the script objects and unloading the
        plugin package, similar to how the Win port does it.

        * plugins/PluginView.cpp:
        * plugins/PluginViewNone.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/mac/PluginViewMac.cpp:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/win/PluginViewWin.cpp:

2009-08-31  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Eric Seidel.

        Share PluginView::init() between ports

        https://bugs.webkit.org/show_bug.cgi?id=27706

        The port-spesific bits are moved to platformStart(), which now returns
        a bool based on the success of the platformStart.

        m_hasPendingGeometryChange is now initialized in the initializer list
        instead of in PluginViewQt's init()

        PluginViewMac (currently used only by the Qt port) used to manually call
        stop() in the case where an unsupported drawing or event model was detected.
        This was wrong, as the m_status and m_isStarted fields should be used to
        guard against doing operations on a plugin in this intermediate state.

        * plugins/PluginView.cpp:
        * plugins/PluginView.h:
        * plugins/PluginViewNone.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/mac/PluginViewMac.cpp:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/win/PluginViewWin.cpp:

2009-09-02  Ben Murdoch  <benm@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=28737
        
        Update JavaScript bindings in JSC and V8 for SQLTransaction to throw exceptions in the right places.

        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql): Throw an exception if no parameters are passed to executeSql().
        * bindings/v8/V8Binding.cpp:
        (WebCore::v8ValueToWebCoreString): Catch an exception if thrown from toString().
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Allow "arrayish objects" to be passed to executeSql.

2009-09-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Migrate Databases tab to InjectedScript /
        serialized interaction.

        https://bugs.webkit.org/show_bug.cgi?id=28873

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::handleEvent):
        * inspector/front-end/Database.js:
        (WebInspector.Database.prototype.isDB):
        (WebInspector.Database.prototype.runWithTableNames.sortingCallback):
        (WebInspector.Database.prototype.runWithTableNames):
        (WebInspector.Database.prototype.executeSql):
        (WebInspector.Database.prototype.executeSql.errorCallback):
        (WebInspector.Database.prototype.executeSql.queryTransaction):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._enterKeyPressed):
        (WebInspector.DatabaseQueryView.prototype._queryFinished):
        * inspector/front-end/DatabaseTableView.js:
        (WebInspector.DatabaseTableView):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.selectDatabase):
        (WebInspector.StoragePanel.prototype.updateDatabaseTables.withTableNames):
        (WebInspector.StoragePanel.prototype.updateDatabaseTables):
        (WebInspector.DatabaseSidebarTreeElement.prototype.onpopulate.withTableNames):
        (WebInspector.DatabaseSidebarTreeElement.prototype.onpopulate):

2009-09-02  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed (trivial followup fix). 
        
        Web Inspector: Trivial follow up fix to r47944.

        https://bugs.webkit.org/show_bug.cgi?id=28800

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::nodeForId):

2009-09-01  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by John Sullivan.

        Fixed a bug in handling of isReadOnly, where textareas were casted to HTMLInputElements.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isReadOnly):

2009-09-01  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=28047
        add utility method to enable logging messages for inspector development

        manual test case added (see below)

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype.toMessageElement):
        (WebInspector.ConsoleMessage.prototype.toString):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector.log):
        * manual-tests/inspector/webinspector-log.html: Added.
        * page/Console.cpp:
        (WebCore::printMessageSourceAndLevelPrefix):
        * page/Console.h:
        (WebCore::):

2009-09-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21990
        When a rare EUC-JP character is present, explicitly (and correctly) labelled EUC-JP document
        is mistreated as Shift_JIS

        <rdar://problem/5828506> Safari should not try auto-detecting if charset information exists

        WebKit used to unconditionally auto-detect document encoding if it was one of Japanese ones.
        This didn't really match any browser, and did cause problems on some sites.

        Our detector is very quick to label an EUC-JP page as Shift_JIS if it notices a byte that
        cannot be part of EUC-JP source. However, such bytes do appear in Web pages sometimes,
        especially in comments. Also, some valid EUC-JP sequences are not known to it.

        Some pages that are fixed by this change:

        <rdar://problem/5934750> Encoding in incorrect at http://cocodeparis.blog45.fc2.com/. This
        page has incorrect encoding in title, so no browser displays it 100% fine. We now match
        Firefox and IE.

        <rdar://problem/6007713> The web page http://www.sf.us.emb-japan.go.jp/top.htm is garbled
        in Safari. There is a stray byte in comments that was makes charset detector think it can't
        be EUC-JP.

        <rdar://problem/6965711> A Japanese web page www.nippontv.studiolegend.tv is garbled in
        Safari. Many comments on this page are encoded as Shift_JIS - IE magically displays that
        fine in View Source mode (it doesn't seem to have an ability to switch between EUC-JP and
        Shift_JIS in normal HTML view though).

        Test: fast/encoding/japanese-encoding-mix.html

        * loader/TextResourceDecoder.cpp: (WebCore::TextResourceDecoder::decode): Only invoke auto-
        detection if there is no solid charset information yet.

2009-09-01  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] FileList cannot be accessed via index in Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=28883

        Tested by clipboard-file-access.html.

        * WebCore.gypi:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8FileListCustom.cpp: Added.

2009-08-31  Jon Honeycutt  <jhoneycutt@apple.com>

        Remove the workaround added in r47316.

        Reviewed by Sam Weinig.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::AXObjectCache):

        * accessibility/AXObjectCache.h:
        Remove the Document argument to the AXObjectCache constructor and the
        m_document member variable, and replace the no-parameter
        handleFocusedUIElementChanged() with the two-parameter GTK function.
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):

        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (fallbackObject):
        Don't pass a null Document when constructing the AXObjectCache.

        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):

        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        Get the document from the RenderObject; m_document was removed.

        * dom/Document.cpp:
        (WebCore::Document::axObjectCache):
        Don't pass the Document when constructing the AXObjectCache.
        (WebCore::Document::setFocusedNode):
        Pass the old and new focused RenderObjects when calling
        handleFocusedUIElementChanged().

2009-09-01  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Check that InspectorDOMAgent and InspectorFrontend are not null
        before accessing them in InspectorBackend. They may be null if
        InspectorController is closed before an asynchronous operation is
        started.

        https://bugs.webkit.org/show_bug.cgi?id=28800

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getCookies):
        (WebCore::InspectorBackend::getChildNodes):
        (WebCore::InspectorBackend::setAttribute):
        (WebCore::InspectorBackend::removeAttribute):
        (WebCore::InspectorBackend::setTextNodeValue):
        (WebCore::InspectorBackend::highlight):
        (WebCore::InspectorBackend::nodeForId):
        (WebCore::InspectorBackend::pushNodePathToFrontend):
        (WebCore::InspectorBackend::addNodesToSearchResult):
        (WebCore::InspectorBackend::selectDatabase):
        (WebCore::InspectorBackend::selectDOMStorage):
        (WebCore::InspectorBackend::inspectorDOMAgent):
        (WebCore::InspectorBackend::inspectorFrontend):
        * inspector/InspectorBackend.h:

2009-09-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Page Cache should support pages with frames
        https://bugs.webkit.org/show_bug.cgi?id=13631

        Things learned in the full task that this patch addresses:
        - The notions of clearing a CachedFrame and destroying a CachedFrame were two concepts that 
          needed to be managed separately.
        - Once we start restoring pages with multiple CachedFrames, we'll have to be calling
          FrameLoader::open(CachedFrame&) multiple times with different CachedFrames, and this process
          will be guided by the CachedFrames themselves.

        No new tests. (No change in behavior, current layout tests pass)
        
        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        (WebCore::CachedFrame::~CachedFrame):
        (WebCore::CachedFrame::clear): Only clear pointers out.
        (WebCore::CachedFrame::destroy): Perform the destructive cleanup work here - Things that shouldn't
          occur simply by navigating back to a page with a CachedFrame.
        * history/CachedFrame.h:

        * history/CachedPage.cpp:
        (WebCore::CachedPage::~CachedPage):
        (WebCore::CachedPage::restore): Call clear() after restoring.
        (WebCore::CachedPage::clear):
        (WebCore::CachedPage::destroy):
        * history/CachedPage.h:

        * history/PageCache.cpp:
        (WebCore::PageCache::releaseAutoreleasedPagesNow): destroy() CachedPages that are being pruned,
          instead of clearing them.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad): Let the CachedPage clear() itself after restoring.
        (WebCore::FrameLoader::open): Don't ::open() the CachedFrame, as the CachedPage does that now.
        * loader/FrameLoader.h:  Add the friending so CachedPage and CachedFrame can better guide the process.
          Even though CachedFrame::restore() isn't used for now, it will be soon.

2009-09-01  Andrei Popescu  <andreip@google.com>

        Reviewed by David Levin.

        Add a "lowMemoryNotification" method to the V8 ScriptController class.
        This is needed in order to allow the host application (Android Web browser in this case)
        to call the v8::V8::LowMemoryNotification() method added to V8 in
        http://code.google.com/p/v8/source/detail?spec=svn2777&r=2725
        
        https://bugs.webkit.org/show_bug.cgi?id=28776


        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::lowMemoryNotification):
        * bindings/v8/ScriptController.h:

2009-09-01  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Adam Barth.

        V8 Bindings for WebSocket API.
        https://bugs.webkit.org/show_bug.cgi?id=28844

        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8DOMWrapper::convertToV8Object):
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8WebSocketCustom.cpp: Added.

2009-09-01  Peter Kasting  <pkasting@google.com>

        Unreviewed (build fix).

        Missed a "." -> "->" conversion.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ReadContext::ReadContext):

2009-09-01  Peter Kasting  <pkasting@google.com>

        Unreviewed (build fix).

        Try to fix Qt build, take 2.  The Qt code had what looks like a
        broken virtual function override.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ReadContext::ReadContext):
        (WebCore::ImageDecoderQt::setData):
        * platform/graphics/qt/ImageDecoderQt.h:

2009-09-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Uninitialized variable in XSSAuditor
        https://bugs.webkit.org/show_bug.cgi?id=28874

        One ought to initialize variables before use even when it doesn't
        matter.  No behavior change.

        * page/XSSAuditor.h:
        (WebCore::XSSAuditor::CachingURLCanonicalizer::CachingURLCanonicalizer):

2009-09-01  Peter Kasting  <pkasting@google.com>

        Unreviewed (build fix).

        Try to fix Qt build.

        * platform/graphics/ImageSource.cpp:

2009-08-28  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=27965
        Eliminate most of ImageSourceQt.cpp in favor of ImageSource.cpp.

        * WebCore.pro:
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::frameHasAlphaAtIndex):
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameHasAlphaAtIndex):
        (WebCore::ImageSource::frameIsCompleteAtIndex):

2009-09-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Make InjectedScript self-contained (move necessary
        methods from utilities.js into InjectedScript).

        https://bugs.webkit.org/show_bug.cgi?id=28871

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.generateStylesheet):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript._ensureCommandLineAPIInstalled.inspectObject):
        (InjectedScript._ensureCommandLineAPIInstalled):
        (InjectedScript.pushNodeToFrontend):
        (InjectedScript.createProxyObject):
        (Object.type):
        (Object.hasProperties):
        (Object.className):
        (String.prototype.escapeCharacters):
        * inspector/front-end/utilities.js:

2009-09-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: console log message repeat count double.

        https://bugs.webkit.org/show_bug.cgi?id=28856

        * inspector/front-end/InjectedScript.js:
        (InjectedScript._evaluateOn):

2009-09-01  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Mark Rowe.

        [Gtk] Fix DATALIST build
        https://bugs.webkit.org/show_bug.cgi?id=28826

        Add ENABLE_DATALIST to FEATURE_DEFINES.

        * GNUmakefile.am:

2009-09-01  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        SVGSVGElement suspend methods argument/return types incorrect
        https://bugs.webkit.org/show_bug.cgi?id=28860

        Also fix the style of the argument names.

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::suspendRedraw):
        (WebCore::SVGSVGElement::unsuspendRedraw):
        * svg/SVGSVGElement.h:

2009-09-01  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Eric Seidel.

        Fix bug 28808:  [Skia] Fix flaky layout test svg/dynamic-updates/SVGClipPathElement-dom-clipPathUnits-attr.html [DEBUG]
        (https://bugs.webkit.org/show_bug.cgi?id=28808)

        The bug fix adds an explicit check for the validity of the path when it is 
        transformed into local coordinates. 
        This was the most suitable place I could find that didn't cause an inordinate 
        amount of refactoring. Also, it seems pertinent and may also catch other cases 
        that are not limited to clipping paths.

        TEST: existing svg/dynamic-updates/SVGClipPathElement-dom-clipPathUnits-attr.html

        * platform/graphics/skia/GraphicsContextSkia.cpp: make isPathSkiaSafe accessible
        (WebCore::):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::currentPathInLocalCoordinates): check Skia safety of path

2009-09-01  Yusuke Sato  <yusukes@chromium.org>

        Reviewed by Eric Seidel.

        [Chromium] Combining Diacritical Marks (U+0300..) are not handled correctly.
        https://bugs.webkit.org/show_bug.cgi?id=28742 

        Normalize (NFC) a TextRun when the run contains combining diacritical marks
        so that Skia can pick a correct glyph without relying on GSUB table in a font.
        This change is for Chromium Linux.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::getTextRun): Added.
        (WebCore::TextRunWalker::getNormalizedTextRun): Added.

        This function is called when the run contains U+0300..U+036F and converts characters in
        the run to the combined form (NFC) using ICU.

2009-09-01  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Inlined fast paths of V8DOMWrapper::convertNodeToV8Object and
        V8Proxy::createWrapperFromCache.
        https://bugs.webkit.org/show_bug.cgi?id=28848

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertDocumentToV8Object): Special
        function for document wrapping.
        (WebCore::V8DOMWrapper::convertNewNodeToV8Object): Slow case of
        wrapping a new node.
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::convertNodeToV8Object): Extracted fast
        path from V8DOMWrapper.cpp.
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::createWrapperFromCacheSlowCase):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::createWrapperFromCache): Extracted fast path
        from V8Proxy.cpp.

2009-09-01  Eric Seidel  <eric@webkit.org>

        No review, windows build fix only.  Clearly I should have read the patch closer. :(

        Allow excluding certain plugins from loading
        https://bugs.webkit.org/show_bug.cgi?id=28677

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::refresh):

2009-09-01  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Implement conditional breakpoints in the Web Inspector backend
        and add frontend JavaScript stubs.
        https://bugs.webkit.org/show_bug.cgi?id=28846

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::profiles):
        (WebCore::InspectorBackend::addBreakpoint):
        (WebCore::InspectorBackend::updateBreakpoint):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::BreakpointInfo::condition):
        (WebCore::JavaScriptDebugServer::BreakpointInfo::setCondition):
        (WebCore::JavaScriptDebugServer::addBreakpoint):
        (WebCore::JavaScriptDebugServer::breakpointInfo):
        (WebCore::JavaScriptDebugServer::updateBreakpoint):
        (WebCore::JavaScriptDebugServer::updateBreakpointInfo):
        (WebCore::JavaScriptDebugServer::removeBreakpoint):
        (WebCore::JavaScriptDebugServer::hasBreakpoint):
        (WebCore::JavaScriptDebugServer::clearBreakpoints):
        * inspector/JavaScriptDebugServer.h:
        (WebCore::JavaScriptDebugServer::BreakpointInfo::BreakpointInfo):
        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint):
        (WebInspector.Breakpoint.prototype.get id):
        (WebInspector.Breakpoint.prototype.get condition):
        (WebInspector.Breakpoint.prototype.set condition):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane.prototype.addBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype._breakpointEnableChanged):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.addScript):

2009-09-01  Marius Renn  <damarvy@gmail.com>

        Reviewed by Eric Seidel.

        Added delegate to PluginDatabase to disable loading certain plugins.
        This is useful when you want to load from the standard plugin
        directory, but want to exclude certain plugins. Plugins may be
        excluded early on by name, so that no plugin code is executed (which
        may have caused a crash).

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::PluginDatabase):
        (WebCore::PluginDatabase::refresh):
        * plugins/PluginDatabase.h:
        (WebCore::PluginDatabase::setClient):
        * plugins/PluginDatabaseClient.h: Added.
        (WebCore::PluginDatabaseClient::~PluginDatabaseClient):

2009-08-31  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Sam Weinig

        * WebCore.base.exp: Removed an unneeded symbol export.

2009-08-31  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=28466
        When downloading a file, two GET requests are sent to the HTTP server

        Can't think of a way to test this.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::releaseResources): only nullify the
        handle's client when it is the ResourceLoader, to support the case
        in which a download API uses a different client

2009-08-31  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.

        Text Fields and Text Areas are reported as read-only by inspect32.exe.
        https://bugs.webkit.org/show_bug.cgi?id=28854

        Added another case in AcccessibiltyRenderObject::isReadOnly to test if text fields
        and texts areas are read-only.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isReadOnly):
        (WebCore::AccessibilityRenderObject::canSetValueAttribute):

2009-08-31  Drew Wilson  <atwilson@google.com>

        Reviewed by Alexey Proskuryakov.

        fast/workers/worker-lifecycle.html crashes intermittently on snowleopard
        https://bugs.webkit.org/show_bug.cgi?id=28795

        Changed WorkerContext::close() to no longer stop the worker thread.
        It is now the parent's responsibility to shut down the worker thread when it is notified that the context is closed.

        * workers/AbstractWorker.cpp:
        Updated dispatchScriptErrorEvent to pass-through the "handled" value from dispatchEvent(), to allow event handlers added with addEventListener() to mark events as handled.
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::workerContextClosed):
        Now shuts down the worker thread when notified that the context is closed.
        (WebCore::SharedWorkerProxy::close):
        Now handles being invoked when the context is already in the process of shutting down.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::close):
        No longer calls WorkerThread::stop() to avoid race conditions with shutting down the thread while the parent is still interacting with it.
        * workers/WorkerContext.h:
        (WebCore::WorkerContext::isClosing):
        isClosing() is now public so WorkerRunLoop can call it to determine whether to process tasks.
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerExceptionTask::performTask):
        Error events should still be delivered even if the worker thread is closing.
        Also fixed problem where error events were not dispatched if error handlers were added via addEventListener().
        (WebCore::WorkerTerminateTask::create):
        New task that invokes terminateWorkerContext() on the parent thread when the context is closed.
        (WebCore::WorkerTerminateTask::WorkerTerminateTask):
        (WebCore::WorkerTerminateTask::performTask):
        (WebCore::WorkerMessagingProxy::workerContextClosed):
        Now fires off a WorkerTerminateTask to shut down the thread when the context is closed.
        * workers/WorkerMessagingProxy.h:
        WorkerMessagingProxy now overrides workerContextClosed().
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::runInMode):
        Now drops tasks on the floor if the WorkerContext is closing.

2009-08-31  Ojan Vafai  <ojan@chromium.org>

        Not reviewed (build fix)

        Build fix for Chromium to match r49707.

        * bindings/v8/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        * bindings/v8/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        * platform/KURLGoogle.cpp:
        (WebCore::KURL::KURL):
        (WebCore::blankURL):

2009-08-31  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=28858
        Element.baseURI parses xml:base attribute incorrectly

        Test: fast/dom/base-attribute-parsing.xhtml

        * dom/Element.cpp: (WebCore::Element::baseURI): Avoid assertion failure (no change in
        release mode).

2009-08-31  Dimitri Glazkov  <dglazkov@chromium.org>

        Reverting http://trac.webkit.org/changeset/47904, because it caused
        layout test failure.

        Test: fast/dom/Window/new-window-opener.html

2009-08-31  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=28852
        Rename KURL single argument constructor to avoid confusion

        * platform/KURL.h: The constructor that used to be single argument should now be invoked
        as KURL(ParsedURLString, myString).

        * WebCore.base.exp:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::createWindow):
        * bindings/js/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        * bindings/v8/NPV8Object.cpp:
        (_NPN_EvaluateHelper):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::createWindow):
        * css/CSSCursorImageValue.cpp:
        (WebCore::isSVGCursorIdentifier):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage):
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):
        * css/StyleBase.cpp:
        (WebCore::StyleBase::baseURL):
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * dom/Element.cpp:
        (WebCore::Element::baseURI):
        * editing/markup.cpp:
        (WebCore::completeURLs):
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::url):
        (WebCore::HistoryItem::originalURL):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::createCached):
        * loader/Cache.cpp:
        (WebCore::Cache::revalidateResource):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::getSubresources):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::iconURL):
        (WebCore::FrameLoader::scheduleLocationChange):
        (WebCore::FrameLoader::redirectionTimerFired):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::startRedirectionTimer):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::resourceForURL):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::startLoadingEntry):
        (WebCore::ApplicationCacheGroup::addEntry):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):
        (WebCore::ApplicationCacheStorage::loadCache):
        (WebCore::ApplicationCacheStorage::manifestURLs):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createResource):
        (WebCore::LegacyWebArchive::create):
        * loader/loader.cpp:
        (WebCore::Loader::load):
        * notifications/NotificationCenter.h:
        (WebCore::NotificationCenter::createHTMLNotification):
        * platform/KURL.cpp:
        (WebCore::KURL::KURL):
        (WebCore::blankURL):
        * platform/KURLHash.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::setData):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovie):
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::operator CFErrorRef):
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/chromium/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::handleLocalReceiveResponse):
        (WebCore::headerCallback):
        * platform/network/curl/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::operator NSError*):
        * platform/network/mac/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/qt/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/soup/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/win/ClipboardWin.cpp:
        (WebCore::filesystemPathFromUrlOrTitle):
        (WebCore::ClipboardWin::setData):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):
        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::loadSheet):
        * xml/XSLTProcessor.cpp:
        (WebCore::docLoaderFunc):
        Adapt to the change everywhere the single argument constructor was used. I did a very
        cursory check of whether these locations were using this constructor properly, and didn't
        notice any obvious mistakes. The new explicit name will hopefully suggest checking this
        better when refactoring any such code.

2009-08-31  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=28635 [CSS3 
        Backgrounds and Borders] Add support for 2-keyword values for 
        background-repeat

        This patch allows background-repeat to take two values by making 
        background-repeat just like background-position internally. There 
        is a little extra legwork for background-repeat because the spec 
        indicates that its computed value should be equivalent to how it 
        was specified. I keep track of the specified thing by setting the 
        implicit flag whenever background-repeat is defined with only one 
        value (since internally, we now store this as 2 values.)
        
        Here we can't access the implicit flag, so for backwards-
        compatibility's sake, we always return one value when that makes 
        sense.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::fillRepeatToCSSValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

        Here we check for the implicit flag and return one value when it is 
        set.
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        (WebCore::CSSMutableStyleDeclaration::getLayeredShorthandValue):
        (WebCore::CSSMutableStyleDeclaration::cssText):

        Add support for CSSPropertyBackgroundRepeatX and 
        CSSPropertyBackgroundRepeatY
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parseFillRepeat):
        (WebCore::CSSParser::parseFillProperty):
        * css/CSSParser.h:

        Get rid of mappings to RepeatXFill and RepeatYFill since we don't 
        need those parts of the EFillRepeat enum anymore.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EFillRepeat):

        Add CSSPropertyBackgroundRepeatX and CSSPropertyBackgroundRepeatY
        * css/CSSPropertyLonghand.cpp:
        (WebCore::initShorthandMap):

        Add background-repeat-x and -y.
        * css/CSSPropertyNames.in:

        Break repeat into x and y.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapFillRepeatX):
        (WebCore::CSSStyleSelector::mapFillRepeatY):
        * css/CSSStyleSelector.h:

        There is no more RepeatXFill. Instead, look for 
        fillLayer->repeatX() == RepeatFill
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):

        Break m_repeat into m_repeatX and m_repeatY
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::FillLayer):
        (WebCore::FillLayer::operator=):
        (WebCore::FillLayer::operator==):
        (WebCore::FillLayer::fillUnsetProperties):
        (WebCore::FillLayer::cullEmptyLayers):
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::repeatX):
        (WebCore::FillLayer::repeatY):
        (WebCore::FillLayer::isRepeatXSet):
        (WebCore::FillLayer::isRepeatYSet):
        (WebCore::FillLayer::setRepeatX):
        (WebCore::FillLayer::setRepeatY):
        (WebCore::FillLayer::clearRepeatX):
        (WebCore::FillLayer::clearRepeatY):
        (WebCore::FillLayer::initialFillRepeatX):
        (WebCore::FillLayer::initialFillRepeatY):

        Again, break backgroundRepeat into backgroundRepeatX and 
        backgroundRepeatY
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::backgroundRepeatX):
        (WebCore::InheritedFlags::backgroundRepeatY):
        (WebCore::InheritedFlags::maskRepeatX):
        (WebCore::InheritedFlags::maskRepeatY):

        We don't need RepeatXFill or RepeatYFill. Now that we store two 
        values, they are represented by Repeat-NoRepeat and NoRepeat-
        Repeat, respectively.
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-08-31  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Compositing layer size needs to take into account software reflections on children.
        https://bugs.webkit.org/show_bug.cgi?id=28837
        
        When computing the bounds of a composited layer, take software-rendered
        reflections into account.

        Test: compositing/reflections/reflection-in-composited.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):

2009-08-31  Mark Mentovai  <mark@chromium.org>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=28614

        Perform a layout prior to checking whether the scrollbar modes are
        off, on, or automatic.  The modes may change during layout.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2009-08-31  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Inspector Request Headers Should Show Data Sent With Request
        https://bugs.webkit.org/show_bug.cgi?id=22920

        Manual test added - see below.

        * English.lproj/localizedStrings.js:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateRequest):
        (WebCore::InspectorResource::createScriptObject):
        (WebCore::InspectorResource::updateScriptObject):
        * inspector/InspectorResource.h:
        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):
        (WebInspector.ResourceView.prototype._refreshURL):
        (WebInspector.ResourceView.prototype._refreshQueryString):
        (WebInspector.ResourceView.prototype._refreshFormData):
        (WebInspector.ResourceView.prototype._refreshRequestPayload):
        (WebInspector.ResourceView.prototype._refreshParms):
        (WebInspector.ResourceView.prototype._toggleURLdecoding):
        (WebInspector.ResourceView.prototype._getHeaderValue):
        (WebInspector.ResourceView.prototype._refreshRequestHeaders):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector.addResource):
        (WebInspector.updateResource):
        * manual-tests/inspector/display-form-data.html: Added.

2009-08-31  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: pass call frames into the frontend as a part of
        pausedScript event.

        https://bugs.webkit.org/show_bug.cgi?id=28847

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didPause):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::pausedScript):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.debuggerPaused):
        * inspector/front-end/inspector.js:
        (WebInspector.pausedScript):

2009-08-31  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Un-blacklist Silverlight on Mac

        Does not seem to crash anymore, probably due to how we now handle
        drawing and event model handshake better.

        * plugins/mac/PluginPackageMac.cpp:
        (WebCore::PluginPackage::isPluginBlacklisted):

2009-08-31  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28827
        SVGSVGElement.unsuspendRedraw() shouldn't throw

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::unsuspendRedraw):
        * svg/SVGSVGElement.h:
        * svg/SVGSVGElement.idl:

2009-08-31  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        - Change the reutrn type of HTMLInputElement::list so that it
          conforms to the standard.
        - Add HTMLInputElement::dataList()
        https://bugs.webkit.org/show_bug.cgi?id=28769


        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::list):
        (WebCore::HTMLInputElement::dataList):
        (WebCore::HTMLInputElement::selectedOption):
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:

2009-08-31  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        Remove ASSERT(frame) in ResourceHandle::start (ResourceHandleCurl.cpp)
        https://bugs.webkit.org/show_bug.cgi?id=28802

        Remove ASSERT because the frame could be null if the
        ResourceHandle is not associated with any frame, e.g. if we are
        downloading a file.
        If the frame is not null but the page is null this must be an
        attempted load from an onUnload handler, so let's just block it.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::start):

2009-08-31  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        Build fix for platforms which don't enable DOM_STORAGE.
        https://bugs.webkit.org/show_bug.cgi?id=28834

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):

2009-08-29  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=28829
        Crash in AccessibilityRenderObject::activeDescendant when trying to set aria-activedescendant to something without a renderer

        Test: accessibility/aria-activedescendant-crash.html

        * accessibility/AccessibilityRenderObject.cpp: (WebCore::AccessibilityRenderObject::activeDescendant): Nil check.

2009-08-28  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Oliver Hunt.

        Gtk Build broken for OSX Quartz
        https://bugs.webkit.org/show_bug.cgi?id=28727

        Check for XP_UNIX instead of GTK or X11 to ease building of the Gtk
        port in Mac and Unix/Linux.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::getValueStatic):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::init):

2009-08-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Fix positioning error when a compositing, absolutely-positioned element has an ancestor with opacity.
        https://bugs.webkit.org/show_bug.cgi?id=28754
        
        For absolutely-positioned layers, convertToLayerCoords() jumps to the positioned
        ancestor, since the layer x and y are relative to that ancestor. However, this could
        skip over the ancestorLayer, thus giving the wrong result.
        
        Fix by duplicating the enclosingPositionedAncestor() logic in convertToLayerCoords(),
        and checking for ancestorLayer along the way. If found, compute offset of both to
        the enclosingPositionedAncestor() and subtract.
        
        This also fixes a positioning bug with abs. positioned elements in reflections,
        so there is a new reflection test with a pixel result.

        Tests: compositing/geometry/abs-position-inside-opacity.html
               fast/reflections/abs-position-in-reflection.html

        * rendering/RenderLayer.cpp:
        (WebCore::isPositionedContainer):
        (WebCore::RenderLayer::enclosingPositionedAncestor):
        (WebCore::RenderLayer::enclosingTransformedAncestor):
        (WebCore::RenderLayer::convertToLayerCoords):

2009-08-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Mark Rowe

        Wrap WebkitCSSTransformValues in the correct class of DOM wrapper.
        https://bugs.webkit.org/show_bug.cgi?id=27727

        When fetching the DOM wrapper for a WebkitCSSTransformValue (which is a kind of 
        CSSValueList), we need to ask the value list whether it's a WebkitCSSTransformValue,
        because there is not a unique enum value for WebkitCSSTransformValue.

        * bindings/objc/DOMCSS.mm:
        (kitClass):

2009-08-28  Peter Kasting  <pkasting@google.com>

        Reviewed by Jan Michael Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=28308
        Fix some warnings introduced by r47381.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::convertCMYKToRGBA):
        (WebCore::convertRGBToRGBA):

2009-08-28  Ada Chan  <adachan@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=21442
        Make sure filesystemPathFromUrlOrTitle() returns a string with length
        <= MAX_PATH - 1.

        * platform/win/ClipboardWin.cpp:
        (WebCore::filesystemPathFromUrlOrTitle):

2009-08-28  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Adding Chromium's VFS for Linux and Mac.

        https://bugs.webkit.org/show_bug.cgi?id=28750

        * WebCore.gypi:
        * platform/chromium/ChromiumBridge.h:
        * platform/sql/chromium/SQLiteFileSystemChromium.cpp:
        (WebCore::SQLiteFileSystem::openDatabase):
        (WebCore::SQLiteFileSystem::deleteDatabaseFile):
        * platform/sql/chromium/SQLiteFileSystemChromiumLinux.cpp: Removed.
        * platform/sql/chromium/SQLiteFileSystemChromiumMac.cpp: Removed.
        * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp: Added.
        * platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp:

2009-08-28  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Made bindings use Node::setOnEvent functions for Node descendants
        instead of Node::setAttributeEventListener.

        Node::setAttributeEventListener is an internal function and
        doesn't do the forwarding to DOM window that is required for some
        HTML elements.
        https://bugs.webkit.org/show_bug.cgi?id=28709

        Tests added in http://trac.webkit.org/changeset/47326 now pass with V8.

        * bindings/scripts/CodeGeneratorV8.pm:
        Now generates EventListener accessors for Node descendants instead
        of using custom callbacks.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getEventListener): Moved from V8NodeCustom.cpp.
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::convertEventListenerToV8Object): Fixed a bug in
        signature.
        * bindings/v8/V8Utilities.cpp:
        (WebCore::createHiddenDependency):
        (WebCore::removeHiddenDependency):
        Changed signature to accept Handle instead of Local.
        * bindings/v8/V8Utilities.h:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        Removed custom callbacks for EventListener accessors.

2009-08-28  Ben Murdoch  <benm@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=28803
        
        Implements V8CustomVoidCallback reporting any exceptions that were thrown from the callback function.

        * bindings/v8/custom/V8CustomVoidCallback.cpp:
        (WebCore::invokeCallback): Checks if the callback raised an exception and reports it to WebCore if so.

2009-08-28  Peter Kasting  <pkasting@google.com>

        Not reviewed (build fix).

        * platform/graphics/qt/ImageDecoderQt.cpp: Accidentally added some spaces.
        (WebCore::ImageDecoder::create):
        (WebCore::ImageDecoderQt::ImageDecoderQt):
        * platform/graphics/qt/ImageDecoderQt.h: Make constructor public so factory function can access it (this seemed better than making ImageDecoder a friend).

2009-08-28  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=27965
        Move ImageDecoder creation function to a factory function on
        ImageDecoder.  This is arguably where it makes the most sense anyway,
        and it will (soon) allow ImageSourceQt.cpp to have one less dedicated
        function.

        * platform/graphics/ImageSource.cpp:
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoder::create):
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::setData):
        * platform/image-decoders/ImageDecoder.cpp:
        * platform/image-decoders/ImageDecoder.h:

2009-08-28  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28785
        Combine duplicated code from ImageDecoder*.cpp into the main
        ImageDecoder.cpp.

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::zeroFill):
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::setSize):
        (WebCore::RGBA32Buffer::hasAlpha):
        (WebCore::RGBA32Buffer::setHasAlpha):
        (WebCore::RGBA32Buffer::setStatus):
        (WebCore::RGBA32Buffer::operator=):
        (WebCore::RGBA32Buffer::width):
        (WebCore::RGBA32Buffer::height):
        * platform/image-decoders/cairo/ImageDecoderCairo.cpp:
        * platform/image-decoders/haiku/ImageDecoderHaiku.cpp:
        * platform/image-decoders/wx/ImageDecoderWx.cpp:

2009-08-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=25889
        [GTK] scrollbar policy for main frame is not implementable

        Override setScrollbarModes to correctly forward scrollbar modes
        policy changes to client code, via a new platform-specific method,
        scrollbarsPolicyDidChange.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::scrollbarsPolicyDidChange):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::createScrollbar):
        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setScrollbarModes):

2009-08-28  Cédric Luthi <cedric.luthi@gmail.com>

        Reviewed by Tor Arne Vestbø

        [Qt/Mac] Un-blacklist the QuickTime plugin

        https://bugs.webkit.org/show_bug.cgi?id=28768

        Now that the drawing model is properly negotiated, there is no need the
        blacklist the QuickTime plugin anymore.

        This revealed a bug in PluginView::performRequest: it should not initiate a
        request if the plugin has been stopped, which is what happens when a plugin
        only supports the QuickDraw drawing model.

        * plugins/PluginView.cpp:
        * plugins/mac/PluginPackageMac.cpp:

2009-08-28  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Set DOM agent document to 0 in InspectorController::close to
        make DOM agent remove DOM listeners from the inspected document.

        Replace windowVisible checks with m_frontend checks to as inspector
        window lives in a different process in Chromium while frontend proxy
        is in the inspected page process.

        https://bugs.webkit.org/show_bug.cgi?id=28800

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspect):
        (WebCore::InspectorController::addConsoleMessage):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::pruneResources):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didReceiveContentLength):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorController::scriptImported):
        (WebCore::InspectorController::didOpenDatabase):
        (WebCore::InspectorController::didUseDOMStorage):
        (WebCore::InspectorController::addProfile):
        * inspector/InspectorController.h:

2009-08-28  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Remove dependency of SummaryBar on WebInspector.resourceCategories.

        https://bugs.webkit.org/show_bug.cgi?id=28801

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.toolbarItemClass.get categories):
        * inspector/front-end/SummaryBar.js:
        (WebInspector.SummaryBar):
        (WebInspector.SummaryBar.prototype.update):

2009-08-28  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed (patching in l18n change that was missing due to
        the git binary diff format).

        https://bugs.webkit.org/show_bug.cgi?id=28429

        * English.lproj/localizedStrings.js:

2009-08-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make XSSAuditor go fast
        https://bugs.webkit.org/show_bug.cgi?id=28667

        Make the XSSAuditor go faster by implementing two optimizations:

        1) We avoid canonicalizing scripts that are larger than the page's URL.
           This saves a bunch of time for large inline scripts.

        2) We memoize canonicalizing the page's URL because it's silly to
           canonicalize repeated for each inline event listener.

        These optimizations have a measurable affect on the intl1 page cycler.

        No behavior change.

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::MemoizingURLCanonicalizer::canonicalizeURL):
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canEvaluateJavaScriptURL):
        (WebCore::XSSAuditor::canCreateInlineEventListener):
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc):
        (WebCore::XSSAuditor::canLoadObject):
        (WebCore::XSSAuditor::canSetBaseElementURL):
        (WebCore::XSSAuditor::decodeURL):
        (WebCore::XSSAuditor::findInRequest):
        * page/XSSAuditor.h:

2009-08-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        Removed ASSERT_NOT_REACHED, because indeed this ASSERT is reached in
        fast/canvas/change-context.html. And it's alright to reach it.

        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Removed assertion.

2009-08-27  Jeremy Orlow  <jorlow@chromium.org>

        Not reviewed.  Build fix for http://trac.webkit.org/changeset/47840

        Peter's change forgot one m_decoder->

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::frameSizeAtIndex):

2009-08-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [V8] Add NULL-check, since the context ain't changeable no more, and
        thus getContext could return 0.

        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Added NULL-check.

2009-08-27  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Eric Seidel.

        dataTransfer.types() should include type "Files" when files are present in the clipboard.
        https://bugs.webkit.org/show_bug.cgi?id=28780

        Add dataTransfer type "Files" to the chromium port.  Add eseidel's
        patch for same for the mac port.

        * platform/chromium/ClipboardChromium.cpp:

2009-08-27  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Removed GL_ from all constants, and gl prefix from all calls
        https://bugs.webkit.org/show_bug.cgi?id=28773

        This was done for the external API in CanvasRenderingContext3D and
        the internal API in GraphicsContext3D.

        * html/canvas/CanvasRenderingContext3D.cpp:
        * html/canvas/CanvasRenderingContext3D.h:
        * bindings/js/JSCanvasRenderingContext3DCustom.cpp:
        * html/canvas/CanvasRenderingContext3D.idl:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:

2009-08-27  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Qt and Gtk build fixes. Not reviewed.

        Add CanvasRenderingContext3D.idl to the build scripts.

        * GNUmakefile.am:
        * WebCore.pro:

2009-08-27  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Release the storage mutex whenever leaving JavaScript execution.
        https://bugs.webkit.org/show_bug.cgi?id=28789

        http://dev.w3.org/html5/spec/Overview.html#storage-mutex describes the
        required behavior.  After we leave JavaScript, we must be sure the storage
        mutex has been released.  At the end of evaluate(), if localStorage has been
        instantiated, tell it to release any locks that may be applicable.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):

2009-08-27  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=28753
        <rdar://problem/7173448> Excessive number of threads (and a crash)

        Coalesce DNS prefetch requests to reduce strain on CFHost. Currently, the algorithm is as follows:
        - when resolver is idle, the first few requests are sent immediately (they may or may not
        hit the wire);
        - if there are a few requests in flight already, coalesce all requests for one second;
        - to avoid pathological cases with lots of links to different sites on a page, only ask
        CFHost about a handful of names (dropping the rest).

        Coalescing reduces the number of requests dramatically, as prefetchDNS is called for each
        link, and these tend to have identical host name.

        * platform/network/cf/DNSCFNet.cpp:
        (WebCore::DNSResolveQueue::DNSResolveQueue):
        (WebCore::DNSResolveQueue::shared):
        (WebCore::DNSResolveQueue::add):
        (WebCore::DNSResolveQueue::decrementRequestCount):
        (WebCore::DNSResolveQueue::fired):
        (WebCore::clientCallback):
        (WebCore::DNSResolveQueue::resolve):
        (WebCore::prefetchDNS):

2009-08-27  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Final patch for Canvas 3D support
        https://bugs.webkit.org/show_bug.cgi?id=28018

        This hooks everything up and provides a working implementation of
        Canvas 3D. I plumb the creation of the 3D canvas down to GraphicsLayer,
        passing the opaque context and texture pointers so a Canvas3DLayer can be
        created (more on that later). It also plumbs changes to the 3D canvas so
        that Canvas3DLayer can recomposite the results.
        
        A 3D Canvas element needs a RenderLayer and compositing layer to render.
        This is because it renders to an off-screen texture in the GPU and then
        hands it to a Canvas3DLayer, which is a subclass of CAOpenGLLayer, to
        render that texture as a 3D quad. This keeps everything in GPU memory to 
        maximize performance. When a CanvasRenderingContext3D is created it 
        forces a style recalc which creates the RenderLayer and compositing 
        layer if needed. 
        
        I repurposed an existing flag which was put in place for animation to accomplish 
        this. This flag is passed to setNeedsStyleRecalc(), and I renamed it from 
        AnimationStyleChange to SyntheticStyleChange. It essentially says that you need
        to do a complete style recalc, even though the style itself has not really
        changed.
        
        This patch also fixes a couple of bugs discovered when testing with 3d-canvas
        turned on. I also added a constructor DOMWindow.idl for CanvasRenderingContext3D.
        This is needed when making a JS wrapper for the object so the prototype 
        property can be set.

        Test: fast/canvas/change-context.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCanvasRenderingContext3DCustom.cpp:
        (WebCore::JSCanvasRenderingContext3D::glDrawElements):
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        (WebCore::toJS):
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        * dom/Node.cpp:
        (WebCore::Node::setNeedsStyleRecalc):
        * dom/Node.h:
        (WebCore::):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::is3D):
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasBuffer.cpp:
        (WebCore::CanvasBuffer::create):
        (WebCore::CanvasBuffer::CanvasBuffer):
        (WebCore::CanvasBuffer::_deleteObject):
        * html/canvas/CanvasBuffer.h:
        * html/canvas/CanvasFramebuffer.cpp:
        (WebCore::CanvasFramebuffer::create):
        (WebCore::CanvasFramebuffer::CanvasFramebuffer):
        (WebCore::CanvasFramebuffer::_deleteObject):
        * html/canvas/CanvasFramebuffer.h:
        * html/canvas/CanvasObject.cpp:
        (WebCore::CanvasObject::CanvasObject):
        (WebCore::CanvasObject::~CanvasObject):
        (WebCore::CanvasObject::deleteObject):
        * html/canvas/CanvasObject.h:
        (WebCore::CanvasObject::context):
        * html/canvas/CanvasProgram.cpp:
        (WebCore::CanvasProgram::create):
        (WebCore::CanvasProgram::CanvasProgram):
        (WebCore::CanvasProgram::_deleteObject):
        * html/canvas/CanvasProgram.h:
        * html/canvas/CanvasRenderbuffer.cpp:
        (WebCore::CanvasRenderbuffer::create):
        (WebCore::CanvasRenderbuffer::CanvasRenderbuffer):
        (WebCore::CanvasRenderbuffer::_deleteObject):
        * html/canvas/CanvasRenderbuffer.h:
        * html/canvas/CanvasRenderingContext3D.cpp:
        (WebCore::CanvasRenderingContext3D::createBuffer):
        (WebCore::CanvasRenderingContext3D::createFramebuffer):
        (WebCore::CanvasRenderingContext3D::createTexture):
        (WebCore::CanvasRenderingContext3D::createProgram):
        (WebCore::CanvasRenderingContext3D::createRenderbuffer):
        (WebCore::CanvasRenderingContext3D::createShader):
        * html/canvas/CanvasRenderingContext3D.h:
        (WebCore::CanvasRenderingContext3D::graphicsContext3D):
        * html/canvas/CanvasShader.cpp:
        (WebCore::CanvasShader::create):
        (WebCore::CanvasShader::CanvasShader):
        (WebCore::CanvasShader::_deleteObject):
        * html/canvas/CanvasShader.h:
        * html/canvas/CanvasTexture.cpp:
        (WebCore::CanvasTexture::create):
        (WebCore::CanvasTexture::CanvasTexture):
        (WebCore::CanvasTexture::_deleteObject):
        * html/canvas/CanvasTexture.h:
        * page/DOMWindow.idl:
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::setNeedsStyleRecalc):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateAnimationTimer):
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        (WebCore::AnimationControllerPrivate::pauseAnimationAtTime):
        (WebCore::AnimationControllerPrivate::pauseTransitionAtTime):
        (WebCore::AnimationController::cancelAnimations):
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::platformGraphicsContext3D):
        (WebCore::GraphicsContext3D::platformTexture):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setContentsToGraphicsContext3D):
        (WebCore::GraphicsLayer::setGraphicsContext3DNeedsDisplay):
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::reshape):
        * platform/graphics/mac/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::):
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::commitLayerChanges):
        (WebCore::GraphicsLayerCA::updateContentsGraphicsContext3D):
        (WebCore::GraphicsLayerCA::setContentsToGraphicsContext3D):
        (WebCore::GraphicsLayerCA::setGraphicsContext3DNeedsDisplay):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::requiresLayer):
        * rendering/RenderHTMLCanvas.h:
        (WebCore::RenderHTMLCanvas::isCanvas):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::RenderLayerBacking::canUseDirectCompositing):
        (WebCore::RenderLayerBacking::rendererContentChanged):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::requiresCompositingForCanvas):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isCanvas):

2009-08-27  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28751
        Clean up ImageDecoder*.cpp a bit.

        * platform/image-decoders/ImageDecoder.cpp: Put functions in the same
          order as in the header file.  Also, since there's already an anonymous
          namespace in this file, use it to enclose the local helper functions.
        (WebCore::):
        (WebCore::ImageDecoder::upperBoundScaledX):
        (WebCore::ImageDecoder::lowerBoundScaledX):
        (WebCore::ImageDecoder::scaledY):
        * platform/image-decoders/cairo/ImageDecoderCairo.cpp:
        (WebCore::RGBA32Buffer::width): Style fix.
        (WebCore::RGBA32Buffer::height): Style fix.
        * platform/image-decoders/haiku/ImageDecoderHaiku.cpp:
        (WebCore::RGBA32Buffer::copyBitmapData): Ensure m_size is set correctly.
        (WebCore::RGBA32Buffer::asNewNativeImage): Remove unneeded temp.
        (WebCore::RGBA32Buffer::operator=): Simplify.
        * platform/image-decoders/wx/ImageDecoderWx.cpp:
        (WebCore::RGBA32Buffer::asNewNativeImage): Try and collect spaced-out temps under loop comment to show they're all related.  Use size_t for iterating over elements of a Vector.
        (WebCore::RGBA32Buffer::width): Style fix.
        (WebCore::RGBA32Buffer::height): Style fix.

2009-08-27  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28751
        Clean up ImageSource.* in preparation for more fixes on bug 27965.

        * platform/graphics/ImageSource.cpp: Put functions in the same order as in header file.
        (WebCore::ImageSource::isSizeAvailable): Shorten.
        (WebCore::ImageSource::size): Shorten.
        (WebCore::ImageSource::frameSizeAtIndex): Shorten.
        (WebCore::ImageSource::repetitionCount): Shorten.
        (WebCore::ImageSource::frameIsCompleteAtIndex):
        * platform/graphics/ImageSource.h: Shorten #ifdef section a bit by sharing common typedefs.

2009-08-27  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28785
        Add ImageDecoder.cpp to various build files so platforms will be able to
        use it.  Move an ENABLE to not cover the whole file, in preparation for
        adding a bunch of code.  Simplify #ifdefs in ImageDecoder.h to be "Skia
        vs. everyone else", which also gives new platforms a reasonable default
        behavior.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::getAddr):

2009-08-27  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Kilzer.
        
        https://bugs.webkit.org/show_bug.cgi?id=28784
        
        Add an exported method to flush pending repaints.

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameView::layoutIfNeededRecursive):
        (WebCore::FrameView::flushDeferredRepaints):
        * page/FrameView.h:

2009-08-27  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Eric Seidel.

        [V8] Expose files from the pasteboard in drop events.
        https://bugs.webkit.org/show_bug.cgi?id=28782

        Update chromium port to expose dataTransfer.files() as per
        HTML5 drag drop (Aug 2009 edition).

        * platform/chromium/ClipboardChromium.cpp:

2009-08-27  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Dmitry Glazkov.

        ScriptState now keeps explicit Handle of devtools front-end
        utility context instead of trying to retrieve it from inspected
        Frame.

        https://bugs.webkit.org/show_bug.cgi?id=28772

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        * bindings/v8/ScriptController.h:
        * bindings/v8/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * bindings/v8/ScriptScope.cpp:
        (WebCore::ScriptScope::ScriptScope):
        * bindings/v8/ScriptState.cpp:
        (WebCore::ScriptState::ScriptState):
        (WebCore::ScriptState::~ScriptState):
        (WebCore::scriptStateFromPage):
        * bindings/v8/ScriptState.h:
        (WebCore::ScriptState::context):
        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::~ScriptValue):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::frontendScriptState):

2009-08-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Console won't close.

        https://bugs.webkit.org/show_bug.cgi?id=28778

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._updateModifiedNodes):
        * inspector/front-end/utilities.js:
        (Node.prototype.isAncestor):

2009-08-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix a typo in files() causing image drags to have junk file arrays.
        https://bugs.webkit.org/show_bug.cgi?id=28755

        Test: editing/pasteboard/files-during-page-drags.html

        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::files):

2009-08-27  Jeremy Orlow  <jorlow@chromium.org>

        Not reviewed.  Build fix for Chromium.

        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:

2009-08-27  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * DerivedSources.cpp: Added JSPageTransitionEvent.cpp to DerivedSources.cpp.

2009-08-26  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=28758
        <rdar://problem/6440869> Implement pageshow and pagehide events for b/f cache (28758)

        Tests: fast/events/pageshow-pagehide-on-back-cached.html
               fast/events/pageshow-pagehide-on-back-uncached.html
               fast/events/pageshow-pagehide.html

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::stopLoading): Dispatch pagehide event
        (this function is called both when a document goes away, and when it goes to b/f cache).

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchAllPendingUnloadEvents): Dispatch pagehide right before unload.
        (WebCore::DOMWindow::dispatchPageTransitionEvent): Do what it takes to add a new event handler
        that can be installed on Window object.
        (WebCore::DOMWindow::onpagehide): Ditto.
        (WebCore::DOMWindow::setOnpagehide): Ditto.
        (WebCore::DOMWindow::onpageshow): Ditto.
        (WebCore::DOMWindow::setOnpageshow): Ditto.

        * history/CachedFrame.cpp: (WebCore::CachedFrame::restore): Dispatch pageshow for a page
        that isn't being restored from cache.

        * dom/PageTransitionEvent.cpp: Added.
        (WebCore::PageTransitionEvent::PageTransitionEvent):
        (WebCore::PageTransitionEvent::~PageTransitionEvent):
        (WebCore::PageTransitionEvent::initPageTransitionEvent):
        * dom/PageTransitionEvent.h: Added.
        (WebCore::PageTransitionEvent::create):
        (WebCore::PageTransitionEvent::isPageTransitionEvent):
        (WebCore::PageTransitionEvent::persisted):
        * dom/PageTransitionEvent.idl: Added.
        Add event class implementation.

        * html/HTMLBodyElement.cpp: (WebCore::HTMLBodyElement::parseMappedAttribute): Support
        inline listener definition (note that adding listeners to document.body programmatically
        is not supported, matching Firefox).

        * dom/Document.cpp:
        (WebCore::Document::implicitClose): Dispatch pageshow event right before load event.
        (WebCore::Document::dispatchPageTransitionEvent): Do what it takes to add a new event for
        Docuemnt.
        (WebCore::Document::createEvent): Ditto.

        * dom/Document.h: Added dispatchPageTransitionEvent.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSEventCustom.cpp: (WebCore::toJS):
        * dom/Event.cpp: (WebCore::Event::isPageTransitionEvent):
        * dom/Event.h:
        * dom/EventNames.h:
        * html/HTMLAttributeNames.in:
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        Do what it takes to add a new event type.

2009-08-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by NOBODY (build fix).

        Adding missing file from previous commit.

        https://bugs.webkit.org/show_bug.cgi?id=28740

        * inspector/front-end/SummaryBar.js: Added.
        (WebInspector.SummaryBar):
        (WebInspector.SummaryBar.prototype.get calculator):
        (WebInspector.SummaryBar.prototype.set calculator):
        (WebInspector.SummaryBar.prototype.reset):
        (WebInspector.SummaryBar.prototype.update):
        (WebInspector.SummaryBar.prototype._drawSwatch.drawSwatchSquare):
        (WebInspector.SummaryBar.prototype._drawSwatch):
        (WebInspector.SummaryBar.prototype._drawSummaryGraph.var):
        (WebInspector.SummaryBar.prototype._drawSummaryGraph):
        (WebInspector.SummaryBar.prototype._drawSummaryGraph.drawPill):
        (WebInspector.SummaryBar.prototype._fadeOutRect):
        (WebInspector.SummaryBar.prototype._makeLegendElement):

2009-08-27  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Factor out Factor out summary bar from Resources panel.

        https://bugs.webkit.org/show_bug.cgi?id=28740

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype._updateSummaryGraph):
        (WebInspector.ResourcesPanel.prototype._updateDividersLabelBarPosition):
        (WebInspector.ResourcesPanel.prototype._changeSortingFunction):
        * inspector/front-end/SummaryBar.js: Added.
        (WebInspector.SummaryBar):
        (WebInspector.SummaryBar.prototype.get calculator):
        (WebInspector.SummaryBar.prototype.set calculator):
        (WebInspector.SummaryBar.prototype.reset):
        (WebInspector.SummaryBar.prototype.update):
        (WebInspector.SummaryBar.prototype._drawSwatch.drawSwatchSquare):
        (WebInspector.SummaryBar.prototype._drawSwatch):
        (WebInspector.SummaryBar.prototype._drawSummaryGraph.var):
        (WebInspector.SummaryBar.prototype._drawSummaryGraph):
        (WebInspector.SummaryBar.prototype._drawSummaryGraph.drawPill):
        (WebInspector.SummaryBar.prototype._fadeOutRect):
        (WebInspector.SummaryBar.prototype._makeLegendElement):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:

2009-08-26  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Start adding heap profiler to Inspector (hidden behind a flag.)

        https://bugs.webkit.org/show_bug.cgi?id=28429

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.get statusBarItems):
        (WebInspector.ProfilesPanel.prototype.reset):
        (WebInspector.ProfilesPanel.prototype.addProfile):
        (WebInspector.ProfilesPanel.prototype._updateInterface):
        (WebInspector.ProfilesPanel.prototype._snapshotClicked):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js: added Preferences.heapProfilerPresent flag.

2009-08-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Metrics sidebar editing is broken.

        https://bugs.webkit.org/show_bug.cgi?id=28434

        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype.update):

2009-08-27  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=28767

        Make KURLGoogle.cpp's decodeURLEscapeSequences decode %00 to match
        KURL.cpp.  This makes the XSSAuditor tests pass when using KURLGoogle.

        * platform/KURLGoogle.cpp:
        (WebCore::decodeURLEscapeSequences):

2009-08-27  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Build fix, missing functions after r47763.

        * platform/qt/Localizations.cpp:
        (WebCore::localizedMediaControlElementString):
        (WebCore::localizedMediaControlElementHelpText):
        (WebCore::localizedMediaTimeDescription):

2009-08-26  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Removing trailing whitespaces from all storage classes.

        https://bugs.webkit.org/show_bug.cgi?id=28075

        * storage/ChangeVersionWrapper.cpp:
        * storage/Database.cpp:
        * storage/Database.h:
        * storage/DatabaseDetails.h:
        * storage/DatabaseThread.cpp:
        * storage/DatabaseTracker.cpp:
        * storage/DatabaseTracker.h:
        * storage/LocalStorageTask.cpp:
        * storage/LocalStorageTask.h:
        * storage/LocalStorageThread.cpp:
        * storage/LocalStorageThread.h:
        * storage/OriginQuotaManager.cpp:
        * storage/OriginUsageRecord.cpp:
        * storage/OriginUsageRecord.h:
        * storage/SQLError.h:
        * storage/SQLResultSetRowList.h:
        * storage/SQLStatement.cpp:
        * storage/SQLStatement.h:
        * storage/SQLStatementCallback.h:
        * storage/SQLStatementErrorCallback.h:
        * storage/SQLTransaction.cpp:
        * storage/SQLTransaction.h:
        * storage/SQLTransactionCallback.h:
        * storage/SQLTransactionErrorCallback.h:
        * storage/Storage.cpp:
        * storage/Storage.h:
        * storage/StorageArea.h:
        * storage/StorageAreaImpl.cpp:
        * storage/StorageAreaImpl.h:
        * storage/StorageAreaSync.cpp:
        * storage/StorageAreaSync.h:
        * storage/StorageEvent.cpp:
        * storage/StorageEvent.h:
        * storage/StorageMap.cpp:
        * storage/StorageMap.h:
        * storage/StorageNamespaceImpl.cpp:
        * storage/StorageSyncManager.cpp:
        * storage/StorageSyncManager.h:

2009-08-26  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=28763, flickering when opacity changes.

        Make opacity changes from < 1 to 1 and from 1 to < 1 cause a relayout to happen.  We need
        to do this in order for overflow information to be properly recomputed.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):

2009-08-26  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        HTMLMediaElement sometimes loses events
        https://bugs.webkit.org/show_bug.cgi?id=28762
        <rdar://problem/7172437>

        A media element triggers the resource selection algorithm if 
        play() is called when the networkState attribute is NETWORK_EMPTY, but
        it also immediately queues 'play' and either 'waiting' or 'playing' events.
        One of the steps in preparing to load is to flush pending events, so those 
        events were lost if the load timer fired quickly enough. Fixed by deleting
        pending events before scheduling the load timer.

        Test: media/audio-play-event.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::scheduleLoad):
            Do nothing if the load timer is already scheduled. Call prepareForLoad so queue of 
            pending events is flushed immediately.
        (WebCore::HTMLMediaElement::scheduleNextSourceChild):
            New, start the load timer without flushing pending events.
        (WebCore::HTMLMediaElement::load):
            Call prepareForLoad();
        (WebCore::HTMLMediaElement::prepareForLoad):
            New, load setup code moved from loadInternal.
        (WebCore::HTMLMediaElement::loadInternal):
            Moved some setup code to prepareForLoad so it can be invoked immediately before
            arming the load timer.
        (WebCore::HTMLMediaElement::setNetworkState):
            Call scheduleNextSourceChild instead of scheduleLoad as the later now clears
            pending events.
        * html/HTMLMediaElement.h:
            Declare scheduleNextSourceChild.

2009-08-26  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28751
        Switch ICO decoder from a Vector of raw pointers to a Vector of
        OwnPtrs now that that is possible.  Makes code slightly simpler.

        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::decodeAtIndex):
        (WebCore::ICOImageDecoder::processDirectory):
        * platform/image-decoders/ico/ICOImageDecoder.h:

2009-08-26  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=28718, image inside relpositioned inline doesn't paint.
        Make sure vertical overflow is still computed across self-painting layers, even though it isn't
        propagated to parents.

        Added fast/repaint/rel-positioned-inline-with-overflow.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeVerticalOverflow):

2009-08-26  David Levin  <levin@chromium.org>

        Reviewed by Darin Fisher.

        ResourceRequestBase::*[Aa]llowHTTPCookies shouldn't mention http.
        https://bugs.webkit.org/show_bug.cgi?id=28735

        Renaming the method to imply its wider implications of affecting cookies
        over any protocol that supports them.

        No change in functionality so no new tests.

        * WebCore.order:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest):
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequestWithPreflight):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::adopt):
        (WebCore::ResourceRequestBase::copyData):
        (WebCore::ResourceRequestBase::allowCookies):
        (WebCore::ResourceRequestBase::setAllowCookies):
        (WebCore::equalIgnoringHeaderFields):
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::ResourceRequestBase):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateFromSoupMessage):

2009-08-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        Made RenderInline::clippedOverflowRectForRepaint() actually include
        overflow.

        Test: fast/repaint/inline-overflow.html

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::linesVisibleOverflowBoundingBox): Added. Returns
            the bounding box of all lines’ visible overflow boxes (under the
            assumption that the first and last lines determine the top and
            bottom, respectively).
        (WebCore::RenderInline::clippedOverflowRectForRepaint): Changed to use
            linesVisibleOverflowBoundingBox() instead of linesBoundingBox().
        * rendering/RenderInline.h:

2009-08-26  John Gregg  <johnnyg@google.com>

        Reviewed by David Levin.

        minor style correction and include fix for notifications
        https://bugs.webkit.org/show_bug.cgi?id=28745

        No change in behavior, so no tests.

        * bindings/js/JSDesktopNotificationsCustom.cpp: add include of Error.h
        * notifications/Notification.cpp: change enum style to InterCaps
        (WebCore::Notification::Notification):
        * notifications/NotificationPresenter.h:
        (WebCore::NotificationPresenter::):

2009-08-25  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        postMessage() spec now supports sending arrays of ports
        https://bugs.webkit.org/show_bug.cgi?id=26902

        Added support for sending multiple ports at once via postMessage(). JS bindings will be updated in an upcoming patch.

        No new tests, since the new functionality is not exposed via new JS bindings yet, so the old tests suffice.

        * WebCore.xcodeproj/project.pbxproj:
        Mark MessagePort.h and MessagePortChannel.h as private since they are used by WebKit now.
        * dom/MessageEvent.cpp:
        Updated APIs to support passing MessagePortArrays.
        (WebCore::MessageEvent::MessageEvent):
        (WebCore::MessageEvent::initMessageEvent):
        (WebCore::MessageEvent::messagePort):
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::create):
        Now accepts a MessagePortArray parameter instead of a single MessagePort.
        (WebCore::MessageEvent::ports):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::disentanglePorts):
        Added new static function to extract a MessagePortChannelArray from a MessagePortArray.
        (WebCore::MessagePort::entanglePorts):
        Added new static function to generate a MessagePortArray (entangled ports) from a MessagePortChannelArray.
        * dom/MessagePort.h:
        * dom/MessagePortChannel.cpp:
        EventData now contains a MessagePortChannelArray field instead of a single MessagePortChannel.
        (WebCore::MessagePortChannel::EventData::create):
        (WebCore::MessagePortChannel::EventData::EventData):
        * dom/MessagePortChannel.h:
        (WebCore::MessagePortChannel::EventData::channels):
        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::PostMessageTimer):
        (WebCore::PostMessageTimer::event):
        (WebCore::DOMWindow::postMessage):
        Now accepts a MessagePortArray parameter instead of a single MessagePort.
        * page/DOMWindow.h:
        * workers/DedicatedWorkerContext.cpp:
        (WebCore::DedicatedWorkerContext::postMessage):
        Now accepts a MessagePortArray parameter instead of a single MessagePort.
        (WebCore::DedicatedWorkerContext::dispatchMessage):
        * workers/DedicatedWorkerContext.h:
        * workers/Worker.cpp:
        (WebCore::Worker::postMessage):
        Now accepts a MessagePortArray parameter instead of a single MessagePort.
        (WebCore::Worker::dispatchMessage):
        * workers/Worker.h:
        * workers/WorkerContextProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        Updated WorkerObjectProxy and WorkerContextProxy API implementations to support sending multiple MessagePorts.
        (WebCore::MessageWorkerContextTask::create):
        (WebCore::MessageWorkerContextTask::MessageWorkerContextTask):
        (WebCore::MessageWorkerContextTask::performTask):
        (WebCore::MessageWorkerTask::create):
        (WebCore::MessageWorkerTask::MessageWorkerTask):
        (WebCore::MessageWorkerTask::performTask):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerContext):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerObjectProxy.h:
        Updated WorkerObjectProxy and WorkerContextProxy APIs to support sending multiple MessagePorts.

2009-08-26  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        SocketStreamHandle interface for WebSocket API
        https://bugs.webkit.org/show_bug.cgi?id=28037

        Add build systems only for GNUmakefile.am and WebCore.xcodeproj.now.
        Other build systems will be updated once the code is functional.
        Tests will be landed once this code is complete and functional.

        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/SocketStreamErrorBase.cpp: Added.
        * platform/network/SocketStreamErrorBase.h: Added.
        * platform/network/SocketStreamHandleBase.cpp: Added.
        * platform/network/SocketStreamHandleBase.h: Added.
        * platform/network/SocketStreamHandleClient.h: Added.
        * platform/network/cf/SocketStreamError.h: Added.
        * platform/network/cf/SocketStreamHandle.h: Added.
        * platform/network/cf/SocketStreamHandleCFNet.cpp: Added.
        * platform/network/soup/SocketStreamError.h: Added.
        * platform/network/soup/SocketStreamHandle.h: Added.
        * platform/network/soup/SocketStreamHandleSoup.cpp: Added.

2009-08-26  Mads Ager  <ager@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] setTimeout does not convert non-string argument to string
        https://bugs.webkit.org/show_bug.cgi?id=28739

        Convert non-string argument to setTimeout to string in the V8
        bindings.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):

2009-08-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        [ES5] Implement getOwnPropertyDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=28724

        Implement the WebCore side of getOwnPropertyDescriptor.  This
        requires a custom implementation of getOwnPropertyDescriptor
        for every class with a custom implementation of getOwnPropertySlot.

        The bindings generator has been updated to generate appropriate
        versions of getOwnPropertyDescriptor for the general case where
        a custom getOwnPropertyDescriptor is not needed.  ES5 is vague
        about how getOwnPropertyDescriptor should work in the context of
        "host" functions with polymorphic [[GetOwnProperty]], so it seems
        okay that occasionally we "guess" what attributes -- eg. determining
        whether a property is writable.

        Test: fast/js/getOwnPropertyDescriptor.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertyDescriptor):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::getOwnPropertyDescriptor):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        (WebCore::JSHTMLAppletElement::getOwnPropertyDescriptorDelegate):
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        (WebCore::JSHTMLEmbedElement::getOwnPropertyDescriptorDelegate):
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        (WebCore::JSHTMLObjectElement::getOwnPropertyDescriptorDelegate):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::getOwnPropertyDescriptorDelegate):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertyDescriptorDelegate):
        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::getOwnPropertyDescriptor):
        * bindings/js/JSNamedNodesCollection.h:
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::runtimeObjectCustomGetOwnPropertyDescriptor):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::getOwnPropertyDescriptor):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::getOwnPropertyDescriptorDelegate):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcFallbackObjectImp::getOwnPropertyDescriptor):
        * bridge/runtime.h:
        (JSC::Bindings::Instance::getOwnPropertyDescriptor):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertyDescriptor):
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::getOwnPropertyDescriptor):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::getOwnPropertyDescriptor):
        * bridge/runtime_object.h:

2009-08-26  Vincent Untz <vuntz@gnome.org>

        Reviewed by Xan Lopez.

        GObject checks for NULL (and not 0) in g_object_get, so use that
        as we were already doing elsewhere to make the compiler happy.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::hasAudio):

2009-08-26  Alpha Lam  <hclam@chromium.org>

        Reviewed by David Levin.

        RenderThemeMac.mm has incorrect casting for media control element.
        https://bugs.webkit.org/show_bug.cgi?id=28730

        MediaControlMuteButtonElement was incorrectly casted to
        MediaControlPlayButtonElement. This is corrected in this patch.

        No new tests because this is code cleanup and is already covered by existing
        media layout tests.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMediaMuteButton):

2009-08-26  Robert Sesek  <rsesek@chromium.org>

        Reviewed by Eric Seidel.

        [Chromium] Multi-value select boxes cannot do non-contiguous selection on Mac
        https://bugs.webkit.org/show_bug.cgi?id=28670

        Change the condition regarding the key modifier check for non-contiguous
        selection on a multi-value list from just PLATFORM(MAC) to
        PLATFORM(MAC) || (PLATFORM(CHROMIUM) && PLATFORM(DARWIN)).

        No new tests. This patch only changes the condition on which a certain mouse
        event modifier key is used.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::listBoxDefaultEventHandler):

2009-08-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein

        r47744 causes media/video-controls-with-mutation-event-handler.html to crash
        https://bugs.webkit.org/show_bug.cgi?id=28732

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlVolumeSliderElement::MediaControlVolumeSliderElement):
            Don't call setAttribute from the construtor, any registered mutation event 
            listener will cause a crash.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::createVolumeSlider):
            Set the maxAttr here instead of in the constructor.

2009-08-25  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Brady Eidson.

        Timers from cached pages fire instantly rather than the after the specified timeout delay
        https://bugs.webkit.org/show_bug.cgi?id=28683

        Test: fast/dom/Window/timer-resume-on-navigation-back.html

        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore): Remove duplicated Frame::restore() call, since
            it should be done only once in FrameLoader::open(cachedFrame)
        * page/DOMTimer.cpp: Added a debug-only flag and ASSERT to catch out-of-order suspense/restore.
        (WebCore::DOMTimer::DOMTimer): Ditto.
        (WebCore::DOMTimer::suspend): Ditto.
        (WebCore::DOMTimer::resume): Ditto.
        * page/DOMTimer.h: Ditto.

2009-08-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Setting the volume of a media element has no effect if called too early
        https://bugs.webkit.org/show_bug.cgi?id=28731

        * manual-tests/audio-volume.html: 
            Added.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::setRate):
            Don't bail if metadata hasn't been loaded, it is fine to set rate and/or
            volume as soon as the movie has been created.

2009-08-25  David Levin  <levin@chromium.org>

        Reviewed by Maciej Stachowiak.

        DocumentThreadableLoader::getShouldUseCredentialStorage should allow for synchronous callbacks from SubresourceLoader::create.
        https://bugs.webkit.org/show_bug.cgi?id=28728

        Test: This code path is exercised while running xhr layout tests in chromium.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::getShouldUseCredentialStorage): When called
        back synchronously, the loader is 0, so the assert is changed to allow for that.
        (WebCore::DocumentThreadableLoader::loadRequest): Synchronous callbacks may be
        done before SubresourceLoader::create finishes, so ensure that any previous loader
        -- from a preflight request -- is cleared before calling SubresourceLoader::create.

2009-08-25  Mark Rowe  <mrowe@apple.com>

        Stop installing IDL files in to the framework.

        * WebCore.xcodeproj/project.pbxproj:

2009-08-25  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Support for HTMLInputElement::list and HTMLInputElement::selectedOption.
        https://bugs.webkit.org/show_bug.cgi?id=27756

        Tests: fast/forms/input-list.html
               fast/forms/input-selectedoption.html

        * html/HTMLAttributeNames.in:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::list):
        (WebCore::HTMLInputElement::selectedOption):
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:

2009-08-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Oliver Hunt.

        <video> and <audio> controller should be accessible (edit)
        https://bugs.webkit.org/show_bug.cgi?id=28081

        Test: accessibility/media-element.html

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
            Add AccessibilityMediaControls.cpp/.h

        * accessibility/AXObjectCache.cpp:
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::getOrCreate):
            Create AccessibilityMediaControl. Update Copyright

        * accessibility/AccessibilityMediaControls.cpp:
        * accessibility/AccessibilityMediaControls.h:
            Added.

        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityObject.h:
            Add isMediaTimeline. Update Copyright.

        * accessibility/AccessibilitySlider.h:
            Make constructor protected instead of private so AccessibilityMediaTimeline can
            call it.

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
            Add NSAccessibilityValueDescriptionAttribute to range attributes. 
        (-[AccessibilityObjectWrapper subrole]):
            Return NSAccessibilityTimelineSubrole for AccessibilityMediaTimeline.

        * dom/Node.h:
            add isMediaControlElement.

        * page/mac/WebCoreViewFactory.h:
        * platform/LocalizedStrings.h:
        * platform/mac/LocalizedStringsMac.mm:
        (WebCore::localizedMediaControlElementString): 
        (WebCore::localizedMediaControlElementHelpText):
        (WebCore::localizedMediaTimeDescription): 
            New, return localized media controller strings.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::mediaElementLoadingStateText):
        (WebCore::mediaElementLiveBroadcastStateText):
            Move inside of "#if ENABLE(VIDEO)"
        (WebCore::localizedMediaControlElementString):
        (WebCore::localizedMediaControlElementHelpText):
        (WebCore::localizedMediaTimeDescription):

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlElement::MediaControlElement):
            Initialize m_displayType.
        (WebCore::MediaControlElement::MediaControlElement):
        (WebCore::MediaControlStatusDisplayElement::MediaControlStatusDisplayElement):
            Fix style.
        (WebCore::MediaControlInputElement::MediaControlInputElement):
            Set m_displayType based on pseudo style ID.
        (WebCore::MediaControlInputElement::MediaControlInputElement):
            rename local "o" to "object".
        (WebCore::MediaControlMuteButtonElement::MediaControlMuteButtonElement):
        (WebCore::MediaControlPlayButtonElement::MediaControlPlayButtonElement):
        (WebCore::MediaControlSeekButtonElement::MediaControlSeekButtonElement):
        (WebCore::MediaControlRewindButtonElement::MediaControlRewindButtonElement):
        (WebCore::MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement):
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement):
        (WebCore::MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement):
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement):
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement):
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement):
            Update for MediaControlInputElement constructor change.
        (WebCore::MediaControlTimeDisplayElement::formatTime):
            New, moved here from RenderMedia so AccessibilityMediaTimeDisplay can use it.
        (WebCore::MediaControlTimeDisplayElement::setCurrentValue):
            New, set text to current time.
        * rendering/MediaControlElements.h:

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::updateControls):
            Create controls in tab order.
        (WebCore::RenderMedia::formatTime):
            Moved to MediaControlTimeDisplayElement::formatTime.
        (WebCore::RenderMedia::updateTimeDisplay):
            Call MediaControlTimeDisplayElement::setCurrentValue.
        * rendering/RenderMedia.h:

2009-08-25  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        [V8] Fix Canvas layout test failures in Chromium build.
        https://bugs.webkit.org/show_bug.cgi?id=28720

        The previous fix r47757 does not handle the V8 object conversion correctly.

        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-08-25  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        [V8] Fix compiling errors in Chromium build caused by Canvas3D changes from r47752.
        https://bugs.webkit.org/show_bug.cgi?id=28717

        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-08-25  Alpha Lam  <hclam@chromium.org>

        Reviewed by David Levin.

        [chromium] Implement media volume slider for chromium
        https://bugs.webkit.org/show_bug.cgi?id=28715

        Provided the implementation of the volume slider and its container for
        chromium port. With this change there will be a usable volume control
        slider for chromium theme.

        No new tests since this is covered by existing media layout tests.

        * css/mediaControlsChromium.css: CSS style for the volume slider.
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::mediaSliderThumbImage): Returns the image for slider thumb.
        (WebCore::mediaVolumeSliderThumbImage): Returns the image for volume slider thumb.
        (WebCore::RenderThemeChromiumSkia::paintMediaVolumeSliderTrack): Paints the track with one vertical white line.
        (WebCore::RenderThemeChromiumSkia::adjustSliderThumbSize): Adjusts thumb sizes according to the images.
        (WebCore::RenderThemeChromiumSkia::paintMediaSliderThumb): Paints slider thumb image.
        (WebCore::RenderThemeChromiumSkia::paintMediaVolumeSliderThumb): Paints volume slider thumb image.

2009-08-25  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Missed checking in 2 Canvas3D files
        https://bugs.webkit.org/show_bug.cgi?id=28018

        * bindings/js/JSCanvasRenderingContextCustom.cpp: Implements toJS to do proper subclass binding
        * bindings/js/JSCanvasRenderingContext3DCustom.cpp: Argument marshaling for 3D calls

2009-08-25  Mads Ager  <ager@chromium.org>

        Reviewed by Adam Barth.

        [V8] Exception from JavaScript propagates to main script
        https://bugs.webkit.org/show_bug.cgi?id=26433

        Make sure that exceptions thrown both at compile time and at
        runtime in javascript URLs are isolated from the main script.

        Test: fast/dom/javascript-url-exception-isolation.html

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluate):

2009-08-25  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Added all new Canvas3D files to the build
        https://bugs.webkit.org/show_bug.cgi?id=28018

        This also hooks up CanvasRenderingContext as the common base class for
        CanvasRenderingContext2D and CanvasRenderingContext3D. And it adds a bit
        of logic throughout to support the new CanvasRenderingContext3D object.
        But nothing is hooked up yet.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore/GNUmakefile.am:
        * WebCore/WebCore.gypi:
        * WebCore/WebCoreSources.bkl:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::strokeStyle):
        (WebCore::JSCanvasRenderingContext2D::setStrokeStyle):
        (WebCore::JSCanvasRenderingContext2D::fillStyle):
        (WebCore::JSCanvasRenderingContext2D::setFillStyle):
        (WebCore::JSCanvasRenderingContext2D::setFillColor):
        (WebCore::JSCanvasRenderingContext2D::setStrokeColor):
        (WebCore::JSCanvasRenderingContext2D::strokeRect):
        (WebCore::JSCanvasRenderingContext2D::drawImage):
        (WebCore::JSCanvasRenderingContext2D::drawImageFromRect):
        (WebCore::JSCanvasRenderingContext2D::setShadow):
        (WebCore::JSCanvasRenderingContext2D::createPattern):
        (WebCore::JSCanvasRenderingContext2D::putImageData):
        (WebCore::JSCanvasRenderingContext2D::fillText):
        (WebCore::JSCanvasRenderingContext2D::strokeText):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::isObservableThroughDOM):
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::markChildren):
        * dom/Document.cpp:
        (WebCore::Document::getCSSCanvasContext):
        * dom/Document.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::willDraw):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::is3D):
        (WebCore::HTMLCanvasElement::context3D):
        (WebCore::HTMLCanvasElement::texture3D):
        * html/HTMLCanvasElement.h:
        (WebCore::HTMLCanvasElement::renderingContext):
        * html/canvas/CanvasObject.cpp:
        (WebCore::CanvasObject::~CanvasObject):
        * html/canvas/CanvasRenderingContext.idl:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        (WebCore::CanvasRenderingContext2D::~CanvasRenderingContext2D):
        * html/canvas/CanvasRenderingContext2D.h:
        (WebCore::CanvasRenderingContext2D::is2d):
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/CanvasRenderingContext3D.cpp:
        * html/canvas/CanvasRenderingContext3D.idl:

2009-08-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        REGRESSION (r47630): fast/repaint/background-generated.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=28704

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateFillTileSize): Handle SizeNone.
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::FillLayer): Initialize the size type to SizeNone.
        * rendering/style/FillLayer.h:
        (WebCore::FillSize::FillSize): Changed assignment to initialization and
            removed redundant assignment to size.

2009-08-25  Yusuke Sato  <yusukes@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Complex text doesn't show up with text stroking
        https://bugs.webkit.org/show_bug.cgi?id=28707

        Skip the NULL check of m_hdc if Windows GDI is not in use.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawComplexText):

2009-08-25  Alpha Lam  <hclam@chromium.org>

        Reviewed by David Levin.

        Media controls panel does not have a volume control slider
        https://bugs.webkit.org/show_bug.cgi?id=28241

        Introduced "-webkit-media-controls-volume-slider",
        "-webkit-media-controls-volume-slider-container" and the supporting
        implementation. Also added appearances of "media-volume-slider" and
        "media-volume-slider-container".

        The implementation of the controls are in WebCore::MediaControlElements.
        Logic to trigger the display of the volume controls are in WebCore::RenderMedia.

        No new tests since this change doesn't have theme implementation and the
        volume slider is disabled by default.

        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::orientation): Marks that volume slider is vertical.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Added corresponding CSS values.
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType): ditto.
        * css/CSSSelector.h:
        (WebCore::CSSSelector::): ditto.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): ditto.
        * css/CSSValueKeywords.in: ditto.
        * css/mediaControls.css: Makes the volume slider disabled by default.
        * platform/ThemeTypes.h: Defines theme parts for volume slider and its container.
        (WebCore::):
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlVolumeSliderContainerElement::MediaControlVolumeSliderContainerElement):
        (WebCore::MediaControlVolumeSliderContainerElement::styleForElement):
        Adjust the CSS values for "display", "postion", "left" and "top" according to member variables.
        (WebCore::MediaControlVolumeSliderContainerElement::setVisible): Affects the "display" CSS value.
        (WebCore::MediaControlVolumeSliderContainerElement::setPosition): Affects the "left" and "top" CSS values.
        (WebCore::MediaControlVolumeSliderContainerElement::hitTest): Hit testing this element.
        (WebCore::MediaControlVolumeSliderElement::MediaControlVolumeSliderElement):
        (WebCore::MediaControlVolumeSliderElement::defaultEventHandler): Modifies the volume using the slider value, allows dragging.
        * rendering/MediaControlElements.h:
        (WebCore::): Added definition for MediaControlVolumeSliderElement and MediaControlVolumeSliderContainerElement.
        (WebCore::MediaControlVolumeSliderContainerElement::isVisible): Inline getter.
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::styleDidChange): Updates styles for volume container and volume slider.
        (WebCore::RenderMedia::createVolumeSliderContainer): Creates volume slider container and attach to panel.
        (WebCore::RenderMedia::createVolumeSlider): Creates volume slider and attach to volume slider container.
        (WebCore::RenderMedia::updateControls): Updates volume container and volume slider.
        (WebCore::RenderMedia::updateVolumeSliderContainer): Sets the visibility and position of volume slider container and its child.
        (WebCore::RenderMedia::forwardEvent):
        Hit testing the volume slider container and volume slider to toggle the visibility and forward events to slider.
        * rendering/RenderMedia.h:
        Added definition for RenderMedia::updateVolumeSliderContainer().
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart): Not implemented.
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::createThumbStyle): Makes volume slider vertical.
        (WebCore::RenderSlider::thumbRect): ditto.
        (WebCore::RenderSlider::mouseEventIsInThumb): ditto.
        (WebCore::RenderSlider::setValueForPosition): ditto.
        (WebCore::RenderSlider::positionForOffset): ditto.
        (WebCore::RenderSlider::currentPosition): ditto.
        (WebCore::RenderSlider::trackSize): ditto.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle): Adjust style for volume slider thumb.
        (WebCore::RenderTheme::paint): Paints volume control parts using theme.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintMediaVolumeSliderContainer): Naive implementation to be overridden.
        (WebCore::RenderTheme::paintMediaVolumeSliderTrack): ditto.
        (WebCore::RenderTheme::paintMediaVolumeSliderThumb): ditto.
        * rendering/style/RenderStyleConstants.h:
        (WebCore::): Constants for volume control parts.

2009-08-25  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt/Mac] Use CONFIG+=build_all only when building libraries

        If no configuration is specified when building WebKit we pass the
        debug_and_release option to QMake which results in Makefiles for
        both configurations being generated.

        Previously we built both of these configurations by default, for
        all targets (both the QtWebKit framework/dyldlib and the various
        executables such as QtLauncher and tests). This makes sense for
        the libraries, which get the _debug suffix and can be loaded on
        demand by setting the DYLD_IMAGE_SUFFIX, but for executables we
        ended up building the same executable twice.

        We now only build one instance of each executable, and since this
        is a developer build we build the debug-version. Passing either
        --debug or --release to build-webkit will override this, and
        even in the default case the release version can still be built
        by running 'make release' in the the build directory of each
        target.

        * WebCore.pro:

2009-08-25  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=28690
        Build failure in webkitgtk+-1.1.3

        Do not use deprecated function to unref a pixbuf.

        * platform/gtk/CursorGtk.cpp:
        (WebCore::Cursor::Cursor):

2009-08-24  Hironori Bono  <hbono@chromium.org>

        Reviewed by Adam Barth.

        Fix Bug 27827 "[Chromium] Functions Keys don't work in google spreadsheet".
        <https://bugs.webkit.org/show_bug.cgi?id=27827>.

        Because of the lack of mappings from GDK key-codes to WebKit key-codes,
        Chromium cannot send valid key-codes to JavaScript when a user types
        function keys. This change just copies the mappings from 'KeyEventGtk.cpp'.

        To write layout tests for this issue, added mappings from function-key
        names to platform-specific key-codes to EventSendingController objects
        so that eventSender.keyDown() can send function-key events without using
        platform-specific key codes. (Unfortunately, this eventSender.keyDown() change
        is only for Mac. So this change adds this new test to Skipped tests for other
        platforms to prevent this change from crashing the build trees.)

        Test: fast/events/keydown-function-keys.html

       * platform/chromium/KeyCodeConversionGtk.cpp: Add mappings from GDK key-codes
        to WebKit key-code for function keys.
        (WebCore::windowsKeyCodeForKeyEvent):

2009-08-24  Antti Koivisto  <antti@apple.com>

        Reviewed by Simon Fraser.
        
        https://bugs.webkit.org/show_bug.cgi?id=28698
        Avoid unnecessary transformations for the window resizer rect.

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::setFrameRect):

2009-08-24  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/7161900> REGRESSION: 100 MB membuster leak on windows due to 47391
        (DNS prefetching support)

        * platform/network/cf/DNSCFNet.cpp: (WebCore::prefetchDNS): Use a run loop from secondary
        thread on Windows, because there isn't one on main one.

2009-08-24  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=28374
        Cross-scheme requests should not be blocked by appcache rules

        Test: http/tests/appcache/different-scheme.html

        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::shouldLoadResourceFromApplicationCache):
        Resources with different schemes can never be loaded from appcache.

2009-08-24  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler and Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=28688
        REGRESSION(r24994): Cannot create a frame with a javascript URL

        Test: http/tests/security/javascriptURL/javascriptURL-in-new-iframe.html

        * bindings/js/JSAttrCustom.cpp: (WebCore::JSAttr::setValue):
        * bindings/js/JSElementCustom.cpp: (WebCore::allowSettingSrcToJavascriptURL):
        * bindings/js/JSHTMLFrameElementCustom.cpp: (WebCore::allowSettingJavascriptURL):
        * bindings/js/JSHTMLIFrameElementCustom.cpp: (WebCore::JSHTMLIFrameElement::setSrc):
        Omit the checks if there is no document in frame yet.

2009-08-24  Nate Chapin  <japhet@chromium.org>

        Reviewed by Eric Seidel.

        Fix crash in fast/css/rem-dynamic-scaling.html due to a freed
        RenderStyle being accessed.

        https://bugs.webkit.org/show_bug.cgi?id=28681

        * dom/Element.cpp:
        (WebCore::Element::recalcStyle): Make currentStyle a RefPtr.

2009-08-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/5743105> Long freezing during loading and selecting text
        of a large table
        https://bugs.webkit.org/show_bug.cgi?id=14918

        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSelection): Added calls to
            beginDeferredRepaints() and endDeferredRepaints() around the
            invalidation of the selection, in order to better coalesce multiple
            invalid rectangles.

2009-08-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Simplify findTreeElement code, get rid of potential infinite loop.

        https://bugs.webkit.org/show_bug.cgi?id=28680

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.updateBreadcrumb):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.findTreeElement):
        * inspector/front-end/treeoutline.js:
        (TreeOutline.prototype.getCachedTreeElement):
        (TreeOutline.prototype.findTreeElement):
        * inspector/front-end/utilities.js:
        (isAncestorNode):
        ():

2009-08-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Do expand local scope when hitting the break

        https://bugs.webkit.org/show_bug.cgi?id=28678

        * inspector/front-end/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update):

2009-08-24  Ada Chan  <adachan@apple.com>

        Reviewed by Steve Falkenburg.

        Make sure we use the current FrameView's frame rect when
        going back to a cached page.
        
        https://bugs.webkit.org/show_bug.cgi?id=28659

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::open):

2009-08-24  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Darin Adler.

        Modifying <text rotate=""> doesn't clear the corresponding SVGAnimatedNumberList
        https://bugs.webkit.org/show_bug.cgi?id=28673

        Test: svg/dom/text-rotate-live.html

        * svg/SVGNumberList.cpp:
        (WebCore::SVGNumberList::parse): Clear the list before adding the parsed
        numbers.

2009-08-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by NOBODY (build fix)

        Turn off ENABLE_3D_CANVAS in the xconfig files.

        * Configurations/FeatureDefines.xcconfig:

2009-08-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Only expand local scope when hitting the break

        https://bugs.webkit.org/show_bug.cgi?id=28678

        * inspector/front-end/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update):

2009-08-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        background-size fails to parse if a single length/percentage/auto is followed by a comma
        https://bugs.webkit.org/show_bug.cgi?id=28674

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillSize): Added an allowComma parameter,
            which is set to false when this method consumes a comma. Moved
            handling of 'contain' and 'cover' from parseFillProperty into this
            method.
        (WebCore::CSSParser::parseFillProperty): Set allowComma to true before
            processing the next value, and pass allowComma to parseFillSize.
        * css/CSSParser.h:

2009-08-17  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Gustavo Noronha.

        [GTK] Support for cursors that are images
        https://bugs.webkit.org/show_bug.cgi?id=28346

        Added support for cursors which are images for CursorGtk. Added
        a manual test for this.

        * manual-tests/gtk/cursor-image.html: Added.
        * manual-tests/gtk/resources/redcursor.cur: Added.
        * platform/gtk/CursorGtk.cpp:
        (WebCore::Cursor::Cursor):

2009-08-24  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Gustavo Noronha.

        [GTK] Integrate GStreamer video with the graphics backend
        https://bugs.webkit.org/show_bug.cgi?id=16356

        Improves GStreamer backend implementation of MediaPlayerPrivate class.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateErrorCallback): Send proper MediaPlayer
        error for different GStreamer errors to MediaPlayerPrivate.
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): Move static
        initialization boolean to a better place.
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::pause):
        (WebCore::MediaPlayerPrivate::duration): Return if error occured, do not
        consider the source as stream if duration query failed.
        (WebCore::MediaPlayerPrivate::currentTime): Return if error occured, use
        an early return.
        (WebCore::MediaPlayerPrivate::seek): Return if error occured.
        (WebCore::MediaPlayerPrivate::setEndTime): Remove implementation since this
        function doesn't seem to be used anywhere in WebCore.
        (WebCore::MediaPlayerPrivate::paused):
        (WebCore::MediaPlayerPrivate::seeking):
        (WebCore::MediaPlayerPrivate::setRate): Seek to current time when rate is set.
        (WebCore::MediaPlayerPrivate::maxTimeBuffered): Return if error occured.
        (WebCore::MediaPlayerPrivate::maxTimeSeekable): Ditto.
        (WebCore::MediaPlayerPrivate::maxTimeLoaded): Ditto.
        (WebCore::MediaPlayerPrivate::bytesLoaded):
        (WebCore::MediaPlayerPrivate::totalBytesKnown):
        (WebCore::MediaPlayerPrivate::totalBytes): Ditto.
        (WebCore::MediaPlayerPrivate::updateStates): Return if error occured, update
        after seek ended with a successful change
        (WebCore::MediaPlayerPrivate::didEnd): Do not pause the playbin when end is reached.
        (WebCore::MediaPlayerPrivate::loadingFailed): Update network state with the given error.
        (WebCore::mimeTypeCache): Gather supported mime types from GStreamer.
        (WebCore::MediaPlayerPrivate::getSupportedTypes):
        (WebCore::MediaPlayerPrivate::supportsType):
        (WebCore::MediaPlayerPrivate::hasSingleSecurityOrigin):
        (WebCore::MediaPlayerPrivate::supportsFullscreen): First step towards fullscreen
        support.
        (WebCore::MediaPlayerPrivate::createGSTPlayBin): Use playbin2 instead of playbin,
        do not set playbin's audio sink.
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_idle_func): Use C+casts, decrease reference count of async
        queue at the end of the idle function.
        (webkit_video_sink_render): Increase reference count of async queue.
        (webkit_video_sink_stop): Remove any idle functions with the sink as data.

2009-08-23  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Remaining new files for Canvas3D
        https://bugs.webkit.org/show_bug.cgi?id=28018

        * bindings/js/JSHTMLCanvasElementCustom.cpp: Added Canvas3D method behind an ifdef
        * html/canvas/CanvasByteArray.cpp: Added. Efficient array of bytes for passing to GL functions
        * html/canvas/CanvasByteArray.h: Added.
        * html/canvas/CanvasByteArray.idl: Added.
        * html/canvas/CanvasNumberArray.cpp: Added. Efficient array of 32 bit floats for passing to GL functions
        * html/canvas/CanvasNumberArray.h: Added.
        * html/canvas/CanvasNumberArray.idl: Added.

2009-08-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Migrate call frames interaction to the InjectedScript-based schema.

        https://bugs.webkit.org/show_bug.cgi?id=28408

        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.doEvalInWindow):
        (WebInspector.ConsoleTextMessage):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.get domWindow):
        (InspectorController.openInInspectedWindow):
        (InspectorController.getCallFrames):
        (InspectorController.evaluateInCallFrame):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.reset):
        (WebInspector.ElementsPanel.prototype.generateStylesheet):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.evaluate):
        (InjectedScript._evaluateOn):
        (InjectedScript.openInInspectedWindow):
        (InjectedScript.getCallFrames):
        (InjectedScript.evaluateInCallFrame):
        (InjectedScript._callFrameForId):
        (InjectedScript._objectForId):
        (InjectedScript.CallFrameProxy):
        (InjectedScript.CallFrameProxy.prototype._wrapScopeChain):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype._update):
        * inspector/front-end/ObjectProxy.js:
        (WebInspector.ObjectPropertyProxy):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.ondblclick):
        * inspector/front-end/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane):
        (WebInspector.ScopeChainSidebarPane.prototype.update):
        (WebInspector.ScopeVariableTreeElement.prototype.onattach):
        (WebInspector.ScopeVariableTreeElement.prototype.onexpand):
        (WebInspector.ScopeVariableTreeElement.prototype.oncollapse):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.doEvalInCallFrame):
        (WebInspector.ScriptsPanel.prototype.variablesInSelectedCallFrame):
        (WebInspector.ScriptsPanel.prototype.debuggerPaused.callback):
        (WebInspector.ScriptsPanel.prototype.debuggerPaused):

2009-08-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Add support for the placeholder attribute and DOM property of the textarea element.
        https://bugs.webkit.org/show_bug.cgi?id=21248

        A DOM node for an INPUT element doesn't have a flag for placeholder
        visibility anymore.  This patch also fixes a bug that a renderer
        doesn't reflect a corresponding DOM value change.

        Tests: fast/forms/textarea-placeholder-dom-property.html
               fast/forms/textarea-placeholder-pseudo-style.html
               fast/forms/textarea-placeholder-set-attribute.html
               fast/forms/textarea-placeholder-set-value.html

        * css/html.css: Add the default style for placeholder of textarea.
        * dom/InputElement.cpp: Cleanup for m_placeholderShouldBeVisible removal
        (WebCore::InputElement::dispatchFocusEvent):
        (WebCore::InputElement::dispatchBlurEvent):
        (WebCore::InputElement::placeholderShouldBeVisible):
        (WebCore::InputElement::updatePlaceholderVisibility):
        (WebCore::InputElement::setValueFromRenderer):
        (WebCore::InputElementData::InputElementData):
        * dom/InputElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::dispatchFocusEvent):
        (WebCore::HTMLInputElement::dispatchBlurEvent):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::placeholderShouldBeVisible):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::updatePlaceholderVisibility):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        (WebCore::HTMLTextAreaElement::setValue):
        (WebCore::HTMLTextAreaElement::placeholderShouldBeVisible):
        (WebCore::HTMLTextAreaElement::updatePlaceholderVisibility):
        (WebCore::HTMLTextAreaElement::dispatchFocusEvent):
        (WebCore::HTMLTextAreaElement::dispatchBlurEvent):
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextAreaElement.idl:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        (WebCore::RenderTextControl::styleDidChange):
        (WebCore::RenderTextControl::setInnerTextStyle):
        (WebCore::RenderTextControl::updatePlaceholderVisibility):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::RenderTextControlMultiLine):
        (WebCore::RenderTextControlMultiLine::nodeAtPoint):
        (WebCore::RenderTextControlMultiLine::updateFromElement):
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle):
        (WebCore::RenderTextControlMultiLine::textBaseStyle):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::textBaseStyle):
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):
        * rendering/RenderTextControlSingleLine.h:
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::dispatchFocusEvent):
        (WebCore::WMLInputElement::dispatchBlurEvent):
        (WebCore::WMLInputElement::setValue):
        (WebCore::WMLInputElement::placeholderShouldBeVisible):

2009-08-23  Dirk Schulze  <krit@webkit.org>

        Reviewed by Mark Rowe.

        Code clean-up and build fix for filters enabled builds. Moved SVGNames.h
        into #if ENABLE(SVG) for Document.cpp and added SVGNames.h to the other
        files. They are needed there after r47688.

        * dom/Document.cpp:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:

2009-08-23  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed, build fix for make distcheck on GTK+.

        * GNUmakefile.am: Added files needed for the build.
        * bindings/js/JSDOMWindowCustom.cpp: Protect SharedWorker include
        with #if clause.
        * bindings/js/JSEventTarget.cpp: Dito.
        * dom/Document.cpp: Dito.
        * loader/FrameLoader.cpp: Dito.

2009-08-23  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector: Throws an Error on "null"
        https://bugs.webkit.org/show_bug.cgi?id=28665

        * inspector/front-end/InjectedScript.js:
        (InjectedScript.evaluate):

2009-08-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Inspector: REGRESSION Formatting Function in Console is Abbreviated Too Often

        https://bugs.webkit.org/show_bug.cgi?id=28666

        * inspector/front-end/InjectedScript.js:
        (InjectedScript.getProperties):
        (InjectedScript.createProxyObject):

2009-08-22  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Xan Lopez.

        [GTK] BitmapImage::getGdkPixbuf does not handle alpha channels properly
        https://bugs.webkit.org/show_bug.cgi?id=28345

        When doing the conversion between cairo_surface_t* and GdkPixbuf*
        account for the differences in the respective formats' in-memory
        image format.

        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::getCairoSurfacePixel):
        (WebCore::getGdkPixbufPixel):
        (WebCore::BitmapImage::getGdkPixbuf):

2009-08-22  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        Make DOM classes start with a reference count of 1, like all other RefCounted
        
        Next step: Element, HTMLElement, HTMLAnchorElement, HTMLAppletElement,
        HTMLAreaElement, HTMLEmbedElement, HTMLFrameElement, HTMLIFrameElement,
        HTMLObjectElement, HTMLPlugInElement, HTMLPlugInImageElement.

        * DerivedSources.make: Fix error seen every time we build by escaping the $
        in the build rule, since you have to use $$ for that in make.

        * WebCore.base.exp: Updated.

        * bindings/objc/DOM.mm:
        Added now-needed include of SVGNames.h.

        * dom/Document.cpp: Added now-needed include of SVGNames.h.
        (WebCore::Document::createElement): Use create instead of new.

        * dom/Element.cpp:
        (WebCore::Element::Element): Added ConstructionType argument so the caller
        can determine whether this starts with a reference count of either 0 or 1.
        Later we will remove this again once they are all 1.
        (WebCore::Element::create): Added.

        * dom/Element.h: Added create and made constructor protected.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::StyledElement): Added ConstructionType argument.
        * dom/StyledElement.h: Made many functions protected or private, including
        the constructor.

        * dom/make_names.pl: Use create to create the base elements HTMLElement,
        SVGElement, and WMLElement.

        * editing/CreateLinkCommand.cpp:
        (WebCore::CreateLinkCommand::doApply): Use create instead of new.
        * editing/UnlinkCommand.cpp:
        (WebCore::UnlinkCommand::doApply): Ditto.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::create): Added.
        * html/HTMLAnchorElement.h: Made constructor protected and added create.
        Also made m_rootEditableElementForSelectionOnMouseDown a RefPtr.

        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::create): Added.
        * html/HTMLAppletElement.h: Made constructor private and added create.

        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::create): Added.
        * html/HTMLAreaElement.h: Made constructor private and added create.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::create): Added.
        * html/HTMLElement.h: Made constructor protected and added create.
        Made other functions protected and private. Also added inline
        definition of constructor.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::create): Added.
        * html/HTMLEmbedElement.h: Made constructor private and added create.
        Made other functions private.

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::create): Added.
        (WebCore::HTMLFrameElement::parseMappedAttribute):
        * html/HTMLFrameElement.h: Made constructor private and added create.
        Made other functions private.

        * html/HTMLFrameElementBase.h: Made functions protected and private.

        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::HTMLFrameOwnerElement): Pass
        CreateElement so reference count starts at 1.

        * html/HTMLFrameOwnerElement.h: Made functions protected and private.

        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::create): Added.
        * html/HTMLIFrameElement.h: Made constructor private and added create.
        Made other functions private.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::create): Added.
        (WebCore::HTMLObjectElement::containsJavaApplet): Changed while loop
        into a for loop and tweaked formatting.

        * html/HTMLObjectElement.h: Made constructor private and added create.
        Made other functions private.

        * html/HTMLPlugInElement.h: Made constructor protected.
        Made other functions protected and private.

        * html/HTMLPlugInImageElement.h: Made constructor and another function
        protected.

        * html/HTMLTagNames.in: Removed createWithNew from all classes that
        now have create functions. Moved conditional noscript to a separate
        paragraph.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName): Use create.
        (WebCore::HTMLViewSourceDocument::addLink): Ditto.
        * page/DragController.cpp:
        (WebCore::documentFragmentFromDragData): Ditto.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement): Pass CreateElementZeroRefCount
        so reference count still starts at 0. Will change this class later.
        (WebCore::SVGElement::create): Added.
        * svg/SVGElement.h: Added create, made constructor protected, and
        made other functions protected and private. Removed unneeded
        SVGNames.h include.

        * svg/SVGExternalResourcesRequired.h: Added now-needed SVGNames.h
        include.

        * svg/SVGStopElement.h: Added now-needed SVGNames.h include.
        Made functions private.

        * wml/WMLElement.cpp:
        (WebCore::WMLElement::WMLElement): Pass CreateElementZeroRefCount
        so reference count still starts at 0. Will change this class later.
        (WebCore::WMLElement::create): Added.
        * wml/WMLElement.h: Added create and made constructor protected.

        * wml/WMLTagNames.in: Removed createWithNew from WMLElement.

2009-08-22  Adele Peterson  <adele@apple.com>

        Reviewed by Anders Carlsson.

        Fix for <rdar://problem/7161656> Crash in RenderObject::destroy when using custom scrollbars

        Custom scrollbars normally get detached when a document gets detached.  In this case, a crash was happening when the document had gone into the page cache 
        and then was getting destroyed without proper scrollbar teardown.  This change makes custom scrollbars get detached when the document enters the cache.

        I couldn't figure out a way to reliably cause this to happen in DRT, since the reproducible case relies on the cache being purged at a particular time.

        * history/CachedFrame.cpp: (WebCore::CachedFrame::CachedFrame): Detach custom scrollbars when the CachedFrame is created.  
          They'll get reattached when the document comes out of the page cache.
        * page/FrameView.cpp: (WebCore::FrameView::~FrameView): Added some asserts to catch this problem earlier in debug builds.

2009-08-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        Make sure self-collapsing blocks that clear floats are still able to collapse their bottom margins with
        the bottom of their parent blocks.  The old code prevented all collapsing, but all CSS2.1 states is that:
        "An element that has had clearance applied to it never collapses its top margin with its parent block's bottom margin."
        
        The implication is that the bottom margin can still collapse, and the block-inside-inline form of
        fast/block/margin-collapse/025.html (added as fast/block/margin-collapse/block-inside-inline/025.html) depends
        on it to get comparable results.

        Added block-inside-inline tests (a whole slew of them) in fast/block/margin-collapse/block-inside-inline/

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::MarginInfo::MarginInfo):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::handleBottomOfBlock):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::MarginInfo::clearMargin):
        (WebCore::RenderBlock::MarginInfo::canCollapseBottomWithChildren):

2009-08-22  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Need to implement ARIA role="listitem" and role="list"
        https://bugs.webkit.org/show_bug.cgi?id=28606

        Test: platform/mac-snowleopard/accessibility/aria-list-and-listitem.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::isUnorderedList):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::RoleEntry::):

2009-08-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Clean up fill image geometry calculation
        https://bugs.webkit.org/show_bug.cgi?id=28652

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateFillTileSize): Renamed
            calculateBackgroundSize() to this. Replaced separate scaledWidth and
            scaledHeight parameters with a single scaledSize parameter. Renamed
            parameters and local variables.
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry): Changed
            to use CSS3 Backgrounds and Borders terminology in comments and
            local variable names. Renamed, clarified and consolidated some local
            variables.
        * rendering/RenderBoxModelObject.h: Made calculateFillTileSize() private.

2009-08-22  Chris Marrin  <cmarrin@apple.com>

        Unreviewed, build fix.

        Backing out http://trac.webkit.org/changeset/47669

        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasRenderingContext2D.h:

2009-08-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        Backing out http://trac.webkit.org/changeset/47671 in preparation of
        rolling out http://trac.webkit.org/changeset/47669.

2009-08-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Anders Carlsson.

        Build fix, add CanvasRenderingContext to build systems.
        https://bugs.webkit.org/show_bug.cgi?id=28018

        * DerivedSources.make: Added CanvasRenderinContext.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.

2009-08-21  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        New files implementing GL buffer wrappers, and support to make them platform independent
        https://bugs.webkit.org/show_bug.cgi?id=28018

        * html/canvas/CanvasBuffer.cpp: Added. Wrapper around GL Buffer object
        * html/canvas/CanvasBuffer.h: Added.
        * html/canvas/CanvasBuffer.idl: Added.
        * html/canvas/CanvasFramebuffer.cpp: Added. Wrapper around GL Framebuffer object
        * html/canvas/CanvasFramebuffer.h: Added.
        * html/canvas/CanvasFramebuffer.idl: Added.
        * html/canvas/CanvasObject.h: Expose m_context
        * html/canvas/CanvasProgram.cpp: Added. Wrapper around GL Program object
        * html/canvas/CanvasProgram.h: Added.
        * html/canvas/CanvasProgram.idl: Added.
        * html/canvas/CanvasRenderbuffer.cpp: Added. Wrapper around GL Renderbuffer object
        * html/canvas/CanvasRenderbuffer.h: Added.
        * html/canvas/CanvasRenderbuffer.idl: Added.
        * html/canvas/CanvasRenderingContext3D.cpp: Move m_objects hash table from GraphicsContext3D to here
        * html/canvas/CanvasRenderingContext3D.h:
        * html/canvas/CanvasShader.cpp: Added. Wrapper around GL Shader object
        * html/canvas/CanvasShader.h: Added.
        * html/canvas/CanvasShader.idl: Added.
        * html/canvas/CanvasTexture.cpp: Added. Wrapper around GL Texture object
        * html/canvas/CanvasTexture.h: Added.
        * html/canvas/CanvasTexture.idl: Added.
        * platform/graphics/GraphicsContext3D.cpp: Removed.
        * platform/graphics/GraphicsContext3D.h: Move m_objects hash table from here to CanvasRenderingContext3D
        * platform/graphics/mac/GraphicsContext3DMac.cpp: Implement platform dependent code for GL object creation/destruction

2009-08-21  Darin Adler  <darin@apple.com>

        * WebCore.vcproj/build-generated-files.sh:
        * make-generated-sources.sh:
        Removed obsolete code to set up CREATE_HASH_TABLE.

2009-08-21  Adele Peterson  <adele@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/7162322> Custom style sheet ignored if UAC is enabled 

        * platform/win/SharedBufferWin.cpp: (WebCore::SharedBuffer::createWithContentsOfFile): 
        No need to open the file with write access.  Only read access is needed.

2009-08-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7161454> Leaks seen during http/tests/xmlhttprequest/cross-origin-no-authorization.html

        Also fixes leaks seen on appcache tests.

        * platform/network/mac/ResourceHandleMac.mm: (WebCore::ResourceHandle::cancel): Work around
        something that's likely a CFNetwork issue. Note that on Windows, there is no matching API
        to call, and we do not think that the leak occurs there anyway.

2009-08-21  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=28650
        Remove cross-thread code from CrossOriginPreflightResultCache.
        Removed mutexes, atomic initializer and string copy.

        No new tests, the worker tests cover this.

        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::addToAccessControlAllowList):
        (WebCore::CrossOriginPreflightResultCache::shared):
        (WebCore::CrossOriginPreflightResultCache::appendEntry):
        (WebCore::CrossOriginPreflightResultCache::canSkipPreflight):
        (WebCore::CrossOriginPreflightResultCache::empty):
        * loader/CrossOriginPreflightResultCache.h:

2009-08-21  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Jan Alonzo.

        Buildfix after http://trac.webkit.org/changeset/47655.

        * html/HTMLFormControlElement.h:

2009-08-19  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector: Improve Cookie DataGrid to Show Hidden Data
        https://bugs.webkit.org/show_bug.cgi?id=28269

          Removed Custom Bindings

        * bindings/js/JSInspectorBackendCustom.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8InspectorBackendCustom.cpp:
        * inspector/InspectorBackend.cpp:

          Made Non-Custom Bindings in the Backend

        (WebCore::InspectorBackend::getCookies):
        (WebCore::InspectorBackend::deleteCookie):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::deleteCookie):
        * inspector/InspectorController.h:

          Build the Cookie ScriptObjects, handles using document.cookie in
          case the platform hasn't implemented raw cookie access.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getCookies):
        (WebCore::InspectorDOMAgent::buildObjectForCookie):
        (WebCore::InspectorDOMAgent::buildArrayForCookies):
        * inspector/InspectorDOMAgent.h:

          Complete the Asynchronous Calls

        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didGetCookies):
        * inspector/InspectorFrontend.h:

          Asynchronous Functions to get Cookie Data

        * inspector/front-end/DOMAgent.js:
        (WebInspector.Cookies.getCookiesAsync):
        (WebInspector.Cookies.buildCookiesFromString): fallback behavior

          Refactor to use the Asynchronous Functions

        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView):
        (WebInspector.CookieItemsView.prototype.get statusBarItems):
        (WebInspector.CookieItemsView.prototype.update.callback):
        (WebInspector.CookieItemsView.prototype.update):
        (WebInspector.CookieItemsView.prototype.simpleDataGridForCookies):
        (WebInspector.CookieItemsView.prototype._deleteButtonClicked):

          Cleaned/Commented Related Code

        (InspectorController.searchCanceled):
        * inspector/front-end/InjectedScript.js:
        * platform/Cookie.h:
        * English.lproj/localizedStrings.js: the new strings that were supposed to have gone in last time

2009-08-21  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=28145
        Add support for novalidate/formnovalidate attribute, from HTML5 specs:
        http://www.whatwg.org/specs/web-apps/current-work/#attr-fs-novalidate

        Tests: fast/forms/formnovalidate-attribute.html
               fast/forms/novalidate-attribute.html

        * html/HTMLAttributeNames.in: added novalidate, formnovalidate
        * html/HTMLButtonElement.idl: formnovalidate attribute exposed
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::formNoValidate): attribute getter
        (WebCore::HTMLFormControlElement::setFormNoValidate): attribute setter
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::novalidate): attribute getter
        (WebCore::HTMLFormElement::setNovalidate): attribute setter
        * html/HTMLFormElement.h:
        * html/HTMLFormElement.idl: novalidate attribute exposed
        * html/HTMLInputElement.idl: formNoValidate attribute exposed

2009-08-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Beth Dakin.

        Rendering changes to complete
        [CSS3 Backgrounds and Borders] Add support for the "contain" value for
        background-size
        https://bugs.webkit.org/show_bug.cgi?id=27573
        and
        [CSS3 Backgrounds and Borders] Add support for the "cover" value for
        background-size
        https://bugs.webkit.org/show_bug.cgi?id=27574

        Test: fast/backgrounds/size/contain-and-cover.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundSize):
        * rendering/RenderObject.cpp:
        (WebCore::mustRepaintFillLayers):

2009-08-21  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=27452
        Add support for checkValidity() method and invalid event, from HTML5
        specs:
        http://www.whatwg.org/specs/web-apps/current-work/#dom-form-checkvalidity

        Tests: fast/events/invalid-001.html
               fast/events/invalid-002.html
               fast/events/invalid-003.html
               fast/events/invalid-004.html
               fast/events/invalid-005.html
               fast/forms/checkValidity-001.html
               fast/forms/checkValidity-002.html
               fast/forms/checkValidity-003.html
               fast/forms/checkValidity-004.html

        * dom/Document.idl: oninvalid event handler
        * dom/Element.idl: ditto
        * dom/EventNames.h: added invalid event
        * dom/Node.cpp:
        (WebCore::Node::oninvalid): ditto
        (WebCore::Node::setOninvalid): ditto
        * dom/Node.h: ditto
        * html/HTMLAttributeNames.in: oninvalid attribute
        * html/HTMLButtonElement.idl: added checkValidity() method
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute): parses oninvalid
        * html/HTMLFieldSetElement.idl: added checkValidity() method
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::checkValidity): checkValidity()
        implementation
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::checkValidity): checkValidity() implementation
        for form elements
        * html/HTMLFormElement.h: checkValidity() definition
        * html/HTMLFormElement.idl: added checkValidity() method
        * html/HTMLInputElement.idl: added checkValidity() method
        * html/HTMLSelectElement.idl: added checkValidity() method
        * html/HTMLTextAreaElement.idl: added checkValidity() method
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::oninvalid): oninvalid event handler
        (WebCore::DOMWindow::setOninvalid): ditto
        * page/DOMWindow.h: ditto
        * page/DOMWindow.idl: ditto

2009-08-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        The CSS part of https://bugs.webkit.org/show_bug.cgi?id=27571 [CSS3 
        Backgrounds and Borders] Add support for the "round" value for 
        background-repeat
        -and-
        https://bugs.webkit.org/show_bug.cgi?id=27570 [CSS3 Backgrounds and 
        Borders] Add support for the "space" value for background-repeat

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillProperty):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EFillRepeat):
        * css/CSSValueKeywords.in:
        * rendering/style/FillLayer.h:
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-08-21  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        New files for Canvas 3D feature
        https://bugs.webkit.org/show_bug.cgi?id=28018

        This is all the new files for implementing Canvas 3D. None of them are hooked up and
        are not even included in the build yet. This incorporates the reviews from Simon
        and Ollie for these files.

        * bindings/js/JSCanvasNumberArrayCustom.cpp: Added. Custom JS binding to do implicit conversion from JS Array
        * html/CanvasObject.cpp: Added. Base class for all GL object containers
        * html/CanvasObject.h: Added.
        * html/CanvasRenderingContext.cpp: Added. Base class for CanvasRenderingContext2D and CanvasRenderingContext3D
        * html/CanvasRenderingContext.h: Added.
        * html/CanvasRenderingContext.idl: Added.
        * html/CanvasRenderingContext3D.cpp: Added. 3D context returned from Canvas.getContext()
        * html/CanvasRenderingContext3D.h: Added.
        * html/CanvasRenderingContext3D.idl: Added.
        * platform/graphics/GraphicsContext3D.cpp: Added. Platform interface between CanvasRenderingContext3D and 3D graphics engine
        * platform/graphics/GraphicsContext3D.h: Added.
        * platform/graphics/mac/Canvas3DLayer.h: Added. CALayer subclass to composite 3D canvas
        * platform/graphics/mac/Canvas3DLayer.mm: Added.
        * platform/graphics/mac/GraphicsContext3DMac.cpp: Added. Mac specific interface (OpenGL based)

2009-08-21  Ryosuke Niwa  <rniwa@webkit.org>

        No Review.

        Another Windows build fix.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::diffTextDecorations):

2009-08-21  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=28625, focus rings don't respect the non-strict mode
        line box shrinking quirk.  Make sure outlines don't extend outside the lineTop and lineBottom
        of the root line box.

        Covered by existing tests.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addFocusRingRects):
        (WebCore::RenderInline::paintOutline):

2009-08-21  Ryosuke Niwa  <rniwa@webkit.org>

        No Review.

        Windows build fix.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::setTextDecorationProperty): Made it static
        (WebCore::diffTextDecorations): Made it static

2009-08-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        execCommand("Underline") uses CSS even when styleWithCSS has been turned off
        https://bugs.webkit.org/show_bug.cgi?id=23892

        This patch adds support for u and s in StyleChange and addInlineStyleIfNeeded so that
        WebKit does not use CSS to decorate texts when styleWithCSS is set to false.

        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::copy): Added.
        * css/CSSValueList.h: Added copy.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::applyUnderline):
        (WebCore::StyleChange::applyLineThrough):
        (WebCore::StyleChange::StyleChange): Added a boolean trimTextDecorations argument.
        (WebCore::StyleChange::init): Ditto.
        (WebCore::StyleChange::extractTextStyles): Handles text decorations.
        (WebCore::getPropertiesNotInComputedStyle): Handles text decorations properly.
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded): Adds u and s if needed.

2009-08-21  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector: Rename "Databases" Panel as "Storage"
        https://bugs.webkit.org/show_bug.cgi?id=28620

          Updated enum from "DatabasesPanel" to "StoragePanel" and wherever it was used.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::specialPanelForJSName): string to display StoragePanel can be either "databases" or "storage"
        * inspector/InspectorController.h:
        (WebCore::InspectorController::):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::showPanel):

          Updated All Direct Access from WebInspector.panels.databases to WebInspector.panels.storage,
          any DatabasesPanel constructors and appropriate function names.

        * inspector/front-end/DOMStorageDataGrid.js:
        (WebInspector.DOMStorageDataGrid.prototype._startEditingColumnOfDataGridNode):
        (WebInspector.DOMStorageDataGrid.prototype._startEditing):
        (WebInspector.DOMStorageDataGrid.prototype._editingCommitted):
        (WebInspector.DOMStorageDataGrid.prototype._editingCancelled):
        (WebInspector.DOMStorageDataGrid.prototype.deleteSelectedRow):
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype.update):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._queryFinished):
        * inspector/front-end/DatabaseTableView.js:
        (WebInspector.DatabaseTableView.prototype._queryFinished):
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels): updated string that comes from hiddenPanels to be "databases" or "storage"
        (WebInspector.showStoragePanel):
        (WebInspector.selectDatabase):
        (WebInspector.selectDOMStorage):
        (WebInspector.addDatabase):
        (WebInspector.addDOMStorage):

          Renamed some files and Updated Accordingly.

        * inspector/front-end/StoragePanel.js: Renamed from WebCore/inspector/front-end/DatabasesPanel.js.
        * inspector/front-end/Images/storageIcon.png: Renamed from WebCore/inspector/front-end/Images/databasesIcon.png.
        * inspector/front-end/WebKit.qrc: use new file names
        * inspector/front-end/inspector.css: use new images name and class names
        * inspector/front-end/inspector.html: use new file name
        * WebCore.gypi: use new file names

          Miscellaneous Updates.

        * English.lproj/localizedStrings.js: Updated Tooltip from "Databases" to "Storage"

2009-08-21  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Oliver Hunt.

        [Haiku] Adding three font-specific files to WebCore:
        FontCacheHaiku.cpp, FontHaiku.cpp, and SimpleFontDataHaiku.cpp
        https://bugs.webkit.org/show_bug.cgi?id=28131

        * platform/graphics/haiku/FontCacheHaiku.cpp: Added.
        (WebCore::FontCache::platformInit):
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::FontCache::createFontPlatformData):
        (WebCore::FontCache::getTraitsInFamily):
        * platform/graphics/haiku/FontHaiku.cpp: Added.
        (charUnicodeToUTF8HACK):
        (WebCore::Font::canReturnFallbackFontsForComplexText):
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/haiku/SimpleFontDataHaiku.cpp: Added.
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformCharWidthInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::smallCapsFontData):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):

2009-08-21  Philippe Beauchamp  <philippe.beauchamp@gmail.com>

        Reviewed by Adam Roben.

        Middle click panning icon is offset by 3 pixels
        https://bugs.webkit.org/show_bug.cgi?id=28611

        * platform/ScrollView.cpp:
        panIconSizeLength initialized to 20 instead of 16 to match icon dimension (2 pixels offset)
        * platform/win/CursorWin.cpp:
        (WebCore::middlePanningCursor):
        Hotspot initialized to (8,8) instead of (7,7) (one pixel offset)
        
2009-08-21  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Remove inspector resources for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=28610

        Based on an idea from Simon Hausmann.

        * WebCore.pro:

2009-08-21  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Eric Seidel.

        Inspector: Remove Unused Variable
        https://bugs.webkit.org/show_bug.cgi?id=28616

        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._checkWarning):

2009-08-21  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector: Console Array Formatter Shows Extra Properties
        https://bugs.webkit.org/show_bug.cgi?id=28615

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._formatarray): do not ignore hasOwnProperties

2009-08-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        The CSS part of https://bugs.webkit.org/show_bug.cgi?id=27574 [CSS3 
        Backgrounds and Borders] Add support for the "contain" value for 
        background-size
        -and-
        https://bugs.webkit.org/show_bug.cgi?id=27573 [CSS3 Backgrounds and 
        Borders] Add support for the "cover" value for background-size

        Return contain or cover when appropriate, and otherwise do what we 
        used to do.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

        Accept contain and cover as valid values for background-size.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillProperty):

        Handle setting the size and the sizeLength if appropriate.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapFillSize):

        Added new keywords contain and cover.
        * css/CSSValueKeywords.in:

        Use just sizeLength instead of size to match old behavior.
        * page/animation/AnimationBase.cpp:
        (WebCore::FillLayersPropertyWrapper::FillLayersPropertyWrapper):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundSize):
        * rendering/RenderObject.cpp:
        (WebCore::mustRepaintFillLayers):

        The variable m_sizeType is an EBackgroundSize, and m_sizeLength is 
        a LengthSize (the equivalent of what m_size used to be). I got rid 
        of m_sizeSet and made isSizeSet() dynamic. I also defined a new 
        struct, FillSize that can be used to set or get m_size and 
        m_sizeLength both at once. 
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::FillLayer):
        (WebCore::FillLayer::operator=):
        (WebCore::FillLayer::operator==):
        (WebCore::FillLayer::fillUnsetProperties):
        * rendering/style/FillLayer.h:
        (WebCore::FillSize::FillSize):
        (WebCore::FillSize::operator==):
        (WebCore::FillSize::operator!=):
        (WebCore::FillLayer::sizeLength):
        (WebCore::FillLayer::size):
        (WebCore::FillLayer::isSizeSet):
        (WebCore::FillLayer::setSizeType):
        (WebCore::FillLayer::setSizeLength):
        (WebCore::FillLayer::setSize):
        (WebCore::FillLayer::clearSize):
        (WebCore::FillLayer::initialFillSizeType):
        (WebCore::FillLayer::initialFillSizeLength):
        (WebCore::FillLayer::initialFillSize):

        This is all boiler-plate stuff to adjust to the new size() vs. 
        sizeType() vs. sizeLength() distinction.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::backgroundSizeType):
        (WebCore::InheritedFlags::backgroundSizeLength):
        (WebCore::InheritedFlags::maskSize):
        (WebCore::InheritedFlags::setBackgroundSize):
        (WebCore::InheritedFlags::setBackgroundSizeLength):
        (WebCore::InheritedFlags::setMaskSize):

        Definition for EBackgroundSizeType.
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-08-21  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Not reviewed, build fix after r47580.

        [Qt] Adjust the files.

        * inspector/front-end/WebKit.qrc:

2009-08-20  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Enable various "grouping" ARIA roles
        https://bugs.webkit.org/show_bug.cgi?id=28486

        Test: platform/mac/accessibility/aria-grouping-roles.html

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        * page/mac/WebCoreViewFactory.h:
        * platform/LocalizedStrings.h:
        * platform/mac/LocalizedStringsMac.mm:

2009-08-20  David Levin  <levin@chromium.org>

        Unreviewed trivial comment fix.

        Update a bug link in a comment due to bugzilla amnesia.

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::setResourceToRevalidate):

2009-08-20  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by David Levin.

        HTML5 media elements do not fire waiting events correctly
        https://bugs.webkit.org/show_bug.cgi?id=28335

        Fire the waiting event before seeking, and fix a case where firing of
        the seeked event is missed when the ready state is changed during
        a seek.

        Added video-waiting-seeking.html into manual tests because not
        all platforms allow seeking into non-buffered ranges.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState): add support for
        waiting event when seeking.
        (WebCore::HTMLMediaElement::finishSeek): send seeked event
        whenever seeking finishes.
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): dispatch to
        new function.
        * html/HTMLMediaElement.h:
        * manual-tests/video-waiting-seeking.html: Added.

2009-08-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        Fix more cases of
        <rdar://problem/7154521> Lots of "<Error>: doClip: empty path." spew in
        the console with certain content

        If the border box is empty, simply avoid painting instead of trying to
        clip to the empty path.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):

2009-08-20  Jeremy Orlow  <jorlow@chromium.org>

        Build fix.  Forgot a svn add for a patch I landed.  :-(

        * storage/SQLTransactionClient.cpp: Added.
        (WebCore::SQLTransactionClient::didCommitTransaction):
        (WebCore::SQLTransactionClient::didExecuteStatement):
        (WebCore::SQLTransactionClient::didExceedQuota):
        * storage/SQLTransactionClient.h: Added.

2009-08-20  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Added a client to SQLTransaction. In addition to being a place to
        get notifications about certain events in a transaction, it is
        also an abstraction layer that allows us to plug in different
        implementations for each port for how transactions interract with
        the main DB. For example, WebCore's default implementation will
        make direct calls to DatabaseTracker's methods. At the same time,
        Chromium's implementation will send IPCs to the browser process
        whenever a transaction needs something from the main DB.

        All storage tests pass.

        https://bugs.webkit.org/show_bug.cgi?id=27967

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/Database.cpp:
        (WebCore::Database::transactionClient):
        * storage/Database.h:
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        * storage/DatabaseThread.h:
        (WebCore::DatabaseThread::transactionClient):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::runCurrentStatement):
        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback):
        (WebCore::SQLTransaction::postflightAndCommit):
        * storage/SQLTransactionClient.cpp: Added.
        * storage/SQLTransactionClient.h: Added.

2009-08-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg.

        Fix of <https://bugs.webkit.org/show_bug.cgi?id=24793>
        Auto scroll speed is faster than in IE, Firefox.
        
        Changed pan scrolling speed to match Firefox's algorithm.

        * rendering/RenderLayer.cpp:
        (WebCore::adjustedScrollDelta):
        (WebCore::RenderLayer::panScrollFromPoint):

2009-08-20  Stephen White  <senorblanco@chromium.org>

        Reviewed by Eric Seidel.

        Fix for assert in Chromium page cycler:  drawRect() was re-using
        an SkPaint, but not resetting it before calling
        PlatformGraphicsSkia::setupPaintForFilling() a second time.  This
        CL fixes drawRect(), and re-enables the assert.
        http://bugs.webkit.org/show_bug.cgi?id=28172
        http://crbug.com/19797

        Covered by Chromium page cycler tests.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::drawRect):
        (PlatformContextSkia::setupPaintCommon):

2009-08-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7159016> Popup menus don't disappear when you click outside the window.
        
        Revert r47535 which introduced this.
        
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        (WebCore::PopupWndProc):

2009-08-20  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Crashes on sites with lots of images
        https://bugs.webkit.org/show_bug.cgi?id=28473

        The problem is that m_resourceToRevalidate::m_isBeingRevalidated is false while
        CachedResource is still referring to it, so it may get deleted before
        Cache::revalidationSucceeded calls CachedResource::clearResourceToRevalidate.

        * loader/Cache.cpp:
        (WebCore::Cache::revalidateResource): Added assert to verify the resource
        being revalidated is physically in the cache.
        (WebCore::Cache::revalidationSucceeded): Changed to do one call to switch from the revalidating
        resource to the revalidated resource.  This allows for proper lifetime management of the
        revalidated resource. Added assert to verify that the revalidatingResource is in the cache.
        (WebCore::Cache::pruneDeadResources): Don't remove items from the cache that are in the
        process of being validated (or else they can get added twice: Once through the normal mechanism
        and then again during revalidateResource).

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::isSafeToMakePurgeable):
        Changed m_isBeingRevalidated to m_proxyResource to allow finding out
        who the validating resource (or proxy) is.

        (WebCore::CachedResource::~CachedResource): Removed code to handle m_resourceToRevalidate
        being non-zero because this shouldn't be possible due to checks in canDelete. Added asserts
        as well.
        (WebCore::CachedResource::setResourceToRevalidate): Adjusted for the change to m_proxyResource
        and added a comment about the assert.
        (WebCore::CachedResource::clearResourceToRevalidate):
        Only clean up the resourceToRevalidate if it hasn't gotten a new proxy resource.
        * loader/CachedResource.h:
        (WebCore::CachedResource::setInCache): Don't clear m_proxyResource because the resource
        is still being referred to by it and the code it robust to this being switched to a new proxy
        resource without it being cleared first.
        (WebCore::CachedResource::canDelete): Changed m_isBeingRevalidated to m_proxyResource.

2009-08-20  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Eric Seidel.

        Fix "Chromium RTL autocomplete popup is not layout correctly".
        https://bugs.webkit.org/show_bug.cgi?id=27889

        The complete fix of the issue consists 2 parts: the patch in webkit
        and the patch in Chromium's own code.

        This webkit patch only affects Chromium autofill. It
        1. introduces a new flag in WebCore::PopupContainerSettings to
           distinguish whether the width of the drop-down should be restricted
           or not.
           For autofill, the width of the drop-down is restricted to
           be the same as that of the input field (the new flag is set in
           Chromium's own code). But width is not restricted for <select> (same as before).
        2. introduce a new flag in WebCore::PopContainerSettings to
           indicate what heuristics to use when displaying text in drop-down menu.
           For autofill, use drop-down item's directionality to display drop-down items.
           Previously, drop-down item is displayed in the its first strong
           directional character's directionality.
           (drop-down item's directionality is set in Chromium's own code.
           It is set the same as the directionality of the element. 
           For autofill, it is the same directionality as that of the input field.)
           For <select>, still use the text's first strong directional character's
           directionality to display the text.


        Since the patch only affects the chromium client, not webcore part or
        other clients. No automatic tests is possible.

        * manual-tests/autofill-popup-width-and-item-direction.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::):
        (WebCore::PopupListBox::paintRow): If list box width is restricted and 
        an item is longer to fit in a list box, truncate it and draw part of the text and append ellipses.
        (WebCore::PopupListBox::layout): Restrict width of list box if applicable.
        * platform/chromium/PopupMenuChromium.h: 
        (WebCore::PopupItem::PopupItem): style change.
        (WebCore::PopupContainerSettings::): Add 2 new flags in PopupContainerSetting to 
        distinguish whether to restrict width of list box and 
        in what directionality to display the text in drop-down.

2009-08-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adele Peterson.

        Fix of <https://bugs.webkit.org/show_bug.cgi?id=28504>. 
        Pan Scrolling can scroll while showing the middlePanScroll icon.
        
        Fixed an off by one error between RenderLayer::panScrollFromPoint and EventHandler::updatePanScrollState. 
        In RenderLayer::panScrollFromPoint, we were setting the icon to be an arrow if the difference between the start
        of the pan scroll and the current mouseposition is > 15. However, in EventHandler::updatePanScrollState, we would
        set our amount to scroll to 0 only if the difference in mouse position is < 15. I made this check a <= 15, to fix
        the off by one error.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::panScrollFromPoint):

2009-08-20  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        Pull the code in layoutBlockChildren for handling a normal flow block child into a helper method,
        layoutBlockChild.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::layoutBlockChild):
        * rendering/RenderBlock.h:

2009-08-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Made subframeForHitTargetNode a public static method, so WebView can call it
        during hit testing.

        * page/EventHandler.cpp:
        (WebCore::subframeForHitTestResult):
        (WebCore::EventHandler::subframeForTargetNode):
        * page/EventHandler.h:

2009-08-20  Brent Fulgham  <bfulgham@webkit.org>

        Rubberstamped by Kevin Ollivier.

        Check for null bundle before attempting to use it.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::certificatePath): Add null check on return of
          CFBundleGetBundleWithIdentifier.

2009-08-20  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=28497, images and inline replaced elements don't propagate overflow properly on a line.

        Added fast/repaint/inline-block-overflow.html and updated another test.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        (WebCore::InlineFlowBox::computeVerticalOverflow):
        Make sure to still propagate the border box of the replaced element as layout overflow when overflow clip is set on the
        replaced element.  Make sure to use the InlineBox x/y positions instead of the RenderBox x/y, since the position of the
        RenderBox has not been updated to the new values yet.
        
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint):
        Don't use the root line box's overflow.  Use the actual line box overflow values instead.  In the case of an inline
        with a layer, our overflow didn't propagate to the root line, so we always need to use our values.

        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::layout):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::layout):
        Make sure to clear shadow overflow when doing layout of replaced elements, so that we don't leave a stale overflow
        value around if a box-shadow goes away.

2009-08-20  Dmitry Titov  <dimich@chromium.org>

        Another attempt to fix Chromium build.

        * WebCore.gypi: now use the correct name of the image file.

2009-08-20  Dan Bernstein  <mitz@apple.com>

        Make the Windows build even fixeder

        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContextPlatformPrivate::flush):

2009-08-20  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, Chromium build fix.

        * WebCore.gypi: add new Webinspector image files (localStorage.png and sessionStorage.png)

2009-08-20  Dan Bernstein  <mitz@apple.com>

        Windows build fix after the last change

        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::releaseWindowsContext):
        (WebCore::GraphicsContext::drawWindowsBitmap):

2009-08-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Geoffrey Garen.

        Replace many manually-released CFTypeRefs with RetainPtrs
        https://bugs.webkit.org/show_bug.cgi?id=28498

        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::createCGColor):
        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::platformGradient):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformContext):
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::applyFillPattern):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::setURLForRect):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):
        (WebCore::ImageSource::isSizeAvailable):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::repetitionCount):
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameDurationAtIndex):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dataChanged):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::createScratchContext):
        (WebCore::Path::contains):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::BitmapImage::getTIFFRepresentation):
        * platform/mac/ClipboardMac.mm:
        (WebCore::cocoaTypeFromMIMEType):
        (WebCore::MIMETypeFromCocoaType):
        * platform/mac/WebCoreNSStringExtras.mm:
        (stringEncodingForResource):
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::advanceCurrentStream):
        (WebCore::setHTTPBody):
        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::encode):

2009-08-20  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        Output actual values of counters in showTree
        https://bugs.webkit.org/show_bug.cgi?id=28481

        No new tests because this patch just improves debugging outputs.

        * rendering/CounterNode.cpp:
        (WebCore::showTreeAndMark):

2009-08-20  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by NOBODY (build fix).

        Add file missed in last check-in.

        * html/HTMLAttributeNames.in:

2009-08-19  Timothy Hatcher  <timothy@apple.com>

        Adds new icons to the Web Inspector for Local Storage,
        Session Storage and Cookies.

        https://bugs.webkit.org/show_bug.cgi?id=28470

        Reviewed by Eric Seidel.

        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype.addDOMStorage):
        (WebInspector.DOMStorageSidebarTreeElement):
        * inspector/front-end/Images/cookie.png:
        * inspector/front-end/Images/domStorage.png: Removed.
        * inspector/front-end/Images/localStorage.png: Added.
        * inspector/front-end/Images/sessionStorage.png: Added.
        * inspector/front-end/inspector.css:

2009-08-20  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Anders Carlsson.

        HTML5 media elements must fire 'loadend' progress event
        https://bugs.webkit.org/show_bug.cgi?id=28419

        * dom/EventNames.h:
            Define loadend.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseMappedAttribute):
            Deal with onloadend.
        (WebCore::HTMLMediaElement::loadInternal):
            Post 'loadend' immediately after 'abort'.
        (WebCore::HTMLMediaElement::noneSupported):
            Post 'loadend' immediately after 'error'.
        (WebCore::HTMLMediaElement::mediaEngineError):
            Ditto.
        (WebCore::HTMLMediaElement::setNetworkState):
            Post 'loadend' immediately after 'load'.
        (WebCore::HTMLMediaElement::userCancelledLoad):
            Post 'loadend' immediately after 'abort'.

2009-08-20  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        REGESSION(r45316), Crash: WebKit crashes in Google Sites when indenting a table
        https://bugs.webkit.org/show_bug.cgi?id=28474

        This patch fixes a crash when indenting at right after a table.
        The bug was caused by Node* blockNode = enclosingBlock(endOfCurrentParagraph.deepEquivalent().node());
        where node() is equal to blockNode. Because blockNode is the enclosing block node, this patch changes it to
        enclosingBlock(endOfCurrentParagraph.deepEquivalent().node()->parentNode());

        Test: editing/execCommand/indent-right-after-table.html

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentRegion): Fixed so that blockNode != endOfCurrentParagraph.deepEquivalent().node()

2009-08-20  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by David Levin.

        Render disabled mute button during an error or if no audio is present.

        https://bugs.webkit.org/show_bug.cgi?id=28475

        Covered by existing layout tests:
        media/video-controls-visible-audio-only.html
        media/video-no-audio.html

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintMediaMuteButton):

2009-08-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7154605> Loading page with 1px wide <select> makes the
        toolbar go blank
        and
        <rdar://problem/7154521> Lots of "<Error>: doClip: empty path." spew in
        the console with certain content

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonGradients): Return early
        if the rectangle is empty. Use RenderStyle::getBorderRadiiForRect() to
        adjust the radii in case the sides of the rectangle are smaller than sum
        of the radii, so that the gradient background matches the border (which
        already uses getBorderRadiiForRect()). Check if bottomGradient is empty
        to avoid clipping to an empty path.
        (WebCore::RenderThemeMac::paintMenuListButton): Moved a
        GraphicContext::save() down to avoid a save/restore imbalance in the
        early return case.

        * rendering/RenderThemeSafari.cpp: Made the same changes.
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintMenuListButton):

2009-08-20  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha.

        [Gtk][REGRESSION] XHR test failures after r45558
        https://bugs.webkit.org/show_bug.cgi?id=27143

        Disable sniffing if it's explicitly requested. Updated patch
        originally by Gustavo Noronha.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::statusWillBeHandledBySoup):
        (WebCore::gotHeadersCallback):
        (WebCore::contentSniffedCallback):
        (WebCore::gotChunkCallback):
        (WebCore::startHttp):

2009-08-20  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Swap the pixels since QImage expect ARGB while ImageData
        stores them as RGBA.

        This fixes the fast/canvas/canvas-copyPixels.html test.

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::putImageData):

2009-08-20  Christian Plesner Hansen  <christian.plesner.hansen@gmail.com>

        Reviewed by David Levin.

        [v8] Use atomic string caching for createElement
        Extend atomic string caching to createElement.  Fix a bug in idl
        parser that caused incorrect parsing if a function argument
        attribute list contained a comma.
        https://bugs.webkit.org/show_bug.cgi?id=28449

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/IDLParser.pm:
        * bindings/v8/V8Binding.h:
        (WebCore::v8ValueToAtomicWebCoreStringWithNullCheck):
        * dom/Document.idl:

2009-08-20  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Not reviewed, build fix after r47515.

        [Qt] There is no Phonon::MediaObject::hasAudio() function.

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::hasAudio): Assume true.

2009-08-20  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28483
        The V8 ScriptController's cleanupScriptObjectsForPlugin should take a
        Widget* instead of void* to avoid the need for manual casting to Widget*
        at the callsite.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::cleanupScriptObjectsForPlugin):
        * bindings/v8/ScriptController.h:

2009-08-19  David Levin  <levin@chromium.org>

        Unreviewed speculative build fix for qt.

        * page/OriginAccessEntry.cpp:

2009-08-19  Aaron Boodman  <aa@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=24853: Provide a way for WebKit clients to
        specify a more granular policy for cross-origin XHR access.

        Tests: http/tests/xmlhttprequest/origin-whitelisting-all.html
               http/tests/xmlhttprequest/origin-whitelisting-exact-match.html
               http/tests/xmlhttprequest/origin-whitelisting-https.html
               http/tests/xmlhttprequest/origin-whitelisting-ip-addresses-with-subdomains.html
               http/tests/xmlhttprequest/origin-whitelisting-ip-addresses.html
               http/tests/xmlhttprequest/origin-whitelisting-subdomains.html

        * WebCore.base.exp: Export methods to manipulate origin access whitelists to enable
        testing via layout tests.

        * WebCore.xcodeproj/project.pbxproj: Add OriginAccessEntry.*
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCoreSources.blk: Ditto.

        * page/SecurityOrigin.h: Implement origin access whitelists.
        (WebCore::originAccessMap): Static getter for access whitelists.
        (WebCore::SecurityOrigin::canRequest): Modify request checking logic to check whitelists.
        (WebCore::SecurityOrigin::whiteListAccessFromOrigin): Add an entry to a whitelist.
        (WebCore::SecurityOrigin::resetOriginAccessWhiteLists): Clear all the whitelists.

        * page/OriginAccessEntry.h: Added. An entry in an origin access whitelist.
        * page/OriginAccessEntry.cpp: Ditto.

2009-08-19  Kevin Ollivier  <kevino@theolliviers.com>

        Non-precomp headers build fix.

        * platform/image-decoders/ImageDecoder.cpp:

2009-08-19  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Disable a bad SKIA assert
        https://bugs.webkit.org/show_bug.cgi?id=28482

        In http://trac.webkit.org/changeset/47386/ an assert was "fixed" in SKIA code. 
        When this was pulled into Chromium, it started breaking the page cycler. 
        Disable it again until we can figure out what's going on.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::setupPaintCommon):

2009-08-19  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        queryCommandState('underline') returns false if the selected text is also bold and italic
        https://bugs.webkit.org/show_bug.cgi?id=11022

        This patch modifies stateStrikethrough and stateUnderline to use the value -webkit-text-decorations-in-effect
        instead of text-decoration.  Because text-decoration only retrieves explicit styling at the node on which
        the query was sent, we need to use -webkit-text-decorations-in-effect to include decorations added by ancestors
        and also u, s, and strike tags.

        Test: editing/style/text-decoration-state.html

        * editing/EditorCommand.cpp:
        (WebCore::stateStrikethrough): Use -webkit-test-decorations-in-effect instead of text-decoration.
        (WebCore::stateUnderline): Ditto.

2009-08-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        - Fix <rdar://problem/7155710>
        HTML selects on windows cause containing window to become inactive when opened.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        Pass SWP_NOACTIVATE to SetWindowPos, remove AW_ACTIVATE from AnimateWindow and pass
        SW_SHOWNOACTIVATE to ShowWindow.
        
        (WebCore::PopupWndProc):
        Prevent mouse activation from activating the window.

2009-08-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Images flash as you hover them on http://www.atebits.com/scribbles/
        <rdar://problem/7143958>
        
        Tag images with the device colorspace with the colorspace of the main display, rather than
        GenericRGB, so that composited images color-match those rendered via Core Graphics.
        
        Covered by LayoutTests/compositing/color-matching/image-color-matching.html

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setContentsToImage):

2009-08-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt and Dan Bernstein.

        - Fix <rdar://problem/7152589> Stylable scrollbar corners aren't working.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        Initialize m_scrollCorner.

        (WebCore::FrameView::~FrameView):
        Assert that m_scrollCorner is null.

        (WebCore::FrameView::detachCustomScrollbars):
        Destroy m_scrollCorner.

        (WebCore::FrameView::invalidateScrollCorner):
        Invalidate the scroll corner.
        
        (WebCore::FrameView::updateScrollCorner):
        Create/destroy the scroll corner.
        
        (WebCore::FrameView::paintScrollCorner):
        Paint the scroll corner.
        
        * page/FrameView.h:
        (WebCore::FrameView::isFrameViewScrollCorner):
        Return whether a RenderScrollbarPart is the frame view scroll corner.
        
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):
        Go ahead and update the scroll corner.
        
        (WebCore::ScrollView::setScrollbarsSuppressed):
        Pass the scroll corner rect to invalidateRect.
        
        (WebCore::ScrollView::scrollCornerRect):
        Return the scroll corner rect.
        
        * platform/ScrollView.h:
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::imageChanged):
        If this scrollbar part is the frame view scroll corner, invalidate it.

2009-08-19  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        SVG feComponentTransfer needs to be implemented
        [https://bugs.webkit.org/show_bug.cgi?id=27768]

        Implementation of SVG Filter feComponentTransfer.

        There is already a test case
        Test: svg/W3C-SVG-1.1/filters-comptran-01-b.svg

        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::identity):
        (WebCore::table):
        (WebCore::discrete):
        (WebCore::linear):
        (WebCore::gamma):
        (WebCore::FEComponentTransfer::apply):

2009-08-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/7141522> Incorrect layout of product table at henry.com

        Test: fast/block/basic/quirk-percent-height-table-cell.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcPercentageHeight): Tweak the quirk that allows
        percentage-height children of auto-height blocks to look for an ancestor
        with non-auto height and compute their height based on it. The change is
        that if that ancestor is a table cell, it is ignored and the percent
        height computes to zero (just like in strict mode). This matches Firefox
        and IE.

2009-08-19  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Eric Seidel.

        Add 'icu::' qualifier when refering to ICU C+names to the other
        file with this issue missed in the previous check-in.

        https://bugs.webkit.org/show_bug.cgi?id=28410

        No change in the test result.

        * platform/graphics/chromium/FontUtilsChromiumWin.cpp:
        (WebCore::):

2009-08-19  Peter Kasting  <pkasting@google.com>

        Unreviewed (build fix for Skia).

        https://bugs.webkit.org/show_bug.cgi?id=28268

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawLine):

2009-08-19  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Eric Seidel.

        [CAIRO] Remove setFont indirection
        https://bugs.webkit.org/show_bug.cgi?id=28453

        Remove the indirection and just set the font in Font::drawGlyphs.

        * platform/graphics/SimpleFontData.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/gtk/FontPlatformData.h:
        (WebCore::FontPlatformData::scaledFont):
        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData::~FontPlatformData):
        * platform/graphics/gtk/FontPlatformDataPango.cpp:
        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        * platform/graphics/win/FontPlatformData.h:
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        * platform/graphics/win/SimpleFontDataCairoWin.cpp:

2009-08-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: When adding style selector, generate default name based
        on id / class / type.

        https://bugs.webkit.org/show_bug.cgi?id=28468

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.appropriateSelectorForNode):

2009-08-19  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        Rename combinedOverflow to visibleOverflow, since that's what it actually represents.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paint):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::topvisibleOverflow):
        (WebCore::InlineFlowBox::bottomvisibleOverflow):
        (WebCore::InlineFlowBox::leftvisibleOverflow):
        (WebCore::InlineFlowBox::rightvisibleOverflow):
        (WebCore::InlineFlowBox::visibleOverflowRect):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::floatRect):
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::matchedEndLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clippedOverflowRectForRepaint):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::visibleOverflowRect):
        (WebCore::RenderBox::topvisibleOverflow):
        (WebCore::RenderBox::bottomvisibleOverflow):
        (WebCore::RenderBox::leftvisibleOverflow):
        (WebCore::RenderBox::rightvisibleOverflow):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::localBoundingBox):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint):
        (WebCore::RenderLineBoxList::hitTest):
        * rendering/RenderOverflow.h:
        (WebCore::RenderOverflow::visibleOverflowRect):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        (WebCore::RenderReplaced::clippedOverflowRectForRepaint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::paint):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):

2009-08-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Eric Seidel.

        Sound button appears in controller with movies that have no audio
        https://bugs.webkit.org/show_bug.cgi?id=28464

        Test: media/video-no-audio.html

        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::hasAudio):
            Added hasAudio.

        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::hasAudio):
        (WebCore::MediaPlayer::hasVideo):
            Make const.
        (WebCore::MediaPlayer::hasAudio):
            Added hasAudio.

        * platform/graphics/MediaPlayerPrivate.h:
            Add hasAudio.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::hasAudio):
            Ditto.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::hasAudio):
            Ditto.

        * platform/graphics/qt/MediaPlayerPrivatePhonon.h:
        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::hasAudio):
            Ditto.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::hasAudio):
            Ditto.

        * platform/graphics/win/QTMovieWin.h:
        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::hasAudio):
            Ditto.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlMuteButtonElement::disabled):
            New, return true if media element doesn't have audio.
        (WebCore::MediaControlMuteButtonElement::rendererIsNeeded):
            Renderer is not needed if element has no audio.
        * rendering/MediaControlElements.h:
        (WebCore::MediaControlInputElement::disabled):

        * rendering/RenderThemeMac.mm:
        (WebCore::getMediaUIPartStateFlags):
            Return MediaUIPartDisabledFlag if node is disabled.
            

2009-08-19  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27357
        Removed the two unnecessary overridden willValidate() methods introduced
        in r47444.

        * html/HTMLKeygenElement.h:
        * html/HTMLObjectElement.h:

2009-08-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Allow dumping dangling nodes to the console.

        https://bugs.webkit.org/show_bug.cgi?id=28458

        * bindings/js/JSInspectorBackendCustom.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8InspectorBackendCustom.cpp:
        * inspector/InspectorBackend.cpp:
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::clearConsoleMessages):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::releaseDanglingNodes):
        (WebCore::InspectorDOMAgent::startListening):
        (WebCore::InspectorDOMAgent::stopListening):
        (WebCore::InspectorDOMAgent::handleEvent):
        (WebCore::InspectorDOMAgent::bind):
        (WebCore::InspectorDOMAgent::unbind):
        (WebCore::InspectorDOMAgent::pushDocumentToFrontend):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::setDetachedRoot):
        (WebCore::InspectorFrontend::childNodeCountUpdated):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._formatnode):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._setDetachedRoot):
        (WebInspector.DOMAgent.prototype._childNodeCountUpdated):
        (WebInspector.setDetachedRoot):
        (WebInspector.childNodeCountUpdated):
        (InspectorController.pushNodeToFrontend):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.pushNodeToFrontend):
        (InjectedScript.createProxyObject):

2009-08-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=27464
        Implement application cache online whitelist wildcard flag

        Test: http/tests/appcache/whitelist-wildcard.html

        A "*" in NETWORK section means that network loading needn't be blocked.

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::isURLInOnlineWhitelist):
        * loader/appcache/ApplicationCache.h:
        (WebCore::ApplicationCache::setAllowsAllNetworkRequests):
        (WebCore::ApplicationCache::allowsAllNetworkRequests):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::openDatabase):
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::loadCache):
        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest):
        * loader/appcache/ManifestParser.h:

2009-08-19  Brady Eidson <beidson@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/7042555> Loading certain pages on Tiger will start a spurious download
        
        Get rid of method swizzling entirely. This created problems when lower level
        Foundation code would call into our own swizzled method.
        
        * platform/network/mac/ResourceHandleMac.mm: 
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]): 
        * platform/network/mac/WebCoreURLResponse.h:
        * platform/network/mac/WebCoreURLResponse.mm:
        (-[NSURLResponse adjustMIMETypeIfNecessary]):

2009-08-19  Adam Roben  <aroben@apple.com>

        Fix linker warnings on Windows

        Reviewed by Anders Carlsson.

        Fixes <http://webkit.org/b/28462> WebCore causes linker warnings on
        Windows about multiply-defined JSHTMLDataListElement symbols

        * WebCore.vcproj/WebCore.vcproj: Exclude JSHTMLDataListElement.cpp
        from the build (just like we do for the other generated bindings
        files) so that we don't get warnings about multiply-defined symbols in
        JSHTMLDataListElement.cpp and DerivedSources.cpp. Also removed
        duplicate versions of JSSVGElementWrapperFactory.cpp, and let VS
        reorder a few files.

2009-08-19  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Eric Seidel

        Add 'icu::' qualifier when refering to ICU C+names.

        https://bugs.webkit.org/show_bug.cgi?id=28410

        No change in the test result.

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::fontContainsCharacter):

2009-08-19  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        Cleanup from my patch thet rewrote overflow.  Remove unused member variables from RenderTableSection and
        move the addition of overflow from children into a separate pass after the height of the section has been
        set.  This prevents the RenderOverflow struct from being aggressively allocated for all table sections.
        (Not a a correctness issue, just a memory issue.)

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderTableSection.h:

2009-08-19  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        [Gtk] Remove bogus dependency rules for built sources that derive
        from HTMLTagNames.in, HTMLAttributeNames.in and xmlattrs.in. The
        header files should be generated regardless of whether the source
        file changed or not. We should only rely on the *.in files being
        changed.

        * GNUmakefile.am:

2009-08-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        convert FormatBlock candidate tag list from if chain to hash lookup
        https://bugs.webkit.org/show_bug.cgi?id=28448

        No behavior change, just cleanup.

        * editing/htmlediting.cpp:
        (WebCore::validBlockTag):
        * editing/htmlediting.h:

2009-08-19  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Eric Seidel.

        Update GraphicsContextSkia's version of drawLine to make use of the shared
        adjustLineToPixelBoundaries function and elimination overlapping code.

        https://bugs.webkit.org/show_bug.cgi?id=28268

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawLine):

2009-08-18  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Eric Seidel.

        Style fixes based on cpp_style.py and WebKit Style guide for
        GraphicsContextSkia.cpp

        https://bugs.webkit.org/show_bug.cgi?id=28268

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::setLineDash):
        (WebCore::GraphicsContext::setPlatformShadow):

2009-08-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=28446
        Custom request headers shouldn't be sent with cross-origin preflight request

        Tests: http/tests/xmlhttprequest/access-control-preflight-headers-async.html
               http/tests/xmlhttprequest/access-control-preflight-headers-sync.html

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequestWithPreflight):
        Don't copy headers to OPTIONS request. The spec is vague about this, but the intention was
        that they shouldn't be sent, and Firefox doesn't send them.

2009-08-18  John Gregg  <johnnyg@google.com>

        Reviewed by Dimitri Glazkov.

        V8 Bindings for Desktop Notifications feature.
        https://bugs.webkit.org/show_bug.cgi?id=28271

        * WebCore.gypi: 
        added notification files to build (all still behind a flag that's not on)
        * bindings/scripts/CodeGeneratorV8.pm:
        added special case in DOMWindow/AppCache style for named event handlers
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/V8Proxy.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::convertToV8Object):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8NotificationCenterCustom.cpp: Added.
        * notifications/Notification.h:
        made event handler routines public (as they are in DOMWindow, eg) for
        binding access.
        * notifications/NotificationCenter.idl:
        needed to make methods V8Custom to support different behaviors in 
        worker/page context in chromium. 
        * workers/WorkerThread.h:
        (WebCore::WorkerThread::getNotificationPresenter):
        (WebCore::WorkerThread::setNotificationPresenter):
        needed to make these methods public as well so chromium can inject
        the notification presenter into the worker thread.

2009-08-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.

        - Implement HTML5 nav element
        https://bugs.webkit.org/show_bug.cgi?id=27937

        <nav> should behave essentially the same as <div> for parsing
        etc. This is implemented by the changes below.
        
        Tests: fast/html/nav-element.html

        * css/html.css:
        * editing/htmlediting.cpp:
        (WebCore::validBlockTag):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::tagPriority):
        (WebCore::blockTagList):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::getNode):
        * html/HTMLTagNames.in:

2009-08-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adele Peterson, David Hyatt and Dan Bernstein.

        - Fix <rdar://problem/7152727>

        If a page has custom scroll bars, they will not update correctly when the window is activated/deactivated.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::hasCustomScrollbars):
        Check if the frame view or any of its subviews have custom scroll bars.
        
        (WebCore::FrameView::updateControlTints):
        Go ahead and update control tints if the frame view has custom scroll bars.
        
        * page/FrameView.h:

2009-08-18  Mark Rowe  <mrowe@apple.com>

        Roll out r47477 as it introduced assertion failures and crashes on the build bots.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/Database.cpp:
        * storage/Database.h:
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        * storage/DatabaseThread.h:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::runCurrentStatement):
        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback):
        (WebCore::SQLTransaction::postflightAndCommit):
        * storage/SQLTransactionClient.cpp: Removed.
        * storage/SQLTransactionClient.h: Removed.

2009-08-18  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Adding the SharedTimer file for WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=28126

        * platform/haiku/SharedTimerHaiku.cpp: Added.
        (WebCore::):
        (WebCore::SharedTimerHaiku::SharedTimerHaiku):
        (WebCore::SharedTimerHaiku::~SharedTimerHaiku):
        (WebCore::SharedTimerHaiku::instance):
        (WebCore::SharedTimerHaiku::start):
        (WebCore::SharedTimerHaiku::stop):
        (WebCore::SharedTimerHaiku::Filter):
        (WebCore::setSharedTimerFiredFunction):
        (WebCore::setSharedTimerFireTime):
        (WebCore::stopSharedTimer):

2009-08-18  Mark Rowe  <mrowe@apple.com>

        Release build fix.

        * xml/XMLHttpRequest.cpp: Sprinkle some #ifndef NDEBUG around.
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::~XMLHttpRequest):

2009-08-18  Aaron Boodman  <aa@chromium.org>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=28412: Leak of WebCore::XMLHttpRequest object during layout tests.

        No new tests: Already covered by existing tests.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest): Add instrumentation for this kind of leak.
        (WebCore::XMLHttpRequest::~XMLHttpRequest): Ditto.
        (WebCore::XMLHttpRequest::createRequest): Only setPendingActivity() if we actually started a request. Also,
        restore a call to nonCacheRequestInFlight() that got lost in a recent refactor.

2009-08-18  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Added a client to SQLTransaction. In addition to being a place to
        get notifications about certain events in a transaction, it is
        also an abstraction layer that allows us to plug in different
        implementations for each port for how transactions interract with
        the main DB. For example, WebCore's default implementation will
        make direct calls to DatabaseTracker's methods. At the same time,
        Chromium's implementation will send IPCs to the browser process
        whenever a transaction needs something from the main DB.

        All storage tests pass.

        https://bugs.webkit.org/show_bug.cgi?id=27967

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/Database.cpp:
        (WebCore::Database::transactionClient):
        * storage/Database.h:
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        * storage/DatabaseThread.h:
        (WebCore::DatabaseThread::transactionClient):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::runCurrentStatement):
        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback):
        (WebCore::SQLTransaction::postflightAndCommit):
        * storage/SQLTransactionClient.cpp: Added.
        * storage/SQLTransactionClient.h: Added.

2009-08-18  Julie Parent  <jparent@chromium.org>

        Not reviewed, build fix for Chromium.

        Final change for v8 corresponding to http://trac.webkit.org/changeset/47469.

        * bindings/v8/custom/V8HTMLFrameElementCustom.cpp: Added missing using statment

2009-08-18  Julie Parent  <jparent@chromium.org>

        Not reviewed, build fix for Chromium.

       More corresponding changes to V8 from http://trac.webkit.org/changeset/47469.

        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER): Use srcAttr instead of the src function.

2009-08-18  Julie Parent  <jparent@chromium.org>

        Not reviewed, build fix for Chromium.

        Make corresponding changes to V8 from http://trac.webkit.org/changeset/47469.

        * bindings/v8/custom/V8HTMLFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER): Use srcAttr instead of the src function.

2009-08-18  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::getIdentifierValue):

2009-08-18  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        More work on making DOM classes start with reference count of 1
        https://bugs.webkit.org/show_bug.cgi?id=28068

        Some related clean-up and preparation steps so the subsequent
        patches will be as small as possible.

        * WebCore.base.exp: Sorted this file.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityDescription):
        Use nameAttr instead of the name function.

        * bindings/js/JSHTMLFrameElementCustom.cpp:
        (WebCore::JSHTMLFrameElement::setSrc):
        Use srcAttr instead of the src function.

        * bindings/js/JSHTMLIFrameElementCustom.cpp:
        (WebCore::JSHTMLIFrameElement::setSrc):
        Use srcAttr instead of the src function.

        * bindings/objc/DOM.mm: Sorted includes.
        * dom/Document.cpp: Ditto.

        * dom/StyledElement.cpp: Made invalidateStyleAttribute inline.
        * dom/StyledElement.h: Ditto.

        * dom/make_names.pl: Changed default of createWithNew to 0.
        Eventually all elements will be created with create instead of new.

        * html/HTMLTagNames.in:
        * svg/svgtags.in:
        * wml/WMLTagNames.in:
        Added createWithNew for every tag. We'll remove it as we convert
        element classes to use create.

        * html/HTMLAppletElement.h: Removed unneeded forward declarations.
        * html/HTMLFrameElement.h: Ditto.

        * html/HTMLEmbedElement.cpp: Removed many attribute get and
        set functions.
        * html/HTMLEmbedElement.h: Ditto.
        * html/HTMLIFrameElement.cpp: Ditto.
        * html/HTMLIFrameElement.h: Ditto.
        * html/HTMLObjectElement.cpp: Ditto.
        * html/HTMLObjectElement.h: Ditto.
        * html/HTMLPlugInElement.cpp: Ditto.
        * html/HTMLPlugInElement.h: Ditto.

        * html/HTMLFrameElementBase.cpp: Removed many attribute get and
        set functions.
        (WebCore::HTMLFrameElementBase::location): Changed to use
        srcAttr instead of src.
        * html/HTMLFrameElementBase.h: Removed many attribute get and set
        functions.

        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        Use srcAttr and typeAttr instead of setSrc and setType.
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::createDocumentStructure): Ditto.

        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget): Use nameAttr instead
        of name -- this avoids an extra AtomicString round trip and a little
        ref count churn too.

2009-08-18  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        SharedWorkers need to support loading.
        https://bugs.webkit.org/show_bug.cgi?id=28342

        Added loader support to shared workers, and refactored worker tests to also test SharedWorkers

        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::postTaskToLoader):
        Forwards load requests to an arbitrary document from the list of worker's documents.
        (WebCore::SharedWorkerProxy::postTaskForModeToWorkerContext):
        Posts responses back to the shared worker thread.

2009-08-18  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        StyleChange::init needs clean up before fixing the bug 23892
        https://bugs.webkit.org/show_bug.cgi?id=27749

        This patch simplifies StyleChange::init by removing the iteration on CSS properties,
        and adding functions reconcileTextDecorationProperties and extractTextStyle to handle the style.

        Because there is a bug in how text decorations are processes in getPropertiesNotInComputedStyle,
        this patch simplifies the treatment in order to preserve the original behavior of WebKit.
        However, the current implementation is not best (adds redundant text-decorations) and we should fix it later.

        No test is added since there is no change in behavior.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::init): Uses getPropertiesNotInComputedStyle instead of iterating through the properties
        (WebCore::StyleChange::reconcileTextDecorationProperties): Removes -webkit-text-decorations-in-effects and redundant "none"
        (WebCore::getIdentifierValue): Obtains the identifier of a CSSPrimitiveValue
        (WebCore::StyleChange::extractTextStyles): Converts properties in style to m_apply* and removes the property
        (WebCore::getPropertiesNotInComputedStyle): Fixed a bug with how text decorations are treated

2009-08-18  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fixing a DB file naming bug in Chromium. The origin should come
        before the DB name in the file name.

        https://bugs.webkit.org/show_bug.cgi?id=28331

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::fullPathForDatabase):

2009-08-18  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Adding four image-specific files to WebCore:
        IconHaiku.cpp, ImageBufferData.h, ImageBufferHaiku.cpp, ImageHaiku.cpp
        https://bugs.webkit.org/show_bug.cgi?id=28130

        * platform/graphics/Icon.h:
        * platform/graphics/haiku/IconHaiku.cpp: Added.
        (WebCore::Icon::~Icon):
        (WebCore::Icon::createIconForFile):
        (WebCore::Icon::createIconForFiles):
        (WebCore::Icon::paint):
        * platform/graphics/haiku/ImageBufferData.h: Added.
        * platform/graphics/haiku/ImageBufferHaiku.cpp: Added.
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):
        (WebCore::ImageBuffer::context):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        (WebCore::ImageBuffer::toDataURL):
        (WebCore::ImageBuffer::image):
        (WebCore::ImageBuffer::platformTransformColorSpace):
        * platform/graphics/haiku/ImageHaiku.cpp: Added.
        (WebCore::FrameData::clear):
        (WebCore::Image::loadPlatformResource):
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::invalidatePlatformData):
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):
        (WebCore::BitmapImage::checkForSolidColor):
        (WebCore::BitmapImage::getBBitmap):

2009-08-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=27575 [CSS3 
        Backgrounds and Borders] Drop the prefix from background-size

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::cssPropertyID):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/animation/AnimationBase.cpp:
        (WebCore::FillLayersPropertyWrapper::FillLayersPropertyWrapper):
        (WebCore::ensurePropertyMap):

2009-08-18  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        SharedWorkers need to forward exceptions to parent documents
        https://bugs.webkit.org/show_bug.cgi?id=28320

        Changed SharedWorkerProxy to have individual mutexes (so workers can interact with their parent documents without contention).

        Updated SharedWorkerProxy to forward exceptions/console messages to all parent documents.

        * bindings/js/JSSharedWorkerConstructor.cpp:
        Cleaned up bitrot - added missing include.
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::postExceptionTask):
        Callback used to deliver exceptions to a document.
        (WebCore::SharedWorkerProxy::postExceptionToWorkerObject):
        Forwards exceptions to all parent documents for presentation to the user.
        (WebCore::postConsoleMessageTask):
        (WebCore::SharedWorkerProxy::postConsoleMessageToWorkerObject):
        Forwards console messages to all parent documents for presentation to the user.
        (WebCore::SharedWorkerProxy::addToWorkerDocuments):
        Grabs the mutex before accessing workerDocuments.
        (WebCore::SharedWorkerProxy::documentDetached):
        Grabs the mutex before accessing workerDocuments.

2009-08-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/7135588> HTMLMediaElement should ask WebPolicyLoadDelegate before loading resource
        
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isSafeToLoadURL):
        Call FrameLoaderClient::shouldLoadMediaElementURL.
        
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::shouldLoadMediaElementURL):
        Return true by default.

2009-08-18  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        openDatabase() should not execute any SQL statement on the
        database it's trying to open, unless there are no other open
        handles to the same database. Otherwise, we might run into a
        deadlock.

        Test: storage/open-database-while-transaction-in-progress.html

        https://bugs.webkit.org/show_bug.cgi?id=28207

        * storage/Database.cpp:
        (WebCore::Database::performOpenAndVerify):

2009-08-18  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        SVG Filter feBlend implementation missing
        [https://bugs.webkit.org/show_bug.cgi?id=28133]

        Implementation of SVG Filter feBlend.

        FilterEffect.cp needed changes to optimize the rendering. With the old code
        we drew a subEffect on the current FilterEffect by drawImage, got the PixelArray,
        cleared the drawing area, drew the next FilterEffect with drawImage and picked this
        PixelArray again. This was unefficient and slow. Now we calculate the requested area
        of the subEffect and ask the FilterEffect's ImageBuffer for the PixelArray directly,
        without any drawing operations on GraphicsContext.

        There is already a test case
        Test: svg/W3C-SVG-1.1/filters-blend-01-b.svg

        * html/canvas/CanvasPixelArray.h:
        (WebCore::CanvasPixelArray::set):
        (WebCore::CanvasPixelArray::get):
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::unknown):
        (WebCore::normal):
        (WebCore::multiply):
        (WebCore::screen):
        (WebCore::darken):
        (WebCore::lighten):
        (WebCore::FEBlend::apply):
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::calculateDrawingIntRect):
        * platform/graphics/filters/FilterEffect.h:

2009-08-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Fix array formatter followup: node formatter.

        https://bugs.webkit.org/show_bug.cgi?id=28427

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._format):

2009-08-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Metrics sidebar broken

        https://bugs.webkit.org/show_bug.cgi?id=28434

        * inspector/front-end/MetricsSidebarPane.js:

2009-08-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=28432
        String::createCFString() returns a non-retained empty string

        No known change in functionality, so no test.

        * platform/text/cf/StringCF.cpp: (WebCore::String::createCFString): Retain the CFSTR result.
    
2009-08-18  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Oliver Hunt.

        Fix of <https://bugs.webkit.org/show_bug.cgi?id=28326> DRT on Windows doesn't support 
        LayoutTestController::setQuota or print a callback on UIDelegate::exceededDatabaseQuota.
        
        Removed an early return that can cause deleteOrigin or deleteAllDatabases to fail when
        it doesn't have to.

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteOrigin):

2009-08-18  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=27357
        Support for :valid and :invalid CSS selectors, from HTML5 specs.
        http://www.whatwg.org/specs/web-apps/current-work/#selector-valid

        Tests: fast/css/pseudo-invalid-001.html
               fast/css/pseudo-invalid-002.html
               fast/css/pseudo-valid-001.html
               fast/css/pseudo-valid-002.html
               fast/css/pseudo-valid-003.html
               fast/css/pseudo-valid-004.html
               fast/css/pseudo-valid-005.html
               fast/css/pseudo-valid-006.html
               fast/css/pseudo-valid-007.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType): extracts new pseudo-classes
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement): Make sure we don't share style between
form controls that have different validity states.
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): applies
        style associated to new pseudo-classes
        * dom/Element.h:
        (WebCore::Element::willValidate): pushed up in hierarchy
        (WebCore::Element::isValidFormControlElement): checks for valid form
        control elements (wraps ValidityState::valid())
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::willValidate): minor clean up
        (WebCore::HTMLFormControlElement::isValidFormControlElement): ditto
        * html/HTMLFormControlElement.h:
        * html/HTMLKeygenElement.h:
        (WebCore::HTMLKeygenElement::willValidate): added
        * html/HTMLObjectElement.h:
        (WebCore::HTMLObjectElement::willValidate): added
        * html/HTMLObjectElement.idl:

2009-08-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Fix array formatter.

        https://bugs.webkit.org/show_bug.cgi?id=28427

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._formatarray):

2009-08-17  Joe Mason  <joe.mason@torchmobile.com>

        Reviewed by George Staikos

        Replace repeated string of PLATFORM(FOO) with a single define
        https://bugs.webkit.org/show_bug.cgi?id=27734

        * loader/CachedFont.cpp:
        (WebCore::CachedFont::~CachedFont):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::platformDataFromCustomData):
        (WebCore::CachedFont::allClientsRemoved):

2009-08-16  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=20329, shadows and reflections incorrectly
        considered part of scrollable overflow.

        This patch takes the engine's concept of overflow and splits it into two types:
        layout overflow and visual overflow.
        
        Layout overflow is about other boxes that spill out of an enclosing box,  For example,
        in the inline flow case a tall image could spill out of a line box. Examples of 
        visual overflow are shadows, text stroke (and eventually outline and
        border-image).

        Three objects tracked overflow before this patch: RenderBlock had 
        m_overflowLeft/Top/Width/Height variables.  RootInlineBox had an Overflow*
        that also had four overflow values.  Finally RenderReplaced elements tracked shadow/reflection
        overflow using a map that cached four values.
        
        This patch takes all of these different overflow models and unifies them into a single
        new class called RenderOverflow.   This class is now a member variable in RenderBox and
        InlineFlowBoxes.  It is only allocated if overflow actually exists.  Instead of tracking
        four values, it tracks eight: left/top/right/bottom for layout overflow and 
        left/top/right/bottom for visual overflow.
        
        Overflow computation is now done after layout is finished rather than during layout
        (when child objects can be churning and moving around).  A number of layout tests progressed
        by deferring overflow computation to a separate pass.
        
        All inline flow boxes now track overflow (and not just the root line box).  This allows
        repainting of line boxes to actually be tight and bail early if the overflow rect of a box
        doesn't intersect.  The old code always visited all object on a line if the root line box
        intersected at all.
        
        Line box overflow no longer propagates across self-painting layers.  This fixes a number of
        issues with incorrect scrollbars appearing when relative positioned inlines were used in a page.
        
        Layer bounds have been modified to exclude visual overflow.  The width/height members only really
        have one reason for continued existence, and that is that they happen to be used in repaint()
        when an overflow clip object's height isn't accurate.  In this case, the bounds should exclude
        visual overflow anyway, so this change tightens that repaint up.
        
        Root lines have renamed m_selectionTop/Bottom to m_lineTop/Bottom and positionForPoint methods have
        been changed to use these instead of relying on overflow (which was totally wrong).

        Significant changes have been made to the "almost strict mode" line box quirk where objects with no
        text children have no effect on the height of a line.  Instead of making the height() of the objects
        variable and dependent on overflow, the objects now have their full height and get placed on
        the baseline properly.  They simply don't contribute to overflow above lineTop/Bottom.
        
        Reflections are no longer considered overflow of any kind.  Because reflections have their own layers,
        it is not necessary to treat them as visual or layout overflow in the RenderObject tree.  The end result
        of not incorporating them into RenderOverflow is that they have no effect on scrolling.  transparencyClipBox
        has been extended to support fully reflecting the entire clip box when a reflection exists.  This fixes
        numerous repaint bugs in transparent objects with reflections when the transparent objects had self-painting
        sublayers.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner):
        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustViewSize):
        (WebCore::FrameView::adjustPageHeight):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::height):
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::adjustPosition):
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        (WebCore::InlineFlowBox::placeBoxesVertically):
        (WebCore::InlineFlowBox::computeVerticalOverflow):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paint):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (WebCore::InlineFlowBox::topCombinedOverflow):
        (WebCore::InlineFlowBox::bottomCombinedOverflow):
        (WebCore::InlineFlowBox::leftCombinedOverflow):
        (WebCore::InlineFlowBox::rightCombinedOverflow):
        (WebCore::InlineFlowBox::combinedOverflowRect):
        (WebCore::InlineFlowBox::topLayoutOverflow):
        (WebCore::InlineFlowBox::bottomLayoutOverflow):
        (WebCore::InlineFlowBox::leftLayoutOverflow):
        (WebCore::InlineFlowBox::rightLayoutOverflow):
        (WebCore::InlineFlowBox::layoutOverflowRect):
        (WebCore::InlineFlowBox::topVisualOverflow):
        (WebCore::InlineFlowBox::bottomVisualOverflow):
        (WebCore::InlineFlowBox::leftVisualOverflow):
        (WebCore::InlineFlowBox::rightVisualOverflow):
        (WebCore::InlineFlowBox::visualOverflowRect):
        (WebCore::InlineFlowBox::setHorizontalOverflowPositions):
        (WebCore::InlineFlowBox::setVerticalOverflowPositions):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::layout):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::addOverflowFromBlockChildren):
        (WebCore::RenderBlock::handleBottomOfBlock):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::fillInlineSelectionGaps):
        (WebCore::RenderBlock::floatRect):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::positionForPointWithInlineChildren):
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::getHeightForLineCount):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
        (WebCore::RenderBlock::computeVerticalPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::matchedEndLine):
        (WebCore::RenderBlock::addOverflowFromInlineChildren):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::destroy):
        (WebCore::RenderBox::clippedOverflowRectForRepaint):
        (WebCore::RenderBox::localCaretRect):
        (WebCore::RenderBox::addShadowAndReflectionOverflow):
        (WebCore::RenderBox::addOverflowFromChild):
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::addVisualOverflow):
        (WebCore::RenderBox::clearLayoutOverflow):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::combinedOverflowRect):
        (WebCore::RenderBox::topCombinedOverflow):
        (WebCore::RenderBox::bottomCombinedOverflow):
        (WebCore::RenderBox::leftCombinedOverflow):
        (WebCore::RenderBox::rightCombinedOverflow):
        (WebCore::RenderBox::layoutOverflowRect):
        (WebCore::RenderBox::topLayoutOverflow):
        (WebCore::RenderBox::bottomLayoutOverflow):
        (WebCore::RenderBox::leftLayoutOverflow):
        (WebCore::RenderBox::rightLayoutOverflow):
        (WebCore::RenderBox::visualOverflowRect):
        (WebCore::RenderBox::topVisualOverflow):
        (WebCore::RenderBox::bottomVisualOverflow):
        (WebCore::RenderBox::leftVisualOverflow):
        (WebCore::RenderBox::rightVisualOverflow):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::localBoundingBox):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint):
        (WebCore::RenderLineBoxList::hitTest):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        * rendering/RenderObject.h:
        * rendering/RenderOverflow.h: Added.
        (WebCore::RenderOverflow::RenderOverflow):
        (WebCore::RenderOverflow::topLayoutOverflow):
        (WebCore::RenderOverflow::bottomLayoutOverflow):
        (WebCore::RenderOverflow::leftLayoutOverflow):
        (WebCore::RenderOverflow::rightLayoutOverflow):
        (WebCore::RenderOverflow::topVisualOverflow):
        (WebCore::RenderOverflow::bottomVisualOverflow):
        (WebCore::RenderOverflow::leftVisualOverflow):
        (WebCore::RenderOverflow::rightVisualOverflow):
        (WebCore::RenderOverflow::setTopLayoutOverflow):
        (WebCore::RenderOverflow::setBottomLayoutOverflow):
        (WebCore::RenderOverflow::setLeftLayoutOverflow):
        (WebCore::RenderOverflow::setRightLayoutOverflow):
        (WebCore::RenderOverflow::setTopVisualOverflow):
        (WebCore::RenderOverflow::setBottomVisualOverflow):
        (WebCore::RenderOverflow::setLeftVisualOverflow):
        (WebCore::RenderOverflow::setRightVisualOverflow):
        (WebCore::RenderOverflow::layoutOverflowRect):
        (WebCore::RenderOverflow::visualOverflowRect):
        (WebCore::RenderOverflow::combinedOverflowRect):
        (WebCore::RenderOverflow::move):
        (WebCore::RenderOverflow::addLayoutOverflow):
        (WebCore::RenderOverflow::addVisualOverflow):
        (WebCore::RenderOverflow::resetLayoutOverflow):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::layout):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::~RenderReplaced):
        (WebCore::RenderReplaced::layout):
        (WebCore::RenderReplaced::shouldPaint):
        (WebCore::RenderReplaced::positionForPoint):
        (WebCore::RenderReplaced::clippedOverflowRectForRepaint):
        * rendering/RenderReplaced.h:
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::layout):
        (WebCore::RenderScrollbarPart::paintIntoRect):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::layout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::paint):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderTableSection.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForPoint):
        (WebCore::RenderText::localCaretRect):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::addHighlightOverflow):
        (WebCore::RootInlineBox::adjustPosition):
        (WebCore::RootInlineBox::verticallyAlignBoxes):
        (WebCore::RootInlineBox::selectionTop):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::RootInlineBox):
        (WebCore::RootInlineBox::nextRootBox):
        (WebCore::RootInlineBox::prevRootBox):
        (WebCore::RootInlineBox::lineTop):
        (WebCore::RootInlineBox::lineBottom):
        (WebCore::RootInlineBox::selectionBottom):
        (WebCore::RootInlineBox::selectionHeight):
        (WebCore::RootInlineBox::floats):
        (WebCore::RootInlineBox::floatsPtr):
        (WebCore::RootInlineBox::setLineTopBottomPositions):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::layoutInlineBoxes):

2009-08-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=28431
        <rdar://problem/7137610> Application Cache doesn't work with HTTP authentication

        Test: http/tests/appcache/auth.html

        * loader/appcache/ApplicationCacheGroup.h:
        (WebCore::ApplicationCacheGroup::shouldUseCredentialStorage): If appcache is enabled,
        always allow it to use stored credentials (we can't ask WebKit client, and maybe we
        shouldn't ask it, because it's not a document that's loading these resources).

2009-08-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan and David Hyatt.

        Fix <rdar://problem/7147996>

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setHasHorizontalScrollbar):
        (WebCore::ScrollView::setHasVerticalScrollbar):
        Update the style of the scroll bars.
        
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::RenderScrollbar):
        Calculate the size of the scrollbar and set it as the frame size.

2009-08-18  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        HTMLMediaElement should fire 'progress' event before 'load'
        https://bugs.webkit.org/show_bug.cgi?id=28314

        Test: media/progress-event-at-least-one.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setNetworkState):
            Schedule 'progress' event before 'load'.

2009-08-18  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28415
        Set svn:eol-style CRLF on all .sln and .vcproj files that don't already
        have it.

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/WebCoreGenerated.vcproj:

2009-08-18  Drew Wilson  <atwilson@google.com>

        Reviewed by Eric Seidel.

        Need to extend DumpRenderTree to expose number of worker threads
        https://bugs.webkit.org/show_bug.cgi?id=28292

        Expose WorkerThread::workerThreadCount() for DumpRenderTree so we can write worker lifecycle tests.

        Tests: fast/workers/shared-worker-lifecycle.html-disabled
               fast/workers/worker-lifecycle.html

        * WebCore.base.exp:
        Exported WorkerThread::workerThreadCount().
        * WebCore.xcodeproj/project.pbxproj:
        * workers/WorkerThread.cpp:
        Added tracking of the number of worker threads.
        (WebCore::threadCountMutex):
        (WebCore::WorkerThread::workerThreadCount):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::~WorkerThread):
        * workers/WorkerThread.h:

2009-08-18  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Unreviewed, build fix.

        [Qt] Add new files I forgot to add in r47424.

2009-08-18  Markus Goetz <Markus.Goetz@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Implement prefetchDNS() function.

        * WebCore.pro:
        * platform/qt/TemporaryLinkStubs.cpp:

2009-08-18  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Support for parsing <datalist> element and generating HTMLDataListElement nodes.
        https://bugs.webkit.org/show_bug.cgi?id=26915

        Tests: fast/forms/datalist-nonoption-child.html
               fast/forms/datalist.html

        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/build-generated-files.sh:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * css/html.css:
        * html/CollectionType.h:
        (WebCore::):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::itemAfter):
        * html/HTMLDataListElement.cpp: Added.
        (WebCore::HTMLDataListElement::HTMLDataListElement):
        (WebCore::HTMLDataListElement::~HTMLDataListElement):
        (WebCore::HTMLDataListElement::checkDTD):
        (WebCore::HTMLDataListElement::options):
        * html/HTMLDataListElement.h: Added.
        * html/HTMLDataListElement.idl: Added.
        * html/HTMLElement.cpp:
        (WebCore::inlineTagList):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::isAffectedByResidualStyle):
        * html/HTMLTagNames.in:

2009-08-17  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        -webkit-box-orient:horizontal doesn't work on <button> tag
        https://bugs.webkit.org/show_bug.cgi?id=34445

        Make a flexible button's anonymous child flexible and pass the
        parent's box-orient to the anonymous child.

        Also, added a renderName for anonymous flexible boxes.

        Test: fast/flexbox/box-orient-button.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::createAnonymousBlock):
        * rendering/RenderBlock.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::addChild):
        (WebCore::RenderButton::setupInnerStyle):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::renderName):

2009-08-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.
        
        Render -webkit-mask via compositing layers when possible
        https://bugs.webkit.org/show_bug.cgi?id=28414
        
        Implement accelerated compositing of -webkit-mask, when combined
        with already-composited content.
        
        RenderLayerBacking now creates an additional GraphicsLayer for the mask contents,
        and sets this as the mask on another GraphicsLayer via the setMaskLayer() method.
        GraphicsLayerCA then applies the mask using -[CALayer setMask:].
        
        The enum values for GraphicsLayerPaintingPhase were renamed to avoid the
        confusion with "mask", and a new value, GraphicsLayerPaintMask, was added which
        indicates that just the mask is painting.
        
        When painting the composited mask, we need to paint with the normal compositing
        mode rather than CompositeDestinationIn, so InlineFlowBox and RenderBox now consult
        layer()->hasCompositedMask() to pick the mode. If the mask is composited, they no longer
        need to make transparency layers.
        
        We no longer have to throw video rendering into software because of masks.
        
        When a masked element has composited descendants, that element needs to
        become composited so that the mask can be applied via compositing.

        Tests: compositing/masks/masked-ancestor.html
               compositing/masks/simple-composited-mask.html

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::maskLayer):
        (WebCore::GraphicsLayer::setMaskLayer):
        (WebCore::GraphicsLayer::paintingPhase):
        (WebCore::GraphicsLayer::setPaintingPhase):
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::):
        * platform/graphics/mac/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::):
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setMaskLayer):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::commitLayerChanges):
        (WebCore::GraphicsLayerCA::updateMaskLayer):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintMask):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintMaskImages):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hasCompositedMask):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::hasCompositedMask):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::~RenderLayerBacking):
        (WebCore::RenderLayerBacking::destroyGraphicsLayer):
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::updateForegroundLayer):
        (WebCore::RenderLayerBacking::updateMaskLayer):
        (WebCore::RenderLayerBacking::paintingPhaseForPrimaryLayer):
        (WebCore::RenderLayerBacking::setContentsNeedDisplay):
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::hasMaskLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::canAccelerateVideoRendering):
        (WebCore::RenderLayerCompositor::requiresCompositingWhenDescendantsAreCompositing):
        * rendering/RenderLayerCompositor.h:

2009-08-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Layer content misplaced with compositing, z-index and overflow
        https://bugs.webkit.org/show_bug.cgi?id=28361
        
        The foreground GraphicsLayer (used to render element foreground when the element has 
        negative z-order children) was misplaced when there is a clipping layer (which clips
        children). The foreground layer is parented under the clipping layer so that the foreground
        depth-sorts with the layer's children, so its geometry needs to be computed relative to
        that clipping layer.
        
        Also clarified some FIXME comments, and corrected a debug-only layer name.

        Test: compositing/geometry/clipping-foreground.html

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::updateSublayerList):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::updateForegroundLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):

2009-08-17  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Fix leaks of SVGElementInstance seen during regression tests.

        r47313 made TreeShared types start with a ref-count of 1, but SVGElementInstance was mistakenly
        not updated to have a create method that adopted the initial reference.  This lead to the instances
        of SVGElementInstance allocated by SVGUseElement being leaked.

        * svg/SVGElementInstance.h:
        (WebCore::SVGElementInstance::create):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::buildInstanceTree):
        (WebCore::SVGUseElement::handleDeepUseReferencing):

2009-08-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Some cleanup towards https://bugs.webkit.org/show_bug.cgi?id=13631
        Page Cache should support pages with frames.

        - Re-factor all remaining page cache code out of DocumentLoader, as CachedPage/CacheFrame loads
          are solely the responsibility of FrameLoader.
        - Enhance some page cache related Logging to help development.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::identifierForInitialRequest):

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        * loader/DocumentLoader.h:

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::isLoadingFromCachedPage):

2009-08-17  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Eric Seidel.

        Moved implementation of isAfterContent to RenderObject
        (as inline method to avoid potential performance regressions).

        BUG 28376 -  [Cleanup] isAfterContent() implemented twice, should be member of RenderObject
        (https://bugs.webkit.org/show_bug.cgi?id=28376)

        * rendering/RenderBox.cpp:
        * rendering/RenderBox.h:
        * rendering/RenderInline.cpp:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isAfterContent):

2009-08-17  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Assertion failure in WebCore::RenderHTMLCanvas::layout
        https://bugs.webkit.org/show_bug.cgi?id=12052

        Don't handle run-in if the element is not a block element.

        Test: fast/runin/nonblock-runin.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::handleRunInChild):

2009-08-17  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by Darin Adler.

        Fix createImageData to raise the NOT_SUPPORTED_ERR exception when
        either of the arguments are not finite.

        According to
        http://www.whatwg.org/specs/web-apps/current-work/#pixel-manipulation:
        "If any of the arguments to createImageData() or getImageData() are
        infinite or NaN, or if the createImageData()  method is invoked with
        only one argument but that argument is null, the method must instead
        raise a NOT_SUPPORTED_ERR  exception."

        Test: http://philip.html5.org/tests/canvas/suite/tests/2d.imageData.create.nonfinite.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createImageData):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl:

2009-08-17  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Add a way to release the storage lock
        https://bugs.webkit.org/show_bug.cgi?id=28411

        Two scripts within the same origin that are accessing LocalStorage must not do
        it simultaneously, according to the spec.  There are some cases, however, where
        a script might want to override this behavior.  navigator.getStorageUpdates()
        was added for this reason:
        http://dev.w3.org/html5/spec/Overview.html#manually-releasing-the-storage-mutex

        Add this function to navigator and hook it up to DOM Storage.

        * page/Navigator.cpp:
        (WebCore::Navigator::getStorageUpdates):
        * page/Navigator.h:
        * page/Navigator.idl:
        * storage/StorageNamespace.h:
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::unlock):
        * storage/StorageNamespaceImpl.h:

2009-08-17  Mark Rowe  <mrowe@apple.com>

        Build fix.

        CFNetwork isn't present in the framework search path on Mac OS X so we can't directly include its headers.
        We include CoreServices.h, the umbrella framework that contains CFNetwork, from the prefix header which
        results in the CFNetwork headers being included on Mac OS X.  CoreServices.h doesn't include CFNetwork.h on
        Windows though so we explicitly include this header from the prefix header when on Windows.

        * WebCorePrefix.h:
        * platform/network/cf/DNSCFNet.cpp: Remove #include that is no longer needed.

2009-08-17  Alexey Proskuryakov  <ap@apple.com>

        Trying a better build fix (the previous one broke Leopard bots, although it did build for me).

        * platform/network/cf/DNSCFNet.cpp: Include CFNetwork/CFNetwork.h instead.

2009-08-17  Alexey Proskuryakov  <ap@apple.com>

        Trying to fix Windows build.

        * platform/network/cf/DNSCFNet.cpp: Include CFNetwork/CFHost.h.

2009-08-17  Peter Kasting  <pkasting@google.com>

        Reviewed by Steve Falkenburg.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Only add Cygwin to the path when it isn't already there.  This avoids
        causing problems for people who purposefully have non-Cygwin versions of
        executables like svn in front of the Cygwin ones in their paths.

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/WebCoreGenerated.vcproj:

2009-08-17  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=28401
        Add support for DNS prefetching with CFNetwork

        This is just an optimization, no behavior change, so no tests.

        * platform/network/cf/DNSCFNet.cpp:
        (WebCore::clientCallback):
        (WebCore::prefetchDNS):
        Use async CFHostStartInfoResolution() for implementation.

2009-08-17  Aaron Boodman  <aa@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=28313: Combine ThreadableLoaderOptions::crossOriginRequestPolicy and
        ThreadableLoaderOptions::crossOriginRedirectPolicy since they are always set the same way.

        Also, tightened up behavior of XMLHttpRequest with cross-origin redirects and access control. We have not implemented
        redirects access control, so we should never redirect across origins. But in two edge cases, we were:

        * Asynchronous XHR: Script on origin A requests resource from origin B. Server redirects (without sending access control
          authorization headers) to a resource on origin A.
        * Synchronous XHR: Script on origin A requests resource from origin B. Server redirects (without sending access control
          authorization headers) to another resource on origin B (this time sending access control authorization headers).

        Test: http/tests/xmlhttprequest/access-control-and-redirects.html

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::willSendRequest): Refactor redirect checking code into shared location.
        (WebCore::DocumentThreadableLoader::loadRequest): Ditto.
        (WebCore::DocumentThreadableLoader::isAllowedRedirect): Ditto.
        * loader/DocumentThreadableLoader.h:
        * loader/ThreadableLoader.h:
        (WebCore::ThreadableLoaderOptions::ThreadableLoaderOptions): Remove ThreadableLoaderOptions::crossOriginRedirectPolicy.
        * page/EventSource.cpp:
        (WebCore::EventSource::connect): Ditto.
        * workers/Worker.cpp: Ditto.
        (WebCore::Worker::Worker): Ditto.
        * workers/WorkerContext.cpp: Ditto.
        (WebCore::WorkerContext::importScripts): Ditto.
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously): Ditto.
        (WebCore::WorkerScriptLoader::loadAsynchronously): Ditto.
        * workers/WorkerScriptLoader.h: 
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest): Ditto.

2009-08-17  Adam Langley  <agl@google.com>

        Reviewed by Dan Bernstein (relanding of r47157).

        Fix a typo in platform/graphics/skia/PlatformContextSkia.cpp

        https://bugs.webkit.org/show_bug.cgi?id=28172

        This was originally fixed in r47157, however it triggered a bug in
        Skia which caused Chromium Linux to fail layout tests in debug mode.
        It was reverted in r47189 while we sorted it out.

        The Skia bug was fixed in Skia's r321 [1] and rolled into Chromium in
        Chromium's r23523. This is a reland of the original patch.

        No new tests because it's a just typo fix.

        [1] http://code.google.com/p/skia/source/detail?r=321

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::setupPaintCommon):

2009-08-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Protect ResourceHandle for g_file_query_info_async call, using the
        same technique we already use for HTTP requests that take the soup
        path.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::finishedCallback):
        (WebCore::):

2009-08-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r47255): MediaWiki's (including Wikipedia) navigation pane
        appears below the main content
        https://bugs.webkit.org/show_bug.cgi?id=28350

        A particular version of the MediaWiki software detects WebKit through
        user agent sniffing and imports a style sheet called KHTMLFixes.css,
        which contains a single rule that was meant to work around some KHTML
        bug, but currently has the sole effect of causing the float containing
        the main article content to extend all the way to the left and thus push
        down the left navigation pane.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::setCSSStyleSheet): If site specific hacks are
        enabled, check if the imported style sheet is the MediaWiki
        KHTMLFixes.css. If so, remove the offending rule.

2009-08-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Kevin Ollivier.

        Correct crash when processing local cancelled requests.

        No new tests. Existing fast/images/favicon-as-image.html
        displays the problem.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::writeCallback): Add check for m_cancelled after
          performing local-file processing.
        (WebCore::ResourceHandleManager::downloadTimerCallback): Add
          check for m_cancelled after performing local-file processing.

2009-08-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Reverts 47371, since it breaks GTK+.

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::setData):
        * platform/image-decoders/ImageDecoder.cpp: Removed.
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::ImageDecoder):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::convertCMYKToRGBA):
        (WebCore::convertRGBToRGBA):
        (WebCore::JPEGImageDecoder::outputScanlines):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):

2009-08-17  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Adam Treat.

        Allow image decoders to down-sample the image directly
        to scaled output buffer. This can be enabled/disabled by
        macro ENABLE(IMAGE_DECODER_DOWN_SAMPLING).
        Only JPEG and PNG decoders are modified to support it now.
        https://bugs.webkit.org/show_bug.cgi?id=28308

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::setData):
        * platform/image-decoders/ImageDecoder.cpp: Added.
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::ImageDecoder):
        (WebCore::ImageDecoder::setMaxNumPixels):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::convertCMYKToRGBA):
        (WebCore::convertRGBToRGBA):
        (WebCore::JPEGImageDecoder::outputScanlines):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        (WebCore::JPEGImageDecoder::setSize):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):

2009-08-17  Simon Fraser  <simon.fraser@apple.com>

        Build fix: fix float literals to avoid casting warnings.

        * rendering/MediaControlElements.cpp:

2009-08-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel.

        Use OwnPtrs for GraphicsLayers
        https://bugs.webkit.org/show_bug.cgi?id=28399

        Convert RenderLayerBacking and RenderLayerCompositor to use OwnPtrs
        for their references to GraphicsLayers.

        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayer::create):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        (WebCore::RenderLayerBacking::destroyGraphicsLayer):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::updateInternalHierarchy):
        (WebCore::RenderLayerBacking::updateClippingLayers):
        (WebCore::RenderLayerBacking::updateForegroundLayer):
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::graphicsLayer):
        (WebCore::RenderLayerBacking::clippingLayer):
        (WebCore::RenderLayerBacking::ancestorClippingLayer):
        (WebCore::RenderLayerBacking::foregroundLayer):
        (WebCore::RenderLayerBacking::parentForSublayers):
        (WebCore::RenderLayerBacking::childForSuperlayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::~RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::rootPlatformLayer):
        (WebCore::RenderLayerCompositor::didMoveOnscreen):
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):
        (WebCore::RenderLayerCompositor::destroyRootPlatformLayer):
        * rendering/RenderLayerCompositor.h:

2009-08-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Reset InjectedScript styles cache on document change.

        https://bugs.webkit.org/show_bug.cgi?id=28390

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::resetInjectedScript):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setDocument):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/InjectedScript.js:
        (InjectedScript._reset):

2009-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        * rendering/MediaControlElements.cpp: Removed unneeded include of CString.h,
        resorted includes, renamed "doc" to "document" and fixed formatting.

2009-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Removed functions now unneeded due to use of Reflect to create
        language bindings.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityParentForImageMap):
        Get at usemap attribute directly.

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI):
        Get at id attribute directly.
        * editing/EditorCommand.cpp:
        (WebCore::executeInsertHorizontalRule): Ditto.

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::dir): Get at dir attribute of body directly.
        (WebCore::HTMLDocument::setDir): Ditto.

        * html/HTMLElement.cpp: Deleted unused functions.
        * html/HTMLElement.h: Ditto.

        * html/HTMLImageElement.cpp: Deleted unused functions.
        (WebCore::HTMLImageElement::alt): Changed to return const AtomicString&.
        (WebCore::HTMLImageElement::addSubresourceAttributeURLs): Changed to
        get at usemap attribute directly, but added a FIXME because although
        it is what the old code did, it looks to not be entirely correct.

        * html/HTMLImageElement.h: Deleted unused functions.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::altDisplayString): Get at alt attribute directly.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageMap): Get at usemap attribute directly.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer): Get at id attribute
        directly.
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer): Removed
        explicit HTMLNames namespace qualification.

2009-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode): Removed unneeded calls
        to RefPtr::get.

2009-08-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Discard DOM Node bindings on any document change.

        https://bugs.webkit.org/show_bug.cgi?id=28389

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setDocument):

2009-08-13  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: Improve Cookie DataGrid to Show Hidden Data
        https://bugs.webkit.org/show_bug.cgi?id=28269

        * English.lproj/localizedStrings.js: DataGrid Headers "Name", "Value", "Size", ...
        * WebCore.gypi: added missing files

          Implemented Bindings for InspectorController.deleteCookie(name)

        * inspector/InspectorBackend.idl:
        * bindings/js/JSInspectorBackendCustom.cpp:
        (WebCore::JSInspectorBackend::cookies):
        (WebCore::JSInspectorBackend::deleteCookie):

          v8 Bindings Stubs

        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8InspectorBackendCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

          Removed WebInspector.Cookie

        * inspector/front-end/Cookie.js: Removed.
        * inspector/front-end/inspector.html:
        * inspector/front-end/WebKit.qrc:

          Improved DataGrid and Kept Fallback Behavior for Platforms that don't
          yet provide access to raw cookies.

        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView):
        (WebInspector.CookieItemsView.prototype.get statusBarItems):
        (WebInspector.CookieItemsView.prototype.update):
        (WebInspector.CookieItemsView.prototype.buildCookies):
        (WebInspector.CookieItemsView.prototype.dataGridForCookies):
        (WebInspector.CookieItemsView.prototype.fallbackUpdate.callback):
        (WebInspector.CookieItemsView.prototype.fallbackUpdate):
        (WebInspector.CookieItemsView.prototype.fallbackBuildCookiesFromString):
        (WebInspector.CookieItemsView.prototype.fallbackDataGridForCookies):
        (WebInspector.CookieItemsView.prototype._deleteButtonClicked):

          Interaction with the page through Injected Script (for fallback behavior)

        * inspector/front-end/DOMAgent.js:
        (InspectorController.getCookies):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.setStyleProperty): style fix
        (InjectedScript.getCookies):

          Allow alignment of text inside DataGrids.

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid):
        (WebInspector.DataGridNode.prototype.createCell):
        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype.dataGridForDOMStorage):
        * inspector/front-end/inspector.css:

          Added deleteCookie(., ., String name)
          Modified getRawCookies to return a bool to know if its implemented

        * platform/CookieJar.h:


          Implemented deleteCookie for Macs

        * platform/mac/CookieJar.mm:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):

          Stub Implementations for Other Platforms

        * platform/haiku/CookieJarHaiku.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * platform/network/win/CookieJarCFNetWin.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * platform/qt/CookieJarQt.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):

2009-08-17  Adam Treat  <adam.treat@torchmobile.com>

        Blind build fix for Leopard.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::adjustLineToPixelBoundaries):

2009-08-13  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Adam Treat.

        Style fixes based on cpp_style.py and WebKit Style guide for
        GraphicsContextCG.cpp

        https://bugs.webkit.org/show_bug.cgi?id=28268

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::clipToImageBuffer):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::setURLForRect):
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::imageInterpolationQuality):
        (WebCore::GraphicsContext::setPlatformTextDrawingMode):
        (WebCore::GraphicsContext::setCompositeOperation):

2009-08-13  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Adam Treat.

        Style fixes based on cpp_style.py and WebKit Style guide for
        GraphicsContext.cpp/h, GraphicsContextCairo.cpp and GraphicsContextQt.cpp.

        https://bugs.webkit.org/show_bug.cgi?id=28268

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::save):
        (WebCore::GraphicsContext::restore):
        (GraphicsContext::drawText):
        (GraphicsContext::initFocusRing):
        (GraphicsContext::focusRingBoundingRect):
        (GraphicsContext::drawImage):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::toCairoOperator):
        * platform/graphics/qt/GraphicsContextQt.cpp:

2009-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Change HTMLAreaElement to use OwnArrayPtr
        https://bugs.webkit.org/show_bug.cgi?id=28386

        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::HTMLAreaElement): Removed unneeded initializer.
        (WebCore::HTMLAreaElement::~HTMLAreaElement): Removed unneeded delete call.
        (WebCore::HTMLAreaElement::parseMappedAttribute): Use the set function
        instead of deletion followed by assignment.
        * html/HTMLAreaElement.h: Use OwnArrayPtr.

2009-08-17  Darin Adler  <darin@apple.com>

        Fix Windows build.

        * dom/make_names.pl: Add back cast to (void*) needed on Windows.

2009-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Move noResize from HTMLFrameElementBase to HTMLFrameElement
        https://bugs.webkit.org/show_bug.cgi?id=28384

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::HTMLFrameElement): Initialize m_noResize.
        (WebCore::HTMLFrameElement::parseMappedAttribute): Set m_noResize to true
        here if noresizeAttr is changed. This code was moved here from
        HTMLFrameElementBase, but I added some FIXME comments.
        (WebCore::HTMLFrameElement::setNoResize): Set the attribute based on
        boolean argument. Moved here from HTMLFrameElementBase.

        * html/HTMLFrameElement.h: Moved noResize, setNoResize, and m_noResize
        here from HTMLFrameElementBase.

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::HTMLFrameElementBase): Removed m_noResize.
        (WebCore::HTMLFrameElementBase::parseMappedAttribute): Removed code to parse
        noresizeAttr.

        * html/HTMLFrameElementBase.h: Removed noResize, setNoResize, and m_noResize.

2009-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Tweak HTMLFrameElementBase so that m_URL can be private
        https://bugs.webkit.org/show_bug.cgi?id=28385

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::rendererIsNeeded): Removed m_URL argument.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed): Use m_URL instead of
        taking an argument.
        (WebCore::HTMLFrameElementBase::openURL): Removed m_URL argument.
        * html/HTMLFrameElementBase.h: Removed argument from isURLAllowed function.
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::rendererIsNeeded): Removed m_URL argument.

2009-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        HTMLViewSourceDocument should use smart pointers
        https://bugs.webkit.org/show_bug.cgi?id=28378

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument): Don't initialize
        pointers any more since RefPtr starts 0 by default.
        (WebCore::HTMLViewSourceDocument::createContainingTable): Use more specific
        types for local variables.
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName): Return a PassRefPtr,
        and use a RefPtr of a more specific type for a local variable.
        (WebCore::HTMLViewSourceDocument::addLine): Use more specific types for local
        variables, and use RefPtr as well.
        (WebCore::HTMLViewSourceDocument::addLink): Return a PassRefPtr, and use a
        RefPtr of a more specific type for a local variable.

        * html/HTMLViewSourceDocument.h: Change return types to PassRefPtr and
        data member types to RefPtr.

2009-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        DOM attribute getter/setter functions should use const AtomicString& type
        https://bugs.webkit.org/show_bug.cgi?id=25425

        Convert 4 more classes. These are classes I am going to make other changes
        to soon, so it's good to have this use of Reflect in the IDL out of the way.

        * html/HTMLEmbedElement.idl: Use Reflect for many attributes.
        * html/HTMLFrameElement.idl: Ditto.
        * html/HTMLIFrameElement.idl: Ditto.
        * html/HTMLObjectElement.idl: Ditto.

2009-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Script to create element factory needs changes to accommodate calling create
        https://bugs.webkit.org/show_bug.cgi?id=28379

        * dom/make_names.pl: Tweak formatting. Remove lots of unneeded quotes
        around names used inside {}. Added new createWithNew property for tags
        that makes the factory use a create function instead of calling new.
        Renamed functions with initialize in their name to have default in their
        name, since they return an array full of default values and don't themselves
        initialize anything.

2009-08-16  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        StyledElement should use ASCIICType instead of having its own toHex function
        https://bugs.webkit.org/show_bug.cgi?id=28377

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addCSSColor): Use isASCIIHexDigit and toASCIIHexValue.

2009-08-16  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        execCommand("InsertHorizontalRule") inserts a broken <hr> element
        https://bugs.webkit.org/show_bug.cgi?id=28375

        * editing/EditorCommand.cpp:
        (WebCore::executeInsertHorizontalRule): Create an HTMLHRElement
        instead of just an HTMLElement.

2009-08-16  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] <option> element & 'onpick' events - history navigation is broken
        https://bugs.webkit.org/show_bug.cgi?id=28371

        After selecting an option element with an 'onpick' event associated with a 'go' task,
        the navigation is executed. When going back in history, the same 'onpick' event is fired
        again. Fix that problem, add wml/option-element-onpick-recursion.html covering the bug.

        Test: wml/option-element-onpick-recursion.html

        * wml/WMLOptionElement.cpp:
        (WebCore::WMLOptionElement::handleIntrinsicEventIfNeeded):
        * wml/WMLSelectElement.cpp:
        (WebCore::WMLSelectElement::WMLSelectElement):
        (WebCore::WMLSelectElement::selectInitialOptions):
        * wml/WMLSelectElement.h:
        (WebCore::WMLSelectElement::initialized):

2009-08-16  Anthony Ricaud  <rik@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector Resource filtering: keyboard Navigation always uses ALL resources
        https://bugs.webkit.org/show_bug.cgi?id=28231
        
        Determine if a resource is selectable on user action.
        
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.get selectable):

2009-08-16  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/28355> Replace MAX()/MIN() macros with type-safe std::max()/min() templates

        Reviewed by Dan Bernstein.

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (AXAttributeStringSetSpelling): Changed MIN() to min().
        * platform/graphics/mac/FontMacATSUI.mm:
        (WebCore::Font::selectionRectForComplexText): Changed MAX() to
        max() and MIN() to min().
        (WebCore::Font::floatWidthForComplexText): Ditto.
        * platform/graphics/mac/SimpleFontDataMac.mm: Added using
        std::max statement.
        (WebCore::SimpleFontData::platformInit): Changed MAX() to max().
        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::decode): Changed MIN() to min().

2009-08-16  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] Cleanup WMLIntrinsicEventHandling code
        https://bugs.webkit.org/show_bug.cgi?id=28358

        Remove superflous "Event* evt" parameter from executeTask() methods. It's a leftover from the initial WML merge.

        * wml/WMLAnchorElement.cpp:
        (WebCore::WMLAnchorElement::defaultEventHandler):
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::defaultEventHandler):
        * wml/WMLGoElement.cpp:
        (WebCore::WMLGoElement::executeTask):
        * wml/WMLGoElement.h:
        * wml/WMLIntrinsicEventHandler.cpp:
        (WebCore::WMLIntrinsicEventHandler::triggerIntrinsicEvent):
        * wml/WMLPrevElement.cpp:
        (WebCore::WMLPrevElement::executeTask):
        * wml/WMLPrevElement.h:
        * wml/WMLRefreshElement.cpp:
        (WebCore::WMLRefreshElement::executeTask):
        * wml/WMLRefreshElement.h:
        * wml/WMLTaskElement.h:

2009-08-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: A handful of DOMAgent-related fixes and cleanups.

        - renamed elementId to nodeId in operations on nodes.
        - added load listeners to frame owners in InspectorDOMAgent.
        - removed InspectorController::inspectedWindowScriptObjectCleared event.
        - preserved isViaInspector flag for 'via inspector' marker to survive styles update.
        - removed contentDocument-related logic from ElementsPanel since it is handled in
            the InspectorDOMAgent.
        - removed DOM listeners unregistration and corresponding events from InspectorController.
        - made this.styles 'private' in ElementsPanel.
        - added TODO for the handleCopy processing.

        https://bugs.webkit.org/show_bug.cgi?id=28356

        * WebCore.order:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getChildNodes):
        (WebCore::InspectorBackend::setTextNodeValue):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::startListening):
        (WebCore::InspectorDOMAgent::stopListening):
        (WebCore::InspectorDOMAgent::handleEvent):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::getChildNodes):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::setTextNodeValue):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::innerParentNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMDocument.prototype.addEventListener):
        (WebInspector.DOMDocument.prototype.removeEventListener):
        (WebInspector.DOMDocument.prototype._fireDomEvent):
        (WebInspector.DOMAgent.prototype.getChildNodesAsync.mycallback):
        (WebInspector.DOMAgent.prototype.getChildNodesAsync):
        (WebInspector.DOMAgent.prototype._setChildNodes):
        (WebInspector.CSSStyleDeclaration.parseRule):
        (WebInspector.childNodeInserted):
        (WebInspector.childNodeRemoved):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.reset):
        (WebInspector.ElementsPanel.prototype.addStyleChange):
        (WebInspector.ElementsPanel.prototype.removeStyleChange):
        (WebInspector.ElementsPanel.prototype._updateModifiedNodes):
        (WebInspector.ElementsPanel.prototype.updateBreadcrumb):
        (WebInspector.ElementsPanel.prototype.handleCopyEvent):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.set rootDOMNode):
        (WebInspector.ElementsTreeOutline.prototype.findTreeElement):
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype._updateChildren.updateChildrenOfNode):
        (WebInspector.ElementsTreeElement.prototype._updateChildren):
        (WebInspector.ElementsTreeElement.prototype.onexpand):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.addStyleSelector):
        (InjectedScript._serializeRule):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection):
        * inspector/front-end/inspector.js:
        (WebInspector.set hoveredDOMNode):
        * inspector/front-end/treeoutline.js:
        (TreeOutline.prototype.findTreeElement):
        * inspector/front-end/utilities.js:
        (Node.prototype.enclosingNodeOrSelfWithNodeNameInArray):
        (Node.prototype.enclosingNodeOrSelfWithClass):
        (isAncestorNode):
        (firstCommonNodeAncestor):
        (traverseNextNode):
        (traversePreviousNode):
        ():
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchWindowObjectAvailable):
        * page/android/InspectorControllerAndroid.cpp:

2009-08-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Optimize updateFillImages() to not add/remove clients every time
        https://bugs.webkit.org/show_bug.cgi?id=28334

        Optimize the case where old and new just have a single layer pointing to the same (or no)
        image.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::updateFillImages):

2009-08-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Implement animations of multiple text-shadows and -webkit-box-shadows.
        https://bugs.webkit.org/show_bug.cgi?id=28266
        
        Test: transitions/multiple-shadow-transitions.html

        * page/animation/AnimationBase.cpp:
        (WebCore::PropertyWrapperShadow::equals):
        (WebCore::PropertyWrapperShadow::blend):

2009-08-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Make transitions work for position and size of multiple backgrounds and masks.
        https://bugs.webkit.org/show_bug.cgi?id=28266
        
        Make background-position, background-size, -webkit-mask-position and -webkit-mask-size
        properties animatable with multiple backgrounds, rather than just animating the first one.

        Tests: transitions/multiple-background-size-transitions.html
               transitions/multiple-background-transitions.html
               transitions/multiple-mask-transitions.html

        * page/animation/AnimationBase.cpp:
        (WebCore::FillLayerPropertyWrapperBase::FillLayerPropertyWrapperBase):
        (WebCore::FillLayerPropertyWrapperBase::~FillLayerPropertyWrapperBase):
        (WebCore::FillLayerPropertyWrapperGetter::FillLayerPropertyWrapperGetter):
        (WebCore::FillLayerPropertyWrapperGetter::equals):
        (WebCore::FillLayerPropertyWrapper::FillLayerPropertyWrapper):
        (WebCore::FillLayerPropertyWrapper::blend):
        (WebCore::FillLayersPropertyWrapper::FillLayersPropertyWrapper):
        (WebCore::FillLayersPropertyWrapper::equals):
        (WebCore::FillLayersPropertyWrapper::blend):
        (WebCore::ensurePropertyMap):
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::setXPosition):
        (WebCore::FillLayer::setYPosition):
        (WebCore::FillLayer::setSize):

2009-08-15  George Staikos  <george.staikos@torchmobile.com>

        Reviewed by Jan Alonzo.

        Don't crash in fieldset code when WML is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=28012

        Test: fast/wml/html-fieldset-crash.html

        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::findLegend): ++brackets

2009-08-15  Sam Weinig  <sam@webkit.org>

        Try and enable EventSource on Windows.

        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/build-generated-files.sh:

2009-08-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Setting attribute event listeners to the body does not set them on the window
        https://bugs.webkit.org/show_bug.cgi?id=28343

        Tests: fast/dom/Window/HTMLBodyElement-window-eventListener-attributes.html
               fast/dom/Window/HTMLFrameSetElement-window-eventListener-attributes.html

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::setOnblur): Use setWindowAttributeEventListener instead of setAttributeEventListener.
        (WebCore::HTMLBodyElement::setOnerror): Ditto.
        (WebCore::HTMLBodyElement::setOnfocus): Ditto.
        (WebCore::HTMLBodyElement::setOnload): Ditto.
        (WebCore::HTMLBodyElement::setOnbeforeunload): Ditto.
        (WebCore::HTMLBodyElement::setOnmessage): Ditto.
        (WebCore::HTMLBodyElement::setOnoffline): Ditto.
        (WebCore::HTMLBodyElement::setOnonline): Ditto.
        (WebCore::HTMLBodyElement::setOnresize): Ditto.
        (WebCore::HTMLBodyElement::setOnstorage): Ditto.
        (WebCore::HTMLBodyElement::setOnunload): Ditto.
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::setOnblur): Ditto.
        (WebCore::HTMLFrameSetElement::setOnerror): Ditto.
        (WebCore::HTMLFrameSetElement::setOnfocus): Ditto.
        (WebCore::HTMLFrameSetElement::setOnload): Ditto.
        (WebCore::HTMLFrameSetElement::setOnbeforeunload): Ditto.
        (WebCore::HTMLFrameSetElement::setOnmessage): Ditto.
        (WebCore::HTMLFrameSetElement::setOnoffline): Ditto.
        (WebCore::HTMLFrameSetElement::setOnonline): Ditto.
        (WebCore::HTMLFrameSetElement::setOnresize): Ditto.
        (WebCore::HTMLFrameSetElement::setOnstorage): Ditto.
        (WebCore::HTMLFrameSetElement::setOnunload): Ditto.

2009-08-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix up some IDL comments.

        * html/HTMLBodyElement.idl:
        * html/HTMLFrameSetElement.idl:

2009-08-15  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Reviewed by Sam Weinig.

        Added implementation of the EventSource object that enables
        server-sent events from HTML5.
        http://dev.w3.org/html5/eventsource/
        https://bugs.webkit.org/show_bug.cgi?id=14997

        Tests: fast/eventsource/eventsource-attribute-listeners.html
               fast/eventsource/eventsource-constructor.html
               http/tests/eventsource/eventsource-bad-mime-type.html
               http/tests/eventsource/eventsource-parse-event-stream.html
               http/tests/eventsource/eventsource-reconnect.html
               http/tests/eventsource/eventsource-status-code-states.html
               http/tests/eventsource/workers/eventsource-simple.html

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::eventSource):
        * bindings/js/JSEventSourceConstructor.cpp: Added.
        (WebCore::):
        (WebCore::JSEventSourceConstructor::JSEventSourceConstructor):
        (WebCore::constructEventSource):
        (WebCore::JSEventSourceConstructor::getConstructData):
        * bindings/js/JSEventSourceConstructor.h: Added.
        (WebCore::JSEventSourceConstructor::classInfo):
        * bindings/js/JSEventSourceCustom.cpp: Added.
        (WebCore::JSEventSource::markChildren):
        (WebCore::JSEventSource::addEventListener):
        (WebCore::JSEventSource::removeEventListener):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        (WebCore::toEventTarget):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::eventSource):
        * dom/EventNames.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toEventSource):
        * dom/EventTarget.h:
        * page/DOMWindow.idl:
        * page/EventSource.cpp: Added.
        (WebCore::EventSource::EventSource):
        (WebCore::EventSource::~EventSource):
        (WebCore::EventSource::connect):
        (WebCore::EventSource::endRequest):
        (WebCore::EventSource::scheduleReconnect):
        (WebCore::EventSource::reconnectTimerFired):
        (WebCore::EventSource::url):
        (WebCore::EventSource::readyState):
        (WebCore::EventSource::close):
        (WebCore::EventSource::scriptExecutionContext):
        (WebCore::EventSource::addEventListener):
        (WebCore::EventSource::removeEventListener):
        (WebCore::EventSource::dispatchEvent):
        (WebCore::EventSource::didReceiveResponse):
        (WebCore::EventSource::didReceiveData):
        (WebCore::EventSource::didFinishLoading):
        (WebCore::EventSource::didFail):
        (WebCore::EventSource::didFailRedirectCheck):
        (WebCore::EventSource::parseEventStream):
        (WebCore::EventSource::parseEventStreamLine):
        (WebCore::EventSource::dispatchGenericEvent):
        (WebCore::EventSource::dispatchMessageEvent):
        (WebCore::EventSource::stop):
        * page/EventSource.h: Added.
        (WebCore::EventSource::create):
        (WebCore::EventSource::):
        (WebCore::EventSource::setOnopen):
        (WebCore::EventSource::onopen):
        (WebCore::EventSource::setOnmessage):
        (WebCore::EventSource::onmessage):
        (WebCore::EventSource::setOnerror):
        (WebCore::EventSource::onerror):
        (WebCore::EventSource::toEventSource):
        (WebCore::EventSource::eventListeners):
        (WebCore::EventSource::refEventTarget):
        (WebCore::EventSource::derefEventTarget):
        * page/EventSource.idl: Added.
        * workers/WorkerContext.idl:

2009-08-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Minor DOMAgent bugfixes.

        https://bugs.webkit.org/show_bug.cgi?id=28177

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::nodeForId):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):

2009-08-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Evaluating objects while on a breakpoint dumps string
        representation instead of live object. 

        https://bugs.webkit.org/show_bug.cgi?id=28280

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions.this._evalInInspectedWindow):
        (WebInspector.ConsoleView.prototype.completions):
        (WebInspector.ConsoleView.prototype._reportCompletions):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.doEvalInCallFrame.delayedEvaluation):
        (WebInspector.ScriptsPanel.prototype.doEvalInCallFrame):
        (WebInspector.ScriptsPanel.prototype.variablesInSelectedCallFrame):

2009-08-15  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Adding two new files to WebCore/platform/haiku:
        LocalizedStringsHaiku.cpp and LoggingHaiku.cpp
        https://bugs.webkit.org/show_bug.cgi?id=28129

        * platform/haiku/LocalizedStringsHaiku.cpp: Added.
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::defaultLanguage):
        (WebCore::searchableIndexIntroduction):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagRightToLeft):
        (WebCore::contextMenuItemTagInspectElement):
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::unknownFileSizeText):
        (WebCore::AXWebAreaText):
        (WebCore::AXLinkText):
        (WebCore::AXListMarkerText):
        (WebCore::AXImageMapText):
        (WebCore::AXHeadingText):
        (WebCore::imageTitle):
        (WebCore::contextMenuItemTagTextDirectionMenu):
        (WebCore::AXButtonActionVerb):
        (WebCore::AXTextFieldActionVerb):
        (WebCore::AXRadioButtonActionVerb):
        (WebCore::AXCheckedCheckBoxActionVerb):
        (WebCore::AXUncheckedCheckBoxActionVerb):
        (WebCore::AXLinkActionVerb):
        (WebCore::AXDefinitionListTermText):
        (WebCore::AXDefinitionListDefinitionText):
        * platform/haiku/LoggingHaiku.cpp: Added.
        (WebCore::InitializeLoggingChannelsIfNecessary):

2009-08-15  Darin Adler  <darin@apple.com>

        Fix GTK build.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (fallbackObject): Pass 0 for document. Should be OK at least for now.

2009-08-15  Darin Adler  <darin@apple.com>

        Fix Qt build.

        * dom/XMLTokenizerQt.cpp: Use create functions instead of calling new
        directly to make CDATASection and Comment nodes.

2009-08-14  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Make DOM classes start with a reference count of 1, like all other RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=28068

        First half, everything except for element classes.

        * GNUmakefile.am: Removed DocPtr.h.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * dom/Attr.cpp:
        (WebCore::Attr::Attr): Added a call to createTextChild here so callers don't
        have to call it explicitly.
        (WebCore::Attr::create): Added.
        (WebCore::Attr::setValue): Changed to take AtomicString.
        (WebCore::Attr::cloneNode): Use create.

        * dom/Attr.h: Added a create function. Made the constructor private,
        and a lot of other functions private as well.

        * dom/Attribute.cpp:
        (WebCore::Attribute::createAttrIfNeeded): Use Attr::create.

        * dom/CDATASection.cpp:
        (WebCore::CDATASection::create): Added.
        (WebCore::CDATASection::cloneNode): Use create.
        (WebCore::CDATASection::virtualCreate): Ditto.

        * dom/CDATASection.h: Added a create function. Made everything private.
        Removed unneeded destructor declaration.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::CharacterData): Replaced the multiple constructors
        with a single one that takes ConstructionType.

        * dom/CharacterData.h: Made more functions be protected and private.
        Made m_data be private.

        * dom/Comment.cpp:
        (WebCore::Comment::Comment): Got rid of an extra constructor.
        (WebCore::Comment::create): Added.
        (WebCore::Comment::cloneNode): Call create.

        * dom/Comment.h: Added a create function. Made everything private.

        * dom/ContainerNode.cpp:
        (WebCore::dispatchChildInsertionEvents): Use RefPtr instead of DocPtr.
        (WebCore::dispatchChildRemovalEvents): Ditto.

        * dom/ContainerNode.h: Made the constructor protected and passed
        ConstructionType instead of an isElement boolean.

        * dom/DocPtr.h: Removed.

        * dom/Document.cpp:
        (WebCore::Document::Document): Simplified the code that sets m_document
        since it's no longer a smart pointer.
        (WebCore::Document::removedLastRef): Use explicit calls to selfOnlyRef
        and selfOnlyDeref instead of a DocPtr in here.
        (WebCore::Document::~Document): Simplified the code that sets m_document
        since it's no longer a smart pointer.
        (WebCore::Document::createDocumentFragment): Call create.
        (WebCore::Document::createTextNode): Ditto.
        (WebCore::Document::createComment): Ditto.
        (WebCore::Document::createCDATASection): Ditto.
        (WebCore::Document::createProcessingInstruction): Ditto.
        (WebCore::Document::createEntityReference): Ditto.
        (WebCore::Document::createEditingTextNode): Ditto.
        (WebCore::Document::importNode): Call Attr::create.
        (WebCore::Document::createAttributeNS): Ditto.

        * dom/Document.h: Call adoptRef. Made a lot of functions private and
        protected and sorted them so public functions come first.

        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::create): Added.
        (WebCore::DocumentFragment::cloneNode): Call create.
        * dom/DocumentFragment.h: Added create.

        * dom/DocumentType.cpp:
        (WebCore::DocumentType::DocumentType): Pass type to Node constructor.
        (WebCore::DocumentType::cloneNode): Use create.
        * dom/DocumentType.h:
        (WebCore::DocumentType::create): Call adoptRef.

        * dom/EditingText.cpp:
        (WebCore::EditingText::create): Added.
        * dom/EditingText.h: Added a create function. Made everything private.

        * dom/Element.cpp:
        (WebCore::Element::Element): Pass CreateElementZeroRefCount to preserve
        the zero reference count behavior for classes derived from Element.

        * dom/EntityReference.cpp:
        (WebCore::EntityReference::create): Added.
        (WebCore::EntityReference::cloneNode): Call create.
        * dom/EntityReference.h: Added create. Made everything private.

        * dom/Node.cpp:
        (WebCore::Node::initialRefCount): Added. Inline helper function for
        the constructor.
        (WebCore::Node::isContainer): Ditto.
        (WebCore::Node::isElement): Ditto.
        (WebCore::Node::isText): Ditto.
        (WebCore::Node::Node): Changed to take a construction type argument.
        Since m_document is now a normal pointer, added a call to selfOnlyRef.
        (WebCore::Node::~Node): Ditto, but selfOnlyDeref.
        (WebCore::Node::setDocument): Added selfOnlyRef/Deref calls.
        (WebCore::Node::appendTextContent): Use the data function instead of
        calling nodeValue functions, which do the same thing in a roundabout way.

        * dom/Node.h: Made the constructor protected and replaced the multiple
        arguments iwth a single ConstructionType argument. Sorted the public
        things first.

        * dom/Notation.h: Made most things private.
        * dom/Notation.cpp: Removed extra constructor.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::create): Added.
        (WebCore::ProcessingInstruction::cloneNode): Call create.
        * dom/ProcessingInstruction.h: Added create function. Made many other
        members private.

        * dom/Range.cpp:
        (WebCore::Range::processContents): Use DocumentFragment::create.

        * dom/Text.cpp:
        (WebCore::Text::Text): Updated for base class change.
        (WebCore::Text::create): Added.
        (WebCore::Text::splitText): Changed to not require access to m_data.
        (WebCore::Text::cloneNode): Call create.
        (WebCore::Text::createRenderer): Call dataImpl.
        (WebCore::Text::attach): Call data.
        (WebCore::Text::recalcStyle): Call dataImpl.
        (WebCore::Text::virtualCreate): Call create.
        (WebCore::Text::createWithLengthLimit): Call create.
        (WebCore::Text::formatForDebugger): Call data.

        * dom/Text.h: Added a create function. Made many other members private.
        Renamed createNew to virtualCreate.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::enterText): Call Text::create.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::cdataBlock): Call CDATASection::create.
        (WebCore::XMLTokenizer::comment): Call Comment::create.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        Call data instead of string.

        * editing/CreateLinkCommand.cpp:
        (WebCore::CreateLinkCommand::doApply): Call Text::create.

        * editing/EditorCommand.cpp:
        (WebCore::executeInsertNode): Call DocumentFragment::create.

        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::doApply): Call Text::create.

        * editing/markup.cpp:
        (WebCore::appendStartMarkup): Call data instead of nodeValue.

        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::create): Call adoptRef.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createContextualFragment): Call DocumentFragment::create.
        (WebCore::replaceChildrenWithFragment): Call data instead of string.
        (WebCore::replaceChildrenWithText): Call Text::create.
        (WebCore::HTMLElement::setInnerText): Call DocumentFragment::create and
        Text::create.
        (WebCore::HTMLElement::setOuterText): Call Text::create.

        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement): Call Text::create.

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setText): Call Text::create.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::textCreateErrorCheck): Call Text::create.
        (WebCore::HTMLParser::commentCreateErrorCheck): Call Comment::create.
        (WebCore::HTMLParser::handleIsindex): Call Text::create.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addText): Call Text::create.

        * html/HTMLViewSourceDocument.h:
        (WebCore::HTMLViewSourceDocument::create): Call adoptRef.

        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryTokenizer::appendEntry): Call Text::create.
        (WebCore::FTPDirectoryTokenizer::createTDForFilename): Call Text::create.

        * loader/FTPDirectoryDocument.h:
        (WebCore::FTPDirectoryDocument::create): Call adoptRef.
        * loader/ImageDocument.h:
        (WebCore::ImageDocument::create): Ditto.
        * loader/MediaDocument.h:
        (WebCore::MediaDocument::create): Ditto.
        * loader/PlaceholderDocument.h:
        (WebCore::PlaceholderDocument::create): Ditto.
        * loader/PluginDocument.h:
        (WebCore::PluginDocument::create): Ditto.
        * loader/TextDocument.h:
        (WebCore::TextDocument::create): Ditto.

        * loader/loader.cpp:
        (WebCore::Loader::Host::didFinishLoading): Use RefPtr instead of DocPtr.
        (WebCore::Loader::Host::didFail): Ditto.

        * platform/TreeShared.h:
        (WebCore::TreeShared::TreeShared): Added an initialRefCount argument,
        defaulting to 1. Node still sometimes initializes it to 0 instead for now.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::originalText): Use dataImpl instead of string.

        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::originalText): Use dataImpl instead of string.
        (WebCore::RenderTextFragment::previousCharacter): Ditto.

        * svg/SVGDocument.h:
        (WebCore::SVGDocument::create): Use adoptRef.

        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::SVGElementInstance): Updated to take a
        PassRefPtr.

        * svg/SVGElementInstance.h: Made everything private.

        * wml/WMLDocument.h:
        (WebCore::WMLDocument::create): Called adoptRef.

        * xml/XPathNamespace.cpp:
        (WebCore::XPathNamespace::XPathNamespace): Take AtomicString arguments.
        * xml/XPathNamespace.h: Made everything private.

        * xml/XSLTProcessor.cpp:
        (WebCore::createFragmentFromSource): Use DocumentFragment::create and
        Text::create.

2009-08-13  Jon Honeycutt  <jhoneycutt@apple.com>

        Part of <rdar://problem/6218721> No MSAA focus events fired for Webkit
        nightly (20866)

        https://bugs.webkit.org/show_bug.cgi?id=20866

        Reviewed by Oliver Hunt.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::AXObjectCache):
        Changed to take a pointer to its owner document. This is used by
        AXObjectCache::handleFocusedUIElementChanged().
        (WebCore::AXObjectCache::focusedUIElementForPage):
        Code moved from AccessibilityRenderObject::focusedUIElement(). Modified
        to be a static function and to take a pointer to a Page.
        (WebCore::AXObjectCache::platformGenerateAXID):
        Moved the code to generate the next AXID from getAXID() to here. Added
        a #if to make this non-WIN only, because Windows has its own
        implementation.
        (WebCore::AXObjectCache::getAXID):
        Ensure that we generate a positive AXID, ranging from 1 to LONG_MAX.

        * accessibility/AXObjectCache.h:
        Add a declaration for Document and Page. Removed the declaration of
        AccessibilityObject, because we include the header. Reordered the
        declaration of Node alphabetically. Moved the typedef for AXID to
        AccessibilityObject. Removed some trailing whitespace. Added a member
        variable to hold a pointer to the owner Document.
        (WebCore::AXObjectCache::AXObjectCache):
        Changed to take a pointer to its owner Document.
        (WebCore::AXObjectCache::focusedUIElementForPage):
        Added; code moved from AccessiblityRenderObject::focusedUIElement().
        Returns the focused element with respect to accessibility.
        (WebCore::AXObjectCache::platformGenerateAXID):
        Declare a function to generate an AXID.
        (WebCore::AXObjectCache::objectFromAXID):
        Return the AccessibilityObject with the given AXID.

        * accessibility/AccessibilityObject.h:
        Moved the typedef for AXID from AXObjectCache to here. Made the m_id
        member use the typedef.
        (WebCore::AccessibilityObject::axObjectID):
        Changed the return type to use the typedef.
        (WebCore::AccessibilityObject::setAXObjectID):
        Changed the argument type to use the typedef.

        * accessibility/AccessibilityRenderObject.cpp:
        Removed some unneeded #includes.
        (WebCore::AccessibilityRenderObject::focusedUIElement):
        Moved the code to AXObjectCache::focusedUIElementForPage(), which we now
        call.

        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::platformGenerateAXID):
        Ensure that we generate an AXID that is in the range 1 to LONG_MAX.
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        If the Document has no Page, return. If the Page has not focused
        element (respecting accessibility), return. Assert that the
        accessibility of the focused element is not ignored, and that the
        object's AXID will be negative and fit into a LONG when negated.
        Broadcast a focus event for the object.

        * dom/Document.cpp:
        (WebCore::Document::axObjectCache):
        Pass this when creating the AXObjectCache.
        (WebCore::Document::setFocusedNode):
        Call AXObjectCache::handleFocusedUIElementChanged() on Windows.

2009-08-14  Jiahua Huang  <jhuangjiahua@gmail.com>

        Reviewed by Jan Alonzo.

        [gtk] Pasteboard/GtkClipboard can't handle the "text/html" target.
        https://bugs.webkit.org/show_bug.cgi?id=27028

        Remove the improper set of enum WebKitWebViewTargetInfo
        by grabbing the target infos via m_helper.

        * manual-tests/gtk/copy-htmltext.html: Added.
        * platform/Pasteboard.h:
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::clipboard_get_contents_cb):
        * platform/gtk/PasteboardHelper.h:

2009-08-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Fix an assertion when bringing up the Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=28318
        
        The fix for bug 28295 assumed that image clients count the number of times
        addClient/removeClient is called. That was true for CachedResource clients,
        but not StyleGeneratedImage clients, which pass the call onto CSSImageGeneratorValue.
        
        Fix by making CSSImageGeneratorValue count the number of times a client is
        added/removed.

        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::canvasChanged):
        (WebCore::CSSCanvasValue::canvasResized):
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::addClient):
        (WebCore::CSSImageGeneratorValue::removeClient):
        (WebCore::CSSImageGeneratorValue::getImage):
        * css/CSSImageGeneratorValue.h:

2009-08-14  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Kevin Ollivier.

        Correct libcurl crash when downloading local files.
        https://bugs.webkit.org/show_bug.cgi?id=28312

        No new tests. Test is covered by fast/encoding/char-encoding-mac.html.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::handleLocalReceiveResponse): New static function that
          performs the local setting of valid URL and firing didReceiveResponse.
          This code was moved from writeCallback.
        (WebCore::writeCallback): Move local file handling to static function
          (above) and use the function instead.
        (WebCore::readCallback): Add check
          for responseFired, and handle as a local file if it was not.

2009-08-14  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Oliver Hunt.

        [Haiku] Fix RenderThemeHaiku build.
        https://bugs.webkit.org/show_bug.cgi?id=28307

        * platform/haiku/RenderThemeHaiku.cpp: Included RenderThemeHaiku.h
        instead of RenderTheme.h.
        (WebCore::RenderThemeHaiku::paintCheckbox): Removed the wrong 'virtual'
        before the function.
        (WebCore::RenderThemeHaiku::paintRadio): Removed the wrong 'virtual'
        before the function.
        * platform/haiku/RenderThemeHaiku.h: Corrected wrong function definitions.

2009-08-14  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Oliver Hunt.

        [Haiku] Adding SharedBufferHaiku to WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=28309

        * platform/haiku/SharedBufferHaiku.cpp: Added.
        (WebCore::SharedBuffer::createWithContentsOfFile):
        * platform/haiku/TemporaryLinkStubs.cpp: Removed unnecessary headers
        and functions.
        (WebCore::signedPublicKeyAndChallengeString):
        (WebCore::getSupportedKeySizes):

2009-08-14  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Ensure we're getting the right v8 context in the V8 DOMWindowEvent custom getter.

        https://bugs.webkit.org/show_bug.cgi?id=28311

        This should fix Chromium failing LayoutTests/fast/events/set-event-in-another-frame.html.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_GETTER):

2009-08-14  Aaron Boodman  <aa@chromium.org>

        Reviewed by Alexey Proskuryakov.

        BUG 28134: Move the remaining parts of Access Control from XMLHttpRequest to ThreadableDocumentLoader.
        https://bugs.webkit.org/show_bug.cgi?id=28134

        No new tests added since Access Control was already well tested and this is a pure refactor.

        * loader/DocumentThreadableLoader.cpp: Move a lot of the access control code from XHR in, preserving its
        basic strategy. Also, modify the synchronous path to not be a special case, but reuse more of the async
        path.

        (WebCore::DocumentThreadableLoader::loadResourceSynchronously): Go through the async path and pass additional flags.
        (WebCore::DocumentThreadableLoader::create): Group enum params into an options struct.
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): Ditto.
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest): Brought mostly from XHR.
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequestWithPreflight): Ditto.
        (WebCore::DocumentThreadableLoader::willSendRequest): Handle preflight case.
        (WebCore::DocumentThreadableLoader::didReceiveResponse): Ditto.
        (WebCore::DocumentThreadableLoader::didFinishLoading): Ditto.
        (WebCore::DocumentThreadableLoader::getShouldUseCredentialStorage): Ditto.
        (WebCore::DocumentThreadableLoader::preflightSuccess): Preflight handling.
        (WebCore::DocumentThreadableLoader::preflightFailure): Ditto.
        (WebCore::DocumentThreadableLoader::loadRequest): Common request function that handles async/sync.
        * loader/DocumentThreadableLoader.h: Group enum params into an options struct.
        * loader/ThreadableLoader.cpp: Ditto.
        (WebCore::ThreadableLoader::create): Ditto.
        (WebCore::ThreadableLoader::loadResourceSynchronously): Ditto.
        * loader/ThreadableLoader.h: Ditto.
        (WebCore::ThreadableLoaderOptions::ThreadableLoaderOptions): Ditto.
        * loader/WorkerThreadableLoader.cpp: Ditto.
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader):Ditto.
        (WebCore::WorkerThreadableLoader::loadResourceSynchronously): Ditto.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge): Ditto.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader): Ditto.
        * loader/WorkerThreadableLoader.h: Ditto.
        (WebCore::WorkerThreadableLoader::create): Ditto.
        * platform/CrossThreadCopier.h: Allow ThreadableLoaderOptions to be copied across threads.
        (WebCore::):
        * workers/WorkerScriptLoader.cpp: More enum->struct grouping.
        (WebCore::WorkerScriptLoader::loadSynchronously): More enum->struct grouping.
        (WebCore::WorkerScriptLoader::loadAsynchronously): More enum->struct grouping.
        * xml/XMLHttpRequest.cpp: Remove all the access control code and some supporting state.
        (WebCore::XMLHttpRequest::XMLHttpRequest): Ditto.
        (WebCore::XMLHttpRequest::createRequest): Ditto.
        (WebCore::XMLHttpRequest::didFinishLoading): Ditto.
        (WebCore::XMLHttpRequest::didReceiveResponse): Ditto.
        (WebCore::XMLHttpRequest::didReceiveData): Ditto.
        * xml/XMLHttpRequest.h: Ditto.

2009-08-14  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Rename the confusing isObject(<class>) to inherits(<class>).
        It still works on non-objects, returning false.

        * bindings/js/JSEventTarget.cpp:
        (WebCore::toEventTarget):
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::createPositionCallback):
        (WebCore::createPositionErrorCallback):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::toNodeFilter):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessor::importStylesheet):
        (WebCore::JSXSLTProcessor::transformToFragment):
        (WebCore::JSXSLTProcessor::transformToDocument):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod):
        Updated to new name, inherits, from old name, isObject.

2009-08-14  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        Allow Qt API to list and to remove URL schemes that were registered as
        local URL schemes.
        [Qt] Allow applications to register their own local URL scheme.
        https://bugs.webkit.org/show_bug.cgi?id=28240

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::removeURLSchemeRegisteredAsLocal):
        (WebCore::SecurityOrigin::localURLSchemes):
        * page/SecurityOrigin.h:

2009-08-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Wrap console objects late (in the frontend) so that injected
        script was already in place.

        https://bugs.webkit.org/show_bug.cgi?id=28297

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::startGroup):
        (WebCore::InspectorController::setFrontendProxyObject):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::InspectorFrontend):
        (WebCore::InspectorFrontend::addMessageToConsole):
        * inspector/InspectorFrontend.h:

2009-08-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Fix logic in RenderObject::updateFillImages() that led to incorrect client
        counts if an image was used twice in the background-image property.
        https://bugs.webkit.org/show_bug.cgi?id=28295

        Test: fast/backgrounds/multiple-backgrounds-assert.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::updateFillImages):
        Simplify the logic to call addClient()/removeClient() for every background
        image, but go through the new layers first to avoid removing all the
        clients of an image.

2009-08-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Devirtualise marking
        https://bugs.webkit.org/show_bug.cgi?id=28294

        Make sure we override the JSObject createStructure method on those
        objects that have custom marking routines.

        * bindings/scripts/CodeGeneratorJS.pm:

2009-08-13  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        Follow-up to earlier work to remove dependencies on JavaScriptCore.

        * ForwardingHeaders/parser/Parser.h: Removed.
        * inspector/JavaScriptDebugServer.cpp: Removed now-unneeded includes
        of Parser.h.

2009-08-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Eric Seidel.

        'box-orient: block-axis' behaves like 'box-orient: horizontal', causes
        an assertion failure in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=28279

        Test: fast/flexbox/block-axis.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator EBoxOrient): Map block-axis to
        vertical.

2009-08-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Fix crash when removing reflection on an absolutely-positioned image.
        https://bugs.webkit.org/show_bug.cgi?id=28289
        
        Make sure we clean up the reflection layer when removing the reflection,
        so that the RenderLayer tree does not contain pointers to deleted layers.

        Test: fast/reflections/reflected-img-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::styleChanged):
        (WebCore::RenderLayer::removeReflection):
        * rendering/RenderLayer.h:

2009-08-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        misalignment because of float:left of <div> tag
        https://bugs.webkit.org/show_bug.cgi?id=15869

        One section of http://edgar.sec.gov site draws to the right of the rest
        of the content
        <rdar://problem/7135951>

        Tests: fast/block/float/avoidance-percent-width-compat.html
               fast/block/float/avoidance-percent-width-strict.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::getClearDelta): Changed to apply the same float
            avoidance logic in strict mode and in compatibility mode, which
            matches Firefox and IE. Changed to compute and use the computed
            width of the child, instead of ignoring non-fixed widths.

2009-08-13  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Geolocation PositionOptions does not use correct default values.
        https://bugs.webkit.org/show_bug.cgi?id=27254

        Sets the correct default values for the properties of the PositionOptions object
        passed to Geolocation methods. See http://www.w3.org/TR/geolocation-API/.

        Also adds checking to throw an exception if arguments of the incorrect type are
        passed to Geolocation methods. Adds a layout test to test this. This test should
        pass on all platforms where Geolocation is implemented.

        Test: fast/dom/Geolocation/argument-types.html

        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::createPositionCallback): Added. Creates the callback.
        (WebCore::createPositionErrorCallback): Added. Creates the calback.
        (WebCore::createPositionOptions): Added. Creates the PositionOptions object, setting defaults where required.
        (WebCore::JSGeolocation::getCurrentPosition): Modified. Now uses above helper functions.
        (WebCore::JSGeolocation::watchPosition): Modified. Now uses above helper functions.
        * page/Geolocation.cpp:
        (WebCore::Geolocation::GeoNotifier::GeoNotifier): Modified. Asserts that PositionOptions object is present.
        (WebCore::Geolocation::GeoNotifier::startTimer): Modified. Only starts timer if timeout has been set.
        * page/PositionOptions.h:
        (WebCore::PositionOptions::create): Modified. Creates object with default values.
        (WebCore::PositionOptions::timeout): Modified. Uses correct type.
        (WebCore::PositionOptions::hasTimeout): Added. Determines whether a timeout has been set.
        (WebCore::PositionOptions::setTimeout): Modified. Uses correct type.
        (WebCore::PositionOptions::maximumAge): Modified. Uses correct type.
        (WebCore::PositionOptions::setMaximumAge): Modified. Uses correct type.
        (WebCore::PositionOptions::PositionOptions): Modified. Creates object with default values.

2009-08-13  David Levin  <levin@chromium.org>

        Unreviewed chromium build fix.

        [Chromium] Let CodeGeneratorV8.pm know that RGBColor is ref-counted.

        * bindings/scripts/CodeGeneratorV8.pm:

2009-08-13  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Merge error in SharedWorker code
        https://bugs.webkit.org/show_bug.cgi?id=28277

        Fixed merge error that prevents WebKit from compiling with SHARED_WORKERS enabled.
        No new tests needed.

        * workers/DefaultSharedWorkerRepository.cpp:
        Removed duplicated functions.

2009-08-13  Kyle Prete  <kylep@chromium.org>

        Reviewed by Dave Levin.

        Chromium: Show a "Playback Disabled" button on media error.
        https://bugs.webkit.org/show_bug.cgi?id=28196
        Use a disabled play button when the media file cannot be played.

        No new tests needed. Covered by LayoutTests/media/video-empty-source.html

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintMediaPlayButton):

2009-08-13  Mark Rowe  <mrowe@apple.com>

        Try and fix the Qt build.

        * bridge/qt/qt_runtime.cpp:

2009-08-13  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Gustavo Noronha.

        [GTK] Drag and drop support
        https://bugs.webkit.org/show_bug.cgi?id=23642

        Utilizes functions that are being called upon drag and drop actions.
        Uses different GTK clipboards that hold different types
        of drag data - images, HTML markup, text, URL, URL label.
        Also clears each clipboard before setting new data to it.

        No new tests - despite some implementations, no new functionality
        is added until implementations of the GTK drag and drop protocol
        in WebKit part.

        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::ClipboardGtk):
        (WebCore::ClipboardGtk::~ClipboardGtk):
        (WebCore::getCachedImage):
        (WebCore::ClipboardGtk::declareAndWriteDragImage):
        (WebCore::ClipboardGtk::writeURL):
        (WebCore::ClipboardGtk::writeRange):
        * platform/gtk/ClipboardGtk.h: ClipboardGdk -> ClipboardGtk

2009-08-13  Darin Adler  <darin@apple.com>

        Reviewed by David Levin.

        JavaScriptCore tweaks to get ready for the parser arena
        https://bugs.webkit.org/show_bug.cgi?id=28243

        * ForwardingHeaders/runtime/CollectorHeapIterator.h: Removed.

        * WebCore.xcodeproj/project.pbxproj: Exposed a couple header
        files as Private that are now needed to compile Mac WebKit.

        * bindings/js/JSAudioConstructor.cpp:
        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSHTMLInputElementCustom.cpp:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSImageConstructor.cpp:
        * bindings/js/JSLazyEventListener.cpp:
        * bindings/js/JSLocationCustom.cpp:
        * bindings/js/JSMessageChannelConstructor.cpp:
        * bindings/js/JSOptionConstructor.cpp:
        * bindings/js/JSWebSocketConstructor.cpp:
        * bindings/js/JSWebSocketCustom.cpp:
        * bindings/js/JSWorkerConstructor.cpp:
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        * bridge/jni/jni_jsobject.mm:
        Updated includes.

        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::sourceParsed):
        Change to not assert if this is called with no listeners.
        I don't think this was guaranteed before, and we now use
        this code path when recompiling. Slightly less efficient,
        but this is a one-time cost when turning on the debugger.
        (WebCore::JavaScriptDebugServer::recompileAllJSFunctions):
        Change to call Debugger::recompileAllJSFunctions.

2009-08-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Eric Seidel.

        <rdar://problem/7138591> and https://bugs.webkit.org/show_bug.cgi?id=28260
        onhashchange property cannot be set from javascript.

        Test: fast/loader/onhashchange-attribute-listeners.html

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::onhashchange):
        (WebCore::HTMLBodyElement::setOnhashchange):
        * html/HTMLBodyElement.h:
        * html/HTMLBodyElement.idl:

        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::onhashchange):
        (WebCore::HTMLFrameSetElement::setOnhashchange):
        * html/HTMLFrameSetElement.h:
        * html/HTMLFrameSetElement.idl:

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::onhashchange):
        (WebCore::DOMWindow::setOnhashchange):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2009-08-13  Mark Rowe  <mrowe@apple.com>

        Reviewed by Geoff Garen.

        Fix leaks of RGBColor instances from below SVGColor::rgbColor.

        * svg/SVGColor.cpp:
        (WebCore::SVGColor::rgbColor): Return a PassRefPtr to ensure that the newly-allocated
        RGBColor is cleaned up by the caller.
        * svg/SVGColor.h:

2009-08-13  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Migrate to DOMAgent (serialized access to DOM).

        https://bugs.webkit.org/show_bug.cgi?id=28177

        * bindings/js/JSInspectorBackendCustom.cpp:
        (WebCore::JSInspectorBackend::highlightDOMNode):
        (WebCore::JSInspectorBackend::nodeForId):
        (WebCore::JSInspectorBackend::idForNode):
        (WebCore::JSInspectorBackend::wrapObject):
        (WebCore::JSInspectorBackend::unwrapObject):
        (WebCore::JSInspectorBackend::pushNodePathToFrontend):
        (WebCore::JSInspectorBackend::selectDatabase):
        (WebCore::JSInspectorBackend::selectDOMStorage):
        * bindings/js/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * bindings/js/ScriptObjectQuarantine.h:
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::isObject):
        * bindings/js/ScriptValue.h:
        * bindings/v8/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * bindings/v8/ScriptObjectQuarantine.h:
        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::isObject):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8InspectorBackendCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::clearMessages):
        (WebCore::InspectorBackend::loaded):
        (WebCore::InspectorBackend::highlight):
        (WebCore::InspectorBackend::nodeForId):
        (WebCore::InspectorBackend::idForNode):
        (WebCore::InspectorBackend::wrapObject):
        (WebCore::InspectorBackend::unwrapObject):
        (WebCore::InspectorBackend::pushNodePathToFrontend):
        (WebCore::InspectorBackend::addNodesToSearchResult):
        (WebCore::InspectorBackend::selectDatabase):
        (WebCore::InspectorBackend::selectDOMStorage):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::focusNode):
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::clearConsoleMessages):
        (WebCore::InspectorController::startGroup):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::wrapObject):
        (WebCore::InspectorController::unwrapObject):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setDocument):
        (WebCore::InspectorDOMAgent::handleEvent):
        (WebCore::InspectorDOMAgent::pushDocumentToFrontend):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::nodeForId):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::innerParentElement):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::bind):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::clearConsoleMessages):
        (WebCore::InspectorFrontend::updateFocusedNode):
        (WebCore::InspectorFrontend::setDocument):
        (WebCore::InspectorFrontend::selectDatabase):
        (WebCore::InspectorFrontend::selectDOMStorage):
        (WebCore::InspectorFrontend::addNodesToSearchResult):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.clearMessages):
        (WebInspector.ConsoleView.prototype.completions):
        (WebInspector.ConsoleView.prototype._reportCompletions):
        (WebInspector.ConsoleView.prototype._messagesClicked):
        (WebInspector.ConsoleView.prototype.doEvalInWindow.evalCallback):
        (WebInspector.ConsoleView.prototype.doEvalInWindow):
        (WebInspector.ConsoleView.prototype._format):
        (WebInspector.ConsoleView.prototype._formatfunction):
        (WebInspector.ConsoleView.prototype._formatdate):
        (WebInspector.ConsoleView.prototype._formatregexp):
        (WebInspector.ConsoleView.prototype._formatnode):
        (WebInspector.ConsoleView.prototype._formatobject):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.DOMNode.prototype._renumber):
        (WebInspector.DOMDocument):
        (WebInspector.DOMAgent):
        (WebInspector.DOMAgent.prototype.getChildNodesAsync):
        (WebInspector.DOMAgent.prototype.setAttributeAsync):
        (WebInspector.DOMAgent.prototype.removeAttributeAsync):
        (WebInspector.DOMAgent.prototype.setTextNodeValueAsync):
        (WebInspector.DOMAgent.prototype.nodeForId):
        (WebInspector.DOMAgent.prototype._setDocument):
        (WebInspector.DOMAgent.prototype._setChildNodes):
        (WebInspector.DOMAgent.prototype._bindNodes):
        (WebInspector.DOMAgent.prototype._childNodeInserted):
        (WebInspector.CSSStyleDeclaration):
        (WebInspector.CSSStyleDeclaration.parseRule):
        (WebInspector.setDocument):
        (InspectorController.getStyles):
        (InspectorController.getComputedStyle):
        (InspectorController.getInlineStyle):
        (InspectorController.applyStyleText):
        (InspectorController.setStyleText):
        (InspectorController.toggleStyleEnabled):
        (InspectorController.applyStyleRuleText):
        (InspectorController.addStyleSelector):
        (InspectorController.setStyleProperty):
        (InspectorController.getPrototypes):
        (InspectorController.getProperties):
        (InspectorController.setPropertyValue):
        (InspectorController.evaluate):
        (InspectorController.addInspectedNode):
        (InspectorController.performSearch):
        (InspectorController.searchCanceled):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.performSearch):
        (WebInspector.ElementsPanel.prototype._updateMatchesCount):
        (WebInspector.ElementsPanel.prototype._updateMatchesCountSoon):
        (WebInspector.ElementsPanel.prototype.addNodesToSearchResult):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.set focusedDOMNode.restoreHighlightToHoveredNode):
        (WebInspector.ElementsTreeOutline.prototype.set focusedDOMNode):
        (WebInspector.ElementsTreeElement.prototype.updateChildren):
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.applyStyleRuleText):
        (InjectedScript.addStyleSelector):
        (InjectedScript._doesSelectorAffectNode):
        (InjectedScript._serializeRule):
        (InjectedScript._serializeStyle):
        (InjectedScript.getProperties):
        (InjectedScript.evaluate):
        (InjectedScript.addInspectedNode):
        (InjectedScript.performSearch.addNodesToResults):
        (InjectedScript.performSearch.matchExactItems):
        (InjectedScript.performSearch.matchExactId.addNodesToResults.call):
        (InjectedScript.performSearch.matchExactId):
        (InjectedScript.performSearch):
        (InjectedScript.performSearch.matchExactTagNames):
        (InjectedScript.performSearch.matchExactAttributeNames):
        (InjectedScript.performSearch.matchPartialTagNames):
        (InjectedScript.performSearch.matchStartOfTagNames):
        (InjectedScript.performSearch.matchPartialTagNamesAndAttributeValues):
        (InjectedScript.performSearch.matchPartialAttributeValues):
        (InjectedScript.performSearch.matchStyleSelector):
        (InjectedScript.performSearch.matchPlainText):
        (InjectedScript.performSearch.matchXPathQuery):
        (InjectedScript.performSearch.finishedSearching):
        (InjectedScript.performSearch.processChunk):
        (InjectedScript.searchCanceled):
        (InjectedScript._ensureCommandLineAPIInstalled.inspectObject):
        (InjectedScript._ensureCommandLineAPIInstalled):
        (InjectedScript._resolveObject):
        (InjectedScript._nodeForId):
        (InjectedScript._objectForId):
        (InjectedScript._createProxyObject):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        * inspector/front-end/ObjectProxy.js:
        (WebInspector.ObjectProxy):
        (WebInspector.ObjectPropertyProxy):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.callback):
        (WebInspector.PropertiesSidebarPane.prototype.update):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update.callback):
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCancelled):
        (WebInspector.BlankStylePropertiesSection.prototype.editingCommitted.callback):
        (WebInspector.BlankStylePropertiesSection.prototype.editingCommitted):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/inspector.js:
        (WebInspector._updateHoverHighlight):
        (WebInspector.loaded):
        (WebInspector.clearConsoleMessages):
        (WebInspector.selectDatabase):
        (WebInspector.selectDOMStorage):
        (WebInspector.updateFocusedNode):
        (WebInspector.addNodesToSearchResult):
        * inspector/front-end/utilities.js:
        (Object.proxyType):
        * storage/Storage.h:
        (WebCore::Storage::frame):

2009-08-13  Mark Rowe  <mrowe@apple.com>

        Reviewed by Geoff Garen.

        Fix leaks of RGBColor instances from below CSSPrimitiveValue::getRGBColorValue.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::getRGBColorValue): Return a PassRefPtr to ensure that the
        newly-allocated RGBColor is cleaned up by the caller.
        * css/CSSPrimitiveValue.h:

2009-08-13  Eric Seidel  <eric@webkit.org>

        Reviewed by David Hyatt.

        wrong font size when css font-family includes monospace
        https://bugs.webkit.org/show_bug.cgi?id=19161

        Firefox only uses fixed-width default size for exactly "font-family: monospace;".
        WebKit has historically used fixed-width default size any time a
        font-family includes monospace in the fallback list.

        This patch corrects WebKit's behavior to match Firefox.
        I also had to fix a bug in WebKit's font-family fallback behavior where
        child elements would inherit parts of their parents fallback lists.

        This patch is mostly just replacing all cases where we used to check for:
        fontDescription.genericFontFamily() == MonospaceFamily
        with:
        fontDescription.useFixedDefaultSize()

        Tests: fast/css/getComputedStyle/computed-style-font-family-monospace.html
               fast/css/getComputedStyle/font-family-fallback-reset.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
           Deploy useFixedDefaultSize().  Also fix the bug where child
           FontDescriptions would carry part of the parent font-family fallback list.
        (WebCore::CSSStyleSelector::checkForGenericFamilyChange):
           It's no longer alright to just check genericFontFamily(),
           we have to check to make sure the changed style has a matching useFixedDefaultSize().
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::useFixedDefaultSize):
           Only use the fixed default size if we have one font family and it is "monospace".
           "-webkit-monospace" is the internal representation of the CSS identifier "monospace".

2009-08-13  Christian Plesner Hansen  <christian.plesner.hansen@gmail.com>

        Reviewed by Dimitri Glazkov.

        [v8] Fix atomic string externalization crash.
        Atomic string externalization assumes that all non-empty strings
        can be externalized which is untrue on 64-bit.  This change fixed
        that.

        https://bugs.webkit.org/show_bug.cgi?id=28215

        This bug causes loads of test crashes, no need to add new tests
        specifically for this.

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8StringToAtomicWebCoreString):

2009-08-13  George Staikos  <george.staikos@torchmobile.com>

        Rubberstamped by Darin Adler.

        Use ASSERT_UNUSED instead of UNUSED_PARAM

        * wml/WMLAnchorElement.cpp:
        (WebCore::WMLAnchorElement::deregisterTask):
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::deregisterTask):

2009-08-13  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Fixes a couple of bugs in SecurityOrigin::createFromDatabaseIdentifier.
        https://bugs.webkit.org/show_bug.cgi?id=28262

        No new tests possible.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::createFromDatabaseIdentifier):

2009-08-13  Dirk Schulze  <krit@webkit.org>

        Reviewed by Eric Seidel.

        [CAIRO] getImageData fails on a given rect bigger than the image rect

        The destination image and the source image was mixed up on creating the
        imageData.

        This is just a clean up and doesn't affect the current behavior. It's not
        possible to test this failure in a LayoutTest. Only canvas uses getImageData
        at the moment and returns before calling getImageData, if the image rect does
        not contain the requested rect.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::getImageData):

2009-08-13  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Adding RenderTheme to WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=28258

        * platform/haiku/RenderThemeHaiku.cpp: Added.
        (WebCore::RenderThemeHaiku::create):
        (WebCore::RenderTheme::themeForPage):
        (WebCore::RenderThemeHaiku::RenderThemeHaiku):
        (WebCore::RenderThemeHaiku::~RenderThemeHaiku):
        (WebCore::supportsFocus):
        (WebCore::RenderThemeHaiku::supportsFocusRing):
        (WebCore::RenderThemeHaiku::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeHaiku::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeHaiku::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeHaiku::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeHaiku::platformTextSearchHighlightColor):
        (WebCore::RenderThemeHaiku::systemFont):
        (WebCore::RenderThemeHaiku::paintCheckbox):
        (WebCore::RenderThemeHaiku::setCheckboxSize):
        (WebCore::RenderThemeHaiku::paintRadio):
        (WebCore::RenderThemeHaiku::setRadioSize):
        (WebCore::RenderThemeHaiku::adjustMenuListStyle):
        (WebCore::RenderThemeHaiku::paintMenuList):
        * platform/haiku/RenderThemeHaiku.h: Added.
        (WebCore::RenderThemeHaiku::supportsHover):

2009-08-13  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Remove the "m_point" code from ContextMenuHaiku.cpp
        https://bugs.webkit.org/show_bug.cgi?id=28256

        * platform/haiku/ContextMenuHaiku.cpp:
        (WebCore::ContextMenuReceiver::ContextMenuReceiver):
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::insertItem):

2009-08-13  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Darin Adler.

        Inspector: Show Hidden Cookie Data
        https://bugs.webkit.org/show_bug.cgi?id=28185

          Added new file Cookie.h to the WebCore XCode

        * WebCore.xcodeproj/project.pbxproj:

          InspectorController.cookies() binding

        * bindings/js/JSInspectorBackendCustom.cpp:
        (WebCore::JSInspectorBackend::cookies):
        * inspector/InspectorBackend.idl:

          Struct for static Cookie information
          (name, value, path, domain, expires, httpOnly, secure, session)

        * platform/Cookie.h: Added.
        (WebCore::Cookie::Cookie):
        
          Getter for the a list of raw Cookies
          getRawCookies(., ., out Vector<Cookie>)
        
        * platform/CookieJar.h:

          Implementation of getRawCookies for the mac platform.

        * platform/mac/CookieJar.mm:
        (WebCore::getRawCookies):

          Stub other CookieJar implementations to satisfy the interface.

        * platform/haiku/CookieJarHaiku.cpp:
        (WebCore::getRawCookies):
        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::getRawCookies):
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::getRawCookies):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::getRawCookies):
        * platform/network/win/CookieJarCFNetWin.cpp:
        (WebCore::getRawCookies):
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::getRawCookies):
        * platform/qt/CookieJarQt.cpp:
        (WebCore::getRawCookies):

2009-08-13  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Add a new gesture in Web Inspector to remove breakpoints
        https://bugs.webkit.org/show_bug.cgi?id=19131
        
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._documentMouseDown):

2009-08-13  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Simon Hausmann.

        Symbian target components (library and executable files)
        require Unique Identifiers (i.e., UID3).
        These identifiers are defined in the respective project
        file, conditionally for "symbian" platform.

        * WebCore.pro:

2009-08-13  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        wrong calculation of overflow size for flexbox and table
        https://bugs.webkit.org/show_bug.cgi?id=28064

        RenderFlexibleBox and RenderTable were using the width of overflow
        to update height of overflow, so height became wrong value and
        width was not updated. As the corresponding code of RenderBlock
        was sane, I factored it out and used from RenderFlexibleBox and
        RenderTable.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateOverflowWithShadowAndReflection): created from code of layoutBlock
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderBlock.h:
        * rendering/RenderFlexibleBox.cpp: use updateOverflowWithShadowAndReflection
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout): use updateOverflowWithShadowAndReflection

2009-08-13  Mark Rowe  <mrowe@apple.com>

        Revert r47185, the fix for <https://bugs.webkit.org/show_bug.cgi?id=28185>, as it broke the
        Windows build in a non-obvious manner.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInspectorBackendCustom.cpp:
        * inspector/InspectorBackend.idl:
        * platform/Cookie.h: Removed.
        * platform/CookieJar.h:
        * platform/haiku/CookieJarHaiku.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        * platform/mac/CookieJar.mm:
        * platform/network/chromium/CookieJarChromium.cpp:
        * platform/network/curl/CookieJarCurl.cpp:
        * platform/network/soup/CookieJarSoup.cpp:
        * platform/network/win/CookieJarCFNetWin.cpp:
        * platform/network/win/CookieJarWin.cpp:
        * platform/qt/CookieJarQt.cpp:

2009-08-13  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Not reviewed: build fix (for r47192), adding new file from
        https://bugs.webkit.org/show_bug.cgi?id=28174

        * inspector/front-end/StatusBarButton.js: Added.

2009-08-13  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Introduced StatusBarButton class that encapsulates glyphs support.
        Views updated accordingly.

        https://bugs.webkit.org/show_bug.cgi?id=28174

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView):
        (WebInspector.CookieItemsView.prototype.get statusBarItems): Updated to retrieve DOM element from StatusBarButton instance (here and in similar getters below.)
        (WebInspector.CookieItemsView.prototype.hide):
        (WebInspector.CookieItemsView.prototype.update):
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView):
        (WebInspector.DOMStorageItemsView.prototype.get statusBarItems):
        (WebInspector.DOMStorageItemsView.prototype.hide):
        (WebInspector.DOMStorageItemsView.prototype.update):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.get statusBarItems):
        (WebInspector.ElementsPanel.prototype.hide):
        (WebInspector.ElementsPanel.prototype._nodeSearchButtonClicked):
        * inspector/front-end/Panel.js:
        * inspector/front-end/ProfileView.js:
        (WebInspector.ProfileView):
        (WebInspector.ProfileView.prototype.get statusBarItems):
        (WebInspector.ProfileView.prototype._updatePercentButton):
        (WebInspector.ProfileView.prototype._focusClicked):
        (WebInspector.ProfileView.prototype._excludeClicked):
        (WebInspector.ProfileView.prototype._resetClicked):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.get statusBarItems):
        (WebInspector.ProfilesPanel.prototype.setRecordingProfile):
        (WebInspector.ProfilesPanel.prototype._updateInterface):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.get statusBarItems):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype._toggleLargerResources):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.get statusBarItems):
        (WebInspector.ScriptsPanel.prototype._updatePauseOnExceptionsButton):
        (WebInspector.ScriptsPanel.prototype._updateDebuggerButtons):
        * inspector/front-end/StatusBarButton.js: Added.
        (WebInspector.StatusBarButton):
        (WebInspector.StatusBarButton.prototype._clicked):
        (WebInspector.StatusBarButton.prototype.get disabled):
        (WebInspector.StatusBarButton.prototype.set disabled):
        (WebInspector.StatusBarButton.prototype.get title):
        (WebInspector.StatusBarButton.prototype.set title):
        (WebInspector.StatusBarButton.prototype.get toggled):
        (WebInspector.StatusBarButton.prototype.set toggled):
        (WebInspector.StatusBarButton.prototype.get visible):
        (WebInspector.StatusBarButton.prototype.set visible):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css: For uniformity, class names are always used to identify status bar buttons. Also, fixed "Reload" button style to use glyphs.
        * inspector/front-end/inspector.html:

2009-08-12  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Add shadow support in GraphicsContext::fillRect().

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillRect): Paint shadow if necessary.
        (WebCore::GraphicsContext::setPlatformShadow): Inverse y offset.

2009-08-13  David Levin  <levin@chromium.org>

        Unreviewed build fix for Chromium Linux.

        Rollback r47157 as this broke debug tests of Chromium Linux.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::setupPaintCommon):

2009-08-13  David Levin  <levin@chromium.org>

        Unreviewed build fix for chromium.

        The chromium build broke due to r47185 which added
        a cookies array to inspector/InspectorBackend.idl.

        * bindings/v8/custom/V8CustomBinding.h: Added the declaration for the cookies callback.
        * bindings/v8/custom/V8InspectorBackendCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL(InspectorBackendCookies)): Stubbed out an implementation
         for the cookies callback.

2009-08-12  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: Show Hidden Cookie Data
        https://bugs.webkit.org/show_bug.cgi?id=28185

          Added new file Cookie.h to the WebCore XCode

        * WebCore.xcodeproj/project.pbxproj:

          InspectorController.cookies() binding

        * bindings/js/JSInspectorBackendCustom.cpp:
        (WebCore::JSInspectorBackend::cookies):
        * inspector/InspectorBackend.idl:

          Struct for static Cookie information
          (name, value, path, domain, expires, httpOnly, secure, session)

        * platform/Cookie.h: Added.
        (WebCore::Cookie::Cookie):
        
          Getter for the a list of raw Cookies
          getRawCookies(., ., out Vector<Cookie>)
        
        * platform/CookieJar.h:

          Implementation of getRawCookies for the mac platform.

        * platform/mac/CookieJar.mm:
        (WebCore::getRawCookies):

          Stub other CookieJar implementations to satisfy the interface.

        * platform/haiku/CookieJarHaiku.cpp:
        (WebCore::getRawCookies):
        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::getRawCookies):
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::getRawCookies):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::getRawCookies):
        * platform/network/win/CookieJarCFNetWin.cpp:
        (WebCore::getRawCookies):
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::getRawCookies):
        * platform/qt/CookieJarQt.cpp:
        (WebCore::getRawCookies):

2009-08-08  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: Cookies in Storage Panel
        https://bugs.webkit.org/show_bug.cgi?id=27202

          Data Structure for a Cookie. Just Key/Value for Now:

        * inspector/front-end/Cookie.js: Added.
        (WebInspector.Cookie):
        (WebInspector.Cookie.prototype.get key):
        (WebInspector.Cookie.prototype.set key):
        (WebInspector.Cookie.prototype.get value):
        (WebInspector.Cookie.prototype.set value):

          A Storage View for Cookies.  Allows for Refresh/Delete:

        * inspector/front-end/CookieItemsView.js: Added.
        (WebInspector.CookieItemsView):
        (WebInspector.CookieItemsView.prototype.get statusBarItems): refresh and delete buttons
        (WebInspector.CookieItemsView.prototype.show):
        (WebInspector.CookieItemsView.prototype.hide):
        (WebInspector.CookieItemsView.prototype.update):
        (WebInspector.CookieItemsView.prototype.buildCookies): parses the inspected window's document.cookie string
        (WebInspector.CookieItemsView.prototype.dataGridForCookies): creates a datagrid for cookies
        (WebInspector.CookieItemsView.prototype._deleteButtonClicked): attempt at deleting the cookie (not flawless)
        (WebInspector.CookieItemsView.prototype._refreshButtonClicked): rebuild the datagrid

          Include a SidebarSection Section in the Databases Panel:

        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel):
        (WebInspector.DatabasesPanel.prototype.show): calls populateInterface
        (WebInspector.DatabasesPanel.prototype.populateInterface): adds cookies if they don't exist
        (WebInspector.DatabasesPanel.prototype.reset): remove cookie specific parts
        (WebInspector.DatabasesPanel.prototype.addCookies): add cookies sidebar tree element
        (WebInspector.DatabasesPanel.prototype.showCookies): sets the visible view to a CookiesItemView
        (WebInspector.CookieSidebarTreeElement):
        (WebInspector.CookieSidebarTreeElement.prototype.onselect):
        (WebInspector.CookieSidebarTreeElement.prototype.get mainTitle): just "Cookies" at the moment
        (WebInspector.CookieSidebarTreeElement.prototype.set mainTitle):
        (WebInspector.CookieSidebarTreeElement.prototype.get subtitle): no subtitle yet
        (WebInspector.CookieSidebarTreeElement.prototype.set subtitle):

          New "Cookies" Image for the Sidebar:

        * inspector/front-end/Images/cookie.png: Added.
        * inspector/front-end/inspector.css:

          Include the Added Files where appropriate:

        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2009-08-12  George Wright  <george.wright@torchmobile.com>

        Reviewed by George Staikos.

        Add SQLTransactionCoordinator.[h,cpp] to WebCore.pro.

        https://bugs.webkit.org/show_bug.cgi?id=28246

        * WebCore.pro:

2009-08-12  George Staikos  <george.staikos@torchmobile.com>

        Reviewed by Adam Treat.

        Mark unused variables to avoid compile failures in -Werror.

        * wml/WMLAnchorElement.cpp:
        (WebCore::WMLAnchorElement::deregisterTask):
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::deregisterTask):

2009-08-12  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by Niko Zimmermann.

        This is to add WCSS marquee support , which is defined by OMA and is an extension for CSS2, 
        It extends CSS display with "display:-wap-marquee;-wap-marquee-dir:xxx;-wap-marquee-speed:xxx;-wap-marquee-style:xxx"
        Minor fixes by Eric Seidel and George Staikos.
        https://bugs.webkit.org/show_bug.cgi?id=23727

        No new tests, the tests have already been landed at LayoutTests/fast/wcss/

        * WebCore.pro:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:
        * css/WCSSPropertyNames.in: Added.
        * css/WCSSValueKeywords.in: Added.
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::start):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-08-12  George Wright  <george.wright@torchmobile.com>

        Reviewed by David Hyatt.

        Update the canvas renderer's intrinsic size with the zoomed
        lengths and ensure the intrinsic size is correct when setting
        an initial style.

        https://bugs.webkit.org/show_bug.cgi?id=26908

        Test: fast/canvas/canvas-zoom.html

        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::canvasSizeChanged):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::styleDidChange):

2009-08-12  Alpha Lam  <hclam@chromium.org>

        Reviewed by Simon Fraser.

        Fix regression for dragging the media controller thumb.
        https://bugs.webkit.org/show_bug.cgi?id=28211

        Modified the conditions for rejecting events on the media controller
        to only rejecting mouse events not from the left button.

        Test: media/controls-drag-timebar.html

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineElement::defaultEventHandler):

2009-08-12  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Eric Seidel.

        Fixing a deadlock caused by two transactions that run on two
        different database handles for the same DB. Adding a per-DB thread
        transaction coordinator that allows the DB thread to run only one
        transaction per DB file at any given time.

        Adding a regression test for this bug.

        Test: storage/multiple-transactions-on-different-handles.html

        https://bugs.webkit.org/show_bug.cgi?id=27966

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/Database.cpp:
        (WebCore::Database::transactionCoordinator):
        * storage/Database.h:
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        * storage/DatabaseThread.h:
        (WebCore::DatabaseThread::transactionCoordinator):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::SQLTransaction):
        (WebCore::SQLTransaction::debugStepName):
        (WebCore::SQLTransaction::performNextStep):
        (WebCore::SQLTransaction::aquireLock):
        (WebCore::SQLTransaction::lockAquired):
        (WebCore::SQLTransaction::cleanupAfterSuccessCallback):
        (WebCore::SQLTransaction::cleanupAfterTransactionErrorCallback):
        * storage/SQLTransaction.h:
        * storage/SQLTransactionCoordinator.cpp: Added.
        * storage/SQLTransactionCoordinator.h: Added.

2009-08-12  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        Custom properties on DOM objects are lost after GC (as demonstrated by the gc-9.html test)
        https://bugs.webkit.org/show_bug.cgi?id=28194

        * GNUmakefile.am: Added the two new source files.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.

        * bindings/js/JSCSSRuleListCustom.cpp: Added.
        (WebCore::JSCSSRuleList::markChildren): Call markDOMObjectWrapper
        on rules in the list.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::markChildren): Added. Call
        markDOMObjectWrapper on the CSSValue objects that are owned by the
        declaration as values of the properties.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::isObservableThroughDOM): Added code to handle some
        cases where nodes are observable because they own objects that
        in turn have custom properties.

        * bindings/js/JSDOMBinding.h: Fix a typo in the header.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::markChildren): Added call to markDOMObjectWrapper
        for implementation and styleSheets.

        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::markChildren): Added. Calls markDOMObjectWrapper
        for attributes and style.

        * bindings/js/JSHTMLCanvasElementCustom.cpp: Added.
        (WebCore::JSHTMLCanvasElement::markChildren): Call markDOMObjectWrapper
        on the rendering context.

        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::JSStyleSheet::markChildren): Call markDOMObjectWrapper on
        items in the stylesheet.

        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::markChildren): Added. Calls
        markDOMObjectWrapper on stylesheets in the list.

        * css/CSSRuleList.idl: Added CustomMarkFunction.
        * css/CSSStyleDeclaration.idl: Ditto.
        * css/StyleSheetList.idl: Ditto.
        * dom/Element.idl: Ditto.
        * html/HTMLCanvasElement.idl: Ditto.

        * dom/Element.h: Made everything private that could be.
        Added access to the attributeMap that does returns
        the existing map without doing any of the lazy-updating work. This
        is needed to get at the existing attributes during garbage collection
        without having side effects.

        * html/HTMLCanvasElement.h: Cleaned up the header a bit, making
        members private. Added renderingContext2D function for use in
        JSHTMLCanvasElement::markChildren.

2009-08-12  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Eric Seidel.

        Fixes two bugs about Pan Scrolling - Scrolling with middle mouse button doesn't 
        work in Expanded view on reader.google.com, and Can enter auto scroll from a non-scrollable area.
        https://bugs.webkit.org/show_bug.cgi?id=28023
        https://bugs.webkit.org/show_bug.cgi?id=24794
        
        Added a new method to RenderBox seeing if the Box can be scrolled and actually has something to
        scroll, and use that for pan scrolling.

        Test: platform/win/fast/events/panScroll-nested-divs.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::EventHandler::updateAutoscrollRenderer):
        (WebCore::EventHandler::handleMousePressEvent):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::canBeScrolledAndHasScrollableArea):
        * rendering/RenderBox.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollByRecursively):

2009-08-12  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Fix of <rdar://6728361> Mouse wheel scrolling on a page with expanded drop down 
        list detaches drop down.

        Added a function for Windows PopupMenu's to return their class name.

         * platform/PopupMenu.h:
         * platform/win/PopupMenuWin.cpp:
         (WebCore::PopupMenu::popupClassName):

2009-08-12  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Dan Bernstein.

        WINCE PORT: Color and Gradient
        https://bugs.webkit.org/show_bug.cgi?id=27511

        * platform/graphics/wince/ColorWince.cpp: Added.
        * platform/graphics/wince/GradientWince.cpp: Added.

2009-08-12  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Eric Seidel.

        fix a typo in platform/graphics/skia/PlatformContextSkia.cpp
        https://bugs.webkit.org/show_bug.cgi?id=28172

        No new tests because it's a just typo fix.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::setupPaintCommon):

2009-08-12  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27458
        Support for the :default CSS pseudoclass, as per HTML5 spec.
        http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#selector-default

        Tests: fast/css/pseudo-default-001.html
               fast/css/pseudo-default-002.html
               fast/css/pseudo-default-003.html
               fast/css/pseudo-default-004.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType): pseudoDefault
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement): sharing stuff is
        aware that only one default button can be present in a form
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): applies
        the :default CSS pseudoclass
        * dom/Element.h:
        (WebCore::Element::isDefaultButtonForForm): new method to determine
        whether a FormControl is a default button for a given form
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isDefaultButtonForForm): ditto
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::defaultButton): extracts the default button
        from the form
        * html/HTMLFormElement.h:

2009-08-12  David Levin  <levin@chromium.org>

        No review, rolling out r47106.
        https://bugs.webkit.org/show_bug.cgi?id=28215

        This patch relied on a new version of v8 which is not available
        in chromium yet.

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8StringToAtomicWebCoreString):

2009-08-12  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        Bug 26993 : Geolocation::requestPermission()
        https://bugs.webkit.org/show_bug.cgi?id=26993

        Second patch to allow the Geolocation permission request to chrome to be asynchronous
        or synchronous. Fixes a bug where callbacks were called twice when permissions
        are granted synchronously.

        No new tests required.

        * page/Geolocation.cpp:
        (WebCore::Geolocation::setIsAllowed): Modified. Calls makeSuccessCallbacks() rather than geolocationServicePositionChanged().
        (WebCore::Geolocation::geolocationServicePositionChanged): Modified. Updated logic to avoid repeated callbacks when permissions are granted synchronously.
        (WebCore::Geolocation::makeSuccessCallbacks): Added. Calls success callbacks.
        * page/Geolocation.h: Modified. Adds makeSuccessCallbacks().

2009-08-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6952336>
        CrashTracer: [USER] 3 crashes in Safari at com.apple.WebCore • WebCore::SecurityOrigin::canAccess const 27

        Make sure to set the security origin before calling dispatchWindowObjectAvailable.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):

2009-08-12  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Eric Seidel.

        Fix [Chromium] drop down menu letter selection, skip selections
        https://bugs.webkit.org/show_bug.cgi?id=28205

        Not auto-testable since it is chromim platform specific code, and it involves sending a keyboard 
        event to the popup, which is not possible (eventSender sends the key
        events through webview, we want to go through the webwidget).

        * manual-tests/keyboard_select_elements_with_same_beginning.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::isCharacterTypeEvent): style change.
        (WebCore::PopupListBox::handleKeyEvent): typeAheadFind should be called only when the event is
        a character type event to avoid calling twice for English.
        (WebCore::PopupListBox::typeAheadFind): remove unnecessary checking of isCharacterTypeEvent() since the whole function is only called under that condition.

2009-08-12  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Adding GraphicsContext to WebCore/platform/graphics/haiku.
        https://bugs.webkit.org/show_bug.cgi?id=28130

        * platform/graphics/haiku/GraphicsContextHaiku.cpp: Added.
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::platformContext):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::beginPath):
        (WebCore::GraphicsContext::addPath):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::setCompositeOperation):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipToImageBuffer):
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::origin):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::setPlatformShouldAntialias):
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::setURLForRect):
        (WebCore::GraphicsContext::setPlatformFont):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::getHaikuStrokeStyle):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::clearPlatformShadow):
        (WebCore::GraphicsContext::setPlatformShadow):

2009-08-12  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Modifying WebCore/platform/graphics files to allow Haiku port.
        https://bugs.webkit.org/show_bug.cgi?id=28128

        * platform/graphics/BitmapImage.h: Adding getBBitmap() function.
        * platform/graphics/Color.h: rgb_color is the Color struct in Haiku.
        * platform/graphics/FloatPoint.h: BPoint is the Point class in Haiku.
        * platform/graphics/FloatRect.h: BRect is the Rect class in Haiku.
        * platform/graphics/GraphicsContext.cpp: 
        * platform/graphics/GraphicsContext.h: BView is the PlatformGraphicsContext
        class for Haiku. Adding getHaikuStrokeStyle() function.
        * platform/graphics/Icon.h: Adding an empty Icon() constructor because
        this class isn't implemented for the moment.
        * platform/graphics/ImageSource.h: BBitmap is the native bitmap class 
        for Haiku.
        * platform/graphics/IntPoint.h: BPoint is the Point class in Haiku.
        * platform/graphics/IntRect.h: BRect is the Rect class in Haiku.
        * platform/graphics/IntSize.h: BSize is the Size class in Haiku.
        * platform/graphics/Path.h: BRegion is the Path class in Haiku.
        * platform/graphics/Pattern.h: Adding the GraphicsDef.h header and the 
        native pattern type.
        * platform/graphics/SimpleFontData.h: Adding Haiku's Font.h header.

2009-08-12  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Adding modification to the WebCore/platform/ files to allow
        the Haiku port.
        https://bugs.webkit.org/show_bug.cgi?id=28128

        * platform/ContextMenuItem.h: BMenu is the PlatformMenuItemDescription
        class of Haiku.
        * platform/Cursor.h: BCursor is the Cursor class of Haiku.
        * platform/DragData.h: Use a BMessage as DragDataRef.
        * platform/DragImage.h: Use a BBitmap as DragImageRef.
        * platform/PlatformKeyboardEvent.h: Use BMessage as event vehicle.
        * platform/PlatformMenuDescription.h: BMenu is the 
        PlatformMenuDescription class of Haiku.
        * platform/PlatformMouseEvent.h: Use BMessage as event vehicle.
        * platform/PlatformWheelEvent.h: Use BMessage as event vehicle.
        * platform/PopupMenu.h: Adding a m_menu attribute for Haiku.
        * platform/Widget.h: BView is the PlatformWidget class of Haiku.

2009-08-12  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Tiny modifications on WebCore files to allow Haiku port.
        https://bugs.webkit.org/show_bug.cgi?id=28128

        * bindings/js/ScriptControllerHaiku.cpp: Style cleanup.
        * loader/CachedFont.cpp: Haiku behaves like Qt, Gtk, or Chromium,
        so many PLATFORM(HAIKU) were added to these functions.
        (WebCore::CachedFont::~CachedFont):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::platformDataFromCustomData):
        (WebCore::CachedFont::allClientsRemoved):
        * page/EventHandler.cpp: Like the mac and Qt port, Haiku doesn't need the
        invertSenseOfTabsToLinks() function.
        * page/haiku/DragControllerHaiku.cpp: Style cleanup.
        * platform/image-decoders/ImageDecoder.h: For image decoding Haiku
        behaves like Cairo or Wx, (not like Skia).
        (WebCore::RGBA32Buffer::getAddr):
        * platform/text/PlatformString.h: Adding the String(BString&) and BString()
        methods specific to Haiku.
        * platform/text/UnicodeRange.h: Haiku needs to include stdint.h.
        * platform/text/haiku/TextBreakIteratorInternalICUHaiku.cpp:
        (WebCore::currentSearchLocaleID): Missing function.

2009-08-12  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Adding the ScrollbarTheme files.
        https://bugs.webkit.org/show_bug.cgi?id=28125

        * platform/haiku/ScrollbarThemeHaiku.cpp: Added.
        (buttonWidth):
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeHaiku::ScrollbarThemeHaiku):
        (WebCore::ScrollbarThemeHaiku::~ScrollbarThemeHaiku):
        (WebCore::ScrollbarThemeHaiku::scrollbarThickness):
        (WebCore::ScrollbarThemeHaiku::hasButtons):
        (WebCore::ScrollbarThemeHaiku::hasThumb):
        (WebCore::ScrollbarThemeHaiku::backButtonRect):
        (WebCore::ScrollbarThemeHaiku::forwardButtonRect):
        (WebCore::ScrollbarThemeHaiku::trackRect):
        (WebCore::ScrollbarThemeHaiku::paintScrollbarBackground):
        (WebCore::ScrollbarThemeHaiku::paintButton):
        (WebCore::ScrollbarThemeHaiku::paintThumb):
        * platform/haiku/ScrollbarThemeHaiku.h: Added.

2009-08-12  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Adding eight simple files to WebCore/platform/graphics/haiku.
        https://bugs.webkit.org/show_bug.cgi?id=28122

        * platform/graphics/haiku/ColorHaiku.cpp: Added.
        (WebCore::Color::Color):
        (WebCore::Color::operator rgb_color):
        (WebCore::focusRingColor):
        * platform/graphics/haiku/FloatPointHaiku.cpp: Added.
        (WebCore::FloatPoint::FloatPoint):
        (WebCore::FloatPoint::operator BPoint):
        * platform/graphics/haiku/FloatRectHaiku.cpp: Added.
        (WebCore::FloatRect::FloatRect):
        (WebCore::FloatRect::operator BRect):
        * platform/graphics/haiku/GradientHaiku.cpp: Added.
        (WebCore::Gradient::platformDestroy):
        (WebCore::Gradient::platformGradient):
        (WebCore::Gradient::fill):
        * platform/graphics/haiku/IntPointHaiku.cpp: Added.
        (WebCore::IntPoint::IntPoint):
        (WebCore::IntPoint::operator BPoint):
        * platform/graphics/haiku/IntRectHaiku.cpp: Added.
        (WebCore::IntRect::IntRect):
        (WebCore::IntRect::operator BRect):
        * platform/graphics/haiku/IntSizeHaiku.cpp: Added.
        (WebCore::IntSize::IntSize):
        (WebCore::IntSize::operator BSize):
        * platform/graphics/haiku/PathHaiku.cpp: Added.
        (WebCore::Path::Path):
        (WebCore::Path::~Path):
        (WebCore::Path::operator=):
        (WebCore::Path::hasCurrentPoint):
        (WebCore::Path::contains):
        (WebCore::Path::translate):
        (WebCore::Path::boundingRect):
        (WebCore::Path::moveTo):
        (WebCore::Path::addLineTo):
        (WebCore::Path::addQuadCurveTo):
        (WebCore::Path::addBezierCurveTo):
        (WebCore::Path::addArcTo):
        (WebCore::Path::closeSubpath):
        (WebCore::Path::addArc):
        (WebCore::Path::addRect):
        (WebCore::Path::addEllipse):
        (WebCore::Path::clear):
        (WebCore::Path::isEmpty):
        (WebCore::Path::debugString):
        (WebCore::Path::apply):
        (WebCore::Path::transform):
        (WebCore::Path::strokeBoundingRect):

2009-08-12  Lyon Chen  <lyon.chen@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: Implement Keygen for WINCE
        https://bugs.webkit.org/show_bug.cgi?id=27543

        * platform/wince/KeygenWince.cpp: Added.

2009-08-12  Brent Fulgham  <bfulgham@webkit.org>

        Rubber-stamped by Kevin Ollivier.

        Handle crash in wx due to null value passed to strlen in
        the CString constructor.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::certificatePath):  Check for null return from getenv
        and use default CString constructor instead.

2009-08-12  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Eric Seidel.

        WINCE PORT: simple stubs to make it build for WINCE
        https://bugs.webkit.org/show_bug.cgi?id=27543

        * platform/wince/DragDataWince.cpp: Added.
        * platform/wince/DragImageWince.cpp: Added.
        * platform/wince/EditorWince.cpp: Added.
        * platform/wince/KURLWince.cpp: Added.

2009-08-12  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        WINCEPORT: FileSystem and FileChooser
        https://bugs.webkit.org/show_bug.cgi?id=27543

        * platform/wince/FileChooserWince.cpp: Added.
        * platform/wince/FileSystemWince.cpp: Added.

2009-08-12  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Eric Seidel.

        WINCE PORT: implement Cursor for WINCE. There's no real cursor on most
        WinMob devices. We pass the cursor info to application, which so that 
        can determine what to do.
        https://bugs.webkit.org/show_bug.cgi?id=27543

        * platform/wince/CursorWince.cpp: Added.

2009-08-12  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: MIMETypeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=27543

        * platform/wince/MIMETypeRegistryWince.cpp: Added.

2009-08-12  Joe Mason  <joe.mason@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: Pasteboard and SearchPopupMenu
        https://bugs.webkit.org/show_bug.cgi?id=27543

        * platform/wince/PasteboardWince.cpp: Added.
        * platform/wince/SearchPopupMenuWince.cpp: Added.

2009-08-12  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: Add SharedTimerWince.cpp and SystemTimeWince.cpp
        https://bugs.webkit.org/show_bug.cgi?id=27543

        * platform/wince/SharedTimerWince.cpp: Added.
        * platform/wince/SystemTimeWince.cpp: Added.

2009-08-12  Mark Mentovai  <mark@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=28204
        Allow C+exceptions to be disabled in WebCore's V8 Mac build.

        * WebCorePrefix.h:
        Only undefine |try| and |catch| when building Objective-C[++],
        leaving the C+library definitions intact for C++.

2009-08-12  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Add a Custom Setter for DOMWindowEvent in the V8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=27719

        Tests: fast/events/set-event-in-another-frame.html
               fast/events/set-event-to-null.html

        * bindings/scripts/CodeGeneratorV8.pm: Clean up custom getter/setter code, 
            as it currently doesn't support a custom getter 
            and a v8-specific custom setter simultaneously.
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * page/DOMWindow.idl:

2009-08-12  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Treat.

        https://bugs.webkit.org/show_bug.cgi?id=27965
        Merge wx/ImageSourceWx.cpp into ImageSource.cpp.  No changes to
        ImageSource.cpp were needed, so this just deletes ImageSourceWx.cpp.

        * WebCore.gypi:
        * WebCoreSources.bkl:
        * platform/graphics/wx/ImageSourceWx.cpp: Removed.
        * webcore-wx.bkl:

2009-08-12  Peter Kasting  <pkasting@google.com>

        Reviewed by Dave Levin.

        https://bugs.webkit.org/show_bug.cgi?id=27933
        Build fix after r47099.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):
        (WebCore::putImageData):

2009-08-08  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Adam Treat.

        WINCE PORT: Implement Path for WINCE. Most code can be
        reused for other ports that don't have native path support
        https://bugs.webkit.org/show_bug.cgi?id=28188

        Written also by George Staikos (including quadCurve() and bezier())

        * platform/graphics/wince/PathWince.cpp: Added.
        * platform/graphics/wince/PlatformPathWince.cpp: Added.
        * platform/graphics/wince/PlatformPathWince.h: Added.
        * platform/graphics/wince/WinceGraphicsExtras.h: Added.

2009-08-12  Joseph Pecoraro  <joepeck02@gmail.com>

        "Double-click to add" new style button does not always show up [quick fix]
        https://bugs.webkit.org/show_bug.cgi?id=28187

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle):

2009-08-12  Crystal Zhang <crystal.zhang@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: MediaPlayerProxy and MediaPlayerPrivate
        https://bugs.webkit.org/show_bug.cgi?id=28178

        * platform/graphics/wince/MediaPlayerPrivateWince.h: Added.
        * platform/graphics/wince/MediaPlayerProxy.cpp: Added.
        * platform/graphics/wince/MediaPlayerProxy.h: Added.

2009-08-12  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        HTML 5 database and LocalStorage is not persistent on the Symbian port of QtWebKit
        https://bugs.webkit.org/show_bug.cgi?id=28175

        Call QDir::toNativeSeparators() before the path is passed to the OS.

        Based on work by David Leong.
        
        * platform/qt/FileSystemQt.cpp:
        (WebCore::pathByAppendingComponent):

2009-08-12  Dirk Schulze  <krit@webkit.org>

        Reviewed by Ariya Hidayat.

        Minor build-fix for SVG Filter. Use getUnmultipliedImageData instead
        of getImageData. This changed since r47099.

        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::apply):

2009-08-12  Viet-Trung Luu  <viettrungluu@gmail.com>

        Reviewed by Dimitri Glazkov.

        Explicitly set control tints for Chromium/Mac, since the controls'
        NSCell(s) lack an NSView and hence their tint isn't updated
        automatically when the application is activated/deactivated.
        https://bugs.webkit.org/show_bug.cgi?id=28108
        http://crbug.com/18199

        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::updateNSCellControlTint):
        (WebCore::RenderThemeChromiumMac::paintCheckbox):
        (WebCore::RenderThemeChromiumMac::paintRadio):
        (WebCore::RenderThemeChromiumMac::paintButton):
        (WebCore::RenderThemeChromiumMac::paintMenuList):
        (WebCore::RenderThemeChromiumMac::paintSliderThumb):
        (WebCore::RenderThemeChromiumMac::paintSearchField):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldResultsButton):

2009-08-12  Christian Plesner Hansen  <christian.plesner.hansen@gmail.com>

        Reviewed by Dimitri Glazkov.

        [V8] Fix atomic string externalization crash.
        Atomic string externalization assumes that all non-empty strings
        can be externalized which is untrue on 64-bit.  This change fixed
        that.

        https://bugs.webkit.org/show_bug.cgi?id=28215

        This bug causes loads of test crashes, no need to add new tests
        specifically for this.

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8StringToAtomicWebCoreString):

2009-08-12  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Holger Freyther.

        [Qt] Fix box-shadow painting in r47103. The edge should not be blurry.
        Also optimize by not having to save and restore painter state.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::fillRect):

2009-08-12  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Adam Treat.

        [Qt] Fix coding style in GraphicsContextQt.cpp

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::toQtCompositionMode):
        (WebCore::toQtLineCap):
        (WebCore::toQtLineJoin):
        (WebCore::GraphicsContextPlatformPrivate::p):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::pen):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):

2009-08-12  Szabo Carol  <carol.szabo@nokia.com>

        Reviewed by Simon Hausmann and Ariya Hidayat.

        https://bugs.webkit.org/show_bug.cgi?id=23291

        [Qt] Partial support for -webkit-box-shadow. Blur is not support and
        the shadow still does not go well with border radius.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::fillRect):

2009-08-12  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        Use AM_V_GEN in a few more places, for less noisy builds.

        * GNUmakefile.am:

2009-08-12  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        SVG Filter premultiplied color support for getImageDate/putImageData
        [https://bugs.webkit.org/show_bug.cgi?id=27933]

        Some SVG Filters need premultiplied ImageData for the calculation. Therefore getImageData
        and putImageData of ImageBuffer need support for premultiplied colors.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::getImageData):
        (WebCore::CanvasRenderingContext2D::putImageData):
        * platform/graphics/ImageBuffer.h:
        (WebCore::):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        * svg/graphics/SVGResourceMasker.cpp:
        (WebCore::SVGResourceMasker::applyMask):

2009-08-12  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Changed Number.bytesToString to support low-resolution output.

        https://bugs.webkit.org/show_bug.cgi?id=28146

        * inspector/front-end/utilities.js:
        (Number.bytesToString):

2009-08-12  Prasanth Ullattil  <prasanth.ullattil@nokia.com>

        Reviewed by Simon Hausmann.

        Add support for hooking BeginPaint/EndPaint on 64Bit Windows

        Webkit uses the runtime patching trick explained by "Feng Yuan" for
        hooking these paint functions. It currently supports only 32bit assembly
        code. This patch adds support for 64Bit version. Since inline-assemblies
        are not supported for 64Bit, we have use a seperate .asm file.

        * WebCore.pro:
        * plugins/win/PaintHooks.asm: Added.
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::hookedBeginPaint):
        (WebCore::PluginView::hookedEndPaint):
        (WebCore::hook):

2009-08-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make it harder to misuse try* allocation routines
        https://bugs.webkit.org/show_bug.cgi?id=27469

        Add forwarding header for PossiblyNull type, and add missing null check
        to ImageBuffer creation.

        * ForwardingHeaders/wtf/PossiblyNull.h: Added.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2009-08-11  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Restrict use of FuncDeclNode & FuncExprNode to the parser.
        https://bugs.webkit.org/show_bug.cgi?id=28209

        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::recompileAllJSFunctions):
            Function signature change.

2009-08-11  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Treat.

        https://bugs.webkit.org/show_bug.cgi?id=27965
        Merge skia/ImageSourceSkia.cpp into ImageSource.cpp.

        * WebCore.gypi: Remove deleted file, plus a file that was deleted a while back.
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::setData): Use slightly shorter syntax.
        (WebCore::ImageSource::filenameExtension): Use shorter syntax.
        (WebCore::ImageSource::createFrameAtIndex): Remove redundant call, clarify comments, reject all empty images.
        (WebCore::ImageSource::frameHasAlphaAtIndex): Clarify comments, use shorter syntax.
        * platform/graphics/skia/ImageSourceSkia.cpp: Removed.

2009-08-11  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        SharedWorkers do not exit when the last parent document exits
        https://bugs.webkit.org/show_bug.cgi?id=28170

        Prevents Documents from being suspended/placed in the page cache if they are associated with shared workers.

        Added vector cache instead of nested hash tables for SharedWorker repository.

        Added SharedWorkerRepository::documentDetached API.

        * dom/Document.cpp:
        (WebCore::Document::detach):
        Notifies SharedWorkerRepository when the document is closing.
        * loader/FrameLoader.cpp:
        Updated FrameLoader to not cache the Document if it is associated with a SharedWorker (since we can't suspend workers yet, we need to shut them down).
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::logCanCacheFrameDecision):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::create):
        (WebCore::SharedWorkerProxy::isClosing):
        Renamed from closing().
        (WebCore::SharedWorkerProxy::matches):
        Added manual equality function to replace old hash lookup.
        (WebCore::SharedWorkerProxy::isDocumentInWorkerDocuments):
        Checks to see if a document is in the worker's list of documents. Used to determine if page is suspendable.
        (WebCore::SharedWorkerProxy::SharedWorkerProxy):
        (WebCore::SharedWorkerProxy::addToWorkerDocuments):
        Added tracking of the worker's list of documents for lifecycle purposes.
        (WebCore::SharedWorkerProxy::documentDetached):
        Shuts down the proxy when the last associated document is detached.
        (WebCore::SharedWorkerProxy::close):
        Marks the proxy as closed so it is no longer shared with new instances.
        (WebCore::SharedWorkerProxy::workerContextDestroyed):
        Removes the proxy from the repository/frees the proxy when the associated SharedWorkerContext is destroyed.
        (WebCore::DefaultSharedWorkerRepository::workerScriptLoaded):
        closing()->isClosing()
        (WebCore::SharedWorkerRepository::documentDetached):
        (WebCore::SharedWorkerRepository::hasSharedWorkers):
        Used by FrameLoader to determine if a page has shared workers and so cannot be suspended/cached.
        (WebCore::DefaultSharedWorkerRepository::hasSharedWorkers):
        (WebCore::DefaultSharedWorkerRepository::removeProxy):
        Invoked by workerContextDestroyed() to remove a SharedWorkerProxy from the repository.
        (WebCore::DefaultSharedWorkerRepository::documentDetached):
        (WebCore::DefaultSharedWorkerRepository::connectToWorker):
        (WebCore::DefaultSharedWorkerRepository::getProxy):
        * workers/DefaultSharedWorkerRepository.h:
        * workers/SharedWorkerRepository.h:

2009-08-11  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 28200 - ListMarker should be included as part of the text value to parse
        https://bugs.webkit.org/show_bug.cgi?id=28200

        When returning text through the marker range attributes, the list marker text should
        also be included. It isn't included by default because a TextIterator is used which
        only looks at Nodes for text. A list marker does not have a corresponding node,
        so its text is not returned through accessibility. That is, until now.

        Test: platform/mac/accessibility/string-range-contains-listmarker.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::listMarkerTextForRange):
        (WebCore::AccessibilityObject::stringForVisiblePositionRange):
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]):
        (-[AccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        * rendering/RenderListItem.h:

        Make markerText() public so that accessibility code can access it.

2009-08-11  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Treat.

        https://bugs.webkit.org/show_bug.cgi?id=27965
        Move cairo/ImageSourceCairo.cpp to ImageSource.cpp in preparation for
        merging most of the other ImageSource*.cpp files with it.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/ImageSource.cpp: Copied from WebCore/platform/graphics/cairo/ImageSourceCairo.cpp.
        * platform/graphics/cairo/ImageSourceCairo.cpp: Removed.

2009-08-10  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Cairo-based Windows port does not handle the https protocol.
        https://bugs.webkit.org/show_bug.cgi?id=28171.

        No new tests needed.  Existing https tests show this failure
        for WinCairo builds.

        * WebCore.vcproj/WebCoreCURL.vsprops: Add a few preprocessor
          definitions for SSL support in cURL.
        * platform/network/curl/ResourceHandleManager.h: Add new
          certificate path member variable.
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::certificateBundlePath): New method to retrieve the
          proper certificate resource bundle path.
        (WebCore::ResourceHandleManager::initializeHandle): Check for
          the resource bundle and use if available to activate SSL
          support.

2009-08-11  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Use Clipboard::create() instead of the constructor of Clipboard.
        https://bugs.webkit.org/show_bug.cgi?id=28127

        * editing/haiku/EditorHaiku.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * page/haiku/EventHandlerHaiku.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/haiku/ClipboardHaiku.cpp: Style cleanup. There were many whitespace end of lines.
        (WebCore::ClipboardHaiku::ClipboardHaiku):
        (WebCore::ClipboardHaiku::clearAllData):
        (WebCore::ClipboardHaiku::getData):
        (WebCore::ClipboardHaiku::setData):
        (WebCore::ClipboardHaiku::types):
        (WebCore::ClipboardHaiku::dragLocation):
        (WebCore::ClipboardHaiku::dragImage):
        (WebCore::ClipboardHaiku::setDragImage):
        (WebCore::ClipboardHaiku::dragImageElement):
        (WebCore::ClipboardHaiku::createDragImage):
        (WebCore::ClipboardHaiku::declareAndWriteDragImage):
        (WebCore::ClipboardHaiku::writeURL):
        (WebCore::ClipboardHaiku::writeRange):
        (WebCore::ClipboardHaiku::hasData):
        * platform/haiku/DragDataHaiku.cpp:
        (WebCore::DragData::createClipboard):

2009-08-11  Drew Wilson  <atwilson@google.com>

        Reviewed by NOBODY (build break).

        Speculative GTK build fix

        * GNUmakefile.am:
        Added missing .idl file, and added notifications directory to IDL_PATH.

2009-08-11  Drew Wilson  <atwilson@google.com>

        Reviewed by NOBODY (build break).

        Speculative Windows build fix

        * WebCore.vcproj/WebCore.vcproj:
        Added missing build steps for non-debug targets.

2009-08-11  Drew Wilson <atwilson@google.com>

        Reviewed by NOBODY (build break)

        Speculative build fix for Qt build.

        * WebCore.pro: Added /notifications to include path

2009-08-11  John Gregg  <johnnyg@google.com>

        Reviewed by Maciej Stachowiak.

        Desktop Notifications API
        https://bugs.webkit.org/show_bug.cgi?id=25463

        Adds an implementation of desktop notifications, behind the compile-time
        flag ENABLE(NOTIFICATIONS).  This code simply relays calls on the JavaScript
        API through a NotificationProvider interface, which must provide the services
        to actually notify the user and manage the desktop.  This provider is injected
        into WebKit through the ChromeClient for normal page contexts and through the
        WorkerThread for worker contexts.

        A permissions API is defined on a per-origin basis, which allows a web page
        to check if its origin is allowed to show desktop notifications, and to request
        permission for its origin.

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDesktopNotificationsCustom.cpp: Added.
        (WebCore::JSNotificationCenter::requestPermission):
        (WebCore::JSNotification::addEventListener):
        (WebCore::JSNotification::removeEventListener):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        (WebCore::toEventTarget):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toNotification):
        * dom/EventTarget.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::notificationPresenter):
        * notifications: Added.
        * notifications/Notification.cpp: Added.
        (WebCore::Notification::Notification):
        (WebCore::Notification::~Notification):
        (WebCore::Notification::show):
        (WebCore::Notification::cancel):
        (WebCore::Notification::ondisplay):
        (WebCore::Notification::setOndisplay):
        (WebCore::Notification::onerror):
        (WebCore::Notification::setOnerror):
        (WebCore::Notification::onclose):
        (WebCore::Notification::setOnclose):
        (WebCore::Notification::getAttributeEventListener):
        (WebCore::Notification::setAttributeEventListener):
        (WebCore::Notification::clearAttributeEventListener):
        (WebCore::Notification::dispatchDisplayEvent):
        (WebCore::Notification::dispatchErrorEvent):
        (WebCore::Notification::dispatchCloseEvent):
        (WebCore::Notification::addEventListener):
        (WebCore::Notification::removeEventListener):
        (WebCore::Notification::handleEvent):
        (WebCore::Notification::dispatchEvent):
        * notifications/Notification.h: Added.
        (WebCore::Notification::create):
        (WebCore::Notification::isHTML):
        (WebCore::Notification::url):
        (WebCore::Notification::contents):
        (WebCore::Notification::scriptExecutionContext):
        (WebCore::Notification::toNotification):
        (WebCore::Notification::refEventTarget):
        (WebCore::Notification::derefEventTarget):
        * notifications/Notification.idl: Added.
        * notifications/NotificationCenter.cpp: Added.
        (WebCore::NotificationCenter::NotificationCenter):
        (WebCore::NotificationCenter::checkPermission):
        (WebCore::NotificationCenter::requestPermission):
        * notifications/NotificationCenter.h: Added.
        (WebCore::NotificationCenter::create):
        (WebCore::NotificationCenter::createHTMLNotification):
        (WebCore::NotificationCenter::createNotification):
        (WebCore::NotificationCenter::context):
        (WebCore::NotificationCenter::presenter):
        * notifications/NotificationCenter.idl: Added.
        * notifications/NotificationContents.h: Added.
        (WebCore::NotificationContents::NotificationContents):
        (WebCore::NotificationContents::icon):
        (WebCore::NotificationContents::title):
        (WebCore::NotificationContents::body):
        * notifications/NotificationPresenter.h: Added.
        (WebCore::NotificationPresenter::):
        (WebCore::NotificationPresenter::~NotificationPresenter):
        * page/Chrome.cpp:
        (WebCore::Chrome::notificationPresenter):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clear):
        (WebCore::DOMWindow::webkitNotifications):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/Page.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::~WorkerContext):
        (WebCore::WorkerContext::webkitNotifications):
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:
        * workers/WorkerThread.h:
        (WebCore::WorkerThread::getNotificationPresenter):
        (WebCore::WorkerThread::setNotificationPresenter):

2009-08-11  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: Console Drawer is Toggling instead of Staying Open
        https://bugs.webkit.org/show_bug.cgi?id=28115

        * inspector/front-end/Drawer.js:
        (WebInspector.Drawer.prototype.showView): ensures the drawer will be open and showing the provided view
        * inspector/front-end/inspector.js:
        (WebInspector.showConsole): usees the new showView to guarantee the Drawer will be open
        (WebInspector.showChanges): uses the new showView guarantee the Drawer will be open

2009-08-11  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] WMLPageState is not allowed to store the active card, it needs to be done per document
        https://bugs.webkit.org/show_bug.cgi?id=28180

        Don't store the active WMLCardElement in WMLPageState, but in WMLDocument.
        Otherwhise this may lead to crashes related to intrinsic event exeuction.

        Unfortunately select elements aren't testable by the layout tests, so adding
        a new manual test reproducing the crash.

        * manual-tests/wml/select-onpick-event-crash.wml: Added.
        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::determineActiveCard):
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::defaultEventHandler):
        * wml/WMLDocument.cpp:
        (WebCore::WMLDocument::finishedParsing):
        * wml/WMLDocument.h:
        (WebCore::WMLDocument::activeCard):
        * wml/WMLGoElement.cpp:
        (WebCore::WMLGoElement::executeTask):
        * wml/WMLPageState.cpp:
        (WebCore::WMLPageState::WMLPageState):
        * wml/WMLPageState.h:
        * wml/WMLPrevElement.cpp:
        (WebCore::WMLPrevElement::executeTask):
        * wml/WMLRefreshElement.cpp:
        (WebCore::WMLRefreshElement::executeTask):

2009-08-07  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28073
        Treat icons with no bit count and no color count as 256-color for
        purposes of quality ranking.  Also fix a couple cases of a style
        violation.

        Test: fast/images/icon-0colors.html

        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::processDirectory):
        (WebCore::ICOImageDecoder::readDirectoryEntry):

2009-08-11  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Need to refactor WorkerObjectProxy.
        https://bugs.webkit.org/show_bug.cgi?id=28136

        Added WorkerReportingProxy for reporting worker state (exceptions, console messages, thread exited) to the parent.

        Existing tests are sufficient, as this is only a refactoring.

        * GNUmakefile.am:
        Added WorkerReportingProxy.h to build.
        * WebCore.gypi:
        Added WorkerReportingProxy.h to build.
        * WebCore.vcproj/WebCore.vcproj:
        Added WorkerReportingProxy.h to build.
        * WebCore.xcodeproj/project.pbxproj:
        Added WorkerReportingProxy.h to build.
        * workers/DedicatedWorkerContext.cpp:
        * workers/DedicatedWorkerContext.h:
        Removed addMessage/forwardException() APIs - now handled by WorkerReportingProxy.
        * workers/DedicatedWorkerThread.cpp:
        (WebCore::DedicatedWorkerThread::DedicatedWorkerThread):
        Changed constructor to pass WorkerReportingProxy to base class.
        * workers/DefaultSharedWorkerRepository.cpp:
        Updated SharedWorkerProxy to implement WorkerReportingProxy interface.
        (WebCore::SharedWorkerProxy::postExceptionToWorkerObject):
        (WebCore::SharedWorkerProxy::postConsoleMessageToWorkerObject):
        (WebCore::SharedWorkerProxy::workerContextClosed):
        (WebCore::SharedWorkerProxy::workerContextDestroyed):
        (WebCore::DefaultSharedWorkerRepository::workerScriptLoaded):
        Now passes in WorkerReportingProxy when creating SharedWorkerThread.
        * workers/SharedWorkerContext.cpp:
        * workers/SharedWorkerContext.h:
        Removed addMessage/forwardException() APIs - now handled by WorkerReportingProxy.
        * workers/SharedWorkerThread.cpp:
        (WebCore::SharedWorkerThread::create):
        (WebCore::SharedWorkerThread::SharedWorkerThread):
        Passes WorkerReportingProxy to base class constructor.
        * workers/SharedWorkerThread.h:
        Constructor now takes a WorkerReportingProxy.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::~WorkerContext):
        Moved code that calls workerContextDestroyed() into base class so shared workers share this functionality.
        (WebCore::WorkerContext::close):
        Now notifies WorkerReportingProxy when the thread is closing.
        (WebCore::WorkerContext::reportException):
        Reports exceptions via WorkerReportingProxy.
        (WebCore::WorkerContext::addMessage):
        Reports console messages via WorkerReportingProxy.
        * workers/WorkerContext.h:
        * workers/WorkerObjectProxy.h:
        (WebCore::WorkerObjectProxy::workerContextClosed):
        Default empty implementation for dedicated workers.
        * workers/WorkerReportingProxy.h: Added.
        Base interface that contains APIs moved from WorkerObjectProxy.
        (WebCore::WorkerReportingProxy::~WorkerReportingProxy):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::WorkerThread):
        Updated constructor to accept a WorkerReportingProxy.
        * workers/WorkerThread.h:
        (WebCore::WorkerThread::workerReportingProxy):

2009-08-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by NOBODY (build fix).

        Fix the Qt build after r47022.

        Use the new markChildren() pattern for marking aggregate/child objects.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObjectImp::markChildren):
        (JSC::Bindings::QtInstance::markAggregate):
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::markChildren):
        * bridge/qt/qt_runtime.h:

2009-08-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        Fix the build on the Qt build bot by making the generated JS bindings
        files depend on the code generator itself.

        * WebCore.pro:

2009-08-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig

        Stack overflow crash in JavaScript garbage collector mark pass
        https://bugs.webkit.org/show_bug.cgi?id=12216

        Make WebCore use the new iterative marking logic.

        Tests: fast/js/nested-object-gc.html

        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::markChildren):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::markChildren):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::markDOMNodesForDocument):
        (WebCore::markActiveObjectsForContext):
        (WebCore::markDOMObjectWrapper):
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWithGlobalPointer::markChildren):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::markChildren):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::markChildren):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::markChildren):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSDedicatedWorkerContextCustom.cpp:
        (WebCore::JSDedicatedWorkerContext::markChildren):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::markChildren):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::markJSFunction):
        * bindings/js/JSEventListener.h:
        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::markChildren):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::markChildren):
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::markChildren):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::markChildren):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::markAggregate):
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::markChildren):
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::markChildren):
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::markChildren):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::markChildren):
        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::JSSharedWorker::markChildren):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::JSStyleSheet::markChildren):
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::markChildren):
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocket::markChildren):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::markChildren):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorker::markChildren):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::markChildren):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::markChildren):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/EventListener.h:
        (WebCore::EventListener::markJSFunction):
        (WebCore::markIfNotNull):
        * dom/NodeFilter.h:
        (WebCore::NodeFilter::markAggregate):
        * dom/NodeFilterCondition.h:
        (WebCore::NodeFilterCondition::markAggregate):
        * dom/RegisteredEventListener.h:
        (WebCore::markEventListeners):
        * page/DOMWindow.h:
        * workers/WorkerContext.h:

2009-08-10  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Eric Seidel.

        Renamed all V8 NPN_ functions to _NPN_ to match JSC and make them "private".
        https://bugs.webkit.org/show_bug.cgi?id=28089

        Rename all the NPN_foo functions to _NPN_foo so that they can't directly be
        called by mistake.  This roughly matches the way JSC does it, which is an
        additional advantage.

        * bindings/v8/NPV8Object.cpp:
        (npCreateV8ScriptObject):
        (_NPN_Invoke):
        (_NPN_InvokeDefault):
        (_NPN_Evaluate):
        (_NPN_EvaluateHelper):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        (_NPN_SetException):
        (_NPN_Enumerate):
        (_NPN_Construct):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::clearScriptObjects):
        (WebCore::ScriptController::createScriptInstanceForWidget):
        (WebCore::ScriptController::cleanupScriptObjectsForPlugin):
        * bindings/v8/V8NPObject.cpp:
        (npObjectInvokeImpl):
        (npObjectGetProperty):
        (npObjectIndexedPropertyGetter):
        (npObjectGetIndexedProperty):
        (npObjectSetProperty):
        (npObjectIndexedPropertySetter):
        (npObjectSetIndexedProperty):
        (weakNPObjectCallback):
        (createV8ObjectForNPObject):
        (forgetV8ObjectForNPObject):
        * bindings/v8/V8NPUtils.cpp:
        (getStringIdentifier):
        * bindings/v8/npruntime.cpp:
        * bindings/v8/npruntime_impl.h:

2009-08-10  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Brady Eidson.

        Change ___Storage.key() to match current spec behavior.
        https://bugs.webkit.org/show_bug.cgi?id=28112

        The current WebStorage spec says that ___Storage.key() should return null when
        the index is out of bounds, rather than an exception.  A bunch of logic can be
        simplified after this change.

        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::getPropertyNames):
        * bindings/v8/custom/V8StorageCustom.cpp:
        (WebCore::V8Custom::v8StorageNamedPropertyEnumerator):
        * storage/Storage.cpp:
        (WebCore::Storage::key):
        * storage/Storage.h:
        * storage/Storage.idl:
        * storage/StorageArea.h:
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::key):
        * storage/StorageAreaImpl.h:
        * storage/StorageMap.cpp:
        (WebCore::StorageMap::key):
        * storage/StorageMap.h:

2009-08-07  Michael Nordman  <michaeln@google.com>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=28087

        Mods for a chrome specific impl of ApplicationCacheHost.

        * The public section of the interface is the same, but we use
        PLATFORM(CHROMIUM) to identify which parts of the private
        section are shared. The chrome specific internals are encapsulated
        in a seperate ApplicationCacheHostInternal class. WebCore common
        code only contains a forward reference to this class.

        * Cleanup a couple of stale comments.

        * Have window.applicationCache return null to script when the
        feature is disabled in the preferences.
        
        No new tests.

        * loader/appcache/ApplicationCacheHost.cpp:
        * loader/appcache/ApplicationCacheHost.h:
        (WebCore::ApplicationCacheHost::documentLoader):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::applicationCache):

2009-08-10  Crystal Zhang  <crystal.zhang@torchmobile.com>

        Reviewed by George Staikos.

        Implement GraphicsContext::fillRoundRect() for WINCE port
        https://bugs.webkit.org/show_bug.cgi?id=27842

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::rectCenterPoint):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::drawRoundCorner):

2009-08-10  Anthony Ricaud  <rik@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector Resources / Graphs should support filtering
        https://bugs.webkit.org/show_bug.cgi?id=20629

        Introduces a filter bar for resources.

        Thanks to Matt Lilek for the CSS scope bar.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.createFilterElement):
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.toolbarItemClass.categoryOrder.filter):
        (WebInspector.ResourcesPanel.prototype._updateFilter):
        (WebInspector.ResourcesPanel.prototype._updateSummaryGraph):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):

2009-08-10  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction after http://trac.webkit.org/changeset/46978

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::initializeHandle):  Correct
         deprecated removeRef to new removeFragmentIdentifier.

2009-08-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Justin Garcia.

        Background color formatting lost on enter
        https://bugs.webkit.org/show_bug.cgi?id=20348

        This patch makes background color be preserved during editing.
        In particular, editingStyleAtPosition would include the background color when obtaining styles.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::): Added CSSPropertyBackgroundColor to editingStyleProperties

2009-08-10  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Stop sending QEvent::CursorChange to Qt for mouse move.

        Verify if the cursor didn't change in WidgetQt::setCursor,
        just like the mac port does.

        Thanks to Adriano Rezendo for spotting and debugging the
        issue.

        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::setCursor):

2009-08-10  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=28165
        Application cache maximum size cannot be set before the database is opened

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::vacuumDatabaseFile): Open appcache database if it isn't
        open yet.

2009-08-10  Vitaly Repeshko  <vitalyr@quad.spb.corp.google.com>

        Reviewed by Dimitri Glazkov.

        [V8] Fix memory leak in node event listeners. See http://crbug.com/17400.
        https://bugs.webkit.org/show_bug.cgi?id=28156

        * bindings/scripts/CodeGeneratorV8.pm: Custom event handler accessors now apply to all Node descendants.
        * bindings/v8/V8AbstractEventListener.h:
        (WebCore::V8AbstractEventListener::isObjectListener): Added virtual method to detect listeners that have weak references to JS objects.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        * bindings/v8/V8ObjectEventListener.cpp:
        * bindings/v8/V8ObjectEventListener.h:
        (WebCore::V8ObjectEventListener::isObjectListener):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::removeHiddenDependency):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8ElementCustom.cpp:
        * bindings/v8/custom/V8NodeCustom.cpp: Moved custom accessors from V8ElementCustom.cpp.
        (WebCore::toEventType):
        (WebCore::getEventListener):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::getEventListener): Made static.

2009-08-10  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Cleanup DOM Storage namespace shutdown code usage of security origin.
        https://bugs.webkit.org/show_bug.cgi?id=28094

        If a storage namespace is not explicitly closed, be sure to do so on
        destruction of the object.  In addition, the close call should wait
        on the background thread finishing its syncing.  (Not doing so is actually
        a regression from the original LocalStorage code.)

        There's no point to passing in the SecurityOrigin when copying a storage
        area since what was passed in is exactly what is stored within each
        storage area.  In addition, the non-copy constructor should take in a
        PassRefPtr rather than a pointer since that pointer was only passed into
        the constuctor for RefPtr's anyway.

        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::StorageAreaImpl):
        (WebCore::StorageAreaImpl::copy):
        * storage/StorageAreaImpl.h:
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::StorageNamespaceImpl):
        (WebCore::StorageNamespaceImpl::~StorageNamespaceImpl):
        (WebCore::StorageNamespaceImpl::copy):
        (WebCore::StorageNamespaceImpl::close):
        * storage/StorageNamespaceImpl.h:

2009-08-10  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed, build fix.

        Rename ref() to fragmentIdentifier() in the wml/ subdirectory.

        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::determineActiveCard):
        * wml/WMLGoElement.cpp:
        (WebCore::WMLGoElement::executeTask):
        * wml/WMLPageState.cpp:
        (WebCore::WMLPageState::canAccessDeck):

2009-08-10  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        Exclude JSMedia.cpp from build since it is included in DerivedSources.cpp.
        Fixes linker warnings.        
        
        Corrected spelling of JSInspectorBackend.cpp.
        
        Other changes related to actually using a Visual Studio to open/save the vcproj file.

        * WebCore.vcproj/WebCore.vcproj:

2009-08-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove a dead #define.

        * bindings/js/JSDOMBinding.cpp:

2009-08-10  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Update KURLGoogle for ref* method renames in
        http://trac.webkit.org/changeset/46978.
        https://bugs.webkit.org/show_bug.cgi?id=28084

        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::ACCESSOR_SETTER): Renamed ref and setRef to fragmentIdentifier and
            setFragmentIdentifier, respectively.
        * platform/KURLGoogle.cpp: Ditto, plus all other ref* method names.

2009-08-10  Jan Michael Alonzo  <jmalonzo@webkit.org>

        [Gtk] Unreviewed. Fix the nit as suggested by Darin in bug #28144
        for r46989.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::finishedCallback):

2009-08-10  John Kjellberg  <john.kjellberg@power.alstom.com>

        Reviewed by Darin Adler.

        Memory leak in error handling code for SOUP interface
        https://bugs.webkit.org/show_bug.cgi?id=28144

        Freed memory leaked in error handling code for soup requests.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::finishedCallback):
        (WebCore::):

2009-08-10  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Provide graceful handling of the situation when an embedder invokes
        visited link update methods before a Page constructor has been called.
        https://bugs.webkit.org/show_bug.cgi?id=28149

        * page/Page.cpp:
        (WebCore::Page::allVisitedStateChanged): Added a null-check for allPages.
        (WebCore::Page::visitedStateChanged): Ditto.

2009-08-10  Xan Lopez  <xlopez@igalia.com>

        Fix GTKbuild.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::):

2009-08-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Remove the redundant, Windows CE-only GlyphBuffer::advnaceData()

        * platform/graphics/GlyphBuffer.h: Removed advanceData().
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::drawText): Changed to use advances(from)
            instead of advanceData() from.

2009-08-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Remove workaround for older libsoup versions.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::fillResponseFromMessage):

2009-08-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Let startHttp validate the URI instead of doing it, with potential
        crashes, in ::start.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startHttp):

2009-08-10  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        When empty <input> is focused, getSelection() exposes shadow tree nodes
        https://bugs.webkit.org/show_bug.cgi?id=15903

        Test: fast/forms/shadow-tree-exposure.html

        * page/DOMSelection.cpp:
        (WebCore::selectionShadowAncestor): Added.
        (WebCore::DOMSelection::anchorNode): Return the parent of the shadow
        ancestor if the selection is in a shadow tree. Matches Firefox.
        (WebCore::DOMSelection::anchorOffset): Return the index of the shadow
        ancestor if the selection is in a shadow tree. Matches Firefox.
        (WebCore::DOMSelection::focusNode): Ditto.
        (WebCore::DOMSelection::focusOffset): Ditto.
        (WebCore::DOMSelection::baseNode): More of the same, but since this
        is a WebKit-invented property, it does not match Firefox.
        (WebCore::DOMSelection::baseOffset): Ditto.
        (WebCore::DOMSelection::extentNode): Ditto.
        (WebCore::DOMSelection::extentOffset): Ditto.
        (WebCore::DOMSelection::isCollapsed): Return true even when the
        selection is a range, if the selection is in the shadow tree.
        Matches Firefox. Also changed behavior when called and the frame
        is gone to return true instead of false which makes more sense.
        (WebCore::DOMSelection::empty): Use clear() just like the other
        selection-clearing function in this file does.
        (WebCore::DOMSelection::getRangeAt): Return a range that starts
        and ends before the shadow ancestor. Matches Firefox.

2009-08-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Make all status bar button images glyph-based.

        https://bugs.webkit.org/show_bug.cgi?id=28124

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        * inspector/front-end/Images/clearConsoleButtonGlyph.png: Added.
        * inspector/front-end/Images/clearConsoleButtons.png: Removed.
        * inspector/front-end/Images/consoleButtonGlyph.png: Added.
        * inspector/front-end/Images/consoleButtons.png: Removed.
        * inspector/front-end/Images/dockButtonGlyph.png: Added.
        * inspector/front-end/Images/dockButtons.png: Removed.
        * inspector/front-end/Images/enableButtons.png: Removed.
        * inspector/front-end/Images/enableOutlineButtonGlyph.png: Added.
        * inspector/front-end/Images/enableSolidButtonGlyph.png: Added.
        * inspector/front-end/Images/excludeButtonGlyph.png: Added.
        * inspector/front-end/Images/excludeButtons.png: Removed.
        * inspector/front-end/Images/focusButtonGlyph.png: Added.
        * inspector/front-end/Images/focusButtons.png: Removed.
        * inspector/front-end/Images/largerResourcesButtonGlyph.png: Added.
        * inspector/front-end/Images/largerResourcesButtons.png: Removed.
        * inspector/front-end/Images/nodeSearchButtonGlyph.png: Added.
        * inspector/front-end/Images/nodeSearchButtons.png: Removed.
        * inspector/front-end/Images/pauseOnExceptionButtonGlyph.png: Added.
        * inspector/front-end/Images/pauseOnExceptionButtons.png: Removed.
        * inspector/front-end/Images/percentButtonGlyph.png: Added.
        * inspector/front-end/Images/percentButtons.png: Removed.
        * inspector/front-end/Images/recordButtonGlyph.png: Added.
        * inspector/front-end/Images/recordButtons.png: Removed.
        * inspector/front-end/Images/recordToggledButtonGlyph.png: Added.
        * inspector/front-end/Images/reloadButtonGlyph.png: Added.
        * inspector/front-end/Images/reloadButtons.png: Removed.
        * inspector/front-end/Images/undockButtonGlyph.png: Added.
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.createStatusBarButton):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:

2009-08-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        KURL ref() methods should be fragmentIdentifier() methods 
        https://bugs.webkit.org/show_bug.cgi?id=28084

        In addition to the renames, also took the chance to replace all use of:
        setRef(String());
        with:
        removeFragmentIdentifier();

        * platform/KURL.cpp:
        (WebCore::KURL::fragmentIdentifier):
        (WebCore::KURL::hasFragmentIdentifier):
        (WebCore::KURL::setFragmentIdentifier):
        (WebCore::KURL::removeFragmentIdentifier):
        (WebCore::KURL::prettyURL):
        (WebCore::equalIgnoringFragmentIdentifier):
        * platform/KURL.h:

        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::setHash): Rework with new names, and to use the new equalIgnoringNullity() method.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::internalLinkElement):
        * css/CSSCursorImageValue.cpp:
        (WebCore::isSVGCursorIdentifier):
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::isCurrentDocument):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::hash):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::gotoAnchor):
        (WebCore::FrameLoader::scheduleLocationChange):
        (WebCore::FrameLoader::scrollToAnchor):
        (WebCore::FrameLoader::shouldReload):
        (WebCore::FrameLoader::urlsMatchItem):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::resourceForURL):
        (WebCore::ApplicationCache::resourceForRequest):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::cacheForMainRequest):
        (WebCore::ApplicationCacheGroup::fallbackCacheForMainRequest):
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource):
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didFail):
        (WebCore::ApplicationCacheGroup::addEntry):
        * loader/appcache/ApplicationCacheResource.h:
        (WebCore::ApplicationCacheResource::create):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::findOrCreateCacheGroup):
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):
        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest):
        * page/Location.cpp:
        (WebCore::Location::hash):
        * page/Page.cpp:
        (WebCore::Page::goToItem):
        * rendering/RenderPartObject.cpp:
        (WebCore::isURLAllowed):
        * workers/WorkerLocation.cpp:
        (WebCore::WorkerLocation::hash):

2009-08-10  Andy Shaw <andy.shaw@nokia.com>

        Reviewed by Simon Hausmann.

        Fix endless loop when the application is quit by a secondary thread during a sync xml http request.

        Replace the m_finished state variable and the call to QCoreApplication::processEvents() with
        a dedicated QEventLoop, that can be terminated from within WebCoreSynchronousLoader as well
        as from Qt through its knowledge of globally registered eventloops.

        There is no unit test for this bug as it would require exporting additional symbols and
        introduce the synchronous loader as global variable just for the test.

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::WebCoreSynchronousLoader::waitForCompletion):

2009-08-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Make properties inspection serialized.

        https://bugs.webkit.org/show_bug.cgi?id=28078

        * inspector/front-end/DOMAgent.js:
        (InspectorController.getPrototypes):
        (InspectorController.getProperties):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.getPrototypes):
        (InjectedScript.getProperties):
        (InjectedScript.setPropertyValue):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectRef):
        (WebInspector.ObjectPropertyRef):
        (WebInspector.ObjectPropertiesSection.prototype.onpopulate):
        (WebInspector.ObjectPropertiesSection.prototype.update.callback):
        (WebInspector.ObjectPropertiesSection.prototype.update):
        (WebInspector.ObjectPropertiesSection.prototype._update):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate.callback):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
        (WebInspector.ObjectPropertyTreeElement.prototype.onattach):
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.callback):
        (WebInspector.PropertiesSidebarPane.prototype.update):

2009-08-09  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] wml.css lacks <pre> support
        https://bugs.webkit.org/show_bug.cgi?id=28135

        Add <pre> support for WML.
        Extended fast/wml/text-emphasis.wml to cover <pre> support.

        * css/wml.css: <pre> section copied from html.css

2009-08-09  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Oliver Hunt.

        Fix non-WML enabled builds. Remove ENABLE(WML) guards around the switch cases 'FrameLoadTypeBackWMLDeckNotAccessible'.

        * loader/FrameLoader.cpp:
        (WebCore::isBackForwardLoadType):
        (WebCore::FrameLoader::restoreDocumentState):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::loadItem):

2009-08-09  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] Deck access control is completly broken
        https://bugs.webkit.org/show_bug.cgi?id=27721

        Rewrite WML deck access control, actually works now standalone and within LayoutTests.
        Added several new layout tests covering local & remote access support.

        In order to detect WML task execution failures from within the WML layout tests a new
        method Console::lastWMLErrorMessage() has been added, returning the last recorded WML
        error message. Change WML log messages to dump to InspectorClient, just like it's done
        for HTML - we used to behave like JSMessageSource, which is wrong.

        Tests: http/tests/wml/access-target-domain-deny.html
               http/tests/wml/access-target-path-deny.html
               http/tests/wml/access-target.html
               wml/access-target-deny.html
               wml/access-target.html

        * inspector/ConsoleMessage.h:
        (WebCore::ConsoleMessage::source): Added public method to fetch the message source type.
        (WebCore::ConsoleMessage::message): Added public method to access the error message.
        * inspector/InspectorController.h:
        (WebCore::InspectorController::consoleMessages): Added for Console::lastWMLErrorMessage(), to be able to crawl through the list of dumped messages.
        * loader/FrameLoader.cpp: Recognize 'FrameLoadTypeBackWMLDeckNotAccessible', all guarded by ENABLE(WML).
        (WebCore::isBackForwardLoadType):
        (WebCore::FrameLoader::restoreDocumentState):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::loadItem):
        * loader/FrameLoaderTypes.h:
        (WebCore::): Add new load type 'FrameLoadTypeBackWMLDeckNotAccessible', behaving like FrameLoadTypeBack plus WML specific information.
        * page/Console.cpp:
        (WebCore::Console::addMessage): Don't dump WML messages using ChromeClient (as it's done for JSMessageSource), but go through InspectorController.
        (WebCore::Console::lastWMLErrorMessage): Crawl InspectorController::consoleMssages() to look up the last WML error message, if present.
        * page/Console.h:
        * page/Console.idl: Add "[DontEnum] DOMString lastWMLErrorMessage()".
        * wml/WMLAccessElement.cpp: Store path/domain as member variables and pass them to WMLPageState once in insertedIntoDocument().
        (WebCore::WMLAccessElement::parseMappedAttribute):
        (WebCore::WMLAccessElement::insertedIntoDocument):
        * wml/WMLAccessElement.h:
        * wml/WMLCardElement.cpp: Handle 'FrameLoadTypeBackWMLDeckNotAccessible' as deck-entry method. Report WML error in current deck.
        (WebCore::WMLCardElement::handleIntrinsicEventIfNeeded):
        * wml/WMLDocument.cpp: Enable deck-access control in finishedParsing. Take care of method name changes in WMLPageState.
        (WebCore::WMLDocument::finishedParsing):
        (WebCore::WMLDocument::initialize):
        * wml/WMLErrorHandling.cpp: Never report 'WMLErrorDeckNotAccessible' messages through the tokenizer, that would alter the page into error state.
        (WebCore::reportWMLError):
        * wml/WMLPageState.cpp: Completly rewrote access path/domain parsing & deck-access control, strictly following the WML spec. All covered by tests.
        (WebCore::WMLPageState::WMLPageState):
        (WebCore::normalizedHostName):
        (WebCore::hostFromURL):
        (WebCore::urlForHistoryItem):
        (WebCore::tryAccessHistoryURLs):
        (WebCore::WMLPageState::processAccessControlData):
        (WebCore::WMLPageState::resetAccessControlData):
        (WebCore::WMLPageState::canAccessDeck):
        (WebCore::WMLPageState::hostIsAllowedToAccess):
        (WebCore::WMLPageState::pathIsAllowedToAccess):
        * wml/WMLPageState.h:

2009-08-09  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Maciej Stachowiak.

        FrameLoadType / WebFrameLoadType enums are out of sync
        https://bugs.webkit.org/show_bug.cgi?id=28132

        Modify FrameLoadType enum to match the order of WebFrameLoadType in WebFramePrivate.h / IWebFramePrivate.idl.
        The mac/win public API exposes the old 'FrameLoadTypeReloadAllowingStaleData' value, which resides between
        'FrameLoadTypeReload' and 'FrameLoadTypeSame'. Work around this problem, by assigning 'FrameLoadTypeSame = FrameLoadTypeReload 2'.

        Add a note to the FrameLoadType enum to keep it in sync with WebFramePrivate.h & IWebFramePrivate.idl.

        * loader/FrameLoaderTypes.h:
        (WebCore::):

2009-08-09  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] manual-tests/wml/onevent-prev.wml crashes
        https://bugs.webkit.org/show_bug.cgi?id=27722

        Fix intrinsic event execution, leading to crashes.
        First finish parsing the document, then execute the events. Not the other way round.
        -> exposes bugs all over the WML layout tests, which relied on that quirk.

        Fixes manual-tests/wml/onevent-prev.wml.

        * wml/WMLDocument.cpp:
        (WebCore::WMLDocument::WMLDocument):
        (WebCore::WMLDocument::finishedParsing):
        (WebCore::WMLDocument::initialize):
        * wml/WMLDocument.h:

2009-08-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Update WebCore.gyp to add ImageBuffer.cpp,
        introduced by http://trac.webkit.org/changeset/46956.
        https://bugs.webkit.org/show_bug.cgi?id=27844

        * WebCore.gypi: Added ImageBuffer.cpp.

2009-08-08  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Rubber-stamped by Jan Michael Alonzo.

        Add [DontEnum] to WML specific initializeWMLPageState/resetWMLPageState methods, to assure
        fast/dom/Window/window-properties.html doesn't show any differences when WML is enabled.

        * dom/Document.idl:

2009-08-08  Dirk Schulze  <krit@webkit.org>

        Reviewed by Eric Seidel.

        SVG Filter need feColorMatrix implementation
        [https://bugs.webkit.org/show_bug.cgi?id=27711]

        Adds the filter effect feColorMatrix to SVG filters. 

        There is already a test in the w3c directory.
        Test: svg/W3C-SVG-1.1/filters-color-01-b.svg

        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::matrix):
        (WebCore::saturate):
        (WebCore::huerotate):
        (WebCore::luminance):
        (WebCore::FEColorMatrix::apply):

2009-08-08  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        Build fix for Tiger.
        https://bugs.webkit.org/show_bug.cgi?id=27844

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2009-08-08  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        This is an initial implementation for linearRGB and sRGB support for all
        platforms. Some platforms like Cg support different color spaces
        natively, others like Qt, Cairo and Skia do not. This patch uses the
        native implementation of platforms if possible and offers a common version
        if not.

        Different color spaces are used in SVG Filters. Nearly every Filter test 
        case is a test for this patch and will be enabled, once Filters are enabled.
        https://bugs.webkit.org/show_bug.cgi?id=27844

        * GNUmakefile.am:
        * WebCore.pro:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * platform/graphics/GeneratedImage.cpp:
        (WebCore::GeneratedImage::drawPattern):
        * platform/graphics/ImageBuffer.cpp: Added.
        (WebCore::ImageBuffer::transformColorSpace):
        * platform/graphics/ImageBuffer.h:
        (WebCore::):
        (WebCore::ImageBuffer::create):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::platformTransformColorSpace):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::OwnedBuffers::OwnedBuffers):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::getEffectContext):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::platformTransformColorSpace):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::strokeContains):
        (WebCore::Path::strokeBoundingRect):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::platformTransformColorSpace):
        * platform/graphics/skia/SkiaUtils.cpp:
        (WebCore::scratchContext):
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::buildPattern):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        * svg/graphics/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        * svg/graphics/SVGResourceFilter.cpp:
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):
        * svg/graphics/SVGResourceMasker.cpp:
        (WebCore::SVGResourceMasker::applyMask):
        * svg/graphics/filters/SVGFETile.cpp:
        (WebCore::FETile::apply):

2009-08-08  Xan Lopez  <xlopez@igalia.com>

        Roll out r46928, since it wasn't done in accordance with the
        agreed naming.

        * bindings/gdom/GdomDOMObject.cpp: Removed.

2009-08-08  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        [Gtk] Enable accessibility in Gtk DRT
        https://bugs.webkit.org/show_bug.cgi?id=25989

        Add SPI to get the focused accessible element to be used by DRT.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_focused_element):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.h:

2009-08-07  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix - add html/canvas to the binding generator's include path

        * GNUmakefile.am:

2009-08-07  Oliver Hunt  <oliver@apple.com>

        Another attempt to fix windows.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:

2009-08-07  Oliver Hunt  <oliver@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj:

2009-08-07  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix - add html/canvas to the include path.

        * GNUmakefile.am:

2009-08-07  Adam Treat  <adam.treat@torchmobile.com>

        Prospective build fix for Qt following r46937.

        * WebCore.pro:

2009-08-07  Yong Li  <yong.li@torchmobile.com>

        WINCE PORT: store only width for GlyphBufferAdvance, to save space on low-memory devices
        https://bugs.webkit.org/show_bug.cgi?id=27734

        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::advanceAt):
        (WebCore::GlyphBuffer::advanceData):
        (WebCore::GlyphBuffer::add):

2009-08-07  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Eric Seidel.

        WINCE PORT: pass unrecognized glyphs to GDI to handle
        https://bugs.webkit.org/show_bug.cgi?id=27734

        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataForCharacter):

2009-08-07  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Move Canvas related file to a subdirectories
        https://bugs.webkit.org/show_bug.cgi?id=28026

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/CanvasGradient.cpp: Removed.
        * html/CanvasGradient.h: Removed.
        * html/CanvasGradient.idl: Removed.
        * html/CanvasPattern.cpp: Removed.
        * html/CanvasPattern.h: Removed.
        * html/CanvasPattern.idl: Removed.
        * html/CanvasPixelArray.cpp: Removed.
        * html/CanvasPixelArray.h: Removed.
        * html/CanvasPixelArray.idl: Removed.
        * html/CanvasRenderingContext2D.cpp: Removed.
        * html/CanvasRenderingContext2D.h: Removed.
        * html/CanvasRenderingContext2D.idl: Removed.
        * html/CanvasStyle.cpp: Removed.
        * html/CanvasStyle.h: Removed.
        * html/canvas: Added.
        * html/canvas/CanvasGradient.cpp: Copied from WebCore/html/CanvasGradient.cpp.
        * html/canvas/CanvasGradient.h: Copied from WebCore/html/CanvasGradient.h.
        * html/canvas/CanvasGradient.idl: Copied from WebCore/html/CanvasGradient.idl.
        * html/canvas/CanvasPattern.cpp: Copied from WebCore/html/CanvasPattern.cpp.
        * html/canvas/CanvasPattern.h: Copied from WebCore/html/CanvasPattern.h.
        * html/canvas/CanvasPattern.idl: Copied from WebCore/html/CanvasPattern.idl.
        * html/canvas/CanvasPixelArray.cpp: Copied from WebCore/html/CanvasPixelArray.cpp.
        * html/canvas/CanvasPixelArray.h: Copied from WebCore/html/CanvasPixelArray.h.
        * html/canvas/CanvasPixelArray.idl: Copied from WebCore/html/CanvasPixelArray.idl.
        * html/canvas/CanvasRenderingContext2D.cpp: Copied from WebCore/html/CanvasRenderingContext2D.cpp.
        * html/canvas/CanvasRenderingContext2D.h: Copied from WebCore/html/CanvasRenderingContext2D.h.
        * html/canvas/CanvasRenderingContext2D.idl: Copied from WebCore/html/CanvasRenderingContext2D.idl.
        * html/canvas/CanvasStyle.cpp: Copied from WebCore/html/CanvasStyle.cpp.
        * html/canvas/CanvasStyle.h: Copied from WebCore/html/CanvasStyle.h.

2009-08-07  Szabo Carol  <carol.szabo@nokia.com>

        Reviewed by David Hyatt.

        QtWebkit ignores letter-spacing and word-spacing styles.
        QtWebkit handles custom letter-spacing and word-spacing in the native QFont
        class, but the values for these options are not not passed on from
        the platform independent part of the Font class.
        Fixed QtWebkit behavior by applying the options to QFont when it is
        returned via Font::font()

        http://bugs.webkit.org/show_bug.cgi?id=27988

        LayoutTests:
        fast/css/word-space-extra.html
        css2.1/t1604-c542-letter-sp-00-b-a.html
        css2.1/t1604-c541-word-sp-01-b-a.html
        css1/text_properties/word_spacing.html
        
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::font):

2009-08-07  Nicolas Weber  <thakis@chromium.org>

        Reviewed by Darin Adler.

        Use correct highlight color for listboxes and completion popups.

        https://bugs.webkit.org/show_bug.cgi?id=28090

        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        Rename activeListBoxSelectionBackgroundColor to
        platformActiveListBoxSelectionBackgroundColor, so that it actually
        overrides a virtual method.

2009-08-07  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        Added a fourth bunch of Haiku-specific files for WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=26988

        * platform/haiku/PasteboardHaiku.cpp: Added.
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::generalPasteboard):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeImage):
        (WebCore::Pasteboard::clear):
        * platform/haiku/PlatformKeyboardEventHaiku.cpp: Added.
        (WebCore::keyIdentifierForHaikuKeyCode):
        (WebCore::windowsKeyCodeForKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        (WebCore::PlatformKeyboardEvent::currentCapsLockState):
        * platform/haiku/PlatformMouseEventHaiku.cpp: Added.
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/haiku/PlatformWheelEventHaiku.cpp: Added.
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2009-08-07  Nicolas Weber  <thakis@chromium.org>

        Teach WebKit how to decode jpegs in cmyk and ycck color spaces.
        Heavily inspired by Firefox's take on this issue.

        https://bugs.webkit.org/show_bug.cgi?id=27909

        Reviewed by Eric Seidel.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::decode):
        Tell jpeglib to convert ycck to cmyk and keep cmyk.
        (WebCore::convertCMYKToRGBA):
        Added function to convert cmyk to rgb.
        (WebCore::convertRGBToRGBA):
        Extracted existing conversion logic into its own function.
        (WebCore::JPEGImageDecoder::outputScanlines):
        Call convertCMYKToRGBA for cmyk images, convertRGBToRGBA for rgb
        images.

2009-08-07  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        SharedWorkers should be shared
        https://bugs.webkit.org/show_bug.cgi?id=28058

        Added tracking of shared workers to the SharedWorkerRepository.

        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::create):
        Changed SharedWorkerProxy to derive from ThreadSafeShared, as it needs to outlive the repository (if closed while some documents are still loading).
        (WebCore::SharedWorkerProxy::thread):
        (WebCore::SharedWorkerProxy::closing):
        Added flag used to determine whether the worker has closed itself while loading.
        (WebCore::SharedWorkerProxy::url):
        (WebCore::SharedWorkerProxy::name):
        Proxy now tracks worker URL and name to allow validity checks per section 4.8.3 of the WebWorkers spec.
        (WebCore::SharedWorkerProxy::SharedWorkerProxy):
        (WebCore::SharedWorkerProxy::addToDocumentSet):
        Added API to track the document set for a worker to allow worker shutdown. Currently does nothing.
        (WebCore::SharedWorkerScriptLoader::SharedWorkerScriptLoader):
        Renamed SharedWorkerLoader to be SharedWorkerScriptLoader for clarity.
        (WebCore::SharedWorkerScriptLoader::load):
        (WebCore::SharedWorkerScriptLoader::notifyFinished):
        (WebCore::DefaultSharedWorkerRepository::instance):
        (WebCore::DefaultSharedWorkerRepository::workerScriptLoaded):
        Now handles "worker already loaded" case.
        (WebCore::SharedWorkerRepository::connect):
        Delegates to DefaultSharedWorkerRepository::connectToWorker
        (WebCore::DefaultSharedWorkerRepository::connectToWorker):
        Added code to track the SharedWorkerProxy in a map, and to handle the "worker already loaded" case.
        (WebCore::DefaultSharedWorkerRepository::getProxy):
        Atomic get-or-create operation on the internal tracking HashMap.
        * workers/DefaultSharedWorkerRepository.h:
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::SharedWorker):
        * workers/SharedWorkerRepository.h:
        Removed instance() API and made constructor private to prevent instantiation.
        (WebCore::SharedWorkerRepository::SharedWorkerRepository):

2009-08-07  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        Added four Haiku-specific files for WebCore:
        PopupMenuHaiku.cpp, ScreenHaiku.cpp,
        SearchPopupMenuHaiku.cpp and SoundHaiku.cpp
        https://bugs.webkit.org/show_bug.cgi?id=28080

        * platform/haiku/PopupMenuHaiku.cpp: Added.
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/haiku/ScreenHaiku.cpp: Added.
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        * platform/haiku/SearchPopupMenuHaiku.cpp: Added.
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::enabled):
        * platform/haiku/SoundHaiku.cpp: Added.
        (WebCore::systemBeep):

2009-08-07  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        Added two Haiku-specific files to WebCore:
        TemporaryLinkStubs.cpp and WidgetHaiku.cpp
        https://bugs.webkit.org/show_bug.cgi?id=28080

        * platform/haiku/TemporaryLinkStubs.cpp: Added.
        (loadResourceIntoArray):
        (WebCore::historyContains):
        (WebCore::supportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):
        (WebCore::userIdleTime):
        (WebCore::callOnMainThread):
        (WebCore::SharedBuffer::createWithContentsOfFile):
        (WebCore::KURL::fileSystemPath):
        (WebCore::getSupportedKeySizes):
        * platform/haiku/WidgetHaiku.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):

2009-08-07  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix the problem that isAttribute is set to false for onerror and
        onmessage in worker custom code.
        https://bugs.webkit.org/show_bug.cgi?id=28083

        * bindings/v8/custom/V8AbstractWorkerCustom.cpp:
        (WebCore::getEventListener):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::getEventListener):
        (WebCore::ACCESSOR_SETTER):

2009-08-07  Vitaly Repeshko  <vitalyr@quad.spb.corp.google.com>

        Reviewed by Dimitri Glazkov.

        V8 bindings: speed up lookupDOMWrapper by using new V8 API function.

        https://bugs.webkit.org/show_bug.cgi?id=28071

        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::lookupDOMWrapper):

2009-08-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Justin Garcia.

        selectionHasStyle doesn't handle text-specific properties properly
        https://bugs.webkit.org/show_bug.cgi?id=27858

        This patch modifies selectionHasStyle so that it returns TrueTriState when text styles
        (text-decoration, font-style, font-weight, & color) are present in all text nodes,
        regardless of whether the style is also present in their ancestor nodes or not.
        e.g. New behavior concludes that <b><i>hello</i><i>world</i></b> has italic style.

        WebKit now applies the text styles (bold, italic, etc) if the specified style was not present on
        at least one text node, rather than at the beginning of selection except on Mac.
        On Mac, WebKit applies the text style if the style was not present at the beginning of style.

        Test: editing/execCommand/toggle-compound-styles.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::getPropertiesNotInComputedStyle): bug fix, must use copy instead of makeMutable for a mutable style.
        * editing/Editor.cpp:
        (WebCore::):
        (WebCore::triStateOfStyleInComputedStyle): Added a boolean type to ignore text-specific styles
        (WebCore::Editor::selectionHasStyle): Ignores text-specific styles for all but text nodes
        * editing/EditorCommand.cpp:
        (WebCore::executeToggleStyle): Uses selectionHasStyle instead of selectionStartHasStyle

2009-08-07  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Do not register V8 error message listener in WorkerContextExecutionProxy.
        https://bugs.webkit.org/show_bug.cgi?id=28082

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initV8IfNeeded):

2009-08-07  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        Cairo-based Windows port does not handle cookies properly
        https://bugs.webkit.org/show_bug.cgi?id=27414

        curl handles cookies by itself, so using WinINet functions
        to get and set cookies is wrong.

        Replace CookieJarWin.cpp with CookieJarCurl.cpp so that
        cookies can be implemented later once curl provides an API to
        get and set cookies.

        * WebCore.vcproj/WebCore.vcproj:

2009-08-07  Michael Nordman  <michaeln@google.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=28074

        V8 bindings for the window.applicationCache attribute.

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMApplicationCacheCustom.cpp: Added.

2009-08-07  Alpha Lam  <hclam@chromium.org>

        Reviewed by Eric Seidel.

        Right click on timeline of media controls panel cause seek
        https://bugs.webkit.org/show_bug.cgi?id=27920

        Add a test simulate the behavior of seeking by right clicking
        on the time bar of media controls while playing.

        * media/controls-right-click-on-timebar-expected.txt: Added.
        * media/controls-right-click-on-timebar.html: Added.

2009-08-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Justin Garcia.

        deprecatedCopyInheritableProperties must be replaced by two different functions
        https://bugs.webkit.org/show_bug.cgi?id=28057

        This patch deletes deprecatedInheritableProperties and modifies call callees to call either editingStyleAtPosition
        or prepareEditingStyleToApplyAt. The concept of editing style is introduced in this patch,
        which consists of all CSS properties need to be preserved under editing operations.

        No test is added since this patch does not change any behavior.

        * css/CSSComputedStyleDeclaration.cpp: Removed deprecatedCopyInheritableProperties
        * css/CSSComputedStyleDeclaration.h: Removed deprecatedCopyInheritableProperties
        * editing/ApplyStyleCommand.cpp:
        (WebCore::):
        (WebCore::editingStyleAtPosition): Obtains the editing-specific computed style at the position
        (WebCore::prepareEditingStyleToApplyAt): Removes redundant editing styles at the specified position
        (WebCore::removeStylesAddedByNode): Removes the style derived from the specified node
        * editing/ApplyStyleCommand.h:
        (WebCore::):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Uses editingStyleAtPosition
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem): Uses editingStyleAtPosition
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::removeEnclosingAnchorStyle): Uses removeStyleOfNode
        (WebCore::DeleteSelectionCommand::saveTypingStyleState): Uses editingStyleAtPosition
        (WebCore::DeleteSelectionCommand::calculateTypingStyleAfterDelete): Uses prepareEditingStyleToApplyAt
        * editing/EditCommand.cpp:
        * editing/EditCommand.h:
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::calculateStyleBeforeInsertion): Uses editingStyleAtPosition
        (WebCore::InsertParagraphSeparatorCommand::applyStyleAfterInsertion): Uses prepareEditingStyleToApplyAt
        * editing/RemoveFormatCommand.cpp:
        (WebCore::RemoveFormatCommand::doApply): Uses editingStyleAtPosition
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::handleStyleSpansBeforeInsertion): Uses editingStyleAtPosition
        (WebCore::ReplaceSelectionCommand::handleStyleSpans): Uses editingStyleAtPosition and prepareEditingStyleToApplyAt
        (WebCore::ReplaceSelectionCommand::doApply): Uses prepareEditingStyleToApplyAt
        * editing/markup.cpp:
        (WebCore::removeEnclosingMailBlockquoteStyle): Uses removeStyleOfNode
        (WebCore::removeDefaultStyles): Uses prepareEditingStyleToApplyAt
        (WebCore::createMarkup): Uses editingStyleAtPosition

2009-08-07  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Bug 27250: Geolocation callback function IDL files are superfluous
        https://bugs.webkit.org/show_bug.cgi?id=27250

        The objects for the Geolocation success and error callbacks are created 'manually' in
        WebCore/bindings/js/JSGeolocationCustom.cpp. Furthermore, the callback interfaces are 
        marked 'NoInterfaceObject' in the W3C spec, so the prototype should not
        appear on the window object. Hence IDL files for these callbacks are not required.

        See http://www.w3.org/TR/geolocation-API/#geolocation_interface and
        http://www.w3.org/TR/WebIDL/#NoInterfaceObject.

        No new tests required.

        * DerivedSources.make: Modified. Removed reference to IDL files.
        * WebCore.gypi: Modified. Removed reference to IDL files.
        * WebCore.xcodeproj/project.pbxproj: Modified. Removed reference to IDL files.
        * page/PositionCallback.idl: Removed.
        * page/PositionErrorCallback.idl: Removed.

2009-08-07  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by David Levin.

        Build fix for Qt when ENABLE_VIDEO = 0.  This was necessitated by r46890 which
        put the idl files back into play regardless of compile time defines.

        * html/TimeRanges.idl:

2009-08-07  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by George Staikos.

        Coding style patches for RenderThemeQt.cpp based on results from cpp_style.py.

        https://bugs.webkit.org/show_bug.cgi?id=28050

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::baselinePosition):
        (WebCore::inflateButtonRect):
        (WebCore::RenderThemeQt::supportsFocus):
        (WebCore::RenderThemeQt::applyTheme):

2009-08-07  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Eric Seidel.

        Prevent RenderThemeQt AdjustStyle based calls for TextField, MenuList and MenuListButton
        from discarding style colour.

        Add tests and remove tests from platform/qt/Skipped that now pass.

        https://bugs.webkit.org/show_bug.cgi?id=28050

        Tests: fast/forms/menulist-style-color.html
               fast/forms/text-style-color.html

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::adjustTextFieldStyle):
        (WebCore::RenderThemeQt::adjustMenuListStyle):
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):

2009-08-07  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        https://bugs.webkit.org/show_bug.cgi?id=22495
        [V8] Re-land http://trac.webkit.org/changeset/46821, now that
        http://trac.webkit.org/changeset/46874 re-landed

        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:

2009-08-07  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Darin Adler and George Staikos.

        Add rectToRect convenience function which returns the TransformationMatrix
        which maps the 'from' rectangle to the 'to' rectangle.

        https://bugs.webkit.org/show_bug.cgi?id=28067

        No tests as this would require binding the method to js and since it is static
        that doesn't seem possible.  Please check the math.

        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::rectToRect):
        * platform/graphics/transforms/TransformationMatrix.h:

2009-08-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Implement the HTML5 hashchange event.
        https://bugs.webkit.org/show_bug.cgi?id=21605

        Test: fast/loader/hashchange-event.html

        * dom/EventNames.h: Add "hashchange"
        * html/HTMLAttributeNames.in: Add "onhashchange"

        * loader/FrameLoader.cpp:
        (WebCore::HashChangeEventTask::create):
        (WebCore::HashChangeEventTask::performTask):
        (WebCore::HashChangeEventTask::HashChangeEventTask):
        (WebCore::FrameLoader::scrollToAnchor): When an anchor navigation is completed and the
          new fragment identifier is different from the old one, queue a hash change event
          on the Document.

        Add a window event listener for the hashchange event if onhashchange is encountered:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute): 
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):

        Add a new string utility method that gives "null and empty are equivalent" behavior:
        * platform/text/PlatformString.h:
        (WebCore::equalIgnoringNullity):
        * platform/text/StringImpl.cpp:
        (WebCore::equalIgnoringNullity):
        * platform/text/StringImpl.h:

2009-08-07  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Timothy Hatcher.

        Add the initial implementation of the ability to resize the columns in
        a DataGrid in the Web Inspector. Enables that functionality in both the
        Profile View and in the Local Storage View.
        
        https://bugs.webkit.org/show_bug.cgi?id=26182
        
        In this version, resizing a column can change the width of at most two
        columns (the columns to the left and right of the resizer being dragged).
        
        Possible changes in future patches:
        
        1) Be able to specify the minimum size of a column and the maximum size
           of a column. If the minimum size is equal to the maximum size, the
           column can't be resized.
        2) Make the behavior more in line with the following description:
        
        Everything before the column that is resized stays fixed size. The
        resized column changes sizes. The other columns except the last stay
        the same size. And the last column adjusts to fit with a minimum size.
        If the last column is already the minimum, the next to last column
        shrinks, etc.
        
        3) Make it possible to scale the column sizes appropriately when the
           Web Inspector window gets resized.
        
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype.update):
        Once the DataGrid is added to the DOM, update the widths of the
        DataGrid in order to put the resizers in place.
        (WebInspector.DOMStorageItemsView.prototype.resize):
        Update the widths of the DataGrid in order to correctly adjust the
        positions of the resizers.
        
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid):
        Store column groups whose widths can later be changed when the columns
        are resized by the user.
        Also, keep track of whether the widths of the columns have been
        initialized.
        (WebInspector.DataGrid.prototype.updateWidths):
        Create the resizers for the columns.
        (WebInspector.DataGrid.prototype._clickInDataTable):
        Didn't actually change anything in this method, just added a comma to
        the end of the function.
        (WebInspector.DataGrid.prototype._startResizerDragging):
        Store the resizer that is currently dragging.
        (WebInspector.DataGrid.prototype._resizerDragging):
        Constrain the area that the resizer can be dragged to the column to
        it's left and right, with some padding added to make sure that the
        neighboring columns don't disappear.
        (WebInspector.DataGrid.prototype._endResizerDragging):
        
        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype.resize):
        Resize the view.
        (WebInspector.DatabasesPanel.prototype._updateSidebarWidth):
        ditto.
        
        * inspector/front-end/ProfileView.js:
        (WebInspector.ProfileView.prototype.show):
        Now that the DataGrid is actually attached to the DOM, update the
        widths of the DataGrid in order to put the resizers in place.
        (WebInspector.ProfileView.prototype.resize):
        Update the widths of the DataGrid in order to correctly adjust the
        positions of the resizers.
        
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.resize):
        Resize the view.
        (WebInspector.ProfilesPanel.prototype._updateSidebarWidth):
        ditto.
        
        * inspector/front-end/inspector.css:
        Add in a style rule for a resizer in the Data Grid.

2009-08-07  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Back out r46847 and fix the Qt build system to always generate
        all the JS binding files from IDL files. The generated files
        have #if feature guards, so the #ifs are not needed in the
        files using them.

        * WebCore.pro:
        * bindings/js/JSEventTarget.cpp:
        * bindings/js/JSWorkerContextBase.cpp:
        * bindings/js/WorkerScriptController.cpp:

2009-08-07  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Adele Peterson.

        Cannot scroll for box-reflect:right
        https://bugs.webkit.org/show_bug.cgi?id=27979

        Update m_overflowLeft an m_overflowWidth for reflection just like
        m_overflowTop and m_overflowHeight.

        Test: fast/reflections/reflection-overflow-scroll.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):

2009-08-06  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Adam Barth.

        box-shadow's spread is ignored with <table>
        https://bugs.webkit.org/show_bug.cgi?id=28017

        Use RenderStyle::getBoxShadowExtent just like RenderBlock.

        Test: fast/box-shadow/box-shadow-overflow-scroll.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):

2009-08-06  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: NodeLists Don't Display Well in the Console
        https://bugs.webkit.org/show_bug.cgi?id=28061

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._format): Specific check if the object is a NodeList, display as an "array"

2009-08-06  Yusuke Sato  <yusukes@chromium.org>

        Reviewed by David Levin.

        Chromium Linux: add support for @font-face
        https://bugs.webkit.org/show_bug.cgi?id=28015
        
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::~CachedFont):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::platformDataFromCustomData):
        (WebCore::CachedFont::allClientsRemoved):

        Modified #ifdefs so that chromium linux can load remote fonts.
        
        * platform/graphics/chromium/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::createFontCustomPlatformData):

        Create SkTypeface for a web font by calling SkTypeface::CreateFromStream function.
        
        (WebCore::RemoteFontStream::RemoteFontStream):
        (WebCore::RemoteFontStream::~RemoteFontStream):
        (WebCore::RemoteFontStream::rewind):
        (WebCore::RemoteFontStream::read):

        New class that implements SkStream interface and wraps wtf's SharedBuffer.
        
        * platform/graphics/chromium/FontCustomPlatformData.h:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):

        Added member variables for Linux.
        
2009-08-06  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Eric Seidel.

        Fix JPEGImageDecoder.cpp compile error on WinCE
        https://bugs.webkit.org/show_bug.cgi?id=28051

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:

2009-08-06  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Eric Seidel.

        Adding WebCore support for the waf build system for wx.
        
        https://bugs.webkit.org/show_bug.cgi?id=27619

        * wscript: Added.

2009-08-06  Adam Barth  <abarth@webkit.org>

        Unreviewed revert.

        http://bugs.webkit.org/show_bug.cgi?id=27879

        Revert 46877 because it broke GTK.

        * platform/graphics/wince/GraphicsContextWince.cpp:

2009-08-06  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Eric Seidel.

        Bug 27956 - AX: roleValue should be cached for performance
        https://bugs.webkit.org/show_bug.cgi?id=27956

        Caches the role value of an accessibility object instead of calculating it everytime.
        The changes gained a 5% speedup using VoiceOver to navigate a webpage.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::handleAriaRoleChanged):

        Use generic role setter instead of specific ARIA role setter.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::AccessibilityObject):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::headingLevel):

        Make headingLevel into instance method so that it can *safely* be called in the constructor.

        (WebCore::AccessibilityObject::setRoleValue):
        (WebCore::AccessibilityObject::roleValue):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::headingLevel):
        (WebCore::AccessibilityRenderObject::intValue):
        (WebCore::AccessibilityRenderObject::updateAccessibilityRole):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (AXAttributeStringSetHeadingLevel):

2009-08-06  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Adam Barth.

        Change Noncopyable inheriting to public
        http://bugs.webkit.org/show_bug.cgi?id=27879

        Since Noncopyable is inherited from FastAllocBase, Noncopyable's
        inheriting has been changed to public.

        * platform/graphics/wince/GraphicsContextWince.cpp:

2009-08-06  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig.

        Add explicit dependencies for our build verification scripts to ensure that they always run after linking has completed.

        * WebCore.xcodeproj/project.pbxproj:

2009-08-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Implement the matchMedium method on the Media interface described in the CSSOM View Module.
        https://bugs.webkit.org/show_bug.cgi?id=22495
        
        Add a new Media interface, obtainable via the AbstractView, that can
        evaluate queries via its matchesMedium() method.

        Test: fast/media/matchmedium-query-api.html

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Add Media.* files to the build.

        * css/Media.cpp: Added.
        (WebCore::Media::Media):
        (WebCore::Media::type):
        (WebCore::Media::matchMedium):
        * css/Media.h: Added.
        (WebCore::Media::create):
        (WebCore::Media::document):
        * css/Media.idl: Added.
        Media::matchMedium() uses a MediaQueryEvaluator() to test the query.

        * page/AbstractView.idl:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::media):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        Add a readonly attribute for Media.

2009-08-06  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27455
        Support for a custom validation message in ValidityState and related
        form controls.
        http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#dom-cva-setcustomvalidity

        Tests: fast/forms/ValidityState-customError-001.html
               fast/forms/ValidityState-customError-002.html
               fast/forms/ValidityState-customError-003.html
               fast/forms/ValidityState-customError-004.html

        * html/HTMLButtonElement.idl: setCustomValidity DOM method
        * html/HTMLFieldSetElement.idl: ditto
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::setCustomValidity): ditto
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::valueMissing): moved down
        * html/HTMLInputElement.idl: ditto
        * html/HTMLSelectElement.idl: ditto
        * html/HTMLTextAreaElement.idl:
        * html/ValidityState.h:
        (WebCore::ValidityState::setCustomErrorMessage): method to set custom
        validation message
        (WebCore::ValidityState::customError): validation flag

2009-08-06  Mark Rowe  <mrowe@apple.com>

        Bring a little order to our otherwise out of control lives.

        * WebCore.xcodeproj/project.pbxproj:

2009-08-06  Mark Rowe  <mrowe@apple.com>

        Stop copying .idl files in to the framework resources directory.

        * WebCore.xcodeproj/project.pbxproj:

2009-08-06  Mark Rowe  <mrowe@apple.com>

        Fix the build some more.

        Add JSWebSocket.cpp and JSWebSocket.h to the Xcode project, and move the WebSocket-related
        files and groups in to the appropriate locations.

        * WebCore.xcodeproj/project.pbxproj:

2009-08-06  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Add WebSocket.idl
        https://bugs.webkit.org/show_bug.cgi?id=27209

        Add WebSocket.idl in WebCore/websockets/.
        Add build systems only for GNUmakefile.am and WebCore.xcodeproj now.
        Other build systems will be updated once the code is functional.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebSocketConstructor.cpp: Added.
        * bindings/js/JSWebSocketConstructor.h: Added.
        * bindings/js/JSWebSocketCustom.cpp: Added.
        * websockets/WebSocket.cpp: Added.
        * websockets/WebSocket.h: Added.
        * websockets/WebSocket.idl: Added.

2009-08-06  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Style cleaning for WorkerContextExecutionProxy.
        https://bugs.webkit.org/show_bug.cgi?id=27997

        Cleanup WorkerContextExecutioonProxy related files to follow
        WebKit coding styles after all V8 binding codes are upstreamed.
        1) Lower-case the first letter of remaining functins in class
           WorkerContextExecutionProxy. Update the V8 code generator
           and all other references accordingly.
        2) Integrate getConstructor from WorkerContextExecutionProxy
           to V8DOMWrapper.
        3) Other misc changes, like removing trailing whitespaces and
           sorting the include files.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getConstructorForContext):
        (WebCore::V8DOMWrapper::convertToV8Object):
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::~V8WorkerContextEventListener):
        (WebCore::V8WorkerContextEventListener::handleEvent):
        (WebCore::V8WorkerContextEventListener::reportError):
        (WebCore::V8WorkerContextEventListener::getReceiverObject):
        * bindings/v8/V8WorkerContextObjectEventListener.cpp:
        (WebCore::weakObjectEventListenerCallback):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::handleConsoleMessage):
        (WebCore::WorkerContextExecutionProxy::dispose):
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):
        (WebCore::WorkerContextExecutionProxy::convertToV8Object):
        (WebCore::WorkerContextExecutionProxy::convertEventToV8Object):
        (WebCore::WorkerContextExecutionProxy::convertEventTargetToV8Object):
        (WebCore::WorkerContextExecutionProxy::convertWorkerContextToV8Object):
        (WebCore::WorkerContextExecutionProxy::toV8):
        (WebCore::WorkerContextExecutionProxy::forgetV8EventObject):
        (WebCore::WorkerContextExecutionProxy::removeEventListener):
        * bindings/v8/WorkerContextExecutionProxy.h:
        (WebCore::WorkerContextExecutionProxy::context):
        (WebCore::WorkerContextExecutionProxy::convertToV8Object):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):

2009-08-06  Darin Adler  <darin@apple.com>

        Fix Mac Leopard debug build.

        * platform/text/StringImpl.cpp:
        (WebCore::equalIgnoringCase): Removed meaningless assertion; an unsigned
        is always >= 0 and checking causes a warning in the newer versions of gcc.

2009-08-06  Adam Barth  <abarth@webkit.org>

        Unreview rollout.

        Revert 46840 because it broke the reliability tests.

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::execute):
        * bindings/v8/ScheduledAction.h:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval):

2009-08-06  Adam Barth  <abarth@webkit.org>

        Unreviewed rollout.

        Revert 46840 in preparation to revert 46838, which broke the reliability tests.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::updateDocumentWrapperCache):
        (WebCore::V8Proxy::initContextIfNeeded):
        (WebCore::V8Proxy::mainWorldContext):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::context):

2009-08-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: move style-related utilities into InjectedScript.

        http://bugs.webkit.org/show_bug.cgi?id=27939

        * inspector/front-end/DOMAgent.js:
        (WebInspector.CSSStyleDeclaration):
        (WebInspector.CSSStyleDeclaration.prototype.isPropertyImplicit):
        (WebInspector.CSSStyleDeclaration.prototype.styleTextWithShorthands):
        (WebInspector.CSSStyleDeclaration.prototype.getLonghandProperties):
        (WebInspector.CSSStyleDeclaration.prototype.getShorthandPriority):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.applyStyleText):
        (InjectedScript.toggleStyleEnabled):
        (InjectedScript._serializeStyle):
        (InjectedScript._getUniqueStyleProperties):
        (InjectedScript._getLonghandProperties):
        (InjectedScript._getShorthandPriority):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._update):
        (WebInspector.StylePropertiesSection.prototype.isPropertyOverloaded):
        (WebInspector.StylePropertiesSection.prototype.onpopulate):
        (WebInspector.StylePropertyTreeElement.prototype.get priority):
        (WebInspector.StylePropertyTreeElement.prototype.get value):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/utilities.js:

2009-08-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed build fix, add #ifdef guards around
        inclusions of shared worker specific files.

        * bindings/js/JSEventTarget.cpp:
        * bindings/js/JSWorkerContextBase.cpp:
        * bindings/js/WorkerScriptController.cpp:

2009-08-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        cssgrammar.cpp fails to compile with RVCT compiler
        https://bugs.webkit.org/show_bug.cgi?id=27952

        * css/CSSGrammar.y: Do not convert to String to get rid of the stray
        memory allocation 

        * platform/text/StringImpl.cpp:
        (WebCore::equalIgnoringCase):
        * platform/text/StringImpl.h: 
        (WebCore::equalIgnoringCase): Add charactersEqualIgnoringCase
          function that works with a character pointer and length

2009-08-06  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Created first working implementation of SharedWorkers (execution only, no sharing).
        https://bugs.webkit.org/show_bug.cgi?id=27927

        Added initial implementations of SharedWorkerThread and SharedWorkerContext.
        No v8 bindings yet.

        * DerivedSources.cpp:
        Added shared worker files.
        * DerivedSources.make:
        Added shared worker files.
        * GNUmakefile.am:
        Added shared worker files.
        * WebCore.gypi:
        Added shared worker files.
        * WebCore.pro:
        Added shared worker files.
        * WebCore.vcproj/WebCore.vcproj:
        Added shared worker files.
        * WebCore.xcodeproj/project.pbxproj:
        Added shared worker files.
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        Added code to convert from EventTarget to correct JS class.
        (WebCore::toEventTarget):
        Added code to cast from JS object to appropriate EventTarget impl class.
        * bindings/js/JSSharedWorkerConstructor.cpp:
        (WebCore::JSSharedWorkerConstructor::JSSharedWorkerConstructor):
        (WebCore::constructSharedWorker):
        Tweaked the constructor code to pass in the lexical global object like normal workers.
        * bindings/js/JSSharedWorkerContextCustom.cpp: Added.
        (WebCore::JSSharedWorkerContext::mark):
        Custom marking of the onconnect handler.
        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore::toJSSharedWorkerContext):
        (WebCore::toJSWorkerContext):
        Added proper conversion to the correct WorkerContext derived class.
        * bindings/js/JSWorkerContextBase.h:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):
        Updated WorkerScriptController to create the correct type of binding object (JSSharedWorkerContext vs JSDedicatedWorkerContext)
        * bindings/scripts/CodeGeneratorV8.pm:
        Added support for SharedWorkerContext.
        * bindings/v8/DOMObjectsInclude.h:
        Added shared worker bindings files.
        * dom/EventNames.h:
        Added connect event.
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toSharedWorkerContext):
        Added API for casting to new derived class (SharedWorkerContext).
        * dom/EventTarget.h:
        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::resolveURL):
        Moved code that resolves/validates URLs to base class so it can be shared between dedicated/shared workers.
        * workers/AbstractWorker.h:
        * workers/DedicatedWorkerContext.cpp:
        (WebCore::DedicatedWorkerContext::logException):
        Refactored exception handling code - moved onerror handling to base class.
        * workers/DedicatedWorkerContext.h:
        (WebCore::DedicatedWorkerContext::isDedicatedWorkerContext):
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::SharedWorker):
        Changed constructor to fire up worker thread.
        * workers/SharedWorker.h:
        * workers/SharedWorkerContext.cpp: Added.
        (WebCore::SharedWorkerContext::SharedWorkerContext):
        (WebCore::SharedWorkerContext::~SharedWorkerContext):
        (WebCore::SharedWorkerContext::logException):
        (WebCore::SharedWorkerContext::addMessage):
        Placeholder methods until we add support for sending exceptions/messages to console.
        (WebCore::SharedWorkerContext::dispatchConnect):
        (WebCore::SharedWorkerContext::thread):
        * workers/SharedWorkerContext.h: Added.
        (WebCore::SharedWorkerContext::create):
        (WebCore::SharedWorkerContext::isSharedWorkerContext):
        (WebCore::SharedWorkerContext::toSharedWorkerContext):
        (WebCore::SharedWorkerContext::setOnconnect):
        (WebCore::SharedWorkerContext::onconnect):
        (WebCore::SharedWorkerContext::name):
        * workers/SharedWorkerContext.idl: Added.
        * workers/SharedWorkerRepository.h: Added.
        (WebCore::SharedWorkerRepository::~SharedWorkerRepository):
        * workers/DefaultSharedWorkerRepository.cpp: Added.
        Implementation of core singleton class that will be used to implement sharing.
        (WebCore::SharedWorkerProxy::setThread):
        Proxy object used to handle resource loading for a given shared worker.
        (WebCore::SharedWorkerProxy::postTaskToLoader):
        (WebCore::SharedWorkerProxy::postTaskForModeToWorkerContext):
        Placeholder routines until we implement loading.
        (WebCore::SharedWorkerConnectTask::create):
        Creates a task to fire off a connect event on the worker thread.
        (WebCore::SharedWorkerConnectTask::SharedWorkerConnectTask):
        (WebCore::SharedWorkerConnectTask::performTask):
        (WebCore::SharedWorkerLoader::SharedWorkerLoader):
        Added helper object to load the initial script for the worker.
        (WebCore::SharedWorkerLoader::load):
        (WebCore::SharedWorkerLoader::notifyFinished):
        (WebCore::SharedWorkerRepository::instance):
        (WebCore::DefaultSharedWorkerRepository::instance):
        (WebCore::DefaultSharedWorkerRepository::workerScriptLoaded):
        Fires off the worker thread once the script is loaded.
        (WebCore::SharedWorkerRepository::connect):
        (WebCore::DefaultSharedWorkerRepository::DefaultSharedWorkerRepository):
        (WebCore::DefaultSharedWorkerRepository::~DefaultSharedWorkerRepository):
        * workers/DefaultSharedWorkerRepository.h: Added.
        * workers/SharedWorkerThread.cpp: Added.
        (WebCore::SharedWorkerThread::create):
        (WebCore::SharedWorkerThread::SharedWorkerThread):
        (WebCore::SharedWorkerThread::~SharedWorkerThread):
        (WebCore::SharedWorkerThread::createWorkerContext):
        * workers/SharedWorkerThread.h: Added.
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::reportException):
        * workers/WorkerContext.h:
        (WebCore::WorkerContext::isSharedWorkerContext):
        (WebCore::WorkerContext::isDedicatedWorkerContext):
        Added APIs to determine the type of a given context.

2009-08-06  Chris Marrin  <cmarrin@apple.com>

        Reviewed by David Hyatt.

        Added ENABLE_3D_CANVAS flag to build, default to off

        * Configurations/FeatureDefines.xcconfig:

2009-08-06  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] windowsKeyCodeForKeyEvent fix

        Fix windowsKeyCodeForKeyEvent to determine wheter the event comes from the keypad.

        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2009-08-06  George Staikos  <george.staikos@torchmobile.com>

        Rubber-stamped by Ariya Hidayat.

        Remove the dead wince/ directory that should never have gone in.

        * svg/graphics/wince: Removed.
        * svg/graphics/wince/SVGResourceFilterWince.cpp: Removed.

2009-08-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Extract style editing into a separate file that is
        going to be loaded in page context.

        https://bugs.webkit.org/show_bug.cgi?id=27939

        * inspector/front-end/InjectedScript.js: Added.
        (InjectedScript.applyStyleText):
        (InjectedScript.setStyleText):
        (InjectedScript.toggleStyleEnabled):
        (InjectedScript.setStyleRule):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted.callback):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.StylePropertyTreeElement.prototype.):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2009-08-06  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        [V8] Remove bug-bait V8Proxy::context()
        https://bugs.webkit.org/show_bug.cgi?id=27826

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::updateDocumentWrapperCache):
        (WebCore::V8Proxy::initContextIfNeeded):
        (WebCore::V8Proxy::mainWorldContext):
        * bindings/v8/V8Proxy.h:

2009-08-06  Adam Barth  <abarth@webkit.org>

        Unreviewed attempt to fix the Chromium Linux build.  This function is
        not used.

        * bindings/v8/OwnHandle.h:

2009-08-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [V8] Teach ScheduledAction::execute about isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=27703

        We now save a weak handle to the original context.  We use that handle
        to call the timeout in the right context / world.

        Tests: http/tests/security/isolatedWorld/window-setTimeout-function.html
               http/tests/security/isolatedWorld/window-setTimeout-string.html

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::execute):
        * bindings/v8/ScheduledAction.h:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval):

2009-08-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [V8] Revert http://trac.webkit.org/changeset/46821, which was
        landed to supplement http://trac.webkit.org/changeset/46816, but
        now that the latter is reverted, the former needs the same.

        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:

2009-08-05  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Color is only reported in rgb() format; should toggle between rgb() and hex
        https://bugs.webkit.org/show_bug.cgi?id=13516

          New Class to Parse and Change Between Color Representations:

        * inspector/front-end/Color.js: Added.
        (WebInspector.Color):

          Representations of Colors in Raw Form. (May be Lazy Loaded):

        (WebInspector.Color.prototype.get shorthex):
        (WebInspector.Color.prototype.get hex):
        (WebInspector.Color.prototype.set hex):
        (WebInspector.Color.prototype.get rgb):
        (WebInspector.Color.prototype.set rgb):
        (WebInspector.Color.prototype.get hsl):
        (WebInspector.Color.prototype.set hsl):
        (WebInspector.Color.prototype.get nickname):
        (WebInspector.Color.prototype.set nickname):
        (WebInspector.Color.prototype.get rgba):
        (WebInspector.Color.prototype.set rgba):
        (WebInspector.Color.prototype.get hsla):
        (WebInspector.Color.prototype.set hsla):

          Helpers and Standard String Representations:

        (WebInspector.Color.prototype.hasShortHex):
        (WebInspector.Color.prototype.toRgb):
        (WebInspector.Color.prototype.toHsl):
        (WebInspector.Color.prototype.toShortHex):
        (WebInspector.Color.prototype.toHex):
        (WebInspector.Color.prototype.toRgba):
        (WebInspector.Color.prototype.toHsla):
        (WebInspector.Color.prototype.toNickname):

          Conversion Functions to Determine Other Representations:
          My Sources for all algorithms and sample data:
          Wikipedia: http://en.wikipedia.org/wiki/HSV_color_space
          CSS Specification: http://www.w3.org/TR/css3-color/#hsla-color

        (WebInspector.Color.prototype.rgbToHex):
        (WebInspector.Color.prototype.hexToRgb):
        (WebInspector.Color.prototype.rgbToHsl):
        (WebInspector.Color.prototype.hslToRgb.hueToRgb):
        (WebInspector.Color.prototype.hslToRgb):
        (WebInspector.Color.prototype.rgbaToHsla):
        (WebInspector.Color.prototype.hslaToRgba):

          Called from the constructor, attempts to parse and will throw an error
          if it cannot parse.  If simple then the "hex" value is guarenteed.
          If advanced then both the "rgba" and "hsla" are guarenteed.  If it is
          a nickname in any way (e.g. "transparent", "black") then this is
          guarenteed to be set as well.

        (WebInspector.Color.prototype.parse):

          Clicking on the swatch will rotate through Color Representations.
            Simple:   rgb -> hsl -> nickname? -> shorthex? -> hex -> (loop around)
            Advanced: rgba -> hsla -> nickname? -> (loop around)

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.value.):
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle):

          Load Color.js:

        * inspector/front-end/inspector.html:

2009-08-05  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Dimitri Glazkov.

        Support setting event listeners for message ports in the worker process.

        https://bugs.webkit.org/show_bug.cgi?id=28004

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::retrieve):
        (WebCore::WorkerContextExecutionProxy::EventTargetToV8Object):
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::getEventListener):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):

2009-08-05  Stephen White  <senorblanco@chromium.org>

        Reviewed by Dimitri Glazkov.

        http://bugs.webkit.org/show_bug.cgi?id=28022

        Minor fix for media code on chromium/skia.

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintMediaSliderTrack):

2009-08-05  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Client side image maps did not handle zoom correctly.
        Client side image maps did not handle border and padding correctly.

        Test: fast/images/image-map-zoom.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::nodeAtPoint): Compute the values to pass in to the map
        element using the content box and the effective zoom.

2009-08-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=28027
        <rdar://7064428> Files with accents in names are submitted incorrectly due to use of
        precomposed Unicode

        * platform/network/mac/FormDataStreamMac.mm: (WebCore::setHTTPBody): Use getFileSize() from
        FileSystem.h instead of custom code for getting file size. This adds path normalization
        necessary with some file systems on Mac. This also loses a S_IFMT check, which didn't seem
        important anyway.

2009-08-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [V8] Include Media into V8 bindings.

        * bindings/v8/DOMObjectsInclude.h: Added Media include.
        * bindings/v8/DerivedSourcesAllInOne.cpp: Added V8Media include.
        * bindings/v8/V8Index.cpp: Added decl for V8Media.
        * bindings/v8/V8Index.h: Added V8Media include.

2009-08-04  Jon Honeycutt  <jhoneycutt@apple.com>

        Fix Windows layout test crashes.

        PluginView::removeFromUnstartedListIfNecessary() would try to remove
        any unstarted PluginView from the Page's set of unstarted plug-ins,
        regardless of why the PluginView wasn't started. If we tried to start a
        plug-in, but it failed to start, we would hit an assertion in
        Page::removeUnstartedPlugin() that asserts that we would only modify the
        unstarted plug-ins set if we were not currently starting plug-ins.

        Fix this by having PluginView track whether it's waiting to be started,
        and to check this before trying to remove itself from the Page's
        unstarted plug-ins set.

        Reviewed by Darin Adler.

        * page/Page.cpp:
        (WebCore::Page::removeUnstartedPlugin):
        Assert that the passed PluginView is in the unstarted set.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        Set that we are not waiting to be started.
        (WebCore::PluginView::startOrAddtoUnstartedList):
        Set that we are waiting to be started.
        (WebCore::PluginView::removeFromUnstartedListIfNecessary):
        Check not whether we are started, but whether we are waiting to be
        started.
        (WebCore::PluginView::PluginView):

        * plugins/PluginView.h:

2009-08-05  Jeremy Orlow  <jorlow@chromium.org>

       Fix DOM Storage memory leak
       https://bugs.webkit.org/show_bug.cgi?id=28029

       Forgot to use adoptRef in one place.  This caused the = operator to
       increment the ref count when it shouldn't have, so StorageAreaImpl's were
       never freed.

        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::storageArea):

2009-08-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Let CodeGeneratorV8.pm know that Media is ref-counted.

        * bindings/scripts/CodeGeneratorV8.pm: Added Media check to IsRefPtrType.

2009-08-05  Darin Adler  <darin@apple.com>

        Reviewed by David Levin.

        Use checked casts for render tree
        https://bugs.webkit.org/show_bug.cgi?id=23522

        Last patch. Makes all the casts of RenderObject use checked
        casts instead of using static_cast directly.

        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::visibleChildren):
        (WebCore::AccessibilityListBox::doAccessibilityHitTest):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::elementRect):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement):
        (WebCore::AccessibilityRenderObject::stringValue):
        (WebCore::AccessibilityRenderObject::titleUIElement):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySliderThumb::elementRect):
        * dom/InputElement.cpp:
        (WebCore::InputElement::updatePlaceholderVisibility):
        * dom/SelectElement.cpp:
        (WebCore::SelectElement::scrollToSelection):
        (WebCore::SelectElement::recalcStyle):
        (WebCore::SelectElement::setRecalcListItems):
        (WebCore::SelectElement::menuListDefaultEventHandler):
        (WebCore::SelectElement::listBoxDefaultEventHandler):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::renderWidgetForJSBindings):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::reset):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::attach):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::defaultEventHandler):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::attach):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        (WebCore::HTMLInputElement::addSearchResult):
        (WebCore::HTMLInputElement::onSearch):
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::parseMappedAttribute):
        (WebCore::HTMLLIElement::attach):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::mediaPlayerDurationChanged):
        (WebCore::HTMLMediaElement::mediaPlayerSizeChanged):
        (WebCore::HTMLMediaElement::mediaPlayerRenderingCanBeAccelerated):
        (WebCore::HTMLMediaElement::mediaPlayerGraphicsLayer):
        (WebCore::HTMLMediaElement::defaultEventHandler):
        (WebCore::HTMLMediaElement::finishParsingChildren):
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::parseMappedAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateWidget):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::defaultEventHandler):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::capsLockStateMayHaveChanged):
        * page/Frame.cpp:
        (WebCore::Frame::ownerRenderer):
        * page/FrameView.cpp:
        (WebCore::FrameView::detachCustomScrollbars):
        * page/wince/FrameWince.cpp:
        (WebCore::computePageRectsForFrame):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/RenderCounter.cpp:
        (WebCore::planCounter):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::computeEdgeInfo):
        (WebCore::RenderFrameSet::setIsResizing):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::contentsBox):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::requiresCompositingForVideo):
        * rendering/RenderListItem.cpp:
        (WebCore::previousListItem):
        (WebCore::RenderListItem::explicitValueChanged):
        * rendering/RenderObject.cpp:
        (WebCore::updateListMarkerNumbers):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::updateListMarkerNumbers):
        (WebCore::invalidateCountersInContainer):
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::minimumThumbLength):
        (WebCore::RenderScrollbarTheme::backButtonRect):
        (WebCore::RenderScrollbarTheme::forwardButtonRect):
        (WebCore::RenderScrollbarTheme::trackRect):
        (WebCore::RenderScrollbarTheme::constrainTrackRectToTrackPieces):
        (WebCore::RenderScrollbarTheme::paintScrollbarBackground):
        (WebCore::RenderScrollbarTheme::paintTrackBackground):
        (WebCore::RenderScrollbarTheme::paintTrackPiece):
        (WebCore::RenderScrollbarTheme::paintButton):
        (WebCore::RenderScrollbarTheme::paintThumb):
        * rendering/RenderSlider.cpp:
        (WebCore::SliderThumbElement::defaultEventHandler):
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::paintSliderThumb):
        (WebCore::RenderThemeChromiumMac::paintMediaSliderTrack):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::determineSliderThumbState):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSliderThumb):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintSliderThumb):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::determineSliderThumbState):
        * rendering/SVGCharacterLayoutInfo.cpp:
        (WebCore::SVGCharacterLayoutInfo::addLayoutInformation):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::findSVGRootObject):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::RenderTextControlInnerBlock::nodeAtPoint):
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::attach):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::canvasResource):
        * svg/SVGTextContentElement.cpp:
        (WebCore::rootInlineBoxForTextContentElement):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::defaultEventHandler):
        Use checked casts.

        * rendering/RenderApplet.h:
        * rendering/RenderCounter.h:
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.h:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.h:
        * rendering/RenderMedia.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderPart.h:
        * rendering/RenderPartObject.h:
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGTextPath.h:
        * rendering/RenderSVGViewportContainer.h:
        * rendering/RenderScrollbar.h:
        * rendering/RenderSlider.h:
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderVideo.h:
        Added a checked cast. Also made most members protected or private.

        * rendering/RenderBlock.h:
        * rendering/RenderInline.h:
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGBlock.h:
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderSVGText.h:
        * rendering/RenderTextControl.h:
        Made most members protected or private.

        * rendering/RenderInline.cpp:
        * rendering/RenderSVGContainer.cpp:
        * rendering/RenderSVGHiddenContainer.cpp:
        * rendering/RenderSVGImage.cpp:
        * rendering/RenderSVGRoot.cpp:
        Removed unneeded destructor.

        * rendering/RenderSVGHiddenContainer.h:
        Removed unneeded virtual function overrides that did the same as
        the default and base class.

        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::paint): Updated to use m_viewport
        directly instead of using a function call.
        (WebCore::RenderSVGViewportContainer::applyViewportClip): Ditto.
        (WebCore::RenderSVGViewportContainer::viewportTransform): Ditto.
        (WebCore::RenderSVGViewportContainer::localToParentTransform): Ditto.
        (WebCore::RenderSVGViewportContainer::pointIsInsideViewportClip): Ditto.

        * rendering/RenderScrollbar.cpp:
        (WebCore::pseudoForScrollbarPart): Changed switch statement to use cases for
        all values instead of using a default case.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::operator<<): Removed dependency on casting to types that don't
        have any public members we need to get at. Instead, use function names to
        identify the type rather than doing so much overloading. Changed to use
        checked casts.
        (WebCore::write): Ditto.

        * rendering/SVGRenderSupport.cpp:
        (WebCore::renderSubtreeToImage): Changed to use a checked cast and also
        added a comment about the fact that the code does not do sufficient type
        checking before doing the cast.

        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeRenderSVGTextBox): Renamed this from operator<<.
        (WebCore::writeSVGInlineTextBoxes): Renamed this from writeSVGInlineText.
        (WebCore::writeSVGText): Renamed this from write.
        (WebCore::writeSVGInlineText): Ditto.
        (WebCore::writeSVGImage): Ditto.
        * rendering/SVGRenderTreeAsText.h: Updated for name changes. Removed
        unneeded default arguments.

2009-08-05  Peter Kasting  <pkasting@google.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=27851
        Fix a pair of compiler warnings on the GTK Linux buildbot.

        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::processFileHeader): Don't use multi-character constants, they're not portable.
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::setSize): Simpler code that also doesn't compare signed with unsigned.

2009-08-05  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26460
        Return multiple icon entries from the ICO decoder as separate frames,
        sorted by decreasing quality (much like the CG ICO decoder does).

        As a result of this change, we can eliminate the Skia-specific setData()
        hack that the Chromium port used to select the desired icon size -- now
        callers can just enumerate the frames and ask for the data from the one
        they like.
        
        Under the hood, the ICO decoder now keeps vectors for a number of things
        (including directory entries and image decoders) where it used to have
        single members.  However, callers (that I have seen) will only request
        one frame from the icon, so practically there aren't going to be lots of
        instantiated image decoders.

        * platform/graphics/ImageSource.h: Move |m_decoder| back to private now that Skia no longer needs to access it.
        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::createDecoder): Remove size argument from ICO decoder instantiation.
        * platform/graphics/skia/ImageSourceSkia.cpp:
        (WebCore::createDecoder): Remove size argument from ICO decoder instantiation.
        (WebCore::ImageSource::setData): Remove function to ask for a particular icon size.
        * platform/graphics/skia/ImageSourceSkia.h: Removed.
        * platform/graphics/wx/ImageSourceWx.cpp:
        (WebCore::createDecoder): Remove size argument from ICO decoder instantiation.
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::ICOImageDecoder):
        (WebCore::ICOImageDecoder::~ICOImageDecoder): Delete all instantiated per-frame decoders.
        (WebCore::ICOImageDecoder::setData): Send data to all instantiated per-frame decoders.
        (WebCore::ICOImageDecoder::isSizeAvailable): Use size from icon directory instead of PNG decoder (if applicable) so we can report it without decoding the PNG frames.
        (WebCore::ICOImageDecoder::size): Report frame-specific size if BMP decoder is calling.  Otherwise, use size from icon directory instead of PNG decoder (if applicable).
        (WebCore::ICOImageDecoder::frameSizeAtIndex): Implement.
        (WebCore::ICOImageDecoder::setSize): Sanity check value if BMP decoder is calling.
        (WebCore::ICOImageDecoder::frameCount): Implement.
        (WebCore::ICOImageDecoder::frameBufferAtIndex): Sanity check size for PNG frames.
        (WebCore::ICOImageDecoder::compareEntries): Add utility function for sorting entries.
        (WebCore::ICOImageDecoder::setDataForPNGDecoderAtIndex): Factor out utility function for passing correct data blob to a PNG decoder.
        (WebCore::ICOImageDecoder::decodeWithCheckForDataEnded): Split decode() into two pieces.
        (WebCore::ICOImageDecoder::decodeDirectory): The first part of the old decode().
        (WebCore::ICOImageDecoder::decodeAtIndex): The second part of the old decode(), split off so we avoid decoding an entry until it's requested.
        (WebCore::ICOImageDecoder::processDirectory): Add resizing of internal data structures based on directory contents.
        (WebCore::ICOImageDecoder::processDirectoryEntries): Sort entries by quality.
        (WebCore::ICOImageDecoder::imageTypeAtIndex): Return type to caller instead of setting a member.
        * platform/image-decoders/ico/ICOImageDecoder.h:

2009-08-05  Szabo Carol  <carol.szabo@nokia.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27942

        Test: fast/forms/select-reset-multiple-selections-4-single-selection.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::reset):
           Added HTML 4.01 compliant handling of broken webpages that
           specify more than one selected option for single selection SELECT
           element, in a manner that emulates Firefox and is similar to IE 7


2009-08-05  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        WebCore.pro bugfix

        Fix the gperf lines to properly include the string.h header at compilation with gperf version 3.0.3 and newer.

        * WebCore.pro:

2009-08-05  Chris Fleizach  <cfleizach@apple.com>

        Fix Tiger build breakage.

        * accessibility/mac/AccessibilityObjectWrapper.mm:

2009-08-04  Simon Hausmann  <hausmann@webkit.org>

        Prospective build fix for Qt build bot: Fix dependency of HTMLNames.cpp
        to both source files, HTMLTagNames.in and HTMLAttributeNames.in

        * WebCore.pro:

2009-08-04  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adele Peterson.

        Keypress should exit from pan scrolling mode.
        https://bugs.webkit.org/show_bug.cgi?id=28005

        Change the logic from only exiting pan scrolling on escape to exiting on any key press,
        making it easier for users to back out of an accidental pan scroll.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent):
        
2009-08-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        REGRESSION (r45064): Drop caret remains in text control after the mouse exits
        https://bugs.webkit.org/show_bug.cgi?id=26787

        Add back missing dragController()->clear() call.

        * manual-tests/drag-caret.html: Added.
        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag):

2009-08-04  Chris Fleizach  <cfleizach@apple.com>

        Bug 27994 - WAI-ARIA: aria-valuetext needs to be implemented
        https://bugs.webkit.org/show_bug.cgi?id=27994

        Forgot to commit attribute names.

        * html/HTMLAttributeNames.in:

2009-08-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 27994 - WAI-ARIA: aria-valuetext needs to be implemented
        https://bugs.webkit.org/show_bug.cgi?id=27994

        Test: platform/mac/accessibility/aria-valuetext.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::valueDescription):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::valueDescription):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        * html/HTMLAttributeNames.in:

2009-08-04  Michael Nordman  <michaeln@google.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=27821

        No new features, no new tests. Existing layout tests pass.

        * WebCore.base.exp:

        Export AppliationCacheGroup::storeCopyOfCache

        * WebCore.xcodeproj/project.pbxproj:

        Restore DOMApplicationCache.h and ApplicationCacheHost.h to 'project' headers
        instead of 'private' headers since they're no longer in the DocumentLoader.h
        include graph.

        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::insertedIntoDocument):

        Reinstate the test for manifest.isNull instead of .isEmtpty().
        Added a FIXME to revisit once the spec gets clarified.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::mainReceivedError):
        (WebCore::DocumentLoader::detachFromFrame):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::applicationCacheHost):

        ApplicationCacheHost is held in an OwnPtr<> by DocumentLoader. This was done
        for compile time friendliness, it results in a smaller include graph for files
        dependent on DocumentLoader.h.

        * loader/FrameLoader.cpp:
        * loader/MainResourceLoader.cpp:
        * loader/ResourceLoader.cpp:

        Cleanup ussage of ENABLE(xxx) around includes, generally remove those guards.
        This was done for readability at the include site. The included files contain appropriate guards,
        so they're not needed at the include site.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource):
        (WebCore::ApplicationCacheGroup::failedLoadingMainResource):
        (WebCore::ApplicationCacheGroup::update):
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::manifestNotFound):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        (WebCore::ApplicationCacheGroup::startLoadingEntry):
        (WebCore::CallCacheListenerTask::create):
        (WebCore::CallCacheListenerTask::performTask):
        (WebCore::CallCacheListenerTask::CallCacheListenerTask):
        (WebCore::ApplicationCacheGroup::postListenerTask):
        * loader/appcache/ApplicationCacheGroup.h:

        Use ApplicationCachHost defined constants, no longer depends on DOMApplicationCache.

        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::ApplicationCacheHost):
        (WebCore::ApplicationCacheHost::setDOMApplicationCache):
        (WebCore::ApplicationCacheHost::notifyEventListener):
        (WebCore::ApplicationCacheHost::status):
        * loader/appcache/ApplicationCacheHost.h:
        (WebCore::ApplicationCacheHost::):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::storeCopyOfCache):
        * loader/appcache/ApplicationCacheStorage.h:

        Merge recently added transferApplicationCache and pre-existing storeCopyOfCache methods.

        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::status):
        (WebCore::DOMApplicationCache::addEventListener):
        (WebCore::DOMApplicationCache::removeEventListener):
        (WebCore::DOMApplicationCache::callListener):
        (WebCore::DOMApplicationCache::toEventType):
        (WebCore::DOMApplicationCache::toEventID):
        * loader/appcache/DOMApplicationCache.h:
        (WebCore::DOMApplicationCache::setAttributeEventListener):
        (WebCore::DOMApplicationCache::getAttributeEventListener):
        (WebCore::DOMApplicationCache::clearAttributeEventListener):
        (WebCore::DOMApplicationCache::callEventListener):
        (WebCore::DOMApplicationCache::setOnchecking):
        (WebCore::DOMApplicationCache::onchecking):
        (WebCore::DOMApplicationCache::setOnerror):
        (WebCore::DOMApplicationCache::onerror):
        (WebCore::DOMApplicationCache::setOnnoupdate):
        (WebCore::DOMApplicationCache::onnoupdate):
        (WebCore::DOMApplicationCache::setOndownloading):
        (WebCore::DOMApplicationCache::ondownloading):
        (WebCore::DOMApplicationCache::setOnprogress):
        (WebCore::DOMApplicationCache::onprogress):
        (WebCore::DOMApplicationCache::setOnupdateready):
        (WebCore::DOMApplicationCache::onupdateready):
        (WebCore::DOMApplicationCache::setOncached):
        (WebCore::DOMApplicationCache::oncached):
        (WebCore::DOMApplicationCache::setOnobsolete):
        (WebCore::DOMApplicationCache::onobsolete):

        Use ApplicationCachHost defined constants for Status and EventIDs.

2009-08-04  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Revert r46421 and r46769, which appear to have totally hosed the v8 bindings.

        https://bugs.webkit.org/show_bug.cgi?id=27719

        * bindings/v8/V8AbstractEventListener.cpp: Revert r46421.
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * bindings/v8/custom/V8DOMWindowCustom.cpp: Revert r46769.
        (WebCore::ACCESSOR_GETTER):

2009-08-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 27993 - AXSliders are missing required attributes and actions
        https://bugs.webkit.org/show_bug.cgi?id=27993

        Expose appropriate actions and attributes for sliders.

        Test: platform/mac/accessibility/slider-supports-actions.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::orientation):
        * accessibility/AccessibilityObject.h:
        (WebCore::):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::orientation):
        * accessibility/AccessibilitySlider.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityActionNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2009-08-04  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        [V8] Fix an assert in WebCoreStringResource that causes worker script
        evaluation failed.
        https://bugs.webkit.org/show_bug.cgi?id=27996

        The fix is to check for the same thread, instead of the main thread.
        This is because Chromium's workers use v8 in a single thread that is
        not the main thread.

        * bindings/v8/V8Binding.cpp:
        (WebCore::WebCoreStringResource::WebCoreStringResource):
        (WebCore::WebCoreStringResource::~WebCoreStringResource):
        (WebCore::WebCoreStringResource::atomicString):

2009-08-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Add support for transitions/animations of text-indent.

        Test: transitions/text-indent-transition.html

        * page/animation/AnimationBase.cpp:
        (WebCore::ensurePropertyMap):

2009-08-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Add support for transitions of min- and max-width, and min- and max-height.
        https://bugs.webkit.org/show_bug.cgi?id=27990

        Test: transitions/min-max-width-height-transitions.html

        * page/animation/AnimationBase.cpp:
        (WebCore::ensurePropertyMap):

2009-08-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 27964 - WAI-ARIA: radio button does not determine its label from text content
        https://bugs.webkit.org/show_bug.cgi?id=27964

        ARIA radio buttons also need to use the text inside of them, like buttons and other roles.
        Also fixed an issue where an extra space was being appended to some ARIA labels.

        Test: platform/mac/accessibility/aria-radiobutton-text.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::ariaAccessibilityName):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaAccessibilityName):
        (WebCore::AccessibilityRenderObject::ariaLabeledByAttribute):
        (WebCore::AccessibilityRenderObject::title):
        (WebCore::AccessibilityRenderObject::ariaDescribedByAttribute):
        * accessibility/AccessibilityRenderObject.h:

2009-08-04  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Missed a place that expects window.event to be hidden when it shouldn't be.

        https://bugs.webkit.org/show_bug.cgi?id=27719

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_GETTER): window.event is no longer hidden.

2009-08-03  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Jon Honeycutt.

        Bug 27958 - WAI-ARIA: Implement 'aria-required' attribute.
        https://bugs.webkit.org/show_bug.cgi?id=27958

        Test: platform/mac/accessibility/aria-required.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isRequired):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isRequired):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        * html/HTMLAttributeNames.in:

2009-08-04  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Add QWebPluginDatabase API to the Qt API.
        
        https://bugs.webkit.org/show_bug.cgi?id=27651

        * WebCore.pro:

2009-08-04  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Adam Treat.

        [Qt] PlusDarker is not supported. Fall back to CompositionMode_Darken
        (as it is the closest match) instead of CompositionMode_SourceOver.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::toQtCompositionMode):

2009-08-04  Christian Plesner Hansen  <christian.plesner.hansen@gmail.com>

        Reviewed by Adam Barth.

        [v8] Fix crash when converting empty v8 string to atomic webkit string.
        https://bugs.webkit.org/show_bug.cgi?id=27975

        collection-null-like-arguments.html tests for this.

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8StringToAtomicWebCoreString):

2009-08-04  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        selectionHasStyle needs clean up to fix Bug 27858
        https://bugs.webkit.org/show_bug.cgi?id=27865

        This patch cleans up selectionStartHasStyle and selectionHasStyle.
        No test is added because the patch does not change any behavior.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::getPropertiesNotInComputedStyle): Used in triStateOfStyleInComputedStyle but will be used here as well
        * editing/ApplyStyleCommand.h: Added the prototype of getPropertiesNotInComputedStyle
        * editing/Editor.cpp:
        (WebCore::triStateOfStyleInComputedStyle): Determines if the specified style is present in the specified computed style.
        (WebCore::Editor::selectionStartHasStyle): Uses triStateOfStyleInComputedStyle
        (WebCore::Editor::selectionHasStyle): Uses triStateOfStyleInComputedStyle instead of updateState

2009-08-03  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by David Levin.

        Fix MessagePort construction in worker process.  Also make the other object constructions match this.

        https://bugs.webkit.org/show_bug.cgi?id=27906

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertToV8Object):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setDOMException):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::ToV8Object):

2009-08-03  Christian Plesner Hansen  <christian.plesner.hansen@gmail.com>

        Reviewed by David Levin.

        [V8] Cache atomic strings in externalized v8 strings
        https://bugs.webkit.org/show_bug.cgi?id=27762

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Binding.cpp:
        (WebCore::WebCoreStringResource::WebCoreStringResource):
        (WebCore::WebCoreStringResource::~WebCoreStringResource):
        (WebCore::WebCoreStringResource::data):
        (WebCore::WebCoreStringResource::length):
        (WebCore::WebCoreStringResource::webcoreString):
        (WebCore::WebCoreStringResource::atomicString):
        (WebCore::WebCoreStringResource::toStringResource):
        (WebCore::v8StringToWebCoreString):
        (WebCore::v8StringToAtomicWebCoreString):
        (WebCore::v8ValueToWebCoreString):
        (WebCore::v8ValueToAtomicWebCoreString):
        * bindings/v8/V8Binding.h:
        (WebCore::):
        * dom/Document.idl:

2009-08-03  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: DOM Storage Live Updating Should Not Affect Tabbing
        https://bugs.webkit.org/show_bug.cgi?id=27957

        * inspector/front-end/DOMStorageDataGrid.js:
        (WebInspector.DOMStorageDataGrid.prototype._startEditingColumnOfDataGridNode): disable storage event listener
        (WebInspector.DOMStorageDataGrid.prototype._startEditing): disable storage event listener
        (WebInspector.DOMStorageDataGrid.prototype._editingCancelled): enable storage event listener
        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype._unregisterStorageEventListener): quick return if no listener

2009-08-03  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Consolidate common gcc flags to WebKit.pri
        https://bugs.webkit.org/show_bug.cgi?id=27934

        * WebCore.pro:

2009-08-03  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Chromium code sometimes isn't sandboxed and needs to access the FS.
        https://bugs.webkit.org/show_bug.cgi?id=27954

        These changes are the WebKit side of http://codereview.chromium.org/159778 which
        aims to make LocalStorage persistent.

        This change runs all FileSystem routines through the ChromiumBridge so that
        WebKitClients can handle them if they choose to.  For now, the only such client
        will be the one running in the browser process.

        It also adds a method called sandboxEnabled to the Chromium bridge so that the
        SQLite file system code can shift its behavior depending on whether we're
        inside a sandbox or not.

        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/FileSystemChromium.cpp:
        (WebCore::deleteFile):
        (WebCore::deleteEmptyDirectory):
        (WebCore::getFileModificationTime):
        (WebCore::directoryName):
        (WebCore::pathByAppendingComponent):
        (WebCore::makeAllDirectories):
        (WebCore::fileExists):
        * platform/sql/chromium/SQLiteFileSystemChromium.cpp:
        (WebCore::SQLiteFileSystem::openDatabase):
        * platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp:
        (WebCore::SQLiteFileSystem::registerSQLiteVFS):

2009-08-03  Alpha Lam  <hclam@chromium.org>

        Reviewed by David Levin.

        [chromium] Implement media slider for chromium
        https://bugs.webkit.org/show_bug.cgi?id=27859

        Implemented the media slider for chromium port. The implementation
        is using Skia for drawing the thumb and buffered region instead of
        using any native system controls so different platforms would have
        the same look and feel.

        No new tests because this is covered by existing tests.

        * css/mediaControlsChromium.css:
        * rendering/RenderThemeChromiumSkia.cpp:
        * rendering/RenderThemeChromiumSkia.h:
        * rendering/RenderThemeChromiumWin.cpp:

2009-07-27  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26460
        Plumbing and cleanup in advance of returning multiple frames from the
        ICOImageDecoder:
        * Make ImageDecoder::frameCount() return a size_t like
          ImageSource::frameCount() and BitmapImage::frameCount() already do.
        * Add ImageDecoder::frameSizeAtIndex() alongside size(), to report the
          size of a particular frame.  Hook all the
          ImageSource::frameSizeAtIndex() implementations to this.  No
          ImageDecoder implements this yet; that will come in my next change.

        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::frameSizeAtIndex): Hook to ImageDecoder function.
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::frameCount): returns size_t.
        * platform/graphics/qt/ImageDecoderQt.h: frameCount() returns size_t.
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::frameSizeAtIndex): Hook to ImageDecoder function.
        * platform/graphics/skia/ImageSourceSkia.cpp:
        (WebCore::ImageSource::frameSizeAtIndex): Hook to ImageDecoder function.
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::drawFrameMatchingSourceSize): frameCount() returns size_t.
        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::drawFrameMatchingSourceSize): frameCount() returns size_t.
        * platform/graphics/wx/ImageSourceWx.cpp:
        (WebCore::ImageSource::frameSizeAtIndex): Hook to ImageDecoder function.
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::size): Clarify comment.
        (WebCore::ImageDecoder::frameSizeAtIndex): Add.
        (WebCore::ImageDecoder::frameCount): returns size_t.
        (WebCore::ImageDecoder::frameBufferAtIndex): Remove unneeded param name.
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::frameCount): returns size_t.
        (WebCore::GIFImageDecoder::frameBufferAtIndex): frameCount() returns size_t.
        * platform/image-decoders/gif/GIFImageDecoder.h: frameCount() returns size_t.

2009-08-03  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Darin Adler.

        Fix a bug that could cause an ASSERT to fail incorrectly, leading
        to a renderer crash in Chromium.

        https://bugs.webkit.org/show_bug.cgi?id=27947

        All tests in storage/ pass.

        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::~SQLiteTransaction):
        (WebCore::SQLiteTransaction::begin):

2009-08-03  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Based on work by Yael Aharon.

        Implement keyboard event forwarding for windowless plugins
        for the Qt port.

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::setSharedXEventFields):
        (WebCore::setXKeyEventSpecificFields):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):

2009-08-03  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: Make Bottom "Drawer" More Extensible To Support Other Views
        https://bugs.webkit.org/show_bug.cgi?id=27928

        * English.lproj/localizedStrings.js:

          "Show changes view", "Hide changes view", "Clear changes log", "%d style change", "%d style changes"

        * inspector/front-end/ChangesView.js: Added.
        (WebInspector.ChangesView):
        (WebInspector.ChangesView.prototype._clearButtonClicked):
        (WebInspector.ChangesView.prototype._toggleChangesButtonClicked):
        (WebInspector.ChangesView.prototype.attach):
        (WebInspector.ChangesView.prototype.show):
        (WebInspector.ChangesView.prototype.hide):

          To be a new view to show Changes made via the inspector.  DOM, CSS, or otherwise.

        * inspector/front-end/Console.js: Removed.

          Sliding View aspect moved to Drawer.js.  The "console" itself has moved to ConsoleView.js

        * inspector/front-end/ConsoleView.js: Added.

          Little has changed from its move from Console.js other then support for working with the Drawer.

        * inspector/front-end/Drawer.js: Added.
        (WebInspector.Drawer):
        (WebInspector.Drawer.prototype.get visibleView):
        (WebInspector.Drawer.prototype.set visibleView):
        (WebInspector.Drawer.prototype.show.animationFinished):
        (WebInspector.Drawer.prototype.show):
        (WebInspector.Drawer.prototype.hide.animationFinished):
        (WebInspector.Drawer.prototype.hide):
        (WebInspector.Drawer.prototype._safelyRemoveChildren):
        (WebInspector.Drawer.prototype._startStatusBarDragging):
        (WebInspector.Drawer.prototype._statusBarDragging):
        (WebInspector.Drawer.prototype._endStatusBarDragging):

          Allow for multiple views inside the Sliding Drawer.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.renameSelector):
        (WebInspector.ElementsPanel.prototype.addStyleChange):
        (WebInspector.ElementsPanel.prototype.removeStyleChange):
        (WebInspector.ElementsPanel.prototype.generateStylesheet):

          Starting work on the "Changes" Panel. The ability to generate a Stylesheet from Styles added via the Inspector.

        * inspector/front-end/Images/styleIcon.png: Added.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype.isInspectorStylesheet):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.BlankStylePropertiesSection.prototype.makeNormal):
        (WebInspector.StylePropertyTreeElement.prototype):

          Interface with ElementsPanel for generating a Stylesheet of Changes.

        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css: Refactored to allow for multiple views in the drawer.
        * inspector/front-end/inspector.html: Refactored to allow for multiple views in the drawer.

        * inspector/front-end/inspector.js:
        (WebInspector.get styleChanges):
        (WebInspector.set styleChanges):
        (WebInspector._updateChangesCount):
        (WebInspector.loaded):
        (WebInspector.documentKeyDown):
        (WebInspector.showConsole):
        (WebInspector.showChanges):

          Support for the drawer and "styles changed icon" similar to the "errors and warnings" icons.

2009-08-03  Dean McNamee  <deanm@chromium.org>

        Reviewed by Adam Barth.

        Correct an assert on a PassRefPtr in the v8 svg bindings.
        https://bugs.webkit.org/show_bug.cgi?id=27951

        * bindings/v8/V8SVGPODTypeWrapper.h:
        (WebCore::V8SVGDynamicPODTypeWrapper::V8SVGDynamicPODTypeWrapper):

2009-08-03  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=27748
        crash w/ stack overflow when same CSS file loaded repeatedly

        Fix crash caused by a stack overflow when repeatedly loading very large
        CSS files. CSSRuleData in CSSStyleSelector.h destroyed itself 
        recursively rather than iteratively.

        Test: fast/css/large-list-of-rules-crash.html

        * css/CSSStyleSelector.h:
        (WebCore::CSSRuleData::~CSSRuleData):
        (WebCore::CSSRuleDataList::~CSSRuleDataList):

2009-08-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Make the DRT APIs to pause transitions and animations work for accelerated animations
        <https://bugs.webkit.org/show_bug.cgi?id=27627>
        <rdar://problem/6442932>

        Fix the 'pauseAnimationAtTimeOnElementWithId' and 'pauseTransitionAtTimeOnElementWithId' APIs
        available to LayoutTests to work with accelerated animations and transitions. Done by sending
        the pause time down to the GraphicsLayer, and using it to stop time on the layer.
        
        I also added an assertion to check that the animation has actually started when we
        try to pause it, to check that the pause time we compute is valid. This revealed a number
        of tests that tried to pause before animations started, required some amount of test fixing.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::freezeAtTime):
        * page/animation/AnimationBase.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::pauseAnimationAtTime):
        (WebCore::CompositeAnimation::pauseTransitionAtTime):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::suspendAnimations):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/mac/GraphicsLayerCA.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::suspendAnimations):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::suspendAnimations):
        * rendering/RenderLayerBacking.h:

2009-08-03  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Adler.

        Fix Chromium build by removing PluginView.h from Page.cpp.
        Chromium doesn't use PluginView and the pointer is never
        dereferenced so the header doesn't need to be included.
        https://bugs.webkit.org/show_bug.cgi?id=27946

        No new tests because this is a build fix.

        * page/Page.cpp:

2009-08-03  Eric Carlson  <eric.carlson@apple.com>

        One more build fix after https://bugs.webkit.org/show_bug.cgi?id=46720.

        Unreviewed.

        * WebCoreSources.bkl:

2009-08-03  Eric Carlson  <eric.carlson@apple.com>

        Build fix after https://bugs.webkit.org/show_bug.cgi?id=46720.

        Unreviewed.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:

2009-08-03  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 27943: Need to implement ARIA role="radiogroup"
        https://bugs.webkit.org/show_bug.cgi?id=27943

        Test: platform/mac/accessibility/aria-radiogroup.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isRadioGroup):
        (WebCore::AccessibilityObject::selectedRadioButton):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::selectedRadioButton):
        (WebCore::RoleEntry::):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper roleDescription]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2009-08-03  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Eric Seidel.

        HTMLInputElement is not controllable by assistive technologies
        https://bugs.webkit.org/show_bug.cgi?id=27941

        Test: accessibility/input-slider.html

        * WebCore.xcodeproj/project.pbxproj:
            Add AccessibilitySlider.cpp/.h

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
            Create AccessibilitySlider and AccessibilitySliderThumb.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::increment):
        (WebCore::AccessibilityObject::decrement):
            Add default, do nothing, base class methods.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):
            Correct typo.

        * accessibility/AccessibilitySlider.cpp: Added.
        (WebCore::AccessibilitySlider::AccessibilitySlider):
        (WebCore::AccessibilitySlider::create):
        (WebCore::AccessibilitySlider::children):
        (WebCore::AccessibilitySlider::addChildren):
        (WebCore::AccessibilitySlider::getAttribute):
        (WebCore::AccessibilitySlider::valueForRange):
        (WebCore::AccessibilitySlider::maxValueForRange):
        (WebCore::AccessibilitySlider::minValueForRange):
        (WebCore::AccessibilitySlider::changeValue):
        (WebCore::AccessibilitySlider::setValue):
        (WebCore::AccessibilitySlider::increment):
        (WebCore::AccessibilitySlider::decrement):
        (WebCore::AccessibilitySlider::element):
        (WebCore::AccessibilitySliderThumb::AccessibilitySliderThumb):
        (WebCore::AccessibilitySliderThumb::create):
        (WebCore::AccessibilitySliderThumb::elementRect):
        (WebCore::AccessibilitySliderThumb::size):
        * accessibility/AccessibilitySlider.h: Added.
        (WebCore::AccessibilitySlider::~AccessibilitySlider):
        (WebCore::AccessibilitySlider::roleValue):
        (WebCore::AccessibilitySlider::accessibilityIsIgnored):
        (WebCore::AccessibilitySlider::isSlider):
        (WebCore::AccessibilitySlider::canSetValueAttribute):
        (WebCore::AccessibilitySliderThumb::~AccessibilitySliderThumb):
        (WebCore::AccessibilitySliderThumb::roleValue):
        (WebCore::AccessibilitySliderThumb::accessibilityIsIgnored):
        (WebCore::AccessibilitySliderThumb::setParentObject):
        (WebCore::AccessibilitySliderThumb::parentObject):

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (RoleEntry::):
            SliderThumbRole -> NSAccessibilityValueIndicatorRole
        (-[AccessibilityObjectWrapper roleDescription]):
            Return role description for NSAccessibilitySliderRole and NSAccessibilityValueIndicatorRole.
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
            Minor coding style correction.
        (-[AccessibilityObjectWrapper accessibilityPerformPressAction]):
            If attachement view handles press action, don't also call object wrapper.
        (-[AccessibilityObjectWrapper accessibilityPerformIncrementAction]):
            New, call object's increment() method.
        (-[AccessibilityObjectWrapper accessibilityPerformDecrementAction]):
            New, call object's decrement() method.
        (-[AccessibilityObjectWrapper accessibilityPerformAction:]):
            Respond to NSAccessibilityIncrementAction and NSAccessibilityDecrementAction.

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::thumbRect):
            Factor logic out of layout so AccessibilitySliderThumb can get thumb location/size.
        (WebCore::RenderSlider::layout):
            Move code to thumbRect().
        * rendering/RenderSlider.h:

2009-08-03  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Build fix if Netscape plugin support is turned off
        https://bugs.webkit.org/show_bug.cgi?id=27940

        * plugins/PluginView.cpp:
        (WebCore::PluginView::stop): Do not call NPN_MemFree if NPAPI is
        disabled
        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::platformStart): Empty stub.

2009-07-31  Joe Mason  <joe.mason@torchmobile.com>

        Reviewed by George Staikos.

        WINCE port: LOAD_WITH_ALTERED_SEARCH_PATH param of LoadLibraryEx not supported on WINCE
        https://bugs.webkit.org/show_bug.cgi?id=27917

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::load): use LoadLibrary instead of LoadLibraryEx

2009-08-02  Adam Barth  <abarth@webkit.org>
        Reviewed by Darin Adler.

        SVGElementInstance::scriptExecutionContext should call document() instead of scriptExecutionContext()

        https://bugs.webkit.org/show_bug.cgi?id=27932

        There's no reason to pay for a virtual function call in this case.  We
        can just call document() directly because we know that element is a
        Node*.

        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::scriptExecutionContext):

2009-08-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        JSNodeCustom should call document() instead of scriptExecutionContext()
        https://bugs.webkit.org/show_bug.cgi?id=27931

        We want to call document() because it's in inline function, instead of
        scriptExecutionContext() because it's a virtual function.  If we have a
        Node*, then we know that the virtual function will always return the
        document anyway.

        There are more instance of this bug, but I'd like to start with a small
        patch and work up.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::toJSDOMGlobalObject):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):

2009-08-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Anders Carlsson.

        Share implementation of PluginView::userAgent() and userAgentStatic()

        https://bugs.webkit.org/show_bug.cgi?id=27706

        Differences to the original implementation are as follows:
        
            - The Win port used to return 0 for userAgentStatic, but now
              returns the quirk mode MozillaUserAgent as the other ports.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::userAgent):
        (WebCore::PluginView::userAgentStatic):
        * plugins/PluginViewNone.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/mac/PluginViewMac.cpp:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/win/PluginViewWin.cpp:

2009-07-27  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Anders Carlsson.

        Unregister plugin from PluginMainThreadScheduler if NPP_New fails
        
        https://bugs.webkit.org/show_bug.cgi?id=27706
        
        Since the plugin has not been started yet (m_isStarted is not set),
        calling stop() will not have any affect, so we manually unregister
        in start() before returning.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):

2009-07-27  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Anders Carlsson.

        Join the various versions of PluginView::stop() into one shared implementation

        https://bugs.webkit.org/show_bug.cgi?id=27706

        The platform-dependent bits are now ifdef'ed in the shared implementation,
        using the XP_ defines (XP_WIN, XP_MACOSX, XP_UNIX) from npapi.h
        
        Differences to the original implementation are as follows:

            - The Qt port unregistered the plugin before calling NP_SetWindow
              with a 0 window handle. Now it's done after (similar to Win)

            - The GTK and Qt ports unregistered the plugin before clearing
              the m_npWindow.ws_info struct. Now it's done after.
              
            - The Win port constructed the DropAllLocks after unsubclassing
              the window. Now it's done before.
              
            - The Mac, Qt, and GTK ports did not pass a NPSavedData struct
              to NP_Destroy (like the Win port). Now all ports do.

            - The Win port did not call PluginView::setCurrentPluginView()
              before calling to NP-functions. Now it does.     

        * plugins/PluginView.cpp:
        * plugins/PluginViewNone.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/mac/PluginViewMac.cpp:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/win/PluginViewWin.cpp:

2009-07-30  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: let me *edit* css styles in the web inspector.
        https://bugs.webkit.org/show_bug.cgi?id=27124

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel): added property stylesheet pointing to 1 stylesheet added to the page if needed
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update): handle blank sections
        (WebInspector.StylesSidebarPane.prototype.addBlankSection): blank section in the correct position
        (WebInspector.StylesSidebarPane.prototype.appropriateSelectorForNode): helper to get a nice selector for the selectd node
        (WebInspector.StylePropertiesSection):
        (WebInspector.StylePropertiesSection.prototype.expand):
        (WebInspector.StylePropertiesSection.prototype.isPropertyInherited):
        (WebInspector.StylePropertiesSection.prototype.isPropertyOverloaded):
        (WebInspector.StylePropertiesSection.prototype.addNewBlankProperty):
        (WebInspector.StylePropertiesSection.prototype._dblclickEmptySpace): easily create new properties
        (WebInspector.StylePropertiesSection.prototype._dblclickSelector):
        (WebInspector.StylePropertiesSection.prototype.startEditingSelector): allow for editing selectors
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCancelled):
        (WebInspector.StylePropertiesSection.prototype._doesSelectorAffectSelectedNode): helper to check if a selector applies to the selected node
        (WebInspector.BlankStylePropertiesSection.prototype._dblclick):
        (WebInspector.BlankStylePropertiesSection.prototype.startEditing):
        (WebInspector.BlankStylePropertiesSection.prototype.editingCancelled):
        (WebInspector.BlankStylePropertiesSection.prototype.editingCommitted):
        (WebInspector.BlankStylePropertiesSection.prototype.makeNormal): morph into a StylePropertiesSection
        (WebInspector.StylePropertyTreeElement.prototype):
        (WebInspector.StylePropertyTreeElement.prototype.):
        * inspector/front-end/inspector.css:

2009-07-31  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] check if proxy is present before invoking a handler
        https://bugs.webkit.org/show_bug.cgi?id=27883 

        Do not invoke handler function if proxy is null pointer (that would lead to access violation
        anyway)

        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::callListenerFunction):

2009-08-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Reimplement Elements Panel so that its
        interaction with DOM is serialized.

        This is a first cut wuth read support for DOM elements
        tree as well as some limited editing. No properties, no
        styles, no search capabilities are implemented yet.
        Set Preferences.useDOMAgent to true in order to try it
        out, otherwise disabled by default.

        https://bugs.webkit.org/show_bug.cgi?id=27771

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getChildNodes):
        (WebCore::InspectorBackend::setAttribute):
        (WebCore::InspectorBackend::removeAttribute):
        (WebCore::InspectorBackend::setTextNodeValue):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::domAgent):
        * inspector/InspectorDOMAgent.cpp: Added.
        * inspector/InspectorDOMAgent.h: Added.
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:
        * inspector/front-end/Callback.js: Added.
        * inspector/front-end/DOMAgent.js: Added.
        * inspector/front-end/ElementsPanel.js:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):

2009-08-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Adele Peterson.

        isContentEditable function in htmlediting.* must be removed
        https://bugs.webkit.org/show_bug.cgi?id=27870

        This patch removes isContentEditable function in htmlediting.cpp and
        replaces all usage by calling Node::isContentEditable or its derivatives.

        * editing/AppendNodeCommand.cpp: ditto
        (WebCore::AppendNodeCommand::AppendNodeCommand): ditto
        * editing/IndentOutdentCommand.cpp: ditto
        (WebCore::IndentOutdentCommand::outdentParagraph): ditto
        * editing/InsertNodeBeforeCommand.cpp: ditto
        (WebCore::InsertNodeBeforeCommand::InsertNodeBeforeCommand): ditto
        * editing/htmlediting.cpp: ditto
        (WebCore::enclosingNodeWithTag): ditto
        (WebCore::enclosingNodeOfType): ditto
        (WebCore::canMergeLists): ditto
        * editing/htmlediting.h: Updated prototype

2009-08-01  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Adam Barth.

        Fix a message port handle always getting marked as reachable once it gets entangled.

        https://bugs.webkit.org/show_bug.cgi?id=27824

        No tests since this only arises with the Chromium multi-process message port implementation
        which isn't in this repostiory.

        * bindings/v8/V8GCController.cpp:
        (WebCore::GCEpilogueVisitor::visitDOMWrapper):

2009-07-31  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Adam Barth.

        Fix Geolocation permission problem
        https://bugs.webkit.org/show_bug.cgi?id=26993

        * page/Geolocation.cpp:
        (WebCore::Geolocation::requestPermission):

2009-07-31  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Eric Seidel.

        Added project properties as needed by symbian platform

        * WebCore.pro:

2009-07-31  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        Fix compiler warning.

        Initialize member variables in the correct order.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):

2009-07-31  Jon Honeycutt  <jhoneycutt@apple.com>

        Windows build fix!

        Unreviewed.

        * page/win/PageWin.cpp:

2009-07-31  Jon Honeycutt  <jhoneycutt@apple.com>

        Mac build fix.

        Unreviewed.

        * page/Page.cpp:
        Move setCanStartPlugins() from here...
        * page/win/PageWin.cpp:
        (WebCore::Page::setCanStartPlugins):
        ... to here.

2009-07-29  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/5698113> Safari shouldn't auto-activate plug-ins in
        background tabs (make Win consistent with Mac)

        https://bugs.webkit.org/show_bug.cgi?id=27855

        Reviewed by Anders Carlsson.

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::dispatchDidFailToStartPlugin):
        Declare a new function to dispatch failures to start plug-ins.

        * page/Page.cpp:
        (WebCore::Page::Page):
        Initialize new member variable.
        (WebCore::Page::addUnstartedPlugin):
        Add the PluginView to the set of unstarted plug-ins.
        (WebCore::Page::removeUnstartedPlugin):
        Remove the PluginView from the set of unstarted plug-ins.
        (WebCore::Page::setCanStartPlugins):
        If we can now start plug-ins, iterate the set of unstarted plug-ins,
        starting them. If a plug-in fails to start, dispatch a failed-to-start-
        plug-in error. Clear the list of unstarted plug-ins.

        * page/Page.h:
        Added m_canStartPlugins to track whether we can currently start
        plug-ins. Added m_unstartedPlugins to keep track of plug-ins in the
        page that are waiting to be started.
        (WebCore::Page::canStartPlugins):

        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        m_mimeType is now a WebCore::String, so we call .utf8(). If NPP_New()
        fails, set m_status to reflect this; this used to be set by init(), but
        start() will not be called by init() if we are delaying start().
        If NPP_New() succeeds, set m_status to reflect this, and call
        platformStart().
        (WebCore::PluginView::startOrAddToUnstartedList):
        If we cannot start plug-ins, add this view to the Page's list of
        unstarted plug-ins and return true. Otherwise, call start() and return
        the result.
        (WebCore::PluginView::removeFromUnstartedListIfNecessary):
        If we've been started or we don't have a Page, return early. Remove
        ourselves from the Page's list of unstarted plug-ins.
        (WebCore::PluginView::bindingInstance):
        If we haven't been started yet, return 0. This matches the Mac
        behavior.
        (WebCore::PluginView::setParameters):
        If we find the "plug-ins page" parameter, record it; it may be used if
        we fail to start the plug-in.
        (WebCore::PluginView::PluginView):
        Initialize new members m_haveUpdatedPluginWidget. Initialize m_mimeType
        with mimeType directly; m_mimeType is now a WebCore::String.

        * plugins/PluginView.h:
        Made start() public, so Page can call it when we start unstarted
        plug-ins. Changed m_mimeType from CString to String and added
        m_pluginsPage; these are needed by dispatchDidFailToStartPlugin().
        (WebCore::PluginView::pluginsPage):
        Added for dispatchDidFailToStartPlugin().
        (WebCore::PluginView::mimeType):
        Ditto.
        (WebCore::PluginView::url):
        Ditto.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::platformStart):
        Stubbed.

        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::platformStart):
        Stubbed.

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::platformStart):
        Stubbed.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::updatePluginWidget):
        Use m_haveUpdatedPluginWidget to ensure that we will call MoveWindow()
        and SetWindowRgn() to position the plug-in and set its clip rect if an
        earlier call to updatePluginWidget() was made before
        setPlatformPluginWidget() was called to set the plug-in's HWND.
        (WebCore::PluginView::~PluginView):
        Call removeFromUnstartedListIfNecessary() to remove the plug-in from
        the unstarted list if the plug-in is destroyed before it is started.
        (WebCore::PluginView::init):
        Call startOrAddtoUnstartedList to start the plug-in or, if plug-ins
        cannot be started, to add it to the list of plug-ins waiting to be
        started. Set m_status to indicate success; this is also set by start(),
        but that may be delayed, and we don't want the loader to dispatch a
        failed-to-start-plug-in error when we return from init().
        (WebCore::PluginView::platformStart):
        Added; code moved from init(). This is now called by start() to perform
        any platform-specific tasks that need to take place after the plug-in
        has started. Added a call to updatePluginWidget() to ensure we position
        the plug-in and set its clip rect after the plug-in has started.
        Removed the setting of m_status; start() does this before calling this
        function (and we assert this at the head of the function).

2009-07-30  Darin Adler  <darin@apple.com>

        Reviewed by David Levin.

        Use checked casts for render tree
        https://bugs.webkit.org/show_bug.cgi?id=23522

        Next step: Add casts for all the RenderTable classes and use them everywhere.

        Also added a few uses in places that were still using static_cast.
        Also made some virtual member functions private.
        Also changed RenderTable::m_tableLayout to use OwnPtr.

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::parentTable):
        (WebCore::AccessibilityTableCell::rowIndexRange):
        (WebCore::AccessibilityTableCell::columnIndexRange):
        (WebCore::AccessibilityTableCell::titleUIElement):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObject):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::parentTable):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeNode):
        * editing/TextIterator.cpp:
        (WebCore::shouldEmitTabBeforeNode):
        (WebCore::shouldEmitNewlinesBeforeAndAfterNode):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::parseMappedAttribute):
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::parseMappedAttribute):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsAboveCell):
        * page/mac/FrameMac.mm:
        (WebCore::Frame::searchForNSLabelsAboveCell):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::fullRecalc):
        (WebCore::shouldScaleColumns):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcPrefWidths):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcPercentageHeight):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addChild):
        (WebCore::RenderObject::containingBlock):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::collapsedBottomBorder):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::table):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):
        (WebCore::RenderTableRow::layout):
        (WebCore::RenderTableRow::paint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::lowestPosition):
        (WebCore::RenderTableSection::rightmostPosition):
        (WebCore::RenderTableSection::leftmostPosition):
        (WebCore::RenderTableSection::paintObject):
        (WebCore::RenderTableSection::recalcCells):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::operator<<):
        (WebCore::writeTextRun):
        Use checked casts.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::styleDidChange): Updated to use OwnPtr.
        (WebCore::RenderTable::addChild): Use checked cast.
        (WebCore::RenderTable::layout): Ditto.
        (WebCore::RenderTable::setCellWidths): Ditto.
        (WebCore::RenderTable::paintObject): Ditto.
        (WebCore::RenderTable::splitColumn): Ditto.
        (WebCore::RenderTable::appendColumn): Ditto.
        (WebCore::RenderTable::colElement): Ditto.
        (WebCore::RenderTable::recalcSections): Ditto.
        (WebCore::RenderTable::outerBorderBottom): Ditto.
        (WebCore::RenderTable::outerBorderLeft): Ditto.
        (WebCore::RenderTable::outerBorderRight): Ditto.
        (WebCore::RenderTable::sectionAbove): Ditto.
        (WebCore::RenderTable::sectionBelow): Ditto.

        * rendering/RenderTable.h: Added checked cast. Made virtual
        functions private. Changed m_tableLayout to be a OwnPtr.

        * rendering/RenderTableCell.h: Added checked cast.
        * rendering/RenderTableCol.h: Ditto. Made virtual functions private.
        * rendering/RenderTableRow.h: Ditto.
        * rendering/RenderTableSection.h: Ditto.

2009-07-31  Brady Eidson  <beidson@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/6973106> and https://bugs.webkit.org/show_bug.cgi?id=27896
        Favicons are still loaded when automatic image loading is disabled.

        People who want to avoid loading images generally want to avoid loading all images.

        Test: http/tests/misc/favicon-loads-with-images-disabled.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::startIconLoader): After committing the URL mapping, don't actually 
          perform the load if images shouldn't be loading.

2009-07-31  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.
        
        Accelerated animations stutter on pages with lots of animations and 3d transforms
        https://bugs.webkit.org/show_bug.cgi?id=27884
        
        This patch changes the strategy for synchronizing painting view the view,
        and compositing layer updates. Previously the strategy was to disable screen
        updates between the time we updated the layer tree, and painted the view. That
        left screen updates disabled for too long (hundreds of milliseconds) in some
        cases, causing animation stutter.
        
        The new strategy is to batch up changes to the CA layer tree, and commit them
        all at once just before painting happens (referred to as a "sync" in the code).
        GraphicsLayerCA now keeps a bitmask of changed properties, and then migrates
        the values stored in GraphicsLayer into the CA layer tree at commit time.
        
        Compositing layers are then synced in FrameView::paintContents(). However, not
        all style/layout changes will result in painting; to deal with style changes that
        touch only compositing properties, we set up a runloop observer that takes care
        of comitting layer changes when no painting happens.

        * WebCore.base.exp: Export FrameView::syncCompositingStateRecursive()

        * loader/EmptyClients.h: scheduleViewUpdate() renamed to syncCompositingStateRecursive()
        * page/ChromeClient.h: scheduleViewUpdate() renamed to syncCompositingStateRecursive()

        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::syncCompositingStateRecursive): syncCompositingState() on the
        view and all subviews. Like layoutIfNeededRecursive(). If layout is pending, does not
        sync and returns false, since we only want to sync when layout is done.
        
        (WebCore::FrameView::paintContents): syncCompositingState() before painting.

        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::endAnimation):
        Call animationPaused() to notify the graphics layers about animation pausing.
        
        * platform/graphics/FloatPoint3D.h:
        (WebCore::operator==):
        (WebCore::operator!=): 
        Add missing comparison operators.
        
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::setOpacity):
        (WebCore::GraphicsLayer::setBackgroundColor): Simple setters no longer care about animation info.
        
        (WebCore::GraphicsLayer::paintGraphicsLayerContents): Null-check client.
        
        * platform/graphics/GraphicsLayer.h:
        (WebCore::AnimationValue:):
        (WebCore::TransformAnimationValue:):
        (WebCore::KeyframeValueList:):
        (WebCore::KeyframeValueList::insert):
        Cleaned up versions of FloatValue and TransformValue, used to store information
        about keyframes values.

        (WebCore::GraphicsLayer::contentsRect):
        (WebCore::GraphicsLayer::setContentsRect):
        ContentsRect is now a simple setter.
        
        (WebCore::GraphicsLayer::addAnimation):
        (WebCore::GraphicsLayer::removeAnimationsForProperty):
        (WebCore::GraphicsLayer::removeAnimationsForKeyframes):
        (WebCore::GraphicsLayer::pauseAnimation):
        Simplified animation api.
        
        (WebCore::GraphicsLayer::setGeometryOrientation):
        (WebCore::GraphicsLayer::geometryOrientation):
        setGeometryOrientation is now just a normal member variable.
        
        (WebCore::GraphicsLayer::contentsOrientation): add a getter.
        (WebCore::GraphicsLayer::syncCompositingState): Entry into the layer sync code.
        
        * platform/graphics/GraphicsLayerClient.h: scheduleViewUpdate() renamed to syncCompositingStateRecursive)

        * platform/graphics/mac/GraphicsLayerCA.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        Lots of cleanup and refactoring. Main points:
        - Layer changes are all batched, and only committed to the CA layer on syncCompositingState().
        - Bitmask is used to store which properties have changed. More efficient than before.
        - Simpler animation interface; simple setters are no longer confounded with animations.
        - Refactored code that creates CA animations, and stores which animations are running.

        * platform/graphics/transforms/TransformOperations.h:
        (WebCore::TransformOperations::size):
        (WebCore::TransformOperations::at): Useful accessors for size and indexed access.
        
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerBacking.cpp:
        Renamed 'contentsLayer' to 'foregroundLayer' to avoid confusion with GraphicsLayer's
        contentsLayer.
        Adapt to GraphicsLayer's simpler animation API.
        Pass animation pausing through to the graphics layers.
        contentsBox() is no longer a callback via GraphicsLayerClient.
        
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::setCompositingLayersNeedRebuild):
        (WebCore::RenderLayerCompositor::scheduleSync):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        scheduleViewUpdate() is no longer required. Instead, we plumb through "compositingLayerSync"
        notifications, which travel up to WebKit and set up a runloop observer.
        
2009-07-30  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by David Levin.

        Guard needs //'s between #endif and ENABLE(DATAGRID)
        https://bugs.webkit.org/show_bug.cgi?id=27862

        Compiling this file causes a build break without this change.

        * bindings/v8/custom/V8DataGridColumnListCustom.cpp:

2009-07-31  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Eric Seidel.

        Geolocation clean up when no longer updating
        https://bugs.webkit.org/show_bug.cgi?id=27888

        When Geolocation::disconnectFrame() is called, need to call 
        Document::setUsingGeolocation(false) to mirror the true call 
        when it is set up.

        When handling an error, and there are no more listeners, call
        GeolocationService::stopUpdating().

        * page/Geolocation.cpp:
        (WebCore::Geolocation::disconnectFrame):
        (WebCore::Geolocation::handleError):

2009-07-31  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by George Staikos.

        Consolidate GeoLocation code to send positions and errors
        https://bugs.webkit.org/show_bug.cgi?id=27863
        
        Create helper methods that will send positions and errors to either
        one shots or watchers.

        * page/Geolocation.cpp:
        (WebCore::Geolocation::sendError):
        (WebCore::Geolocation::sendErrorToOneShots):
        (WebCore::Geolocation::sendErrorToWatchers):
        (WebCore::Geolocation::sendPosition):
        (WebCore::Geolocation::sendPositionToOneShots):
        (WebCore::Geolocation::sendPositionToWatchers):
        * page/Geolocation.h:

2009-07-31  Xan Lopez  <xlopez@igalia.com>

        Roll out previous change as it might be causing some weirdness in
        the bots.

        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::processFileHeader):

2009-07-31  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Mark Rowe.

        Fix compiler warning.
        https://bugs.webkit.org/show_bug.cgi?id=27851

        GCC does not like multi-character character constants, so use the
        explicit numerical value of 'BM' in the enum.

        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::processFileHeader):

2009-07-30  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe, but Dan Bernstein also reviewed and asked thoughtful questions.

        <rdar://problem/7106968> and https://bugs.webkit.org/show_bug.cgi?id=27868
        http://www.ruthhuntcandy.com/ goes into infinite refresh in WebKit, works in others.
        
        Test: http/tests/misc/meta-refresh-stray-single-quote.html

        * platform/network/HTTPParsers.cpp:
        (WebCore::parseHTTPRefresh): Allow for a stray quote character at the start of the URL string.

2009-07-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele Peterson and Jon Honeycutt.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=27828> for Mac.
        Bug 27828: Title attribute is not respected on option elements

        No tests added as it is not clear how to test a tool tip from DumpRenderTree.

        * platform/PopupMenuClient.h: Add a method for retrieving the tool tip of an item.
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::populate): Set the tool tip of the menu item to that of the represented item.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemToolTip): Expose the title attribute of the element as the tool tip.
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControlSingleLine.h:
        (WebCore::RenderTextControlSingleLine::itemToolTip): Return an empty string, indicating no tool tip, for
        the popup menu in RenderTextControlSingleLine.

2009-07-30  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Dan Bernstein.

        Remove ChromeClientChromium::setToolTip().
        https://bugs.webkit.org/show_bug.cgi?id=27861

        This patch is just to remove a temporarily introduced overloaded empty
        virtual function. No test is needed.

        * page/chromium/ChromeClientChromium.h:

2009-07-30  Michael Nordman  <michaeln@google.com>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=27821

        ApplicationCacheHost refactoring.
        
        1) Better encapsulate the interfaces between webcore common code
        and the appcache system within a new class ApplicationCacheHost.

        2) Use that interface throughout the loader system, replacing inline appcache logic.

        3) Implement the interface in terms of webcore's appcache system.

        4) Add the new files to various makefiles.

        5) Implement protocolHostAndPortAreEqual() in KURLGoogle.cpp

        No new features, no new tests. The existing layout tests all pass.

        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::insertedIntoDocument):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::mainReceivedError):
        (WebCore::DocumentLoader::detachFromFrame):
        (WebCore::DocumentLoader::setPrimaryLoadComplete):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::applicationCacheHost):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::logCanCacheFrameDecision):
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
        (WebCore::MainResourceLoader::didReceiveData):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::didFail):
        (WebCore::MainResourceLoader::load):
        * loader/MainResourceLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::load):
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didFail):
        * loader/ResourceLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::selectCacheWithoutManifestURL):
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource):
        (WebCore::ApplicationCacheGroup::failedLoadingMainResource):
        (WebCore::ApplicationCacheGroup::disassociateDocumentLoader):
        (WebCore::ApplicationCacheGroup::update):
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::manifestNotFound):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        (WebCore::ApplicationCacheGroup::startLoadingEntry):
        (WebCore::ApplicationCacheGroup::associateDocumentLoaderWithCache):
        (WebCore::CallCacheListenerTask::create):
        (WebCore::CallCacheListenerTask::performTask):
        (WebCore::CallCacheListenerTask::CallCacheListenerTask):
        (WebCore::ApplicationCacheGroup::postListenerTask):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/ApplicationCacheHost.cpp: Added.
        * loader/appcache/ApplicationCacheHost.h: Added.
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::transferApplicationCache):
        * loader/appcache/ApplicationCacheStorage.h:
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::DOMApplicationCache):
        (WebCore::DOMApplicationCache::disconnectFrame):
        (WebCore::DOMApplicationCache::applicationCacheHost):
        (WebCore::DOMApplicationCache::status):
        (WebCore::DOMApplicationCache::update):
        (WebCore::DOMApplicationCache::swapCache):
        (WebCore::DOMApplicationCache::addEventListener):
        (WebCore::DOMApplicationCache::removeEventListener):
        (WebCore::DOMApplicationCache::dispatchEvent):
        (WebCore::DOMApplicationCache::callListener):
        (WebCore::DOMApplicationCache::toEventName):
        (WebCore::DOMApplicationCache::toEventType):
        * loader/appcache/DOMApplicationCache.h:
        (WebCore::DOMApplicationCache::):
        (WebCore::DOMApplicationCache::setAttributeEventListener):
        (WebCore::DOMApplicationCache::getAttributeEventListener):
        (WebCore::DOMApplicationCache::clearAttributeEventListener):
        (WebCore::DOMApplicationCache::callEventListener):
        (WebCore::DOMApplicationCache::setOnchecking):
        (WebCore::DOMApplicationCache::onchecking):
        (WebCore::DOMApplicationCache::setOnerror):
        (WebCore::DOMApplicationCache::onerror):
        (WebCore::DOMApplicationCache::setOnnoupdate):
        (WebCore::DOMApplicationCache::onnoupdate):
        (WebCore::DOMApplicationCache::setOndownloading):
        (WebCore::DOMApplicationCache::ondownloading):
        (WebCore::DOMApplicationCache::setOnprogress):
        (WebCore::DOMApplicationCache::onprogress):
        (WebCore::DOMApplicationCache::setOnupdateready):
        (WebCore::DOMApplicationCache::onupdateready):
        (WebCore::DOMApplicationCache::setOncached):
        (WebCore::DOMApplicationCache::oncached):
        (WebCore::DOMApplicationCache::setOnobsolete):
        (WebCore::DOMApplicationCache::onobsolete):
        (WebCore::DOMApplicationCache::~DOMApplicationCache):
        * platform/KURLGoogle.cpp:
        (WebCore::protocolHostAndPortAreEqual):

2009-07-30  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 27854 - crash at WebCore::AXObjectCache::notificationPostTimerFired
        https://bugs.webkit.org/show_bug.cgi?id=27854

        AccessibilityObjects need to be retained while waiting to fire their notifications, otherwise
        they can disappear and then lead to crashes.
       
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::notificationPostTimerFired):
        (WebCore::AXObjectCache::postNotification):
        * accessibility/AXObjectCache.h:

2009-07-30  Simon Fraser  <simon.fraser@apple.com>

        Minor change to earlier commit suggested by Darin Adler.
        Use the variable rather than dereferencing 'it' again.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::keyframeStylesForAnimation):

2009-07-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Animation with a timing function property in a keyframe eats CPU
        https://bugs.webkit.org/show_bug.cgi?id=27856
        <rdar://problem/7104476> Animation demo uses lots of CPU
        
        Don't include animation-timing-function in the list of properties to
        animate in a keyframe animation, because this property is not animated;
        instead, it describes the timing function to apply to this keyframe.
        
        This prevents the animation code from thinking that there's a property
        that it has to software-animate, and thus firing the animation timer frequently.
        
        Not testable because there is no visible impact.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::keyframeStylesForAnimation): Don't add
        CSSPropertyWebkitAnimationTimingFunction to the list of properties to animate.

        * page/animation/KeyframeAnimation.cpp
        (WebCore::KeyframeAnimation::getKeyframeAnimationInterval): Add a comment

2009-07-30  Mike Fenton  <mike.fenton@torchmobile.com>

         Reviewed by Adam Treat.

         Apply colour style to buttons that use Theme settings in Qt.

         https://bugs.webkit.org/show_bug.cgi?id=27814

         * platform/qt/RenderThemeQt.cpp:
         (WebCore::RenderThemeQt::adjustButtonStyle):

2009-05-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Make WebCore compile with the new JS number representation.

        * ForwardingHeaders/runtime/JSAPIValueWrapper.h: Added.
        * ForwardingHeaders/runtime/JSNumberCell.h: Removed.
        * bindings/js/ScriptEventListener.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/c_instance.cpp:

2009-07-30  Dean McNamee  <deanm@chromium.org>

        Reviewed by Dimitri Glazkov.

        Don't try to hash member function pointers, instead use a precomputed value based on the field.
        https://bugs.webkit.org/show_bug.cgi?id=27843

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8SVGPODTypeWrapper.h:
        (WebCore::PODTypeWrapperCacheInfo::PODTypeWrapperCacheInfo):
        (WebCore::PODTypeWrapperCacheInfo::operator==):
        (WebCore::PODTypeWrapperCacheInfoHash::hash):
        (WebCore::V8SVGDynamicPODTypeWrapperCache::lookupOrCreateWrapper):

2009-07-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Simon Fraser.

        Fix compiler warning.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::menuListDefaultEventHandler):

2009-07-29  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Adam Barth.

        Add a way to register V8 extensions for Isolated Worlds only.
        https://bugs.webkit.org/show_bug.cgi?id=27785

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInNewWorld):
        (WebCore::ScriptController::evaluateInNewContext):
        * bindings/v8/ScriptController.h:
        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::evaluate):
        * bindings/v8/V8IsolatedWorld.h:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInNewWorld):
        (WebCore::V8Proxy::evaluateInNewContext):
        (WebCore::V8Proxy::createNewContext):
        (WebCore::V8Proxy::initContextIfNeeded):
        (WebCore::V8Proxy::registerExtensionWithV8):
        (WebCore::V8Proxy::registerExtension):
        * bindings/v8/V8Proxy.h:

2009-07-30  Mike Fenton  <mike.fenton@torchmobile.com>

         Reviewed by Adam Treat.

         Add previously defined out support to PopupMenuQt for marking entries as
         disabled and for selecting the desired item.

         https://bugs.webkit.org/show_bug.cgi?id=27772

         * platform/qt/PopupMenuQt.cpp:
         (WebCore::PopupMenu::populate):

2009-07-30  Darin Adler  <darin@apple.com>

        Reviewed by David Levin.

        Use checked casts for render tree
        https://bugs.webkit.org/show_bug.cgi?id=23522

        Next step: Add new toRenderWidget cast and use it everywhere.

        Use checked casts in all the places that were using static_cast
        but there is a checked cast available.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::stringValue):
        (WebCore::AccessibilityRenderObject::widget):
        (WebCore::AccessibilityRenderObject::widgetForAttachmentView):
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getPangoLayoutForAtk):
        * dom/Document.cpp:
        (WebCore::widgetForNode):
        (WebCore::Document::setFocusedNode):
        * html/HTMLEmbedElement.cpp:
        (WebCore::findWidgetRenderer):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::defaultEventHandler):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderWidgetForJSBindings):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadSubframe):
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::writeRawData):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
        (WebCore::subframeForTargetNode):
        (WebCore::EventHandler::handleWheelEvent):
        * page/Frame.cpp:
        (WebCore::isFrameElement):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::computePageRects):
        * page/android/EventHandlerAndroid.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * page/chromium/FrameChromium.cpp:
        (WebCore::computePageRectsForFrame):
        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * page/haiku/EventHandlerHaiku.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        * page/win/FrameWin.cpp:
        (WebCore::computePageRectsForFrame):
        * page/wx/EventHandlerWx.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::getCachedImage):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeImage):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::getCachedImage):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/win/ClipboardWin.cpp:
        (WebCore::getCachedImage):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::boxModelObject):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::addChildToContinuation):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateImageContents):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::RenderTextControlInnerBlock::positionForPoint):
        Use checked cast instead of static_cast.
        
        * rendering/RenderWidget.h: Added toRenderWidget.

2009-07-30  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: some files modified to build for WINCE
        https://bugs.webkit.org/show_bug.cgi?id=27816

        * accessibility/AccessibilityObject.h:
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::messageToEventType):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/win/PlatformScreenWin.cpp:
        (WebCore::deviceInfoForWidget):
        (WebCore::screenIsMonochrome):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::paint):
        (WebCore::registerPopup):
        (WebCore::PopupWndProc):

2009-07-30  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: modified graphics files
        https://bugs.webkit.org/show_bug.cgi?id=27779

        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::mayFillWithSolidColor):
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.h:
        * platform/graphics/transforms/Matrix3DTransformOperation.cpp:
        (WebCore::Matrix3DTransformOperation::blend):
        * platform/graphics/transforms/MatrixTransformOperation.cpp:
        (WebCore::MatrixTransformOperation::blend):
        * platform/graphics/transforms/TransformationMatrix.h:
        (WebCore::TransformationMatrix::operator*):
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::createIconForFile):
        (WebCore::Icon::createIconForFiles):
        (WebCore::Icon::paint):

2009-07-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Ariya Hidayat.

        Improve efficiency by rewriting code doing three hash table
        lookups, which can be replaced by just one as pointed out
        by Darin Adler.

        Though being slightly less clear, this should be considerable
        faster.

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::remove):

2009-07-30  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Gustavo Noronha.

        [Gtk] Code cleanup in MediaPlayerPrivateGStreamer.cpp|h and VideoSinkGStreamer.cpp|h (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=27651

        Removed unneeded includes (gdk.h and gtk.h) and added glib.h and cairo.h instead.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2009-07-30  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Gustavo Noronha.

        [Gtk] Code cleanup in MediaPlayerPrivateGStreamer.cpp|h and VideoSinkGStreamer.cpp|h (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=27651

        Fixed many code style issues pointed by WebKitTools/Scripts/modules/cpplint.py
        No functionality change at all.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        * platform/graphics/gtk/VideoSinkGStreamer.h:

2009-07-30  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Allow to explicitly choose a preferred plugin for a mimetype.

        https://bugs.webkit.org/show_bug.cgi?id=27651

        When the preferred plugin is set for a specific MIME type, it will be
        always picked up, regardless of its version, quirks etc.

        Client applications may want to use that API to resolve mimetype
        ambiguity in a custom way, rather than in the default way that is
        currently used in WebKit.

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::pluginForMIMEType):
        (WebCore::PluginDatabase::MIMETypeForExtension):
        (WebCore::PluginDatabase::setPreferredPluginForMIMEType): Added.
        (WebCore::PluginDatabase::remove):
        (WebCore::PluginDatabase::clear):
        * plugins/PluginDatabase.h:

2009-07-30  Jakub Wieczorek  <faw217@gmail.com>

        [Qt] Fix build with Qt 4.4 after r46535.

        * platform/network/qt/ResourceHandleQt.cpp:

2009-07-30  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Video elements fires another "load" event when attached to DOM
        https://bugs.webkit.org/show_bug.cgi?id=27623

        Test: media/media-load-event.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::insertedIntoDocument):
            Only schedule load when element's network state is NETWORK_EMPTY.

2009-07-30  Anton Muhin  <antonm@chromium.org>

        Reviewed by David Levin.

        Cache v8 strings when converting from WebCore::String to v8 string.
        https://bugs.webkit.org/show_bug.cgi?id=27655

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8String): now just immediately calls v8ExternalString
        (WebCore::enableStringImplCache): enables caching of conversions from WebCore::StringImpl to
        v8::String
        (WebCore::makeExternalString): utilty function to create external v8::String out of
        WebCore::String
        (WebCore::getStringCache): static function to access string cache
        (WebCore::cachedStringCallback): callback for weak handles of v8::Strings stored in the
        cache
        (WebCore::v8ExternalString): if caching enabled, checks if there is already v8::String for
        the given WebCore::StringImpl.  If present, returns it, otherwise creates a new v8 external
        string.
        * bindings/v8/V8Binding.h:

2009-07-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=25535
        [GTK] object:state-changed:checked events missing for radio buttons and checkboxes

        Implement state-changed:checked for radio buttons and checkboxes.

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):

2009-07-30  Xan Lopez  <xlopez@igalia.com>

        Forgot the 'break'.

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded):

2009-07-30  Xan Lopez  <xlopez@igalia.com>

        Try to fix Mac build.

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded):

2009-07-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Adam Barth.

        Add missing enumeration value to switch.

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded):

2009-07-29  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Adler.

        Workers need to throw an exception when presented with invalid URLs.
        https://bugs.webkit.org/show_bug.cgi?id=27770

        Tests covered by worker-constructor.html and worker-redirect.html.

        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::constructWorker):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        * workers/Worker.h:
        (WebCore::Worker::create):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::importScripts):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        (WebCore::WorkerScriptLoader::createResourceRequest):
        * workers/WorkerScriptLoader.h:

2009-07-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        (REGRESSION: r46039) Should restore previous connections-per-host limit for non-http(s) hosts
        https://bugs.webkit.org/show_bug.cgi?id=27822 and <rdar://problem/7091659>

        * loader/loader.cpp:
        (WebCore::Loader::Host::servePendingRequests): For non-http(s) hosts, restore the previous behavior of 
          only limiting connections while parsing and still trying to figure out stylesheet urls.

2009-07-29  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: Add WebCore/page/wince/FrameWince.cpp
        https://bugs.webkit.org/show_bug.cgi?id=27729

        * page/wince/FrameWince.cpp: Added.

2009-07-29  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Justin Garcia.

        REGRESSION(r46370-46426): /editing/style/remove-underline-from-stylesheet.html fails
        https://bugs.webkit.org/show_bug.cgi?id=27809

        The patch primarily rebaselines the tests but also fixes the bug in currentlyHasStyle.
        To determine that a particular text decoration is present, currentlyHasStyle should refer to
        -webkit-text-decorations-in-effect to take care of styles set by u, s, strike tags and ancestors' CSS.
        We also need to update layout to accommodate the changes made within ApplyStyleCommand.

        * editing/ApplyStyleCommand.cpp: ditto
        (WebCore::StyleChange::currentlyHasStyle): ditto

2009-07-29  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: changes to platform/text files
        https://bugs.webkit.org/show_bug.cgi?id=27715

        * platform/text/String.cpp:
        (WebCore::String::format):
        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::encode):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):
        (WebCore::extendTextCodecMaps):

2009-07-29  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Adam Roben.

        FIX: HDC leaks in PopupMenuWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=27817

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::paint):

2009-07-29  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Illegal values for <ol start> cause list numbering start at 0 (should start at 1)
        https://bugs.webkit.org/show_bug.cgi?id=27810

        Test: fast/lists/ol-start-parsing.html

        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::parseMappedAttribute): Check the result of toInt
        and use the value 1 if it failed to parse. Before we were getting toInt's default
        behavior, which is to return 0.

2009-07-29  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        Added foundation work to allow a testing infrastructure for the Web
        Inspector.

        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::scriptObjectReady): Tell the testing
        harness that the window object is ready.
        * loader/EmptyClients.h: Empty class support for SVG.
        (WebCore::EmptyInspectorClient::inspectorWindowObjectCleared):

2009-07-29  Chris Fleizach  <cfleizach@apple.com>

        Build fix for windows after landing
        Bug 27807 - AX: move re-usable code into more common areas for other platforms
   
        Apparently bzero doesn't exist on windows.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::textMarkerDataForVisiblePosition):

2009-07-29  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Justin Garcia.

        Bug 27807 - AX: move re-usable code into more common areas for other platforms
        https://bugs.webkit.org/show_bug.cgi?id=27807

        Moves some accessibility code that was in the Mac file to a more common place so 
        it can be used by other platforms. 
        This includes:
           Making TextMarkerData from a VisiblePosition.
           Making a VisiblePosition from TextMarkerData.
           Finding the anchor accessibility object for an arbitrary Node.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::visiblePositionForTextMarkerData):
        (WebCore::AXObjectCache::textMarkerDataForVisiblePosition):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::anchorElementForNode):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::visiblePositionForIndex):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (textMarkerForVisiblePosition):
        (visiblePositionForTextMarker):
        (AXAttributedStringAppendText):

2009-07-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Inset box shadows are incorrectly accounted for in visual overflow
        computations
        https://bugs.webkit.org/show_bug.cgi?id=27811

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally): Use
            getBoxShadowHorizontalExtent().
        (WebCore::InlineFlowBox::placeBoxesVertically): Use
            getBoxShadowVerticalExtent(). Removed duplicate code to get the
            text-shadow overflow.
        (WebCore::InlineFlowBox::paint): Use getBoxShadowHorizontalExtent().
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::overflowHeight): Use
            getBoxShadowVerticalExtent().
        (WebCore::RenderBlock::overflowWidth): Use
            getBoxShadowHorizontalExtent().
        (WebCore::RenderBlock::overflowLeft): Ditto.
        (WebCore::RenderBlock::overflowTop): Use getBoxShadowVerticalExtent().
        (WebCore::RenderBlock::overflowRect): Use getBoxShadowExtent().
        (WebCore::RenderBlock::layoutBlock): Ditto.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateRects): Exclude inset shadows.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded): Use
            getBoxShadowHorizontalExtent() and getBoxShadowVerticalExtent().
        (WebCore::RenderObject::adjustRectForOutlineAndShadow): Exclude inset
            shadows.
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::adjustOverflowForBoxShadowAndReflect): Ditto.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setTextShadow): Also assert that text-shadows are
            not inset.
        (WebCore::RenderStyle::getBoxShadowExtent): Added. Excludes inset
            shadows.
        (WebCore::RenderStyle::getBoxShadowHorizontalExtent): Ditto.
        (WebCore::RenderStyle::getBoxShadowVerticalExtent): Ditto.
        * rendering/style/RenderStyle.h:

2009-07-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Fix crash when an element with display: table-row is composited (e.g. via a 3d-transform)
        https://bugs.webkit.org/show_bug.cgi?id=27796
        
        Avoid repainting when a layer becomes composited if the renderer is not parented
        yet, because it makes no sense to do so.
        
        If the table row is a repaint container, default to the RenderBox implementation
        of clippedOverflowRectForRepaint(), because we cannot hand off the repaint rect
        computation to something that is above the repaint container.

        Test: fast/table/table-row-compositing-repaint-crash.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::repaintOnCompositingChange):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::clippedOverflowRectForRepaint):

2009-07-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=27791
        307 redirects of POSTs should use POST, not GET

        Test: http/tests/loading/redirect-methods.html

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):

2009-07-29  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Adding -webkit-animation-play-state back in
        https://bugs.webkit.org/show_bug.cgi?id=26867

        We've decided to keep -webkit-animation-play-state. So this
        just adds back in the code from https://bugs.webkit.org/show_bug.cgi?id=22907.

        Test: animations/play-state.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseAnimationPlayState):
        (WebCore::CSSParser::parseAnimationProperty):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapAnimationPlayState):
        * css/CSSStyleSelector.h:
        * platform/animation/Animation.h:
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-07-29  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Expose the default plugin directories and the current directory set of
        the plugin database as public API.

        https://bugs.webkit.org/show_bug.cgi?id=27651

        * plugins/PluginDatabase.h:
        (WebCore::PluginDatabase::pluginDirectories):

2009-07-29  Alpha Lam  <hclam@chromium.org>

        Reviewed by David Levin.

        [chromium] Font size for current time display in media controls panel
        is affected by body font size.
        https://bugs.webkit.org/show_bug.cgi?id=27799

        Fixing the problem of rendering by explicitly setting the font size
        for the time displays.

        No new tests since this is covered by existing media tests.

        * css/mediaControlsChromium.css:

2009-07-29  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by David Levin.

        Update WebCore/page/ContextMenuController.cpp to conform to WebKit
        Style Guidelines as identified by cpp_style.py.
        https://bugs.webkit.org/show_bug.cgi?id=27613

        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        (WebCore::ContextMenuController::contextMenuItemSelected):

2009-07-29  Dean McNamee  <deanm@chromium.org>

        Reviewed by Dimitri Glazkov.

        Removed unused wrapCPointer/extractCPointer from the v8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=27805

        * bindings/v8/V8DOMWrapper.h:

2009-07-29  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Expose the PluginDatabase::pluginForMIMEType() function as public API.
        https://bugs.webkit.org/show_bug.cgi?id=27651

        It can be used to determine the appropriate plugin for a mime type,
        without guessing the mimetype from the extension.

        * plugins/PluginDatabase.h:

2009-07-29  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Adam Treat.

        Allow to enable/disable particular plugin packages.
        https://bugs.webkit.org/show_bug.cgi?id=27651

        Disabled plugins will not be picked up when looking for a plugin
        supporting the requested mimetypes.

        Client applications may want to use that API to disable specific
        plugins.

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::pluginForMIMEType):
        (WebCore::PluginDatabase::MIMETypeForExtension):
        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::PluginPackage):
        (WebCore::PluginPackage::setEnabled):
        * plugins/PluginPackage.h:
        (WebCore::PluginPackage::isEnabled):

2009-07-29  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Adam Treat.

        [WML] Running WML tests in random order multiple times exposes subtle bugs
        https://bugs.webkit.org/show_bug.cgi?id=27801

        Remove superflous assertions regarding the parent node. Under certain circumstances
        these can even fire (related to garbage collection while destructing). Fixes random order
        WML tests (run-webkit-tests fast/wml wml http/tests/wml fast/wml ... --random)

        The wml/enter-first-card-with-events.html test relied on a bug in our implementation of
        WMLPageState::reset() - the history stack should still contain the current card afterwards.
        Fix that bug by preserving the first item in BackForwardList::clearWMLPageHistory().

        * history/BackForwardList.cpp: Preserve first item in history stack, as demanded by the spec.
        (WebCore::BackForwardList::clearWMLPageHistory):
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::insertedIntoDocument):
        (WebCore::WMLDoElement::removedFromDocument):
        * wml/WMLNoopElement.cpp:
        (WebCore::WMLNoopElement::insertedIntoDocument):
        * wml/WMLOnEventElement.cpp:
        (WebCore::eventHandlingParent):
        * wml/WMLPostfieldElement.cpp:
        (WebCore::WMLPostfieldElement::insertedIntoDocument):
        (WebCore::WMLPostfieldElement::removedFromDocument):
        * wml/WMLSetvarElement.cpp:
        (WebCore::WMLSetvarElement::insertedIntoDocument):
        (WebCore::WMLSetvarElement::removedFromDocument):
        * wml/WMLTaskElement.cpp:
        (WebCore::WMLTaskElement::insertedIntoDocument):
        (WebCore::WMLTaskElement::removedFromDocument):
        * wml/WMLTimerElement.cpp:
        (WebCore::WMLTimerElement::insertedIntoDocument):
        (WebCore::WMLTimerElement::removedFromDocument):

2009-07-29  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=26848
        [Qt] ResourceHandle::willLoadFromCache needs to be implemented QtWebKit.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadItem):
        * platform/network/ResourceHandle.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::willLoadFromCache):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::willLoadFromCache):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willLoadFromCache):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::willLoadFromCache):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::):

2009-07-29  Alpha Lam  <hclam@chromium.org>

        Reviewed by David Levin.

        Media control panel for <video> in MediaDocument is mis-placed
        https://bugs.webkit.org/show_bug.cgi?id=27798

        Fixing a rendering problem: When <video> is displayed in MediaDocument,
        the media control panel overlaps with the video by 16 pixels.

        No new tests as this is covered by existing media tests.

        * css/mediaControlsChromium.css:

2009-07-29  Adam Barth  <abarth@webkit.org>

        Unreviewed build fix for Chromium.  Those last two patches weren't
        independent despite the clean merge.

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::V8AbstractEventListener):

2009-07-29  Avi Drissman  <avi@chromium.org>

        Reviewed by Darin Adler.

        ImageSourceCG makes bad data refs (race condition causes blank images)
        https://bugs.webkit.org/show_bug.cgi?id=27777

        Make ImageSourceCG guarantee that the lifetime of the SharedBuffer that
        backs the CFDataRef will be long enough.

        No new tests, as this fixes a bug with a race condition that is
        difficult to trigger.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):

2009-07-29  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: Console should show completions for the command line APIs
        https://bugs.webkit.org/show_bug.cgi?id=27696

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype._reportCompletions): Adds properties from _inspectorCommandLineAPI to 
        completions when available.
        * inspector/front-end/utilities.js:
        (Object.properties): Added.
        (Object.sortedProperties):

2009-07-29  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        Refactor the first step of layout in RenderFlexibleBox.cpp
        https://bugs.webkit.org/show_bug.cgi?id=27704

        No new tests as this change is just a refactoring.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::gatherFlexChildrenInfo):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):

2009-07-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Fix a bug that HTMLOptionElement::value() returns an incorrect
        value in a case that the element has a label attribute and no
        value attribute.
        https://bugs.webkit.org/show_bug.cgi?id=27760

        Test: fast/forms/option-value-and-label.html

        * dom/OptionElement.cpp:
        (WebCore::OptionElement::collectOptionLabelOrText):
        (WebCore::OptionElement::collectOptionInnerText):
        (WebCore::OptionElement::normalizeText):
        (WebCore::OptionElement::collectOptionTextRespectingGroupLabel):
        (WebCore::OptionElement::collectOptionValue):
        * dom/OptionElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::text):
        * wml/WMLOptionElement.cpp:
        (WebCore::WMLOptionElement::text):

2009-07-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix isolated world wrappers for event handlers
        https://bugs.webkit.org/show_bug.cgi?id=27533

        Instead of getting the context from the frame, we cache the context
        when the listener is created so that we get the context for the right
        world.

        Test: http/tests/security/isolatedWorld/click-event.html

        * WebCore.gypi:
        * bindings/v8/OwnHandle.h: Added.
        (WebCore::OwnHandle::OwnHandle):
        (WebCore::OwnHandle::~OwnHandle):
        (WebCore::OwnHandle::get):
        (WebCore::OwnHandle::set):
        (WebCore::OwnHandle::release):
        (WebCore::OwnHandle::adopt):
        (WebCore::OwnHandle::swap):
        (WebCore::OwnHandle::clear):
        (WebCore::OwnHandle::makeWeak):
        (WebCore::OwnHandle::weakCallback):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::V8AbstractEventListener):
        (WebCore::V8AbstractEventListener::handleEvent):
        * bindings/v8/V8AbstractEventListener.h:
        * bindings/v8/V8DOMWrapper.h:

2009-07-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Teach V8Proxy::context about isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=27701

        Change V8Proxy::context(Frame*) to understand isolated worlds.  Audit
        all callers of this method to make sure they want isolated worlds.  In
        cases where we really want the main world, I've changed the call to
        V8Proxy::mainWorldContext(Frame*).
        
        The main visible change is to the document.open method when called with
        more than two arguments.  This design seems more likely to lead to
        future correct code.

        Test: http/tests/security/isolatedWorld/document-open.html

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        (WebCore::ScriptController::evaluate):
        (WebCore::ScriptController::bindToWindowObject):
        (WebCore::ScriptController::collectGarbage):
        (WebCore::createScriptObject):
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        * bindings/v8/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::handleEvent):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getConstructor):
        (WebCore::V8DOMWrapper::setHiddenWindowReference):
        (WebCore::V8DOMWrapper::convertNodeToV8Object):
        (WebCore::V8DOMWrapper::convertWindowToV8Object):
        * bindings/v8/V8Helpers.cpp:
        (WebCore::toV8Context):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::getListenerFunction):
        (WebCore::V8LazyEventListener::getWrappedListenerFunction):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::context):
        (WebCore::V8Proxy::mainWorldContext):
        (WebCore::V8Proxy::bindJsObjectToWindow):
        * bindings/v8/V8Proxy.h:

2009-07-29  Balazs Kelemen  <kelemen.balazs.3@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Fix the Qt build, add missing file.

        * WebCore.pro:

2009-07-28  Jon Honeycutt  <jhoneycutt@apple.com>

        Speculative fix for <rdar://problem/7005077> WER: Crash in
        WebCore::PluginStream::destroyStream+279 (1310510882)

        Reviewed by Oliver Hunt.

        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::destroyStream):
        Move the "protector" RefPtr out of the block that dispatches
        notifications and into the function level; if NPN_DestroyStream were
        called from NPP_NewStream as the comment warns, we would be deleted at
        the end of the block.

2009-07-28  Joseph Pecoraro  <joepeck02@gmail.com>

        Inspector: Tab Through the DOM Storage DataGrid when Editing

        https://bugs.webkit.org/show_bug.cgi?id=27746

        Reviewed by Timothy Hatcher.

        * inspector/front-end/DOMStorageDataGrid.js:
        (WebInspector.DOMStorageDataGrid.prototype._startEditingColumnOfDataGridNode): refactored to directly edit and select a column
        (WebInspector.DOMStorageDataGrid.prototype._startEditing):
        (WebInspector.DOMStorageDataGrid.prototype._editingCommitted.moveToNextIfNeeded): handles moveDirection on a commit
        (WebInspector.DOMStorageDataGrid.prototype._editingCommitted): uses moveToNext to traverse appropriately

2009-07-28  Joseph Pecoraro  <joepeck02@gmail.com>

        Inspector: Create New DOM Storage Items via DataGrid

        https://bugs.webkit.org/show_bug.cgi?id=27322

        Reviewed by Timothy Hatcher.

        * inspector/front-end/DOMStorageDataGrid.js:
        (WebInspector.DOMStorageDataGrid.prototype._startEditing): click anyway means creationNode
        (WebInspector.DOMStorageDataGrid.prototype._editingCommitted): fix unintended globals
        (WebInspector.DOMStorageDataGrid.prototype.deleteSelectedRow): creationNode is special case
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype.addCreationNode): maintain a quick ref to the single creationNode
        (WebInspector.CreationDataGridNode): new type of node
        (WebInspector.CreationDataGridNode.prototype.makeNormal): convert to a normal node
        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype.dataGridForDOMStorage): add a creationNode to the GridData

2009-07-28  Joseph Pecoraro  <joepeck02@gmail.com>

        Inspector: Automatically Refresh DOM Storage Grids on "storage" event

        https://bugs.webkit.org/show_bug.cgi?id=27400

        Reviewed by Timothy Hatcher.

        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype.show): trigger adding the listener
        (WebInspector.DatabasesPanel.prototype.reset): trigger removing the listener
        (WebInspector.DatabasesPanel.prototype._registerStorageEventListener): register the listener on the inspected window
        (WebInspector.DatabasesPanel.prototype._unregisterStorageEventListener): unregister the listener on the inspected window
        (WebInspector.DatabasesPanel.prototype._storageEvent): handle the storage event

2009-07-28  Keishi Hattori  <casey.hattori@gmail.com>

        Inspector should support inspect() in the command line.

        https://bugs.webkit.org/show_bug.cgi?id=19874
        rdar://problem/6070225

        Reviewed by Timothy Hatcher.

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype._ensureCommandLineAPIInstalled.inspectObject):
        (WebInspector.Console.prototype._ensureCommandLineAPIInstalled):
        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype.revealAndSelectDomStorage): Added.
        (WebInspector.DatabasesPanel.prototype.revealAndSelectDatabase): Added.
        (WebInspector.DatabasesPanel.prototype.showDatabase): 

2009-07-28  Keishi Hattori  <casey.hattori@gmail.com>

        The rest of: Web Inspector: Add inspected node using public console API.

        https://bugs.webkit.org/show_bug.cgi?id=27758

        Reviewed by Timothy Hatcher.

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype._ensureCommandLineAPIInstalled): Removed _inspectorCommandLineAPI._addInspectedNode.
        (WebInspector.Console.prototype.addInspectedNode): Added.

2009-07-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Accept autocomplete on 'End' key pressed.

        https://bugs.webkit.org/show_bug.cgi?id=27447.

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.handleKeyEvent):

2009-07-28  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by David Levin.

        [Qt] Build fix after r46502
        https://bugs.webkit.org/show_bug.cgi?id=27789

        * WebCore.pro: Remove StorageArea.cpp

2009-07-28  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Follow-on fix to r35582.  Replace main thread assertions with WebCoreObjCScheduleDeallocateOnMainThread
        in -dealloc overrides in DOMObject subclasses.

        * bindings/scripts/CodeGeneratorObjC.pm:

2009-07-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Adam Treat.

        [WML] WML*Element classes mostly implement insertedIntoDocument(), not removedFromDocument()
        https://bugs.webkit.org/show_bug.cgi?id=27786

        WML*Element classes mostly implement insertedIntoDocument(), not removedFromDocument().
        The only case where this is relevant in WML is error handling. The parsed WML
        tree fragment is inserted in an XHTML compound error document. This requires
        removedFromDocument() to be correctly implemented otherwhise we run into
        trouble (visible when using run-webkit-tests fast/wml --random).

        * wml/WMLAnchorElement.cpp:
        (WebCore::WMLAnchorElement::registerTask):
        (WebCore::WMLAnchorElement::deregisterTask):
        * wml/WMLAnchorElement.h:
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::removedFromDocument):
        (WebCore::WMLDoElement::registerTask):
        (WebCore::WMLDoElement::deregisterTask):
        * wml/WMLDoElement.h:
        * wml/WMLEventHandlingElement.cpp:
        (WebCore::WMLEventHandlingElement::registerDoElement):
        (WebCore::WMLEventHandlingElement::deregisterDoElement):
        * wml/WMLEventHandlingElement.h:
        * wml/WMLFieldSetElement.cpp:
        (WebCore::WMLFieldSetElement::removedFromDocument):
        * wml/WMLGoElement.cpp:
        (WebCore::WMLGoElement::registerPostfieldElement):
        (WebCore::WMLGoElement::deregisterPostfieldElement):
        * wml/WMLGoElement.h:
        * wml/WMLIntrinsicEventHandler.cpp:
        (WebCore::WMLIntrinsicEventHandler::deregisterIntrinsicEvent):
        * wml/WMLIntrinsicEventHandler.h:
        * wml/WMLOnEventElement.cpp:
        (WebCore::eventHandlingParent):
        (WebCore::WMLOnEventElement::registerTask):
        (WebCore::WMLOnEventElement::deregisterTask):
        * wml/WMLOnEventElement.h:
        * wml/WMLPostfieldElement.cpp:
        (WebCore::WMLPostfieldElement::removedFromDocument):
        * wml/WMLPostfieldElement.h:
        * wml/WMLSetvarElement.cpp:
        (WebCore::WMLSetvarElement::removedFromDocument):
        * wml/WMLSetvarElement.h:
        * wml/WMLTaskElement.cpp:
        (WebCore::WMLTaskElement::removedFromDocument):
        (WebCore::WMLTaskElement::registerVariableSetter):
        (WebCore::WMLTaskElement::deregisterVariableSetter):
        (WebCore::WMLTaskElement::storeVariableState):
        * wml/WMLTaskElement.h:
        * wml/WMLTimerElement.cpp:
        (WebCore::WMLTimerElement::removedFromDocument):
        * wml/WMLTimerElement.h:

2009-07-28  David Levin  <levin@chromium.org>

        Suggested by Drew Wilson.

        Speculative gtk build fix, follow up to:
        https://bugs.webkit.org/show_bug.cgi?id=27697

        * GNUmakefile.am:

2009-07-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        [CSS3 Backgrounds and Borders] Drop the prefix from the border-radius
        properties
        https://bugs.webkit.org/show_bug.cgi?id=27578

        [CSS3 Backgrounds and Borders] Handle the / and 4 values in
        border-radius
        https://bugs.webkit.org/show_bug.cgi?id=27584

        Test: fast/borders/border-radius-parsing.html

        Dropped the -webkit- prefix from the individual corner border-radius
        properties. Added border-radius with the / and 4-value syntax, and
        maintained -webkit-border-radius with legacy 2-value syntax.

        * css/CSSComputedStyleDeclaration.cpp:
        (computedProperties): Removed Webkit prefix.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Ditto.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Removed Webkit prefix from the
            single-corner properties. Call out to parseBorderRadius() to parse
            border-radius and -webkit-border-radius. 
        (WebCore::completeBorderRadii): Added this helper function that
            completes the values for all four corners when fewer than four are
            specified.
        (WebCore::CSSParser::parseBorderRadius): Added.
        (WebCore::cssPropertyID): Map -webkit-border-*-*-radius to the
            unprefixed property.
        * css/CSSParser.h:
        * css/CSSPropertyLonghand.cpp:
        (WebCore::initShorthandMap): Removed the Webkit prefix. Added an entry
            for border-radius. Kept the entry for -webkit-border-radius.
        * css/CSSPropertyNames.in: Removed the -webkit- prefix from the
            single-corenr properties. Added border-radius. Kept
            -webkit-border-radius because of its conflicting syntax.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Removed the Webkit prefix.
        * page/animation/AnimationBase.cpp:
        (WebCore::ensurePropertyMap): Ditto.

2009-07-28  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Refactored dedicated-worker-specific code from WorkerThread into DedicatedWorkerThread class.

        WorkerThread needs to be refactored to separate out dedicated-worker functionality.
        https://bugs.webkit.org/show_bug.cgi?id=27697

        This is just a refactoring, so existing tests suffice.

        * GNUmakefile.am:
        Added DedicatedWorkerThread.h/.cpp
        * WebCore.gypi:
        Added DedicatedWorkerThread.h/.cpp
        * WebCore.pro:
        Added DedicatedWorkerThread.h/.cpp
        * WebCore.vcproj/WebCore.vcproj:
        Added DedicatedWorkerThread.h/.cpp
        * WebCore.xcodeproj/project.pbxproj:
        Added DedicatedWorkerThread.h/.cpp
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        Removed code to track pending activity - this is handled by DedicatedWorkerContext::importScripts() now.
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        Removed code to track pending activity - this is handled by DedicatedWorkerContext::importScripts() now.
        * workers/DedicatedWorkerContext.cpp:
        (WebCore::DedicatedWorkerContext::DedicatedWorkerContext):
        (WebCore::DedicatedWorkerContext::addMessage):
        Forwards console messages to parent document.
        (WebCore::DedicatedWorkerContext::importScripts):
        Now sends the updated pending activity status after importing scripts.
        (WebCore::DedicatedWorkerContext::thread):
        Helper routine that casts WorkerThread to DedicatedWorkerThread.
        * workers/DedicatedWorkerContext.h:
        (WebCore::DedicatedWorkerContext::create):
        * workers/DedicatedWorkerThread.cpp: Added.
        (WebCore::DedicatedWorkerThread::create):
        (WebCore::DedicatedWorkerThread::DedicatedWorkerThread):
        (WebCore::DedicatedWorkerThread::~DedicatedWorkerThread):
        (WebCore::DedicatedWorkerThread::createWorkerContext):
        Implementation of the base class factory method to create the appropriate worker context.
        (WebCore::DedicatedWorkerThread::runEventLoop):
        Reports pending activity before running the event loop.
        * workers/DedicatedWorkerThread.h: Added.
        (WebCore::DedicatedWorkerThread::workerObjectProxy):
        Moved from base class.
        * workers/WorkerContext.cpp:
        * workers/WorkerContext.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerContext):
        Now creates DedicatedWorkerThread.
        (WebCore::WorkerMessagingProxy::workerThreadCreated):
        Now is passed a DedicatedWorkerThread.
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::WorkerThread):
        Moved workerObjectProxy param into derived class constructor.
        (WebCore::WorkerThread::workerThread):
        (WebCore::WorkerThread::runEventLoop):
        Moved the event loop execution into a virtual function so DedicatedWorkerThread could report pending activity first.
        * workers/WorkerThread.h:
        (WebCore::WorkerThread::workerContext):

2009-07-28  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.

        Fix V8NPUtils' handling of UTF8 identifiers.

        https://bugs.webkit.org/show_bug.cgi?id=27782

        * bindings/v8/V8NPUtils.cpp:
        (getStringIdentifier): Treat the input string as UTF8 instead of ASCII,
            since NPN_GetStringIdentifier() is expecting UTF8.

2009-07-28  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Eric Seidel.

        Misc cleanup in DOM Storage.
        https://bugs.webkit.org/show_bug.cgi?id=27517

        The StorageAreaImpl changes are all for Chromium.  Because the DOM Storage implementation
        runs in a different process from where the Frame object lives, Chromium passes in NULL
        for the sourceFrame.  This affects events and handling privateBrowsing.  Chromium's
        incognito mode does not use the private browsing setting, so that's not a concern.  As for
        events, I've decided to simply disable them for now.

        The StorageNamespaceImpl changes get rid of a stale comment (path is .copy'ed for thread-
        safety) and to add an assert that .copy is only ever called on a SessionStorage namespace.

        Also cleaned up tailing whitespace in several parts of StorageAreaImpl.cpp

        * storage/StorageArea.cpp: Removed.  (It was empty anyway.)
        * storage/StorageAreaImpl.cpp:
        (WebCore::privateBrowsingEnabled): Factored out the check.
        (WebCore::StorageAreaImpl::setItem): Make frame optional.
        (WebCore::StorageAreaImpl::removeItem): ditto
        (WebCore::StorageAreaImpl::clear): ditto
        (WebCore::StorageAreaImpl::dispatchStorageEvent): Disable in Chromium for now.
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::StorageNamespaceImpl): Remove stale comment.
        (WebCore::StorageNamespaceImpl::copy): Add assert that it's SessionStorage.

2009-07-28  Alpha Lam  <hclam@google.com>

        Reviewed by David Levin.

        [chromium] Default UI controls for <video> has rendering problems
        https://bugs.webkit.org/show_bug.cgi?id=27669

        Fixes the bug that <video> in MediaDocument is 1 pixel tall if
        it is playing an audio file by changing the style to be 32px
        tall.

        Also fixes a problem of default styled audio tag that hides the
        all the time digits by expanding the width to 300px.

        Changed the size and position of the current time and remaining
        display to give enough space for the hour digit to be shown.

        There are no new tests provided because this is already covered
        by existing tests.

        * css/mediaControlsChromium.css:

2009-07-28  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Eric Seidel.

        Fix style in PluginPackage and PluginDatabase.
        Part of https://bugs.webkit.org/show_bug.cgi?id=27651

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::refresh):
        (WebCore::PluginDatabase::findPlugin):
        * plugins/PluginDatabase.h:
        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::~PluginPackage):
        (WebCore::PluginPackage::freeLibrarySoon):
        (WebCore::PluginPackage::freeLibraryTimerFired):
        (WebCore::PluginPackage::unloadWithoutShutdown):
        (WebCore::PluginPackage::initializeBrowserFuncs):
        * plugins/PluginPackage.h:

2009-07-28  Anantanarayanan Iyengar  <ananta@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=27769
        The V8 bindings function V8Proxy::createNewContext can be 
        called during frame shutdown where the activeDocumentLoader
        function in FrameLoader can return NULL. Added a check for the
        same.

        No new tests added as this is an edge case where the V8 
        bindings code is reentered via NPAPI during shutdown. It is 
        difficult to write a consistently reproducible test for this.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::createNewContext):

2009-07-28  Ivan Posva  <iposva@chromium.org>

        Reviewed by Dimitri Glazkov.

        Associate the CanvasPixelData backing store with the
        indexed properties of the wrapper object.

        https://bugs.webkit.org/show_bug.cgi?id=27773

        No new tests: Relying on existing Canvas tests.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8DOMWrapper::convertToV8Object):

2009-07-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Nuke all references to JSWorkerContextBase.lut.h, it was removed
        back in April.

        * GNUmakefile.am:

2009-07-28  Robert Agoston  <Agoston.Robert@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Fixed references to script generate-webkitversion.pl, and
        removed duplicated generate-webkitversion.pl

        https://bugs.webkit.org/show_bug.cgi?id=27158

        * WebCore.pro:
        * platform/generate-webkitversion.pl: Removed.

2009-07-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Dmitry Glazkov.

        Web Inspector: encapsulate ScriptState into the ScriptObject, get rid of
        InspectorJSONObject.

        https://bugs.webkit.org/show_bug.cgi?id=27766

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/ScriptArray.cpp:
        (WebCore::ScriptArray::ScriptArray):
        (WebCore::ScriptArray::set):
        (WebCore::ScriptArray::length):
        (WebCore::ScriptArray::createNew):
        * bindings/js/ScriptArray.h:
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::construct):
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptObject::ScriptObject):
        (WebCore::ScriptObject::set):
        (WebCore::ScriptObject::createNew):
        (WebCore::ScriptGlobalObject::get):
        * bindings/js/ScriptObject.h:
        * bindings/js/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * bindings/v8/ScriptArray.cpp:
        (WebCore::ScriptArray::ScriptArray):
        (WebCore::ScriptArray::set):
        (WebCore::ScriptArray::length):
        (WebCore::ScriptArray::createNew):
        * bindings/v8/ScriptArray.h:
        * bindings/v8/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::construct):
        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptObject::ScriptObject):
        (WebCore::ScriptObject::set):
        (WebCore::ScriptObject::createNew):
        (WebCore::ScriptGlobalObject::get):
        * bindings/v8/ScriptObject.h:
        (WebCore::ScriptObject::ScriptObject):
        * bindings/v8/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToConsole):
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::bind):
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::newScriptArray):
        (WebCore::InspectorFrontend::newScriptObject):
        (WebCore::InspectorFrontend::addMessageToConsole):
        (WebCore::InspectorFrontend::addResource):
        (WebCore::InspectorFrontend::updateResource):
        (WebCore::InspectorFrontend::addDatabase):
        (WebCore::InspectorFrontend::addDOMStorage):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorJSONObject.cpp: Removed.
        * inspector/InspectorJSONObject.h: Removed.
        * inspector/InspectorResource.cpp:
        (WebCore::populateHeadersObject):
        (WebCore::InspectorResource::createScriptObject):
        (WebCore::InspectorResource::updateScriptObject):

2009-07-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] Variable substitution recursion seems to have bugs
        https://bugs.webkit.org/show_bug.cgi?id=27726

        Allow <setvar> elements to depend on the value specified by preceeding <setvar> elements.
        Required by the specification - assure it only works in linear order. A setvar element may
        not depend on the variable state of a following setvar element, only the previous ones.

        Extend wml/variable-reference-valid.html layout test to cover these cases.

        * wml/WMLTaskElement.cpp:
        (WebCore::WMLTaskElement::storeVariableState):

2009-07-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] Page title doesn't update after variable substitution, if it contained variables
        https://bugs.webkit.org/show_bug.cgi?id=27725

        Fix bug in containsVariableReference() function, we we're decreasing the nameEndPosition
        too much, leading to a bug with 1-char variable names, which were not detected properly.

        Extend wml/variable-reference-valid.html layout test to cover 1-char variable names.
        Also fixes manual-tests/wml/task-refresh-in-anchor.wml, which happened to use 1-char variable names.

        * wml/WMLVariables.cpp:
        (WebCore::containsVariableReference):

2009-07-28  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Simon Hausmann.

        Add WebKit version API to Qt.

        Get the current version of WebKit from WebKit/mac/Configurations/Version.xcconfig
        at compile time and make it available to webkit ports through WebKitVersion.h.

        https://bugs.webkit.org/show_bug.cgi?id=27158

        * WebCore.pro: Call generate-webkitversion.pl

2009-07-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed make dist build fix.

        * GNUmakefile.am:

2009-07-28  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Adam Treat.

        Replace hardcoded separator text with proper separator.
        Also adjusts include order as per style guidelines.

        https://bugs.webkit.org/show_bug.cgi?id=27763

        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::populate):

2009-07-28  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Steve Falkenburg.

        Add output directory for VS pre-build steps to enable out-of-tree builds

        https://bugs.webkit.org/show_bug.cgi?id=27700

        The tmp.obj file is now placed in the intermediate build directory.

        * WebCore.vcproj/WebCoreCommon.vsprops:

2009-07-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add inspected node using public console API.

        https://bugs.webkit.org/show_bug.cgi?id=27758

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype.addInspectedNode):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel):

2009-07-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] <do> elements with a <noop> task shouldn't be exposed to the user
        https://bugs.webkit.org/show_bug.cgi?id=27724

        Fix WMLNoopElement to disable it's parent WMLDoElement, as required by the spec.
        Moved manual-tests/wml/task-noop-in-do.wml to LayoutTests/fast/wml/task-noop-in-do.wml.

        * manual-tests/wml/task-noop-in-do.wml: Removed.
        * wml/WMLNoopElement.cpp:
        (WebCore::WMLNoopElement::insertedIntoDocument):

2009-07-28  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Disable some compiler warnings for the win build
        https://bugs.webkit.org/show_bug.cgi?id=27709

        * WebCore.pro: Move the msvc options to WebKit.pri

2009-07-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Tor Arne Vestbø

        Make equality checks for logging channel names ignore casing.

        * platform/Logging.cpp:
        (WebCore::getChannelFromName):

2009-07-28  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        [Gtk] Refactor ResourceHandleSoup - make start* functions static
        https://bugs.webkit.org/show_bug.cgi?id=27687

        * platform/network/ResourceHandle.h:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startData):
        (WebCore::startHttp):
        (WebCore::):

2009-07-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        Do not cache the pango layout in the object, since the layout of
        the page can change between calls.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-07-23  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Simplify management of Nodes in weak handles callbacks.
        https://bugs.webkit.org/show_bug.cgi?id=27628

        * bindings/v8/V8DOMMap.cpp:
        (WebCore::weakNodeCallback):

2009-07-28  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by David Levin.

        Fix error handling of GetIconInfo (returns a bool).

        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageIconForCachedImage):

2009-07-27  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Jon Honeycutt.

        Fix of <rdar://5015949> Drag Icon is not produced for over sized images.
        
        Implemented the createDragImageIconForCachedImage function by using the Windows 
        SHFILEINFO structure.

        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageIconForCachedImage):

2009-07-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        [V8] Split up V8DOMMap.cpp by class
        https://bugs.webkit.org/show_bug.cgi?id=27685

        No behavior change.  Just copy-and-paste.

        * WebCore.gypi:
        * bindings/v8/ChildThreadDOMData.cpp: Added.
        (WebCore::ChildThreadDOMData::ChildThreadDOMData):
        (WebCore::ChildThreadDOMData::getStore):
        * bindings/v8/ChildThreadDOMData.h: Added.
        * bindings/v8/DOMData.cpp: Added.
        (WebCore::DOMData::DOMData):
        (WebCore::DOMData::getCurrent):
        (WebCore::DOMData::getCurrentMainThread):
        (WebCore::DOMData::handleWeakObject):
        (WebCore::DOMData::ensureDeref):
        (WebCore::DOMData::derefObject):
        (WebCore::DOMData::derefDelayedObjects):
        (WebCore::DOMData::derefDelayedObjectsInCurrentThread):
        (WebCore::DOMData::removeObjectsFromWrapperMap):
        * bindings/v8/DOMData.h: Added.
        (WebCore::):
        * bindings/v8/DOMDataStore.cpp: Added.
        (WebCore::DOMDataStore::DOMDataStore):
        (WebCore::DOMDataStore::~DOMDataStore):
        (WebCore::DOMDataStore::allStores):
        (WebCore::DOMDataStore::allStoresMutex):
        (WebCore::DOMDataStore::getDOMWrapperMap):
        (WebCore::forget):
        (WebCore::DOMDataStore::weakDOMObjectCallback):
        (WebCore::DOMDataStore::weakActiveDOMObjectCallback):
        (WebCore::DOMDataStore::weakNodeCallback):
        (WebCore::DOMDataStore::weakSVGElementInstanceCallback):
        (WebCore::DOMDataStore::weakSVGObjectWithContextCallback):
        * bindings/v8/DOMDataStore.h: Added.
        (WebCore::DOMDataStore::):
        (WebCore::DOMDataStore::InternalDOMWrapperMap::InternalDOMWrapperMap):
        (WebCore::DOMDataStore::InternalDOMWrapperMap::forgetOnly):
        (WebCore::DOMDataStore::domData):
        (WebCore::DOMDataStore::domNodeMap):
        (WebCore::DOMDataStore::domObjectMap):
        (WebCore::DOMDataStore::activeDomObjectMap):
        (WebCore::DOMDataStore::domSvgElementInstanceMap):
        (WebCore::DOMDataStore::domSvgObjectWithContextMap):
        * bindings/v8/MainThreadDOMData.cpp: Added.
        (WebCore::MainThreadDOMData::MainThreadDOMData):
        (WebCore::MainThreadDOMData::getStore):
        * bindings/v8/MainThreadDOMData.h: Added.
        * bindings/v8/ScopedDOMDataStore.cpp: Added.
        (WebCore::ScopedDOMDataStore::ScopedDOMDataStore):
        (WebCore::ScopedDOMDataStore::~ScopedDOMDataStore):
        * bindings/v8/ScopedDOMDataStore.h: Added.
        * bindings/v8/StaticDOMDataStore.cpp: Added.
        (WebCore::StaticDOMDataStore::StaticDOMDataStore):
        * bindings/v8/StaticDOMDataStore.h: Added.
        * bindings/v8/V8DOMMap.cpp:

2009-07-27  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7091036> REGRESSION: Microsoft Messenger crashes during file send/receive due to use of WebKit on non-main thread

        Add a method for detecting if we're being used within Microsoft Messenger.

        * WebCore.base.exp: Export applicationIsMicrosoftMessenger and sort existing entries.
        * platform/mac/RuntimeApplicationChecks.h:
        * platform/mac/RuntimeApplicationChecks.mm:
        (WebCore::applicationIsMicrosoftMessenger):

2009-07-27  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        [V8] Implement EventListener::reportError for V8 event listeners in worker context. 
        https://bugs.webkit.org/show_bug.cgi?id=27731

        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::reportError):
        * bindings/v8/V8WorkerContextEventListener.h:

2009-07-27  Stephen White  <senorblanco@chromium.org>

        Reviewed by Eric Seidel and David Levin.

        Re-apply chromium/skia border fix (originally landed in r46157,
        reverted in r46363), since it was not the cause of the reliability
        failures in Chromium.

        http://bugs.webkit.org/show_bug.cgi?id=27388

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawLine):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::setupPaintForStroking):

2009-07-27  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Justin Garcia.

        createMarkup does not handle CSS properly
        https://bugs.webkit.org/show_bug.cgi?id=27660

        This patch isolates code that creates markup for styles in addStyleMarkup
        It also makes all presentational elements (u, s, strike, i, em, b, strong) special ancestor in createMarkup
        so that we can assume no text decoration style is passed to addStyleMarkup.

        * editing/markup.cpp:
        (WebCore::propertyMissingOrEqualToNone): Changed the first argument from CSSMutableStyleDecleration to CSSStyleDeclaration
        (WebCore::isElementPresentational): Used to be elementHasTextDecorationProperty, now supports presentational tags
        (WebCore::addStyleMarkup): Adds markup for style span and div
        (WebCore::createMarkup): Uses isElementPresentational and addStyleMarkup

2009-07-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        fix more obvious global object lookups
        https://bugs.webkit.org/show_bug.cgi?id=27745

        No new tests for these changes.  I believe in many cases
        testing to be impossible.  Lack of testing justification next to
        each change below.  The remaining pieces of bug 27634 will all
        need tests.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::updateDocument): not testable.
        * bindings/js/JSDataGridColumnListCustom.cpp:
        (WebCore::JSDataGridColumnList::nameGetter): no testing for this incomplete feature.
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent): would require outer frame to trigger an event in the inner frame
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS): covered by other tests, always correct to pass the globalObject through.
        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::JSHTMLElement::pushEventHandlerScope): unclear when this could be triggered.
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::remove): toJS seems superfluous here to begin with.
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::parseCode): would require outer frame to trigger inner frame event.
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::jsObjectForPluginElement): only used for NPAPI binding, unclear how to test.
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener): unclear how to test.
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set): unclear how to test/inspector only.
        * bindings/js/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject): unclear how to test.
        * bindings/objc/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]): unclear how to test.

2009-07-27  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] 'title' attribute handling not correct for <a> / <anchor> elements
        https://bugs.webkit.org/show_bug.cgi?id=27720

        Unify title() implementation in WMLElement instead of several copies of the same logic.
        We forgot WMLAnchorElement/WMLAElement, that lead to bugs. Fixes hovering links in the
        WML manual-test suite.

        * wml/WMLCardElement.cpp:
        * wml/WMLCardElement.h:
        * wml/WMLElement.cpp:
        (WebCore::WMLElement::title):
        * wml/WMLElement.h:
        * wml/WMLOptGroupElement.cpp:
        * wml/WMLOptGroupElement.h:
        * wml/WMLSelectElement.cpp:
        * wml/WMLSelectElement.h:

2009-07-27  Adam Treat  <adam.treat@torchmobile.com>

        Speculative build fix for Windows and WinCE.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::load):

2009-07-27  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27474
        Fixes crashes due to renderer getting destroyed in updateLayout.
        We need to call updateLayout before we call into the renderer.
        Removed the updateLayout call from RenderTextControl and moved it
        into the calling sites.
        
        Also changes updateLayout to updateLayoutIgnorePendingStylesheets so
        this works with pending stylesheets. Unfortunately, this seems to be
        untestable. Loading an external stylesheet and then having an inline
        script hit this code did not result in an pending stylesheets.
        
        The are other cases of this bug in the rendering code. I'll file a 
        followup bug to audit the calls to updateLayout.

        Test: fast/dom/text-control-crash-on-select.html

        * dom/Document.h:
        (WebCore::Document::inStyleRecalc): Added so the ASSERTs in updateFocusAppearance
            and setSelectionRange could deal with cases of reentrancy into updateLayout
            calls. This happens in a couple layout tests.
        * dom/InputElement.cpp:
        (WebCore::InputElement::updateSelectionRange):
        * html/HTMLInputElement.cpp:
        (WebCore::isTextFieldWithRendererAfterUpdateLayout):
        (WebCore::HTMLInputElement::setSelectionStart):
        (WebCore::HTMLInputElement::setSelectionEnd):
        (WebCore::HTMLInputElement::select):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::rendererAfterUpdateLayout):
        (WebCore::HTMLTextAreaElement::setSelectionStart):
        (WebCore::HTMLTextAreaElement::setSelectionEnd):
        (WebCore::HTMLTextAreaElement::select):
        (WebCore::HTMLTextAreaElement::setSelectionRange):
        (WebCore::HTMLTextAreaElement::updateFocusAppearance):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setSelectionRange):

2009-07-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Dave Levin.

        [V8] Remove parameterless frame/window retrieval methods from V8Proxy.
        https://bugs.webkit.org/show_bug.cgi?id=27737

        Refactoring, no new behavior, covered by existing tests.

        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::ScriptCallStack):
        * bindings/v8/V8NPUtils.cpp:
        (convertV8ObjectToNPVariant): Ditto.
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::retrieve): Ditto.
        (WebCore::V8Proxy::canAccessPrivate): Ditto.
        * bindings/v8/V8Proxy.h: Removed parameterless retrieveWindow/retrieveProxy decls.
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Changed to use V8Proxy::retrieveFrameForCurrentContext().
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Ditto.
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Ditto.
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Ditto.
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Ditto.
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Ditto.
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Ditto.
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Ditto.

2009-07-27  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] 'onpick' intrinsic event handling missing
        https://bugs.webkit.org/show_bug.cgi?id=27723

        Trigger 'onpick' intrinsic events from WMLOptionElement::setSelectedState().
        All was in place, just forgot to enable the relevant code.

        Fixes manual-tests/wml/select-onpick-event.wml
        Test: wml/option-element-onpick.html

        * wml/WMLOptionElement.cpp:
        (WebCore::WMLOptionElement::setSelectedState):

2009-07-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27735
        Give a helpful name to JSLock constructor argument

        * bindings/js/GCController.cpp:
        (WebCore::collect):
        (WebCore::GCController::gcTimerFired):
        (WebCore::GCController::garbageCollectNow):
        * bindings/js/JSCustomPositionCallback.cpp:
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        (WebCore::JSCustomPositionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::handleEvent):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSInspectorBackendCustom.cpp:
        (WebCore::JSInspectorBackend::currentCallFrame):
        (WebCore::JSInspectorBackend::profiles):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScriptArray.cpp:
        (WebCore::ScriptArray::set):
        (WebCore::ScriptArray::createNew):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):
        (WebCore::ScriptCachedFrameData::clear):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::initScript):
        (WebCore::ScriptController::updateDocument):
        (WebCore::ScriptController::bindingRootObject):
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::jsObjectForPluginElement):
        (WebCore::ScriptController::clearScriptObjects):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::windowScriptObject):
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::appendArgument):
        (WebCore::ScriptFunctionCall::call):
        (WebCore::ScriptFunctionCall::construct):
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptObject::set):
        (WebCore::ScriptObject::createNew):
        (WebCore::ScriptGlobalObject::set):
        (WebCore::ScriptGlobalObject::get):
        (WebCore::ScriptGlobalObject::remove):
        * bindings/js/ScriptObjectQuarantine.cpp:
        (WebCore::quarantineValue):
        (WebCore::getQuarantinedScriptObject):
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::getString):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):
        (WebCore::WorkerScriptController::evaluate):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject removeWebScriptKey:]):
        (-[WebScriptObject stringRepresentation]):
        (-[WebScriptObject webScriptValueAtIndex:]):
        (-[WebScriptObject setWebScriptValueAtIndex:value:]):
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        (_NPN_Enumerate):
        (_NPN_Construct):
        * bridge/c/c_class.cpp:
        (JSC::Bindings::CClass::~CClass):
        (JSC::Bindings::CClass::methodsNamed):
        (JSC::Bindings::CClass::fieldNamed):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::moveGlobalExceptionToExecState):
        (JSC::Bindings::CInstance::invokeMethod):
        (JSC::Bindings::CInstance::invokeDefaultMethod):
        (JSC::Bindings::CInstance::invokeConstruct):
        (JSC::Bindings::CInstance::getPropertyNames):
        * bridge/c/c_runtime.cpp:
        (JSC::Bindings::CField::valueFromInstance):
        (JSC::Bindings::CField::setValueToInstance):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        (JSC::Bindings::convertNPVariantToValue):
        * bridge/jni/jni_class.cpp:
        (JavaClass::JavaClass):
        (JavaClass::~JavaClass):
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::stringValue):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):
        (JavaJSObject::getSlot):
        (JavaJSObject::setSlot):
        (JavaJSObject::toString):
        (JavaJSObject::convertValueToJObject):
        (JavaJSObject::convertJObjectToValue):
        * bridge/jni/jni_objc.mm:
        (JSC::Bindings::dispatchJNICall):
        * bridge/jni/jni_runtime.cpp:
        (JavaMethod::signature):
        * bridge/jni/jni_runtime.h:
        (JSC::Bindings::JavaString::JavaString):
        (JSC::Bindings::JavaString::_commonInit):
        (JSC::Bindings::JavaString::~JavaString):
        (JSC::Bindings::JavaString::UTF8String):
        * bridge/jni/jni_utility.cpp:
        (JSC::Bindings::convertValueToJValue):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::moveGlobalExceptionToExecState):
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):
        (ObjcInstance::setValueOfUndefinedField):
        (ObjcInstance::getValueOfUndefinedField):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcField::valueFromInstance):
        (JSC::Bindings::ObjcField::setValueToInstance):
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertValueToObjcValue):
        (JSC::Bindings::convertNSStringToString):
        (JSC::Bindings::convertObjcValueToValue):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObjectImp::removeFromCache):
        (JSC::Bindings::QtInstance::~QtInstance):
        (JSC::Bindings::QtInstance::getQtInstance):
        (JSC::Bindings::QtInstance::createRuntimeObject):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):
        (JSC::Bindings::convertQVariantToValue):
        (JSC::Bindings::QtRuntimeMetaMethod::call):
        (JSC::Bindings::QtRuntimeConnectionMethod::call):
        (JSC::Bindings::QtConnectionObject::execute):
        * bridge/runtime.cpp:
        (JSC::Bindings::Instance::createRuntimeObject):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addScriptProfile):
        * inspector/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::evaluate):
        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::recompileAllJSFunctions):
        * inspector/JavaScriptProfileNode.cpp:
        (WebCore::getTotalTime):
        (WebCore::getSelfTime):
        (WebCore::getTotalPercent):
        (WebCore::getSelfPercent):
        (WebCore::getNumberOfCalls):
        (WebCore::getChildren):
        (WebCore::getParent):
        (WebCore::getHead):
        (WebCore::getVisible):
        (WebCore::getCallUID):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        (WebCore::getString):
        (WebCore::PluginView::performRequest):
        (WebCore::PluginView::bindingInstance):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::init):
        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::stop):
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::dispatchNPEvent):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::init):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):

2009-07-27  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: Make plugin work for WINCE
        https://bugs.webkit.org/show_bug.cgi?id=27713

        * plugins/win/PluginDatabaseWin.cpp:
        (SHGetValue):
        (PathRemoveFileSpec):
        (WebCore::addWindowsMediaPlayerPluginDirectory):
        (WebCore::addMacromediaPluginDirectories):
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::load):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::registerPluginView):
        (WebCore::PluginView::wndProc):
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paintWindowedPluginIntoContext):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::init):

2009-07-27  Joseph Pecoraro  <joepeck02@gmail.com>

        Inspector: Tab Through Element Attributes and CSS Properties When Editing

        https://bugs.webkit.org/show_bug.cgi?id=27673

        Reviewed by Timothy Hatcher.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype._startEditing): refactored parameter
        (WebInspector.ElementsTreeElement.prototype._addNewAttribute): refactored to remove excess
        (WebInspector.ElementsTreeElement.prototype._triggerEditAttribute): provide an attribute name and this will start editing it
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted.moveToNextAttributeIfNeeded): move between attributes
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype.onpopulate):
        (WebInspector.StylePropertiesSection.prototype.findTreeElementWithName): search through treeElements for a style property name
        (WebInspector.StylePropertiesSection.prototype.addNewBlankProperty): initialize a blank property for adding new properties
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle): add references to the name and value elements
        (WebInspector.StylePropertyTreeElement.prototype.):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/inspector.js:
        (WebInspector.startEditing.editingCommitted): include the move direction as a parameter to the commit callback
        (WebInspector.startEditing.element.handleKeyEvent): handle the tab key to specify the move direction
        (WebInspector.startEditing):

2009-07-27  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Adam Treat.

        Add mapping FontWeight to QFont::Weight values as requested via FIXME.
        https://bugs.webkit.org/show_bug.cgi?id=27663

        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformData::toQFontWeight):
        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2009-07-27  Jakub Wieczorek  <faw217@gmail.com>

         Reviewed by Adam Treat.

         When clearing the plugin database, clear also the timestamp map.

         https://bugs.webkit.org/show_bug.cgi?id=27651

         Currently, if we clear the database, it will still think that it is up
         to date with the plugin directories so refreshing the database again
         after changing the search paths may not work.

         * plugins/PluginDatabase.cpp:
         (WebCore::PluginDatabase::clear):

2009-07-27  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by David Levin.

        Add in trivial implementation of FontPlatformData::description() for
        linux to fix build bustage in chromium.

        Fix chromium linux build by adding missing function implementation.
        https://bugs.webkit.org/show_bug.cgi?id=27732

        Tested with a build of chromium on linux.

        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::description):
        * platform/graphics/chromium/FontPlatformDataLinux.h:

2009-07-27  Brent Fulgham  <bfulgham@webkit.org>

        Build correct, no review.

        Final correction for WinCairo builds.
        CoreServices only exists in Apple builds, but
        some of its internal includes (e.g., <windows.h>) are needed
        for other Windows targets.

        * WebCorePrefix.h: When building for WinCairo, make sure
          to include <windows.h>, <stdio.h>, and <ConditionalMacros.h>

2009-07-27  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25552
        Added new "pattern" attribute to HTMLInputElement and validation code
        (validity.patternMismatch) as per HTML5 specs.
        http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#attr-input-pattern

        Tests: fast/forms/ValidityState-002.html
               fast/forms/ValidityState-patternMismatch-001.html
               fast/forms/ValidityState-patternMismatch-002.html
               fast/forms/ValidityState-patternMismatch-003.html
               fast/forms/ValidityState-patternMismatch-004.html
               fast/forms/ValidityState-patternMismatch-005.html
               fast/forms/ValidityState-patternMismatch-006.html
               fast/forms/ValidityState-patternMismatch-007.html
               fast/forms/pattern-attribute-001.html
               fast/forms/pattern-attribute-002.html
               fast/forms/pattern-attribute-003.html

        * html/HTMLAttributeNames.in: pattern attribute
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::patternMismatch): method definition
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::patternMismatch): validation method
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:
        * html/ValidityState.h:
        (WebCore::ValidityState::patternMismatch): validation flag

2009-07-27  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] Manual WML tests aren't properly working
        https://bugs.webkit.org/show_bug.cgi?id=27718

        Fix file paths in the manual WML layout tests, remove unneeded tests (already covered by DRT tests).
        Add missing resources directory and test image. Reformat all testcases to a common style.
        Add new StartTests.wml file, which should be used as starting point to crawl through the manual tests.

        Filing bugs soon for all tests exposing bugs (7 in total).

        * manual-tests/wml/StartTests.wml: Added.
        * manual-tests/wml/a-br-element.wml:
        * manual-tests/wml/a-element.wml:
        * manual-tests/wml/a-img-element.wml:
        * manual-tests/wml/access-target.wml:
        * manual-tests/wml/anchor-br-element.wml:
        * manual-tests/wml/anchor-element.wml:
        * manual-tests/wml/anchor-img-element.wml:
        * manual-tests/wml/card-newcontext-attr.wml:
        * manual-tests/wml/card-onenterbackward.wml:
        * manual-tests/wml/card-onenterforward.wml:
        * manual-tests/wml/card-ontimer.wml:
        * manual-tests/wml/card-title-attr.wml: Removed.
        * manual-tests/wml/deck-access-control.wml:
        * manual-tests/wml/go-element.wml: Removed.
        * manual-tests/wml/input-emptyok.wml: Removed.
        * manual-tests/wml/input-format.wml:
        * manual-tests/wml/onevent-go.wml:
        * manual-tests/wml/onevent-noop.wml:
        * manual-tests/wml/onevent-prev.wml:
        * manual-tests/wml/onevent-refresh.wml:
        * manual-tests/wml/onevent-shadow.wml:
        * manual-tests/wml/postfield-get.wml: Removed.
        * manual-tests/wml/postfield-post.wml: Removed.
        * manual-tests/wml/resources: Added.
        * manual-tests/wml/resources/smiley.png: Added.
        * manual-tests/wml/select-element.wml:
        * manual-tests/wml/select-onpick-event.wml:
        * manual-tests/wml/setvar-element.wml:
        * manual-tests/wml/targetdeck.wml:
        * manual-tests/wml/task-go-in-anchor.wml:
        * manual-tests/wml/task-noop-in-do.wml:
        * manual-tests/wml/task-noop-in-onevent.wml: Removed.
        * manual-tests/wml/task-prev-in-anchor.wml:
        * manual-tests/wml/task-refresh-in-anchor.wml:
        * manual-tests/wml/template-go.wml:
        * manual-tests/wml/template-onevent.wml: Removed.
        * manual-tests/wml/template-ontimer.wml:
        * manual-tests/wml/timer.wml:
        * manual-tests/wml/variable-substitution.wml:

2009-07-27  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix a regression introduced in r42671, which caused the js event 
        object to be hidden (some websites depend on being able to access it).

        https://bugs.webkit.org/show_bug.cgi?id=27719

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler): Make the event object visible to javascript, instead of hidden.

2009-07-27  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Removing a no-op block of code in DatabaseTracker.cpp that
        should've been removed in the patch for bug 26054.

        https://bugs.webkit.org/show_bug.cgi?id=27666

        All tests in WebCore/storage pass.

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::fullPathForDatabase): Removed a no-op
        block of code that was moved to SQLiteFileSystem.cpp and should
        have been removed from DatabaseTracker.cpp

2009-07-27  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Fix error handling in dedicated worker and worker context.
        https://bugs.webkit.org/show_bug.cgi?id=27525

        The following problems have been fixed:
        1) The uncaught runtime script error is not reported using the
        WorkerGlobalScope object's onerror attribute.
        2) If the error is still not handled afterwards (onerror attribute
        is not defined as a function or it returns true), the error should
        be reported back to the associated Worker object by firing an
        ErrorEvent.
        3) If the error is still not handled by the associated Worker
        object, the error should be reported to the user.

        Test: fast/workers/worker-script-error.html

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::reportError):
        * bindings/js/JSEventListener.h:
        * dom/EventListener.h:
        (WebCore::EventListener::reportError): adds a function to call
        EventListener as a function with 3 arguments to report an error.
        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::dispatchScriptErrorEvent):
        * workers/AbstractWorker.h:
        * workers/DedicatedWorkerContext.cpp:
        (WebCore::DedicatedWorkerContext::reportException):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::reportException):
        * workers/WorkerContext.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerExceptionTask::performTask):
        * workers/WorkerMessagingProxy.h:

2009-07-27  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] History handling / page cache / loading is buggy and depends on several hacks
        https://bugs.webkit.org/show_bug.cgi?id=27707

        Redesign WML history/loading handling. In detail:

        - Remove FrameLoader::setForceReloadWmlDeck(). WML used to force a special loading behaviour
          by calling this method from WMLGoElement & friends - instead teach FrameLoader to detect
          WML content itself.

          WML content is usually a standalone WML document (isWMLDocument()=true) or as special case
          an XHTML document which embeds a WML document (that's the way the WML layout tests work).
          Force WML loading behaviour even for XHTML document which embed WML documents. This only
          applies to our layout tests, not for any real world site. Though it gives us a perfect
          way to test the WML loading code even when we're not operating on a standalone WML document.

          Whenever a WMLCardElement is inserted into the document it will check wheter it's inserted
          in a standalone WML document or wheter the main frame document is different. If it differs
          the main frame documents' "containsWMLContent" property is set to true.

          -> Make FrameLoader::shouldReload() use the new frameContainsWMLContent() method, which
             checks if the associated frame document is a WML document or wheter it contains WML content.

        - Change FrameLoader::loadItem() to use the new frameContainsWMLContent() method for 'shouldScroll'
          detection. WML documents (or those containing WML content) always want new loads even for in-page
          navigation. No "scroll to anchor" mechanism should apply.

        - Modify FrameLoader::canCachePageContainingThisFrame() to check for !frameContainsWMLContent().
          WML pages should never be cached, potential security problem due the use of variables (per spec).

        Add two new WML tests which were broken before, testing onenterforward/onenterbackward event handling
        and history navigation (<prev/> task).

        Tests: wml/enter-card-with-events.html
               wml/enter-first-card-with-events.html

        * dom/Document.cpp: Initialize new 'm_containsWMLContent' property.
        (WebCore::Document::Document):
        * dom/Document.h: Add new helper methods and 'm_containsWMLContent" variable (explained above).
        (WebCore::Document::setContainsWMLContent):
        (WebCore::Document::containsWMLContent):
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::clearWMLPageHistory): Renamed from clearWmlPageHistory() & slight cleanup.
        * history/BackForwardList.h:
        * loader/FrameLoader.cpp: Rework WML loading behaviour (explained above).
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::frameContainsWMLContent):
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::shouldReload):
        (WebCore::FrameLoader::loadItem):
        * loader/FrameLoader.h:
        * wml/WMLCardElement.cpp: 
        (WebCore::WMLCardElement::handleIntrinsicEventIfNeeded): No need anymore to manually track history length.
        (WebCore::WMLCardElement::insertedIntoDocument): Handle setting containsWMLContent on the main frame document.
        * wml/WMLGoElement.cpp: 
        (WebCore::WMLGoElement::executeTask): Remove call to FrameLoader::setForceReloadWmlDeck()
        * wml/WMLPageState.cpp: Remove 'm_historyLength' - no need anymore to track history length on our own.
        (WebCore::WMLPageState::WMLPageState):
        (WebCore::WMLPageState::dump):
        (WebCore::WMLPageState::reset):
        * wml/WMLPageState.h:

2009-07-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Adam Roben.

        Fix Chromium build breakage introduced in 46388.

        https://bugs.webkit.org/show_bug.cgi?id=27705

        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:
        (WebCore::FontPlatformData::description):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:

2009-07-27  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Add some more debug logging to PluginViewMac.

        * plugins/mac/PluginViewMac.cpp:

2009-07-27  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Jan Michael Alonzo.

        Remove dead code from the GTK NPAPI implementation.

        * plugins/gtk/PluginViewGtk.cpp:

2009-07-27  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] Buildfix on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=27702

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::hookedEndPaint):
            Constraint of (*endPaint) operand modified from "g" to "m" (memory) in inline 
            assembly, because with "g" constraint, wrong assembly code generated.

2009-07-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebCore bindings: Implement ScriptArray bindings.

        https://bugs.webkit.org/show_bug.cgi?id=27691

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptArray.cpp: Added.
        (WebCore::ScriptArray::ScriptArray):
        (WebCore::handleException):
        (WebCore::ScriptArray::set):
        (WebCore::length):
        (WebCore::ScriptArray::createNew):
        * bindings/js/ScriptArray.h: Added.
        (WebCore::ScriptArray::ScriptArray):
        (WebCore::ScriptArray::jsArray):
        * bindings/v8/ScriptArray.cpp: Added.
        (WebCore::ScriptArray::ScriptArray):
        (WebCore::ScriptArray::set):
        (WebCore::ScriptArray::length):
        (WebCore::ScriptArray::createNew):
        * bindings/v8/ScriptArray.h: Added.
        (WebCore::ScriptArray::ScriptArray):
        (WebCore::ScriptArray::~ScriptArray):

2009-07-27  Brent Fulgham  <bfulgham@webkit.org>

        Build correct, no review.

        Change in r46407 broke Apple Windows build.
        Switch to WinCairo-only test, to avoid any
        other platform break.

        * WebCorePrefix.h: 

2009-07-26  Brent Fulgham  <bfulgham@webkit.org>

        Build correct, no review.

        Change in r46407 broke Apple Windows build.

        * WebCorePrefix.h: Use WTF_PLATFORM_CG to decide if
          CoreServices.h should be included.

2009-07-26  Brent Fulgham  <bfulgham@webkit.org>

        Build correction, no review.

        Change in r46195 broke WinCairo build.

        * WebCorePrefix.h: CoreServices should be ignored
          for non-Apple build.

2009-07-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Implement the breakpoints sidebar pane.
        This change adds simple UI support into the existing
        BreakpointSidebarPane.

        https://bugs.webkit.org/show_bug.cgi?id=11175

        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint.prototype.set enabled):
        (WebInspector.Breakpoint.prototype.get label):
        (WebInspector.Breakpoint.prototype.get id):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane):
        (WebInspector.BreakpointsSidebarPane.prototype.addBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype._appendBreakpointElement):
        (WebInspector.BreakpointsSidebarPane.prototype._appendBreakpointElement.labelClicked):
        (WebInspector.BreakpointsSidebarPane.prototype.removeBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype._breakpointEnableChanged):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.scriptOrResourceForID):
        * inspector/front-end/inspector.css:

2009-07-16  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Oliver Hunt.

        Canvas: rotation of 'no-repeat' pattern still has small error
        https://bugs.webkit.org/show_bug.cgi?id=26749

        Use 1<<22 as steps of no-repeat pattern to make the error less
        than 0.5.  The previous value may cause 1 pixel errors.

        Add another test to show this bug clearly.
        Also add png expected image which was missing in the previous patch.

        Test: fast/canvas/image-pattern-rotate.html

        * platform/graphics/cg/PatternCG.cpp:
        (WebCore::Pattern::createPlatformPattern):

2009-07-25  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        Windows build break due to warning C4819
        https://bugs.webkit.org/show_bug.cgi?id=27416

        Disable C4819 warning to fix build.

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/WebCore.vcproj:

2009-07-25  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Kevin McCullough.

        Inspector: Keyboard Shortcuts to Switch Panels
        https://bugs.webkit.org/show_bug.cgi?id=27286

        * inspector/front-end/inspector.js:
        (WebInspector.loaded): save a list of the order of the panels
        (WebInspector.documentKeyDown): handle the keyboard shortcuts to traverse the panels

2009-07-25  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by George Staikos.

        [Qt] Fix build break after r46369
        https://bugs.webkit.org/show_bug.cgi?id=27680

        * WebCore.pro:

2009-07-25  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] Variable substitution is buggy
        https://bugs.webkit.org/show_bug.cgi?id=27677

        Substitute variables upon attach() time instead of insertedIntoDocument(). Otherwhise variable substitution
        won't work during inter-deck jumps (same URL, different fragment). Covered by new test fast/wml/newcontext-same-deck.html.

        * dom/Text.cpp:
        (WebCore::Text::attach):
        * dom/Text.h:

2009-07-25  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] WMLDoElement doesn't update its RenderButton object upon attach()
        https://bugs.webkit.org/show_bug.cgi?id=27676

        WMLDoElement needs to implement attach() and call updateFromElement() on its associated RenderButton.
        Mimics HTMLButtonElement/HTMLFormControlElement behaviour and fixes several painting/styling issues covered by existing tests in fast/wml.

        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::attach):
        * wml/WMLDoElement.h:

2009-07-25  Pavel Feldman  <pfeldman@chromium.org>

        Fix Windows build breakage introduced in 46390.

        * WebCore.vcproj/WebCore.vcproj:

2009-07-24  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Oliver Hunt.

        Inspector: Properties Should be Sorted more Naturally
        https://bugs.webkit.org/show_bug.cgi?id=27329

        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.update): use the displaySort when showing properties
        (WebInspector.ObjectPropertiesSection.prototype._displaySort): alphaNumerical sort
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate): use the displaySort when showing properties
        * inspector/front-end/utilities.js:
        (Object.sortedProperties): allow for an optional sorting function in Object.sortedProperties

2009-07-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Split InspectorController into InspectorController
        and InspectorBackend. Everything frontend needs from InspectorController
        will slowly migrate into the InspectorBackend.

        https://bugs.webkit.org/show_bug.cgi?id=27541

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSInspectorBackendCustom.cpp: Added.
        (WebCore::JSInspectorBackend::highlightDOMNode):
        (WebCore::JSInspectorBackend::search):
        (WebCore::JSInspectorBackend::databaseTableNames):
        (WebCore::JSInspectorBackend::inspectedWindow):
        (WebCore::JSInspectorBackend::setting):
        (WebCore::JSInspectorBackend::setSetting):
        (WebCore::JSInspectorBackend::wrapCallback):
        (WebCore::JSInspectorBackend::currentCallFrame):
        (WebCore::JSInspectorBackend::profiles):
        * bindings/v8/custom/V8InspectorBackendCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/js/JSInspectorControllerCustom.cpp: Removed.
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/js/ScriptObject.h:
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/v8/ScriptObject.h:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8InspectorControllerCustom.cpp: Removed.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::inspectorBackend):
        * inspector/InspectorBackend.cpp: Added.
        * inspector/InspectorBackend.h: Added.
        (WebCore::InspectorBackend::create):
        (WebCore::InspectorBackend::inspectorController):
        * inspector/InspectorBackend.idl: Added.
        * inspector/InspectorController.idl: Removed.
        * inspector/front-end/Resource.js:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:

2009-07-25  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by George Staikos.

        Update WebCore/page/Frame.cpp/h to conform to WebKit
        Style Guidelines as identified by cpplint.py.
        https://bugs.webkit.org/show_bug.cgi?id=27654

        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::~Frame):
        (WebCore::Frame::setDocument):
        (WebCore::Frame::firstRectForRange):
        (WebCore::createRegExpForLabels):
        (WebCore::Frame::searchForLabelsBeforeElement):
        (WebCore::Frame::matchLabelsAgainstElement):
        (WebCore::Frame::selectionLayoutChanged):
        (WebCore::Frame::setZoomFactor):
        (WebCore::Frame::reapplyStyles):
        (WebCore::Frame::isContentEditable):
        (WebCore::Frame::computeAndSetTypingStyle):
        (WebCore::Frame::selectionStartStylePropertyValue):
        (WebCore::Frame::selectionComputedStyle):
        (WebCore::Frame::applyEditingStyleToBodyElement):
        (WebCore::Frame::removeEditingStyleFromBodyElement):
        (WebCore::Frame::applyEditingStyleToElement):
        (WebCore::Frame::selectionBounds):
        (WebCore::Frame::currentForm):
        (WebCore::Frame::revealSelection):
        (WebCore::Frame::styleForSelectionStart):
        (WebCore::Frame::setSelectionFromNone):
        (WebCore::Frame::findString):
        (WebCore::Frame::markAllMatchesForText):
        (WebCore::Frame::setMarkedTextMatchesAreHighlighted):
        (WebCore::Frame::clearFormerDOMWindow):
        (WebCore::Frame::unfocusWindow):
        (WebCore::Frame::respondToChangedSelection):
        (WebCore::Frame::documentAtPoint):
        * page/Frame.h:
        (WebCore::Frame::create):
        (WebCore::Frame::displayStringModifiedByEncoding):
        (WebCore::Frame::pageZoomFactor):
        (WebCore::Frame::textZoomFactor):

2009-07-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Add functions to print the glyph page trees for debugging
        https://bugs.webkit.org/show_bug.cgi?id=27671

        * platform/graphics/FontData.h: Defined a description() method.

        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::showSubtree): Added. Prints the node and
            its descendants.
        (showGlyphPageTrees): Added. Prints all glyph page trees.
        (showGlyphPageTree): Added. Prints the glyph page tree for a given page.
        * platform/graphics/GlyphPageTreeNode.h:

        * platform/graphics/SegmentedFontData.cpp:
        (WebCore::SegmentedFontData::description): Added.

        * platform/graphics/SegmentedFontData.h:
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::description): Added. Uses the platform data
            as the description for non-svg, non-custom fonts.
        * platform/graphics/SimpleFontData.h:

        * platform/graphics/gtk/FontPlatformData.h:
        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData::description): Added. Returns a null string.
        * platform/graphics/gtk/FontPlatformDataPango.cpp:
        (WebCore::FontPlatformData::description): Added. Returns a null string.

        * platform/graphics/mac/FontPlatformData.h:
        * platform/graphics/mac/FontPlatformDataMac.mm:
        (WebCore::FontPlatformData::description): Added. Returns the
            description of the CGFont, the size and the synthetic style flags,
            if set.

        * platform/graphics/qt/FontPlatformData.h:
        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::description): Added. Returns a null string.

        * platform/graphics/win/FontPlatformData.h:
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::description): Added. Returns a null string.

        * platform/graphics/wince/FontPlatformData.cpp:
        (WebCore::FontPlatformData::description): Added. Returns a null string.
        * platform/graphics/wince/FontPlatformData.h:

        * platform/graphics/wx/FontPlatformData.h:
        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::description): Added. Returns a null string.

2009-07-24  Mads Ager  <ager@chromium.org>

        Reviewed by Adam Barth.

        SVG and XPath memory leaks in V8 bindings
        https://bugs.webkit.org/show_bug.cgi?id=27488

        Add proper 'create' methods to SVGPodTypeWrappers and
        XPathNSResolvers in the V8 bindings to avoid memory leaks.

        Introduce convertToV8Object methods that accept PassRefPtrs and
        clean up the use of get() and release() on RefPtrs.
        
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::convertNodeToV8Object):
        (WebCore::V8DOMWrapper::convertEventToV8Object):
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        (WebCore::V8DOMWrapper::convertEventListenerToV8Object):
        * bindings/v8/V8SVGPODTypeWrapper.h:
        (WebCore::V8SVGPODTypeWrapperCreatorForList::create):
        (WebCore::V8SVGPODTypeWrapperCreatorForList::V8SVGPODTypeWrapperCreatorForList):
        (WebCore::V8SVGStaticPODTypeWrapper::create):
        (WebCore::V8SVGStaticPODTypeWrapper::V8SVGStaticPODTypeWrapper):
        (WebCore::V8SVGStaticPODTypeWrapperWithPODTypeParent::create):
        (WebCore::V8SVGStaticPODTypeWrapperWithPODTypeParent::V8SVGStaticPODTypeWrapperWithPODTypeParent):
        (WebCore::V8SVGStaticPODTypeWrapperWithParent::create):
        (WebCore::V8SVGStaticPODTypeWrapperWithParent::V8SVGStaticPODTypeWrapperWithParent):
        (WebCore::V8SVGDynamicPODTypeWrapper::create):
        (WebCore::V8SVGDynamicPODTypeWrapper::V8SVGDynamicPODTypeWrapper):
        (WebCore::V8SVGDynamicPODTypeWrapperCache::lookupOrCreateWrapper):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8ClientRectListCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::create):
        * bindings/v8/custom/V8CustomXPathNSResolver.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::getItem):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        * bindings/v8/custom/V8HTMLSelectElementCollectionCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8InspectorControllerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-07-24  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Jon Honeycutt.

        Fix of <rdar://6310538> Middle-click panning should be springloaded while dragging
        https://bugs.webkit.org/show_bug.cgi?id=21794
        
        Create two new booleans to determine whether we have done a springloaded pan scroll, and update
        the name of setPanScrollCursor to updatePanScrollState to more accurately describe what the function
        does. 

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Initialized two new booleans.
        (WebCore::EventHandler::autoscrollTimerFired):
        (WebCore::EventHandler::updatePanScrollState): Renamed from setPanScrollCursor.
        (WebCore::EventHandler::stopAutoscrollTimer): Clear the pan scrolling in progress flag.
        (WebCore::EventHandler::handleMouseReleaseEvent): Clear the pan scrolling button pressed flag.
        * page/EventHandler.h:

2009-07-24  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=27657
        Add more wince port files to WebCore

        Written by Yong Li  <yong.li@torchmobile.com> and Lyon Chen <lyon.chen@torchmobile.com>

        * loader/icon/wince/IconDatabaseWince.cpp: Added.
        * rendering/RenderThemeWince.cpp: Added.
        * rendering/RenderThemeWince.h: Added.
        * storage/wince/DatabaseThreadWince.cpp: Added.
        * storage/wince/DatabaseThreadWince.h: Added.
        * storage/wince/LocalStorageThreadWince.cpp: Added.
        * storage/wince/LocalStorageThreadWince.h: Added.
        * svg/graphics/wince/SVGResourceFilterWince.cpp: Added.

2009-07-24  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Justin Garcia.

        execCommand('underline') can modify DOM outside of the contentEditable area
        https://bugs.webkit.org/show_bug.cgi?id=24333

        highestAncestorWithTextDecoration stops at the closest unsplittable element so that if text-decoration is applied
        outside of it, we don't accidently modify the style attribute.

        Tests: editing/style/textdecoration-outside-of-rooteditable.html
               editing/style/textdecoration-outside-of-unsplittable-element.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::init):
        (WebCore::highestAncestorWithTextDecoration):

2009-07-24  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=27639

        Fixes false positives when evaluating certain strings that only contain 
        non-canonical characters.

        Test: http/tests/security/xssAuditor/script-tag-safe.html

        * page/XSSAuditor.cpp:
        (WebCore::isNonCanonicalCharacter):
        (WebCore::XSSAuditor::findInRequest):

2009-07-24  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Changed WorkerContext destructor to not access possibly-freed WorkerThread.

        Failed assertion in WorkerContext::~WorkerContext().
        https://bugs.webkit.org/show_bug.cgi?id=27665

       * workers/DedicatedWorkerContext.cpp:
        (WebCore::DedicatedWorkerContext::~DedicatedWorkerContext):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::~WorkerContext):
        Removed assertion that relies on WorkerThread still being alive (moved to DedicatedWorkerContext destructor).

2009-07-24  Drew Wilson  <atwilson@google.com>

        Reviewed by Adam Barth.

        Updated code generator to properly generate bindings for WorkerContext exposed functions.

        Storing a reference to WorkerContext.postMessage() and calling it later yields a TypeError
        https://bugs.webkit.org/show_bug.cgi?id=27419

        Test: fast/workers/worker-call.html

        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore::toJSDedicatedWorkerContext):
        (WebCore::toJSWorkerContext):
        Functions that convert from JSValue to the appropriate WorkerContext/DedicatedWorkerContext object.
        * bindings/js/JSWorkerContextBase.h:
        Added toJS*WorkerContext APIs.
        * bindings/scripts/CodeGeneratorJS.pm:
        Added code to appropriately check the passed-in this object when invoking functions at global scope.

2009-07-24  Drew Wilson  <atwilson@google.com>

        Reviewed by Adam Barth.

        Refactor WorkerContext to move DedicatedWorker-specific APIs into DedicatedWorkerContext
        https://bugs.webkit.org/show_bug.cgi?id=27420

        No new tests as the existing tests already provide sufficient coverage (this is just a refactoring with no new functionality).

        * DerivedSources.cpp:
        Added JSDerivedWorkerContext.cpp
        * DerivedSources.make:
        Added DerivedWorkerContext files
        * GNUmakefile.am:
        Added DerivedWorkerContext files
        * WebCore.gypi:
        Added DerivedWorkerContext files
        * WebCore.pro:
        Added DerivedWorkerContext files
        * WebCore.vcproj/WebCore.vcproj:
        Added DerivedWorkerContext files
        * WebCore.xcodeproj/project.pbxproj:
        Added DerivedWorkerContext files
        * bindings/js/JSDedicatedWorkerContextCustom.cpp: Added.
        (WebCore::JSDedicatedWorkerContext::mark):
        Custom mark function for onmessage event handler.
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        Supports conversion to JSDedicatedWorkerContext.
        (WebCore::toEventTarget):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::mark):
        Moved onmessage mark handling into DedicatedWorkerContext.
        * bindings/js/WorkerScriptController.cpp:
        Added appropriate casts to DedicatedWorkerContext for postMessage().
        (WebCore::WorkerScriptController::initScript):
        Manually sets up the prototype chain for the worker context.
        * bindings/scripts/CodeGeneratorJS.pm:
        Changed special case code for WorkerContext to be triggered by new IsWorkerContext attribute.
        * bindings/scripts/CodeGeneratorV8.pm:
        Changed hard-coded tests for WorkerContext to support DedicatedWorkerContext.
        * bindings/v8/DOMObjectsInclude.h:
        Added DedicatedWorkerContext.h
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        Added V8DedicatedWorkerContext.cpp
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        Added code to reserve extra fields for V8DedicatedWorkerContext.
        * bindings/v8/V8Index.cpp:
        Now includes V8DedicatedWorkerContext.h in addition to V8WorkerContext.h
        * bindings/v8/V8Index.h:
        Added DedicatedWorkerContext as a non-node wrapper type.
        Removed WORKERCONTEXT as a valid template type.
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):
        Creates DedicatedWorkerContext instead of WorkerContext.
        (WebCore::WorkerContextExecutionProxy::EventTargetToV8Object):
        Returns DedicatedWorkerContext instead of WorkerContext.
        (WebCore::WorkerContextExecutionProxy::retrieve):
        Refactored to deal with DedicatedWorkerContext.
        * bindings/v8/custom/V8AbstractWorkerCustom.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp: Added.
        Moved onmessage code from V8WorkerContextCustom.cpp
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        Moved onmessage code to V8DedicatedWorkerContextCustom.cpp
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toDedicatedWorkerContext):
        * dom/EventTarget.h:
        * workers/DedicatedWorkerContext.cpp: Added.
        Moved DedicatedWorker-only APIs from WorkerContext.
        (WebCore::DedicatedWorkerContext::DedicatedWorkerContext):
        (WebCore::DedicatedWorkerContext::~DedicatedWorkerContext):
        (WebCore::DedicatedWorkerContext::reportException):
        (WebCore::DedicatedWorkerContext::postMessage):
        (WebCore::DedicatedWorkerContext::dispatchMessage):
        * workers/DedicatedWorkerContext.h: Added.
        Moved DedicatedWorker-only APIs from WorkerContext.
        (WebCore::DedicatedWorkerContext::create):
        (WebCore::DedicatedWorkerContext::toDedicatedWorkerContext):
        (WebCore::DedicatedWorkerContext::setOnmessage):
        (WebCore::DedicatedWorkerContext::onmessage):
        * workers/DedicatedWorkerContext.idl: Added.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::~WorkerContext):
        Moved code that notifies parent that worker is closing down into DedicatedWorkerContext.
        * workers/WorkerContext.h:
        (WebCore::WorkerContext::isClosing):
        Exposed closing flag as an API so derived classes can access it.
        * workers/WorkerContext.idl:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerContextTask::performTask):
        Calls into DedicatedWorkerContext to handle message.
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):
        Creates a DedicatedWorkerContext when the thread starts up.

2009-07-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move more callers to using 3 argument toJS
        https://bugs.webkit.org/show_bug.cgi?id=27661

        No functional changes, thus no tests.
        These are all the places where we can't yet pass the
        correct globalObject because we don't have or don't know the right one.

        * bindings/js/JSCustomPositionCallback.cpp:
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        (WebCore::JSCustomPositionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):

2009-07-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix the last of the x-frame constructor calls to have the right prototype chains
        https://bugs.webkit.org/show_bug.cgi?id=27645

        Fix the last few constructors to use their stored globalObject pointer when
        constructing objects instead of the lexicalGlobalObject().

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::constructAudio):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::constructImage):
        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::construct):
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::constructHTMLOptionElement):
        * bindings/js/JSWebKitPointConstructor.cpp:
        (WebCore::constructWebKitPoint):
        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::constructWorker):

2009-07-24  Jian Li  <jianli@chromium.org>

        Reviewed by Adam Barth.

        [V8] Cleanup exception handling in worker evaluation code.
        https://bugs.webkit.org/show_bug.cgi?id=27282

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::evaluate):
        * bindings/v8/WorkerContextExecutionProxy.h:
        (WebCore::WorkerContextExecutionState::WorkerContextExecutionState):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::setException):

2009-07-24  Stephen White  <senorblanco@chromium.org>

        Reviewed by David Levin.

        Reverting r46157, since it may be causing problems with Chromium
        reliability (see http://crbug.com/17569).

        https://bugs.webkit.org/show_bug.cgi?id=27388

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawLine):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::setupPaintForStroking):

2009-07-24  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        REGRESSION: inspector seems broken in ToT WebKit
        https://bugs.webkit.org/show_bug.cgi?id=27646

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype._ensureCommandLineAPIInstalled):

2009-07-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Add the shadow style member to the ShadowData constructor and ==
        operator

        * rendering/style/ShadowData.cpp:
        (WebCore::ShadowData::ShadowData):
        (WebCore::ShadowData::operator==):

2009-07-24  Jian Li  <jianli@chromium.org>

        Reviewed by Eric Seidel.

        [V8] More V8 bindings changes to use ErrorEvent.
        https://bugs.webkit.org/show_bug.cgi?id=27630

        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventToV8Object):
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:

2009-07-24  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Dave Hyatt.

        Clean up dependencies on Apple support libraries for non-Apple build.
        http://bugs.webkit.org/show_bug.cgi?id=27532.

        * platform/graphics/win/SimpleFontDataWin.cpp: Conditionalize references
          to ApplicationServices.h and WebKitSystemInterface.h

2009-07-24  Dan Bernstein  <mitz@apple.com>

        Another attempted build fix 

        * bindings/js/JSAbstractWorkerCustom.cpp:

2009-07-24  Dan Bernstein  <mitz@apple.com>

        Attempted build fix

        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::toJS):

2009-07-24  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Build fix for 64 bit Linux.

        int64_t is long on Linux 64 bit and not long long, thus
        getFileSize with a int64_t out value fails to build.

        Use a temporary to work around the problem.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::spaceNeeded):

2009-07-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Update all CREATE_DOM_*_WRAPPER callers to pass globalObject
        https://bugs.webkit.org/show_bug.cgi?id=27644

        This is another attempt at making the change for bug 27634 smaller.
        I included the changes to make_names.pl as well as any file which
        used CREATE_DOM_*_WRAPPER macros.

        The changes to the construct* functions are what fix the cases in
        fast/dom/constructed-objects-prototypes.html

        The changes to passing globalObject through CREATE_* are what fix
        fast/dom/prototype-inheritance-2.html

        * bindings/js/JSCDATASectionCustom.cpp:
        (WebCore::toJSNewlyCreated): pass globalObject.
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS): pass globalObject.
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS): pass globalObject.
        * bindings/js/JSDOMBinding.h: updated macros to pass globalObject.
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS): pass globalObject.
        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::setAttributeNode): use globalObject() for wrapping return value.
        (WebCore::JSElement::setAttributeNodeNS): use globalObject() for wrapping return value.
        (WebCore::toJSNewlyCreated): pass globalObject.
        * bindings/js/JSEventCustom.cpp:
        (WebCore::JSEvent::clipboardData): pass globalObject.
        (WebCore::toJS): pass globalObject.
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems): use globalObject() for wrapping returned collection items.
        (WebCore::callHTMLCollection): use globalObject() for wrapping returned collection items.
        (WebCore::JSHTMLCollection::item): use globalObject() for wrapping returned collection items.
        (WebCore::toJS): pass globalObject.
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS): pass globalObject.
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapper): pass globalObject.
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS): pass globalObject.
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS): pass globalObject.
        * bindings/js/JSTextCustom.cpp:
        (WebCore::toJSNewlyCreated): pass globalObject.
        * bindings/js/JSWebKitCSSMatrixConstructor.cpp:
        (WebCore::constructWebKitCSSMatrix): use constructors globalObject when constructing
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::constructXMLHttpRequest): use constructors globalObject when constructing
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::constructXSLTProcessor): use constructors globalObject when constructing
        * dom/make_names.pl:
            Pass globalObject through CREATE_* macros and various support functions.

2009-07-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Update CodeGeneratorJS.pm to support passing JSDOMGlobalObject* to toJS calls
        https://bugs.webkit.org/show_bug.cgi?id=27643

        This is an attempt to make this change as small as possible.
        I started by including all changes to CodeGeneratorJS.pm from bug 27634,
        and then made the minimal amount of other changes needed to support that change.

        Most toJS implementations ignore their passed JSDOMGlobalObject.
        There are stub 2-argument toJS, toJSNewlyCreated implementations to help compiling.
        All places where it is not clear what we should pass as the global object
        (or where the global object is simply not available, like for some SVG bindings)
        we pass deprecatedGlobalObjectForPrototype instead.

        * bindings/js/JSCDATASectionCustom.cpp:
        (WebCore::toJSNewlyCreated): add ignored JSDOMGlobalObject*
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS): add ignored JSDOMGlobalObject*
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS): add ignored JSDOMGlobalObject*
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::setDOMException): pass the wrong globalObject for now
        * bindings/js/JSDOMBinding.h:
            Pass the wrong global object to the CREATE_ macros for now.
            In the next change we'll come back and pass the correct one.
            That will require changes to make_names.pl.
        (WebCore::DOMObjectWithGlobalPointer::scriptExecutionContext):
        (WebCore::DOMObjectWithGlobalPointer::DOMObjectWithGlobalPointer):
        (WebCore::DOMObjectWithGlobalPointer::~DOMObjectWithGlobalPointer):
        (WebCore::createDOMObjectWrapper):
        (WebCore::getDOMObjectWrapper):
        (WebCore::createDOMNodeWrapper):
        (WebCore::getDOMNodeWrapper):
        (WebCore::toJS): added to convert 2 arg calls to 3 arg calls to limit the scope of this change.
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::toJS): DOMWindow always uses its own prototype chain.
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS): add ignored JSDOMGlobalObject*
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated): add ignored JSDOMGlobalObject*
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS): add ignored JSDOMGlobalObject*
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS): add ignored JSDOMGlobalObject*
        * bindings/js/JSEventTarget.h:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS): add ignored JSDOMGlobalObject*
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS): add ignored JSDOMGlobalObject*
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapper): pass globalObject to toJS(Document*) to avoid recursion
        (WebCore::toJSNewlyCreated): add ignored JSDOMGlobalObject*
        (WebCore::toJS): add ignored JSDOMGlobalObject*
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::toJS): pass globalObject along
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::inverse): pass wrong globalObject for now.
        (WebCore::JSSVGMatrix::rotateFromVector): pass wrong globalObject for now.
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSSVGPathSegListCustom.cpp:
            All of these methods need a globalObject, but most SVG binding don't have
            space for one, so we just pass the lexicalGlobalObject for now.
        (WebCore::JSSVGPathSegList::initialize):
        (WebCore::JSSVGPathSegList::getItem):
        (WebCore::JSSVGPathSegList::insertItemBefore):
        (WebCore::JSSVGPathSegList::replaceItem):
        (WebCore::JSSVGPathSegList::removeItem):
        (WebCore::JSSVGPathSegList::appendItem):
        * bindings/js/JSSVGPointListCustom.cpp:
        (WebCore::finishGetter): pass wrong globalObject for now.
        (WebCore::finishSetter):
        (WebCore::finishSetterReadOnlyResult):
        * bindings/js/JSSVGTransformListCustom.cpp:
        (WebCore::finishGetter): pass wrong globalObject for now.
        (WebCore::finishSetter):
        (WebCore::finishSetterReadOnlyResult):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS): add ignored JSDOMGlobalObject*
        * bindings/js/JSTextCustom.cpp:
        (WebCore::toJSNewlyCreated): add ignored JSDOMGlobalObject*
        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore::toJS): WorkerContext always uses its own prototype chain since it's a GlobalObject subclass.
        * bindings/js/JSWorkerContextBase.h:
        * bindings/scripts/CodeGeneratorJS.pm:
            All generated toJS calls now pass a globalObject.
            All generated toJS implementations now expect a globalObject.
            Simplified all the slot casts by using a "castedThis" local.
            SVG bindings which don't have a globalObject() accessor pass the deprecated lexicalGlobalObject instead.
            Simplified printing of constructor objects using a $constructorClassName variable.
            All generated constructor functions follow the construct$className form to match the custom constructors.

2009-07-24  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        typing "document.__proto__" in inspector throws exception
        https://bugs.webkit.org/show_bug.cgi?id=27169

        * inspector/front-end/utilities.js:
        (Object.type):

2009-07-24  Andrei Popescu  <andreip@google.com>

        Reviewed by Anders Carlsson.

        ApplicationCache should have size limit
        https://bugs.webkit.org/show_bug.cgi?id=22700

        https://lists.webkit.org/pipermail/webkit-dev/2009-May/007560.html

        This change implements a mechanism for limiting the maximum size of
        the application cache file. When this size is reached, a ChromeClient
        callback is invoked asynchronously and the saving of the last (failed)
        cache is retried automatically.
        
        This change also extends the ApplicationCacheStorage API by allowing
        a client to query or modify the application cache without having to
        load any resources into memory.

        Test: http/tests/appcache/max-size.html

        * WebCore.base.exp:
        Exports the symbols required by the DumpRenderTree test application.
        * loader/EmptyClients.h:
        Adds empty implementation of the new ChromeClient methods.
        * loader/appcache/ApplicationCache.cpp:
        * loader/appcache/ApplicationCache.h:
        Adds the ability to calculate the approximate size of an ApplicationCache object.
        * loader/appcache/ApplicationCacheGroup.cpp:
        * loader/appcache/ApplicationCacheGroup.h:
        Invokes the ChromeClient callback when the storage layer runs out of space.
        After the callback is invoked, we re-attempt to store the newest cache,
        in case the ChromeClient has freed some space.
        * loader/appcache/ApplicationCacheResource.cpp:
        * loader/appcache/ApplicationCacheResource.h:
        Adds the ability to calculate the approximate size of an ApplicationCacheResource object.
        * loader/appcache/ApplicationCacheStorage.cpp:
        * loader/appcache/ApplicationCacheStorage.h:
        Enforces a maximum size for the application cache file.
        * page/ChromeClient.h:
        Adds a new callback, invoked when the ApplicationCacheStorage reports that it has
        reached the maximum size for its database file.
        * platform/sql/SQLiteDatabase.cpp:
        * platform/sql/SQLiteDatabase.h:
        Adds a new method that allows querying for the amount of unused space inside the
        application cache database file.

2009-07-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        Use TextEncoding facilities to convert between UTF16 and UTF8
        instead of rolling our own solution.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (convertUniCharToUTF8):

2009-07-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        Fix confusion in g_substr between length in bytes and length in
        characters. Was causing crashes in some situations when dealing
        with non-ASCII text encoded as UTF8.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (g_substr):

2009-07-24  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: Impossible to add an attribute to a node without attributes
        https://bugs.webkit.org/show_bug.cgi?id=21108

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype.set hovered):
        (WebInspector.ElementsTreeElement.prototype.toggleNewButton):
        (WebInspector.ElementsTreeElement.prototype.ondblclick):
        (WebInspector.ElementsTreeElement.prototype._startEditing):
        (WebInspector.ElementsTreeElement.prototype._addNewAttribute):
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted):
        * inspector/front-end/inspector.css:

2009-07-24  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Adds support for Firebug's magic $0 variable to access inspected node
        https://bugs.webkit.org/show_bug.cgi?id=17907

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype._ensureCommandLineAPIInstalled): Added _inspectorCommandLineAPI.{
            _inspectedNodes, _addInspectedNode, $0, $1, $n}
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged): Stores the inspected node history
            in _inspectorCommandLineAPI._inspectedNodes
        (WebInspector.ElementsPanel):

2009-07-24  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Dragging a resource in the sidebar should drag it's URL
        https://bugs.webkit.org/show_bug.cgi?id=14410

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.onattach):

2009-07-24  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Double click on a resource in the sidebar should open that resource in Safari
        https://bugs.webkit.org/show_bug.cgi?id=14409

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.ondblclick): open a resource url

2009-07-24  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        Bump pango version requirement to 1.12 and remove unnecessary #ifdefs.

        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::getDefaultPangoLayout):
        * platform/graphics/gtk/FontPlatformDataPango.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/gtk/Language.cpp:

2009-07-24  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: Missing UIString and other localizedString.js fixes
        https://bugs.webkit.org/show_bug.cgi?id=27288

        * English.lproj/localizedStrings.js:

2009-07-24  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: Should Syntax Highlight JSON
        https://bugs.webkit.org/show_bug.cgi?id=27503

        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._contentLoaded):

2009-07-24  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Eric Seidel.

        Update WebCore/page/DOMTimer.cpp/h to conform to WebKit
        Style Guidelines as identified by cpplint.py.
        https://bugs.webkit.org/show_bug.cgi?id=27624

        * page/DragController.cpp:
        (WebCore::DragController::~DragController):
        (WebCore::documentFragmentFromDragData):
        (WebCore::DragController::dragEnded):
        (WebCore::DragController::dragEntered):
        (WebCore::DragController::dragExited):
        (WebCore::DragController::dragUpdated):
        (WebCore::DragController::performDrag):
        (WebCore::asFileInput):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::delegateDragSourceAction):
        (WebCore::DragController::concludeEditDrag):
        (WebCore::DragController::canProcessDrag):
        (WebCore::DragController::tryDHTMLDrag):
        (WebCore::DragController::mayStartDragAtEventLocation):
        (WebCore::getCachedImage):
        (WebCore::getImage):
        (WebCore::prepareClipboardForImageDrag):
        (WebCore::dragLocForDHTMLDrag):
        (WebCore::DragController::startDrag):
        (WebCore::DragController::doImageDrag):
        (WebCore::DragController::doSystemDrag):
        (WebCore::DragController::placeDragCaret):

2009-07-24  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Eric Seidel.

        Update WebCore/page/Chrome.cpp to conform to WebKit
        Style Guidelines as identified by cpplint.py.
        https://bugs.webkit.org/show_bug.cgi?id=27608

        * page/Chrome.cpp:
        (WebCore::Chrome::runBeforeUnloadConfirmPanel):
        (WebCore::Chrome::runJavaScriptAlert):
        (WebCore::Chrome::runJavaScriptConfirm):
        (WebCore::Chrome::runJavaScriptPrompt):
        (WebCore::Chrome::shouldInterruptJavaScript):
        (WebCore::Chrome::setToolTip):
        (WebCore::Chrome::requestGeolocationPermissionForFrame):
        (WebCore::ChromeClient::generateReplacementFile):
        (WebCore::ChromeClient::paintCustomScrollbar):

2009-07-24  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Eric Seidel.

        Update WebCore/page/Coordinates.cpp to conform to WebKit
        Style Guidelines as identified by cpplint.py.
        https://bugs.webkit.org/show_bug.cgi?id=27614

        * page/Coordinates.cpp:
        (WebCore::Coordinates::toString):

2009-07-24  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Eric Seidel.

        Update WebCore/page/DOMSelection.cpp/h to conform to WebKit
        Style Guidelines as identified by cpplint.py.
        https://bugs.webkit.org/show_bug.cgi?id=27614

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::setBaseAndExtent):
        (WebCore::DOMSelection::modify):
        (WebCore::DOMSelection::addRange):
        (WebCore::DOMSelection::deleteFromDocument):
        * page/DOMSelection.h:

2009-07-24  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Eric Seidel.

        Update WebCore/page/DOMTimer.cpp/h to conform to WebKit
        Style Guidelines as identified by cpplint.py.
        https://bugs.webkit.org/show_bug.cgi?id=27618

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer):
        (WebCore::DOMTimer::~DOMTimer):
        (WebCore::DOMTimer::fired):
        (WebCore::DOMTimer::suspend):
        (WebCore::DOMTimer::resume):
        (WebCore::DOMTimer::canSuspend):
        * page/DOMTimer.h:
        (WebCore::DOMTimer::minTimerInterval):
        (WebCore::DOMTimer::setMinTimerInterval):

2009-07-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Classes call DOMObject::mark() explicitly, should call DOMObjectWithGlobal::mark() instead
        https://bugs.webkit.org/show_bug.cgi?id=27641

        Nothing uses globalObject() yet, but this was causing crashes
        in the patch for bug 27634.  This is covered by fast/dom/gc-6.html.

        I decided to change these to Base:: instead of DOMObjectWithGlobal::
        for future-proofing.  All autogenerated classes use a typedef Base
        to avoid bugs like these.  Sadly C+does not have a built-in super:: we could use.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::mark):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::mark):
        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::mark):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::mark):
        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::getOwnPropertySlot):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::mark):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::mark):
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::mark):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::mark):
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::mark):

2009-07-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make most DOMObjects hold onto a JSDOMGlobalObject*
        https://bugs.webkit.org/show_bug.cgi?id=27588

        This change is almost entirely plumbing.  Only one functional
        change as part of this all (window.document.constructor has the correct prototype)
        Changes are detailed below.

        inner.document.constructor is fixed because all properties on the window
        object are created with the correct globalObject (instead of the lexical one).
        Since all objects now carry a globalObject pointer, when document creates
        HTMLDocumentConstructor it now has the right globalObject to use.

        Tests:
          fast/dom/prototype-inheritance.html
          fast/dom/prototype-inheritance-2.html

        * bindings/js/DOMObjectWithSVGContext.h:
        (WebCore::DOMObjectWithSVGContext::DOMObjectWithSVGContext):
            Update the comment and add an ignored globalObject argument.
        * bindings/js/JSDOMBinding.h:
            Pass a globalObject to all DOMObjects during creation.  Currently it's the wrong global object.
            Once toJS is passed a globalObject it will be the right one.
        (WebCore::createDOMObjectWrapper):
        (WebCore::createDOMNodeWrapper):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::JSDOMGlobalObject::globalObject): Makes binding generation easier.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::history): JSHistory is now passed a globalObject, but since it has no custom constructor it doesn't use it.
        (WebCore::JSDOMWindow::location): JSLocation is now passed a globalObject, but since it has no custom constructor it doesn't use it.
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::location): JSLocation is now passed a globalObject, but since it has no custom constructor it doesn't use it.
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::JSHTMLAllCollection):
        * bindings/js/JSHTMLCollectionCustom.cpp: Re-factoring needed to pass globalObject to JSNamedNodesCollection constructor.
        (WebCore::getNamedItems):
        (WebCore::callHTMLCollection):
        (WebCore::JSHTMLCollection::canGetItemsForName):
        (WebCore::JSHTMLCollection::nameGetter):
        (WebCore::JSHTMLCollection::item):
        (WebCore::JSHTMLCollection::namedItem):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSNamedNodesCollection.cpp:
             Now passed globalObject.  This is tested by inner.document.forms.testForm.
             The passed globalObject is still wrong until toJS is fixed.
        (WebCore::JSNamedNodesCollection::JSNamedNodesCollection):
        * bindings/js/JSNamedNodesCollection.h:
        * bindings/js/JSSharedWorkerConstructor.cpp:
             Add DOMConstructorObject missed by http://trac.webkit.org/changeset/45938
             This class is not compiled by default, so not testable.
        (WebCore::JSSharedWorkerConstructor::JSSharedWorkerConstructor):
        * bindings/js/JSSharedWorkerConstructor.h:
        * bindings/scripts/CodeGeneratorJS.pm:
             Make all bindings objects carry a globalObject pointer using DOMObjectWithGlobalPointer.
             SVG bindings which need a context() pointer do not have enough space for globalObject() too.
             WorkerContext does not need a globalObject (it is one), so special case it.
             Make all .constructor calls use the stored globalObject().  This is what fixes window.document.constructor.
             Make all constructors inherit from DOMConstructorObject for consistency.  Since the auto-bound constructors
             override createStructure anyway, there is no functional change here.  Just completing work started in r45938.

2009-07-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Geoff Garen.

        WebCore has a few places that don't gracefully handle a null request returned from willSendRequest.
        https://bugs.webkit.org/show_bug.cgi?id=27595

        Test: http/tests/misc/will-send-request-returns-null-on-redirect.html
        
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::removeResource): Null-check the request URL.
        
        * platform/network/cf/ResourceHandleCFNet.cpp: Ditto, and return null instead of creating an empty one.
        (WebCore::willSendRequest):

2009-07-23  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 27633 - AXLoadComplete can be fired off to frequently
        https://bugs.webkit.org/show_bug.cgi?id=27633

        An integration issue left out some curly braces.

        * dom/Document.cpp:
        (WebCore::Document::implicitClose):

2009-07-23  Darin Adler  <darin@apple.com>

        Reviewed by Brady Eidson.

        URL appears in back/forward button menu instead of title for items with custom representation
        https://bugs.webkit.org/show_bug.cgi?id=27586
        rdar://problem/5060337

        * WebCore.base.exp: Exported DocumentLoader::setTitle for use by Mac WebKit.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didChangeTitle): Tightened code to check if the document
        loader is the correct one; previously this would never happen because we'd
        commit the load before any title changes could be registered, but now we can
        encounter a case where we get a title during a provisional load.

2009-07-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        [CSS3 Backgrounds and Borders] Add support for inset box shadows
        https://bugs.webkit.org/show_bug.cgi?id=27582

        Test: fast/box-shadow/inset.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForShadow): Set the ShadowValue’s shadow style to 'inset'
            as needed.

        * css/CSSParser.cpp:
        (WebCore::ShadowParseContext::ShadowParseContext): Added style and allowStyle
            members. Initialize the allowStyle member.
        (WebCore::ShadowParseContext::commitValue): Pass the style value to the
            ShadowValue constructor. Reset allowStyle.
        (WebCore::ShadowParseContext::commitLength): Update allowStyle.
        (WebCore::ShadowParseContext::commitColor): Ditto.
        (WebCore::ShadowParseContext::commitStyle): Added. Sets the style member and
            updates the state.
        (WebCore::CSSParser::parseShadow): Parse the 'inset' keyword.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Get the style value from the
            shadow value and pass it to the ShadowData constructor.

        * css/ShadowValue.cpp:
        (WebCore::ShadowValue::ShadowValue): Added style.
        (WebCore::ShadowValue::cssText): Added style.

        * css/ShadowValue.h:
        (WebCore::ShadowValue::create): Added style.

        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc): Added a blend function for shadow styles. When blending
            between normal and inset shadows, all intermediate values map to normal.
        (WebCore::PropertyWrapperShadow::blend): Added normal style to the default
            shadow.
            
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxShadow): Added a shadow style parameter,
            which is passed through to RenderBoxModelObject::paintBoxShadow().

        (WebCore::InlineFlowBox::paintBoxDecorations): Paint inset shadows on top of
            the background.

        * rendering/InlineFlowBox.h:

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations): Paint inset shadows on top of the
            background.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow): Added a shadow style
            parameter, and code to paint inset shadows.

        * rendering/RenderBoxModelObject.h:

        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations): Paint inset shadows on top of
            the background.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations): Ditto.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBoxDecorations): Ditto.

        * rendering/style/ShadowData.h:
        Added a ShadowStyle enum.
        (WebCore::ShadowData::ShadowData): Add and initialize a style member.

2009-07-23  Simon Fraser  <simon.fraser@apple.com>

        Fix the build with UNUSED_PARAM(frame) for when ENABLE(3D_RENDERING) is not defined.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::transform_3dMediaFeatureEval):

2009-07-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adele Peterson.

        3d-transforms media query needs to look check that accelerated compositing is enabled
        https://bugs.webkit.org/show_bug.cgi?id=27621
        
        When evaluating a media query with '-webkit-transform-3d', we need to check the
        runtime switch that toggles accererated compositing, and therefore 3D.
        
        No test because we can't disable the pref dynamically in DRT.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::transform_3dMediaFeatureEval):

2009-07-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        execCommand('underline') can't remove <U> underlines
        https://bugs.webkit.org/show_bug.cgi?id=20215

        This patch adds support for u, s, and strike to implicitlyStyledElementShouldBeRemovedWhenApplyingStyle so that
        WebKit can remove those presentational tags when necessary.
        It also modifies StyleChange::init not to add "text-decoration: none".  Not only is this style meaningless
        (does not override inherited styles) but it was also causing WebKit to generate extra spans with this style.

        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::hasValue): True if the property contains the specified value
        * css/CSSValueList.h: Updated prototype
        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::init): No longer adds "text-decoration: none"
        (WebCore::ApplyStyleCommand::implicitlyStyledElementShouldBeRemovedWhenApplyingStyle): Supports text-decoration-related elements

2009-07-23  Jessie Berlin  <jberlin@apple.com>
        
        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=27554
        Expose the value of text-overflow in getComputedStyle.

        Test: fast/css/getComputedStyle/getComputedStyle-text-overflow.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        Add text-overflow to the list of computedProperties.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Return the value of the text-overflow property.

2009-07-23  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=27510

        [S60 QtWebKit] Don't put some intermediate generated files into the final mmp project
        file for linking. This is a temporary workaround for qmake bug in Symbian port, should 
        be reverted after qmake is fixed.

        * WebCore.pro:

2009-07-23  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        [V8] Fix an assert in running workers in Chrome.
        https://bugs.webkit.org/show_bug.cgi?id=27620

        The fix is to change V8DOMMap::removeAllDOMObjectsInCurrentThreadHelper
        to do not call removeObjectsFromWrapperMap for certain types of DOM
        objects that exist only in main thread.

        * bindings/v8/V8DOMMap.cpp:
        (WebCore::removeAllDOMObjectsInCurrentThreadHelper):

2009-07-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=27572
        Implement support for background-attachment:local.

        Added new test fast/overflow/overflow-with-local-attachment.html.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillProperty):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EFillAttachment):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapFillAttachment):
        * css/CSSValueKeywords.in:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::attachment):
        (WebCore::FillLayer::setAttachment):
        (WebCore::FillLayer::hasFixedImage):
        (WebCore::FillLayer::initialFillAttachment):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::backgroundAttachment):
        (WebCore::InheritedFlags::maskAttachment):
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-07-23  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        copyInheritableProperties and removeComputedInheritablePropertiesFrom should be deprecated
        https://bugs.webkit.org/show_bug.cgi?id=27325

        This patch deprecates copyInheritableProperties because it has been used for two different purposes:
        1.  Calculating the typing style.
        2.  Moving HTML subtrees and seeking to remove redundant styles.
        These tasks should be broken out into two separate functions.  New code should not use this function.

        It deletes removeComputedInheritablePropertiesFrom because it hasn't been used anywhere.

        There is no test since the patch does not change any behavior.

        * css/CSSComputedStyleDeclaration.cpp: removeComputedInheritablePropertiesFrom has been removed
        (WebCore::CSSComputedStyleDeclaration::deprecatedCopyInheritableProperties): has been renamed from copyInheritableProperties
        * css/CSSComputedStyleDeclaration.h: ditto
        * editing/DeleteSelectionCommand.cpp: ditto
        (WebCore::removeEnclosingAnchorStyle): ditto
        (WebCore::DeleteSelectionCommand::saveTypingStyleState): ditto
        * editing/EditCommand.cpp: ditto
        (WebCore::EditCommand::styleAtPosition): ditto
        * editing/RemoveFormatCommand.cpp: ditto
        (WebCore::RemoveFormatCommand::doApply): ditto
        * editing/ReplaceSelectionCommand.cpp: ditto
        (WebCore::handleStyleSpansBeforeInsertion): ditto
        (WebCore::ReplaceSelectionCommand::handleStyleSpans): ditto
        * editing/markup.cpp: ditto
        (WebCore::removeEnclosingMailBlockquoteStyle): ditto
        (WebCore::removeDefaultStyles): ditto
        (WebCore::createMarkup): ditto

2009-07-22  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        Audio element at default width shouldn't have time field.
        https://bugs.webkit.org/show_bug.cgi?id=27589

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlTimeDisplayElement::setVisible): Make sure we don't
        forget to remember the visibility if there is no renderer.

2009-07-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=27598 Clean up the 
        AccessibilityObject class

        Mostly this is just moving empty stubs into the header rather than 
        muddying the cpp file with them. A few functions were made pure 
        virtual.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isARIAControl):
        (WebCore::AccessibilityObject::clickPoint):
        (WebCore::AccessibilityObject::documentFrameView):
        (WebCore::AccessibilityObject::actionVerb):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::intValue):
        (WebCore::AccessibilityObject::layoutCount):
        (WebCore::AccessibilityObject::doAccessibilityHitTest):
        (WebCore::AccessibilityObject::focusedUIElement):
        (WebCore::AccessibilityObject::firstChild):
        (WebCore::AccessibilityObject::lastChild):
        (WebCore::AccessibilityObject::previousSibling):
        (WebCore::AccessibilityObject::nextSibling):
        (WebCore::AccessibilityObject::parentObjectIfExists):
        (WebCore::AccessibilityObject::observableObject):
        (WebCore::AccessibilityObject::linkedUIElements):
        (WebCore::AccessibilityObject::titleUIElement):
        (WebCore::AccessibilityObject::ariaRoleAttribute):
        (WebCore::AccessibilityObject::isPresentationalChildOfAriaRole):
        (WebCore::AccessibilityObject::ariaRoleHasPresentationalChildren):
        (WebCore::AccessibilityObject::roleValue):
        (WebCore::AccessibilityObject::ariaAccessiblityName):
        (WebCore::AccessibilityObject::ariaLabeledByAttribute):
        (WebCore::AccessibilityObject::ariaDescribedByAttribute):
        (WebCore::AccessibilityObject::accessibilityDescription):
        (WebCore::AccessibilityObject::ariaSelectedTextDOMRange):
        (WebCore::AccessibilityObject::axObjectCache):
        (WebCore::AccessibilityObject::axObjectID):
        (WebCore::AccessibilityObject::setAXObjectID):
        (WebCore::AccessibilityObject::anchorElement):
        (WebCore::AccessibilityObject::actionElement):
        (WebCore::AccessibilityObject::boundingBoxRect):
        (WebCore::AccessibilityObject::selectedTextRange):
        (WebCore::AccessibilityObject::selectionStart):
        (WebCore::AccessibilityObject::selectionEnd):
        (WebCore::AccessibilityObject::url):
        (WebCore::AccessibilityObject::selection):
        (WebCore::AccessibilityObject::stringValue):
        (WebCore::AccessibilityObject::title):
        (WebCore::AccessibilityObject::helpText):
        (WebCore::AccessibilityObject::textUnderElement):
        (WebCore::AccessibilityObject::text):
        (WebCore::AccessibilityObject::textLength):
        (WebCore::AccessibilityObject::selectedText):
        (WebCore::AccessibilityObject::accessKey):
        (WebCore::AccessibilityObject::widget):
        (WebCore::AccessibilityObject::widgetForAttachmentView):
        (WebCore::AccessibilityObject::setFocused):
        (WebCore::AccessibilityObject::setSelectedText):
        (WebCore::AccessibilityObject::setSelectedTextRange):
        (WebCore::AccessibilityObject::setValue):
        (WebCore::AccessibilityObject::setSelected):
        (WebCore::AccessibilityObject::makeRangeVisible):
        (WebCore::AccessibilityObject::childrenChanged):
        (WebCore::AccessibilityObject::addChildren):
        (WebCore::AccessibilityObject::hasChildren):
        (WebCore::AccessibilityObject::selectedChildren):
        (WebCore::AccessibilityObject::visibleChildren):
        (WebCore::AccessibilityObject::visiblePositionRange):
        (WebCore::AccessibilityObject::visiblePositionRangeForLine):
        (WebCore::AccessibilityObject::boundsForVisiblePositionRange):
        (WebCore::AccessibilityObject::setSelectedVisiblePositionRange):
        (WebCore::AccessibilityObject::visiblePositionForPoint):
        (WebCore::AccessibilityObject::nextVisiblePosition):
        (WebCore::AccessibilityObject::previousVisiblePosition):
        (WebCore::AccessibilityObject::visiblePositionForIndex):
        (WebCore::AccessibilityObject::indexForVisiblePosition):
        (WebCore::AccessibilityObject::index):
        (WebCore::AccessibilityObject::doAXRangeForLine):
        (WebCore::AccessibilityObject::doAXRangeForIndex):
        (WebCore::AccessibilityObject::doAXStringForRange):
        (WebCore::AccessibilityObject::doAXBoundsForRange):
        (WebCore::AccessibilityObject::updateBackingStore):

2009-07-23  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by David Hyatt.

        Fix of <rdar://4877658> Dragging from the area between the horizontal/vertical scrollbars when status bar is showing starts a selection and autoscroll.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:

2009-07-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=27581
        Drop the prefix from the box-shadow property.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::ShadowParseContext::commitLength):
        (WebCore::cssPropertyID):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/animation/AnimationBase.cpp:
        (WebCore::ensurePropertyMap):

2009-07-22  Viet-Trung Luu  <viettrungluu@gmail.com>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=27289
        When a mouse click occurs on a scrollbar without a preceding mouse move
        onto it, the release isn't handled correctly (since
        EventHandler::m_lastScrollbarUnderMouse isn't set on mouse down, but
        only on mouse move). (Side comment: That scrollbar-handling code
        in EventHandler is ugly. It should be fixed properly.)

        Tests: scrollbars/scrollbar-miss-mousemove.html
               scrollbars/scrollbar-miss-mousemove-disabled.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::updateLastScrollbarUnderMouse):
        * page/EventHandler.h:

2009-07-23  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by David Levin.

        Update WebCore/page/BarInfo.cpp to conform to WebKit
        Style Guidelines as identified by cpplint.py.
        https://bugs.webkit.org/show_bug.cgi?id=27606

        * page/BarInfo.cpp:
        (WebCore::BarInfo::visible):

2009-07-23  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by David Levin.

        Update WebCore/page/Console.cpp to conform to WebKit
        Style Guidelines as identified by cpplint.py.
        https://bugs.webkit.org/show_bug.cgi?id=27606

        * page/Console.cpp:
        (WebCore::printMessageSourceAndLevelPrefix):
        (WebCore::Console::profile):
        (WebCore::Console::time):

2009-07-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        Fix crashes with the QObject bindings after garbage collection.

        There is one QtInstance per wrapped QObject, and that QtInstance keeps
        references to cached JSObjects for slots. When those objects get
        deleted due to GC, then they becoming dangling pointers.

        When a cached member dies, it is now removed from the QtInstance's
        cache.

        As we cannot track the lifetime of the children, we have to remove
        them from QtInstance alltogether. They are not cached and were
        only used for mark(), but we _want_ them to be subject to gc.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::~QtInstance): Minor coding style cleanup,
        use qDeleteAll().
        (JSC::Bindings::QtInstance::removeCachedMethod): New function, to
        clean m_methods and m_defaultMethod.
        (JSC::Bindings::QtInstance::mark): Avoid marking already marked objects.
        (JSC::Bindings::QtField::valueFromInstance): Don't save children for
        marking.
        * bridge/qt/qt_instance.h: Declare removeCachedMethod.
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMethod::~QtRuntimeMethod): Call removeCachedMethod
        with this on the instance.

2009-07-23  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=27599
        'const unsigned' in return value

        Remove const modifier from unsigned return value, as it does not
        make sense.

        * dom/ErrorEvent.h:

2009-07-22  Jens Alfke  <snej@chromium.org>

        Reviewed by David Levin.

        Bug 22784: Improve keyboard navigation of Select elements.
        Home/End and PageUp/PageDn buttons do not do anything in drop down lists,
        on non-Mac platforms.
        https://bugs.webkit.org/show_bug.cgi?id=22784
        http://code.google.com/p/chromium/issues/detail?id=4576

        New test: LayoutTests/fast/forms/select-popup-pagekeys.html

        * dom/SelectElement.cpp:
        (WebCore::nextValidIndex): 
        New utility fn for traversing items of a select's list.
        (WebCore::SelectElement::menuListDefaultEventHandler):
        Added code to handle Home/End and PageUp/PageDn when ARROW_KEYS_POP_MENU is false.

2009-07-23  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Mark Rowe.

        Fix a couple of compiler warnings.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (copySurface):
        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        (WebCore::SimpleFontData::containsCharacters):

2009-07-22  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by David Levin.

        Enable HTML5 Datagrid defines for the Qt build.

        * WebCore.pro:

2009-07-22  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        [V8] Make Node wrappers go fast
        https://bugs.webkit.org/show_bug.cgi?id=27597

        Profiles indicate we're spending a lot of time asking whether we're on
        the main thread when looking up DOM wrappers for Nodes, but there isn't
        much point in doing that work because Nodes only exist on the main
        thread.  I've also added an assert to keep us honest in this regard.

        * bindings/v8/V8DOMMap.cpp:
        (WebCore::):
        (WebCore::getDOMNodeMap):
        (WebCore::DOMData::getCurrent):
        (WebCore::DOMData::getCurrentMainThread):

2009-07-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Remove unneeded virtual destructor from ScriptSourceProvider
        https://bugs.webkit.org/show_bug.cgi?id=27563

        * bindings/js/ScriptSourceProvider.h:

2009-07-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        execCommand('underline' / 'strikeThrough') doesn't work properly with multiple styles in text-decoration
        https://bugs.webkit.org/show_bug.cgi?id=27476

        executeStrikethrough and executeUnderline were toggling between "line-through" / "underline" and "none".
        This patch adds executeToggleStyleInList that toggles a style in CSSValueList instead of toggling the entire value.
        It modifies CSSComputedStyleDeclaration to return CSSValueList instead of CSSPrimitiveValue for text decorations,
        and adds removeAll member function to CSSValueList.

        Tests: editing/execCommand/toggle-text-decorations.html
               fast/css/getComputedStyle/getComputedStyle-text-decoration.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationFlagsToCSSValue): Creates a CSSValueList
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Returns a CSSValueList instead of CSSValue
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Text decorations are space separated instead of comma separated
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::removeAll): Removes all values that match the specified value
        * css/CSSValueList.h:
        * editing/EditorCommand.cpp:
        (WebCore::applyCommandToFrame): Apply style to a frame using specified command
        (WebCore::executeApplyStyle): Uses applyCommandToFrame
        (WebCore::executeToggleStyleInList): Uses applyCommandToFrame
        (WebCore::executeToggleStyle): Toggles a style in CSSValueList
        (WebCore::executeStrikethrough): Uses executeToggleStyleInList
        (WebCore::executeUnderline): Uses executeToggleStyleInList

2009-07-22  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=27174
        And
        https://bugs.webkit.org/show_bug.cgi?id=26938
        
        Code cleanup. Implements support for detecting attacks transformed by 
        PHP Magic Quotes/PHP addslashes().

        Tests: http/tests/security/xssAuditor/script-tag-addslashes-backslash.html
               http/tests/security/xssAuditor/script-tag-addslashes-double-quote.html
               http/tests/security/xssAuditor/script-tag-addslashes-null-char.html
               http/tests/security/xssAuditor/script-tag-addslashes-single-quote.html

        * page/XSSAuditor.cpp:
        (WebCore::isInvalidCharacter):
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canEvaluateJavaScriptURL):
        (WebCore::XSSAuditor::canLoadObject):
        (WebCore::XSSAuditor::normalize): Decodes HTML entities, removes backslashes,
        and removes control characters that could otherwise cause a discrepancy between
        the source code of a script and the outgoing HTTP parameters.
        (WebCore::XSSAuditor::decodeURL):
        (WebCore::XSSAuditor::decodeHTMLEntities):
        (WebCore::XSSAuditor::findInRequest):
        * page/XSSAuditor.h:

2009-07-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adele Peterson.

        Null deref in JSObject::mark due to null xhr wrapper
        https://bugs.webkit.org/show_bug.cgi?id=27565

        Make event target binding for appcache and xhr behave in the same way as
        it does for all other events.

        No test as I couldn't make a testcase which was remotely reliable.

        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):

2009-07-22  Mads Ager  <ager@chromium.org>

        Reviewed by David Levin.

        Inform V8 of the amount of WebCore string memory it is keeping alive.
        https://bugs.webkit.org/show_bug.cgi?id=27537

        V8 uses external strings that are backed by WebCore strings. Since
        the external strings themselves are small, V8 has no way of
        knowing how much memory it is actually holding on to. With this
        change, we inform V8 of the amount of WebCore string data it is
        holding on to with external strings.

        * bindings/v8/V8Binding.cpp:
        (WebCore::WebCoreStringResource::WebCoreStringResource):
        (WebCore::WebCoreStringResource::~WebCoreStringResource):

2009-07-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=27562
        Add the finalized versions of background-clip and background-origin.  Remove background-clip from
        the background shorthand and have it be auto-set based off background-origin's value.

        Three new tests added in fast/backgrounds/size

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parseFillProperty):
        * css/CSSPropertyLonghand.cpp:
        (WebCore::initShorthandMap):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:

2009-07-22  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Fisher.

        Hook up V8 bindings for DataGrid elements.
        https://bugs.webkit.org/show_bug.cgi?id=27383
        http://code.google.com/p/chromium/issues/detail?id=16730

        Tests: Enhanced LayoutTests/fast/dom/HTMLDataGridElement/*
        to handle exceptions, check appropriate JS prototypes, and
        test column-list's item() method as well as array-indexing.

        * WebCore.gypi: Added new source files.
        * bindings/scripts/CodeGeneratorV8.pm: Made GenerateBatchedAttributeData put #if's around conditional attributes.
        * bindings/v8/DOMObjectsInclude.h: #include DataGrid headers.
        * bindings/v8/V8DOMWrapper.cpp: Add bindings from HTML tags to datagrid templates.
        (WebCore::V8DOMWrapper::getTemplate): Customize datagrid template.
        * bindings/v8/V8DataGridDataSource.cpp: Added. (Based on JSDataGridDataSource)
        (WebCore::V8DataGridDataSource::V8DataGridDataSource):
        (WebCore::V8DataGridDataSource::~V8DataGridDataSource):
        * bindings/v8/V8DataGridDataSource.h: Added. (Based on JSDataGridDataSource)
        (WebCore::V8DataGridDataSource::create):
        (WebCore::V8DataGridDataSource::isJSDataGridDataSource):
        (WebCore::V8DataGridDataSource::jsDataSource):
        (WebCore::asV8DataGridDataSource):
        * bindings/v8/V8GCController.h: Added new handle type "DATASOURCE".
        * bindings/v8/V8Index.h: Conditionalize datagrid stuff.
        * bindings/v8/custom/V8CustomBinding.h: Declare more accessors. Conditionalize.
        * bindings/v8/custom/V8DataGridColumnListCustom.cpp: Added.
        * bindings/v8/custom/V8HTMLDataGridElementCustom.cpp: Fill in dataSource accessors.
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):

2009-07-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        pushDownTextDecorationStyleAroundNode needs clean up
        https://bugs.webkit.org/show_bug.cgi?id=27556

        Cleaned up. pushDownTextDecorationStyleAroundNode traverses tree vertically from highestAncestor to targetNode
        While traversing, it will apply the specified style to all nodes but targetNode.
        i.e. the style is applies to all ancestor nodes and their siblings of targetNode.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::pushDownTextDecorationStyleAroundNode): Cleaned up and added comments
        * editing/ApplyStyleCommand.h: Updated prototype

2009-07-22  Peter Kasting  <pkasting@google.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Handle any type of line endings in WebCore/css/*CSSPropertyNames.in.

        * DerivedSources.make:
        * css/makeprop.pl:
        * css/makevalues.pl:

2009-07-22  Paul Godavari  <paul@chromium.org>

        Reviewed by Darin Fisher.

        Chromium has a build break after removal of JSRGBColor bindings
        https://bugs.webkit.org/show_bug.cgi?id=27548

        Fix a build break in Chromium V8 after the JSRGBColor bindings change:
        https://bugs.webkit.org/show_bug.cgi?id=27242

        * bindings/scripts/CodeGeneratorV8.pm:

2009-07-22  Adam Langley  <agl@google.com>

        Reviewed by Darin Fisher.

        Chromium Linux: add static functions to FontPlatformData which allow
        for setting the global font rendering preferences.

        https://bugs.webkit.org/show_bug.cgi?id=27513
        http://code.google.com/p/chromium/issues/detail?id=12179

        This should not affect any layout tests.

        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::setHinting):
        (WebCore::FontPlatformData::setAntiAlias):
        (WebCore::FontPlatformData::setSubpixelGlyphs):
        (WebCore::FontPlatformData::setupPaint):
        * platform/graphics/chromium/FontPlatformDataLinux.h:

2009-07-22  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Move Inspector panels creation into a function to make possible introducing
        custom panels.

        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):
        (WebInspector.loaded):

2009-07-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Print console command message upon evaluate
        selection request; Handle errors in evaluation request
        properly.

        https://bugs.webkit.org/show_bug.cgi?id=27535

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._evalSelectionInCallFrame):

2009-07-22  Xan Lopez  <xlopez@igalia.com>

        Attempt to fix the GTKbuild.

        * GNUmakefile.am:

2009-07-21  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build.

        * WebCore.pro: Add RGBColor.cpp to the build, remove JSRGBColor.

2009-07-21  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=27494

        Fixes an issue that can cause a crash or unexpected behavior when calling
        WebCore::ScriptSourceCode::source on a cached script.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/CachedScriptSourceProvider.h: Modified to inherit from 
        WebCore::ScriptSourceCode.
        (WebCore::CachedScriptSourceProvider::source):
        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode): Separated out source provider and
        rewrote to use WebCore::ScriptSourceProvider.
        (WebCore::ScriptSourceCode::source):
        * bindings/js/ScriptSourceProvider.h: Added.
        (WebCore::ScriptSourceProvider::ScriptSourceProvider):
        (WebCore::ScriptSourceProvider::~ScriptSourceProvider):
        * bindings/js/StringSourceProvider.h: Modified to inherit from 
        WebCore::ScriptSourceCode.
        (WebCore::StringSourceProvider::StringSourceProvider):

2009-07-21  Sam Weinig  <sam@webkit.org>

        Another attempt to fix the Windows build.

        * WebCore.vcproj/WebCore.vcproj:

2009-07-21  Sam Weinig  <sam@webkit.org>

        Attempt to fix the Windows build.

        * DerivedSources.cpp:

2009-07-21  Sam Weinig  <sam@webkit.org>

        Attempt to fix the GTK build.

        * GNUmakefile.am:

2009-07-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Autogenerate Objective-C binding implementation for RGBColor.

        No functionality change.

        * WebCore.xcodeproj/project.pbxproj: 
        * bindings/objc/DOMRGBColor.mm: Removed.
        * bindings/scripts/CodeGeneratorObjC.pm: Add logic to convert from
        WebCore::Color to NSColor*.
        * css/RGBColor.idl:

2009-07-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=27242
        JSC bindings should use an auto-bound RGBColor class instead of hand-rolled JSRGBColor

        Move the JSC and Objective-C bindings onto using the RGBColor object instead
        of just an unsigned int. The JSC bindings are now completely autogenerated for
        this class. (Also removes the last lut from WebCore).

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSRGBColor.cpp: Removed.
        * bindings/js/JSRGBColor.h: Removed.
        * bindings/objc/DOM.mm:
        (-[DOMRGBColor _color]):
        * bindings/objc/DOMRGBColor.mm:
        (-[DOMRGBColor dealloc]):
        (-[DOMRGBColor finalize]):
        (-[DOMRGBColor red]):
        (-[DOMRGBColor green]):
        (-[DOMRGBColor blue]):
        (-[DOMRGBColor alpha]):
        (-[DOMRGBColor color]):
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseColor):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::getRGBColorValue):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::getRGBA32Value):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue):
        * css/RGBColor.cpp:
        (WebCore::RGBColor::alpha):
        * css/RGBColor.h:
        (WebCore::RGBColor::color):
        (WebCore::RGBColor::RGBColor):
        * css/RGBColor.idl:
        * page/DOMWindow.idl:
        * svg/SVGColor.cpp:
        (WebCore::SVGColor::rgbColor):
        * svg/SVGColor.h:

2009-07-21  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Implement AbstractWorker::dispatchScriptErrorEvent by generating an ErrorEvent.
        https://bugs.webkit.org/show_bug.cgi?id=27515

        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::dispatchScriptErrorEvent):

2009-07-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move m_context out of generator into a superclass
        https://bugs.webkit.org/show_bug.cgi?id=27521

        Mostly this is removing code from CodeGeneratorJS
        and instead using a DOMObjectWithSVGContext superclass in JSDOMBinding.h.

        DOMObjectWithSVGContext.h is its own file so that WebKit doesn't need to
        know about SVGElement.h (WebKit includes JSDOMBinding.h for some reason).

        I also removed context pointer from SVGZoomEvent since it was never used.

        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMObjectWithSVGContext.h: Added.
        (WebCore::DOMObjectWithSVGContext::context):
        (WebCore::DOMObjectWithSVGContext::DOMObjectWithSVGContext):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/scripts/CodeGeneratorJS.pm:

2009-07-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION (r46142):  editing/execCommand/19087.html & editing/execCommand/19653-1.html fail in Windows build
        https://bugs.webkit.org/show_bug.cgi?id=27480

        Because m_anchorType : 2 is treated as a signed integer by cl.exe, anchorType() wasn't returning the correct value.
        We made m_anchorType unsigned so that anchorType() returns the correct value.

        * dom/Position.h:
        (WebCore::Position::anchorType): statically cast to AnchorType

2009-07-21  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        [V8] Add V8 bindings for onerror in WorkerContext.
        https://bugs.webkit.org/show_bug.cgi?id=27518

        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):

2009-07-21  Jian Li  <jianli@chromium.org>

        Fix the incorrect patch being landed for bug 27516 that has already been reviewed.
        https://bugs.webkit.org/show_bug.cgi?id=27516

        * workers/WorkerContext.h:
        (WebCore::WorkerContext::setOnerror):
        (WebCore::WorkerContext::onerror):
        * workers/WorkerContext.idl:

2009-07-21  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Add onerror to WorkerContext.
        https://bugs.webkit.org/show_bug.cgi?id=27516

        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::mark):
        * workers/WorkerContext.h:
        (WebCore::WorkerContext::setOnerror):
        (WebCore::WorkerContext::onerror):
        * workers/WorkerContext.idl:

2009-07-21  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=27509
        Add font-related files for the WinCE port.

        Written by Yong Li <yong.li@torchmobile.com>

        * platform/graphics/wince/FontCacheWince.cpp: Added.
        * platform/graphics/wince/FontCustomPlatformData.cpp: Added.
        * platform/graphics/wince/FontCustomPlatformData.h: Added.
        * platform/graphics/wince/FontPlatformData.cpp: Added.
        * platform/graphics/wince/FontPlatformData.h: Added.
        * platform/graphics/wince/FontWince.cpp: Added.
        * platform/graphics/wince/GlyphPageTreeNodeWince.cpp: Added.
        * platform/graphics/wince/SimpleFontDataWince.cpp: Added.

2009-07-21  Kevin Ollivier  <kevino@theolliviers.com>

        Fix the Windows build, and update the comment on top now that wx uses WebCorePrefix.h too.

        * WebCorePrefix.h:

2009-07-21  Kevin Ollivier  <kevino@theolliviers.com>

        WebCorePrefix.h build fixes for non-Mac and wx / CURL builds.

        * WebCorePrefix.h:

2009-07-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        All DOMConstructorObjects should hold a pointer to the JSDOMGlobalObject
        https://bugs.webkit.org/show_bug.cgi?id=27478

        This is just moving code.
        I've added two new classes: DOMObjectWithGlobalPointer and DOMConstructorWithDocument.

        DOMObjectWithGlobalPointer is a new baseclass for DOMConstructorObject.
        (It's a baseclass because eventually all DOMObjects will have a global pointer, but
        I'll be moving them onto DOMObjectWithGlobalPointer in stages.)

        DOMConstructorWithDocument is a new baseclass for the 3 constructor objects
        which require a backpointer to the Document to function.  I made this a subclass of
        DOMConstructorObject to make clear that most constructors can hold no-such assumptions
        about having a back-pointer to the Document (since many constructors can be used from Workers).

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSAudioConstructor.h:
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWithGlobalPointer::globalObject):
        (WebCore::DOMObjectWithGlobalPointer::scriptExecutionContext):
        (WebCore::DOMObjectWithGlobalPointer::DOMObjectWithGlobalPointer):
        (WebCore::DOMObjectWithGlobalPointer::mark):
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        (WebCore::DOMConstructorWithDocument::document):
        (WebCore::DOMConstructorWithDocument::DOMConstructorWithDocument):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSImageConstructor.h:
        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::JSMessageChannelConstructor):
        * bindings/js/JSMessageChannelConstructor.h:
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        * bindings/js/JSOptionConstructor.h:
        * bindings/js/JSWebKitCSSMatrixConstructor.cpp:
        (WebCore::JSWebKitCSSMatrixConstructor::JSWebKitCSSMatrixConstructor):
        * bindings/js/JSWebKitPointConstructor.cpp:
        (WebCore::JSWebKitPointConstructor::JSWebKitPointConstructor):
        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::JSWorkerConstructor::JSWorkerConstructor):
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor):
        * bindings/js/JSXMLHttpRequestConstructor.h:
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::JSXSLTProcessorConstructor::JSXSLTProcessorConstructor):

2009-07-21  James Hawkins  <jhawkins@google.com>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=27453
        Initialize isInt when creating a CSSParserValue for a function.

        No change in behavior, so no tests.

        * css/CSSFunctionValue.cpp:
        (WebCore::CSSFunctionValue::parserValue):

2009-07-20  Jens Alfke  <snej@google.com>
 
         Reviewed by David Levin.
 
         Bug 27448: [Chromium] On Mac, arrow keys should cause Select to pop up its menu.
         Mac build of Chromium doesn't follow Mac HI guidelines to pop up the menu when
         an arrow key is pressed.
         https://bugs.webkit.org/show_bug.cgi?id=27448
 
         No new tests; affects only control response to user input.
 
         * dom/SelectElement.cpp:
         Changed definition of ARROW_KEYS_POP_MENU to make it true in Mac Chromium,
         so it will behave compatibly with Mac HI guidelines on pop-up menus.
         It's not possible to have PLATFORM(MAC) be true in the Mac build of Chromium.
 
2009-07-21  Paul Godavari  <paul@chromium.org>

        Reviewed by Eric Seidel.

        [Chromium] popup menus can crash when the selected index is -1
        https://bugs.webkit.org/show_bug.cgi?id=27275

        Crash reports from users indicate a crash can occur when PopupListBox::isSelectableItem
        is passed an index of less than 0 (which is possible under certain circumstances). This
        change prevents such a value from causing a crash by enforcing valid index values passed
        by all callers of isSelectableItem. isSelectableItem is now a private method of
        PopupListBox, as there are no external callers.

        Also cleaned up a small amount of code for style and grammar errors.

        No automatic test is provided since we cannot send events to the child window used by
        the popup menu.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::acceptIndex):
        (WebCore::PopupListBox::selectIndex):
        (WebCore::PopupListBox::isSelectableItem):
        (WebCore::PopupListBox::selectPreviousRow):

2009-07-21  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Don't include winsock2.h on wx, it conflicts with wx's inclusion of winsock.

        * platform/network/curl/ResourceHandleManager.h:

2009-07-21  Adam Roben  <aroben@apple.com>

        Roll out r46153, r46154, and r46155

        These changes were causing build failures and assertion failures on
        Windows.

        * ForwardingHeaders/wtf/PossiblyNull.h: Removed.
        * platform/graphics/cg/ImageBufferCG.cpp:

2009-07-21  Jian Li  <jianli@chromium.org>

        Reviewed by Eric Seidel.

        Implement ErrorEvent API.
        https://bugs.webkit.org/show_bug.cgi?id=27387

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * dom/ErrorEvent.cpp: Added.
        * dom/ErrorEvent.h: Added.
        * dom/ErrorEvent.idl: Added.
        * dom/Event.cpp:
        (WebCore::Event::isErrorEvent):
        * dom/Event.h:

2009-07-21  Priit Laes  <plaes@plaes.org>

        Reviewed by Gustavo Noronha.

        [Gtk] Searching in thepiratebay.org doesn't work with more than 1 word
        https://bugs.webkit.org/show_bug.cgi?id=24602

        Remove workaround required for <=libsoup-2.26.1

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):

2009-07-21  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        V8IsolatedWorld keeps a handle to a disposed context
        https://bugs.webkit.org/show_bug.cgi?id=27397

        Make a copy of the context handle before making it weak.  We don't want
        to make the original handle weak because we want it to survive for the
        length of the V8IsolatedWorld::evaluate method.

        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::V8IsolatedWorld):

2009-07-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add ability to evaluate selection while on break point.

        https://bugs.webkit.org/show_bug.cgi?id=27502

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._loaded):
        (WebInspector.SourceFrame.prototype._documentKeyDown):

2009-07-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Special case ConsolePanel opening since
        it is a 'fast view'.

        https://bugs.webkit.org/show_bug.cgi?id=27493

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible):

2009-07-20  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Eric Seidel.

        Fix Qt code to follow the WebKit Coding Style.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::qstring):
        (WebCore::fixSpacing):
        * platform/graphics/qt/FontQt43.cpp:
        (WebCore::generateComponents):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::cursorToX):
        * platform/graphics/qt/GradientQt.cpp:
        (WebCore::Gradient::platformGradient):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::toQtFillRule):
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::getWindowsContext):
        * platform/graphics/qt/IconQt.cpp:
        (WebCore::Icon::paint):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ReadContext::read):
        (WebCore::ImageDecoderQt::ReadContext::readImageLines):
        (WebCore::ImageDecoderQt::setData):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::drawPattern):
        (WebCore::BitmapImage::draw):
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::frameDurationAtIndex):
        (WebCore::ImageSource::frameHasAlphaAtIndex):
        (WebCore::ImageSource::frameIsCompleteAtIndex):
        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::create):
        (WebCore::MediaPlayerPrivate::bytesLoaded):
        (WebCore::MediaPlayerPrivate::updateStates):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::addArcTo):
        (WebCore::Path::isEmpty):
        * platform/graphics/qt/TransformationMatrixQt.cpp:
        (WebCore::TransformationMatrix::operator QTransform):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::ClipboardQt):
        (WebCore::ClipboardQt::clearData):
        (WebCore::ClipboardQt::clearAllData):
        (WebCore::ClipboardQt::getData):
        (WebCore::ClipboardQt::setData):
        (WebCore::ClipboardQt::setDragImage):
        (WebCore::getCachedImage):
        (WebCore::ClipboardQt::declareAndWriteDragImage):
        (WebCore::ClipboardQt::writeURL):
        (WebCore::ClipboardQt::writeRange):
        (WebCore::ClipboardQt::hasData):
        * platform/qt/ClipboardQt.h:
        * platform/qt/ContextMenuItemQt.cpp:
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::title):
        * platform/qt/CursorQt.cpp:
        (WebCore::westPanningCursor):
        (WebCore::notAllowedCursor):
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asFragment):
        * platform/qt/DragImageQt.cpp:
        (WebCore::createDragImageIconForCachedImage):
        * platform/qt/FileSystemQt.cpp:
        (WebCore::getFileSize):
        (WebCore::unloadModule):
        * platform/qt/Localizations.cpp:
        (WebCore::contextMenuItemTagShowSpellingPanel):
        * platform/qt/MIMETypeRegistryQt.cpp:
        (WebCore::):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::plainText):
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/qt/PlatformMouseEventQt.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::populate):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::fallbackStyle):
        (WebCore::inflateButtonRect):
        (WebCore::RenderThemeQt::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQt::paintButton):
        (WebCore::RenderThemeQt::paintMenuList):
        (WebCore::RenderThemeQt::applyTheme):
        (WebCore::WorldMatrixTransformer::WorldMatrixTransformer):
        (WebCore::RenderThemeQt::paintMediaBackground):
        (WebCore::RenderThemeQt::paintMediaFullscreenButton):
        * platform/qt/RenderThemeQt.h:
        * platform/qt/ScreenQt.cpp:
        (WebCore::screenRect):
        (WebCore::usableScreenRect):
        * platform/qt/ScrollbarQt.cpp:
        (WebCore::Scrollbar::contextMenu):
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::scPart):
        (WebCore::scrollbarPart):
        * platform/qt/ScrollbarThemeQt.h:
        * platform/qt/SharedBufferQt.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):
        * platform/qt/TemporaryLinkStubs.cpp:
        (PluginDatabase::defaultPluginDirectories):
        (PluginDatabase::getPluginPathsInDirectories):
        (PluginDatabase::isPreferredPluginDirectory):
        (WebCore::getSupportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):
        (WebCore::userIdleTime):
        (WebCore::prefetchDNS):
        * platform/text/qt/StringQt.cpp:
        (WebCore::String::String):
        * platform/text/qt/TextBoundaries.cpp:
        * platform/text/qt/TextBreakIteratorQt.cpp:
        (WebCore::TextBreakIterator::following):
        (WebCore::TextBreakIterator::preceding):
        (WebCore::WordBreakIteratorQt::first):
        (WebCore::WordBreakIteratorQt::next):
        (WebCore::WordBreakIteratorQt::previous):
        (WebCore::CharBreakIteratorQt::first):
        (WebCore::CharBreakIteratorQt::next):
        (WebCore::CharBreakIteratorQt::previous):
        (WebCore::characterBreakIterator):
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::fetchInfo):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::userAgentStatic):
        (WebCore::PluginView::handlePostReadFile):
        (WebCore::PluginView::init):

2009-07-21  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by David Levin.

        Added a first bunch of Haiku-specific files for WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=26988

        * platform/haiku/ClipboardHaiku.cpp: Added.
        (WebCore::ClipboardHaiku::ClipboardHaiku):
        (WebCore::ClipboardHaiku::clearData):
        (WebCore::ClipboardHaiku::clearAllData):
        (WebCore::ClipboardHaiku::getData):
        (WebCore::ClipboardHaiku::setData):
        (WebCore::ClipboardHaiku::types):
        (WebCore::ClipboardHaiku::files):
        (WebCore::ClipboardHaiku::dragLocation):
        (WebCore::ClipboardHaiku::dragImage):
        (WebCore::ClipboardHaiku::setDragImage):
        (WebCore::ClipboardHaiku::dragImageElement):
        (WebCore::ClipboardHaiku::setDragImageElement):
        (WebCore::ClipboardHaiku::createDragImage):
        (WebCore::ClipboardHaiku::declareAndWriteDragImage):
        (WebCore::ClipboardHaiku::writeURL):
        (WebCore::ClipboardHaiku::writeRange):
        (WebCore::ClipboardHaiku::hasData):
        * platform/haiku/ClipboardHaiku.h: Added.
        (WebCore::ClipboardHaiku::create):
        (WebCore::ClipboardHaiku::~ClipboardHaiku):
        * platform/haiku/CookieJarHaiku.cpp: Added.
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):
        * platform/haiku/CursorHaiku.cpp: Added.
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::~Cursor):
        (WebCore::Cursor::operator=):
        (WebCore::pointerCursor):
        (WebCore::moveCursor):
        (WebCore::crossCursor):
        (WebCore::handCursor):
        (WebCore::iBeamCursor):
        (WebCore::waitCursor):
        (WebCore::helpCursor):
        (WebCore::eastResizeCursor):
        (WebCore::northResizeCursor):
        (WebCore::northEastResizeCursor):
        (WebCore::northWestResizeCursor):
        (WebCore::southResizeCursor):
        (WebCore::southEastResizeCursor):
        (WebCore::southWestResizeCursor):
        (WebCore::westResizeCursor):
        (WebCore::northSouthResizeCursor):
        (WebCore::eastWestResizeCursor):
        (WebCore::northEastSouthWestResizeCursor):
        (WebCore::northWestSouthEastResizeCursor):
        (WebCore::columnResizeCursor):
        (WebCore::rowResizeCursor):
        (WebCore::verticalTextCursor):
        (WebCore::cellCursor):
        (WebCore::contextMenuCursor):
        (WebCore::noDropCursor):
        (WebCore::copyCursor):
        (WebCore::progressCursor):
        (WebCore::aliasCursor):
        (WebCore::noneCursor):
        (WebCore::notAllowedCursor):
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):
        (WebCore::grabCursor):
        (WebCore::grabbingCursor):

2009-07-21  Albert Astals Cid <aacid@kde.org>

        Reviewed by Tor Arne Vestbø.

        Change #error line not to have a ' (single quote)

        * DerivedSources.cpp:

2009-07-21  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by David Levin.

        Add ENABLE_RUBY to list of build options
        https://bugs.webkit.org/show_bug.cgi?id=27324

        Added flag ENABLE_RUBY:

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/build-generated-files.sh:

2009-07-21  James Hawkins  <jhawkins@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=27467
        Return an empty path in PlatformContextSkia::currentPathInLocalCoordinates
        if matrix.invert() fails.  This prevents the use of an uninitialized
        value in inverseMatrix.

        No new tests added.  Run
        LayoutTests/svg/dynamic-updates/SVGMarkerElement-dom-markerHeight-attr.html
        under valgrind and notice there are no errors.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::currentPathInLocalCoordinates):

2009-07-21  Stephen White  <senorblanco@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=27388

        Fix dotted and dashed borders on Chromium/skia.  This follows
        the logic in the Cg path, so results are much closer to Safari now 
        (some tests won't be exactly the same due to font layout differences).

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawLine):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::setupPaintForStroking):

2009-07-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make it harder to misuse try* allocation routines
        https://bugs.webkit.org/show_bug.cgi?id=27469

        Add forwarding header for PossiblyNull type, and add missing null check
        to ImageBuffer creation.

        * ForwardingHeaders/wtf/PossiblyNull.h: Added.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2009-07-20  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Guard access to installedMediaEngines()[0].

        https://bugs.webkit.org/show_bug.cgi?id=27479
        http://code.google.com/p/chromium/issues/detail?id=16541

        Else where in the file, installedMediaEngines is always checked for
        being empty because access. This patch adds a case which missed that
        check.

        This triggered a crash in Chromium:
            http://www.yakeze.com/chat/example-chromium-crash/

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load):

2009-07-20  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Allow search entries to render with a CSS border if the RenderTheme
        doesn't paint them.

        https://bugs.webkit.org/show_bug.cgi?id=27466
        http://code.google.com/p/chromium/issues/detail?id=16958

        <input type="search"> is very much like a text entry except that,
        currently, if the RenderTheme doesn't deal with it, nothing is
        rendered. With this patch, the default CSS border is rendered if the
        RenderTheme requests it.

        This will affect many layout tests, but only for Chromium Linux and
        those results are not currently in the WebKit tree.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintBorderOnly):

2009-07-17  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Switch to faster methods to access internal fields.
        https://bugs.webkit.org/show_bug.cgi?id=27372

        Minor refactoring.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertToSVGPODTypeImpl):
        (WebCore::V8DOMWrapper::setDOMWrapper):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::convertDOMWrapperToNative):
        (WebCore::V8DOMWrapper::convertDOMWrapperToNode):
        (WebCore::V8DOMWrapper::convertToNativeObject):
        (WebCore::V8DOMWrapper::convertToNativeEvent):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::removeElement):
        * bindings/v8/custom/V8InspectorControllerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-07-20  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Chromium Linux: cache Harfbuzz faces.

        https://bugs.webkit.org/show_bug.cgi?id=27473

        Previously, we recreated the Harfbuzz face for each script-run. With
        this patch, we keep the Harfbuzz face in the FontPlatformData (created
        as needed) and so they will persist for the duration of the
        FontPlatformData.

        Shouldn't affect any layout tests. Results in a significant win on the
        intl2 page cycler time.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::~TextRunWalker):
        (WebCore::TextRunWalker::setupFontForScriptRun):
        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::RefCountedHarfbuzzFace::~RefCountedHarfbuzzFace):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::harfbuzzFace):
        * platform/graphics/chromium/FontPlatformDataLinux.h:
        (WebCore::FontPlatformData::RefCountedHarfbuzzFace::create):
        (WebCore::FontPlatformData::RefCountedHarfbuzzFace::face):
        (WebCore::FontPlatformData::RefCountedHarfbuzzFace::RefCountedHarfbuzzFace):
        * platform/graphics/chromium/HarfbuzzSkia.h: Added.

2009-07-20  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Simon Fraser.

        REGRESSION (r46142): Need to remove showTreeThisForThis
        https://bugs.webkit.org/show_bug.cgi?id=27475

        Removes showTreeThisForThis

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::appendParagraphIntoNode):

2009-07-19  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Refactoring of indentRegion to fix bugs 26816 and 25317
        https://bugs.webkit.org/show_bug.cgi?id=26816
        https://bugs.webkit.org/show_bug.cgi?id=25317
        https://bugs.webkit.org/show_bug.cgi?id=23995 (partially)

        This patch implements appendParagraphIntoNode, a simpler specialized version of moveParagraph
        and replaces all calls inside indentRegion. The following is the new behavior of indentRegion.

        1. We try to indent as many wrapping nodes as possible.
           e.g. when indenting "hello" in <div>hello</div>, we try to indent div as well.
        2. We do not delete any wrapping elements
           With moveParagraph, we used to remove all wrapping nodes, and replaced with a blockquote.
           This was causing https://bugs.webkit.org/show_bug.cgi?id=23995 for indentation.
           With appendParagraphIntoNode, we can preserve all wrapping nodes.
        3. We only split the tree until the closest block node instead of until the root editable node.
           This behavioral change fixes the bug 25317.
        4. When multiple paragraphs are indented, we indent the highest common ancestor within the selection.
           e.g. when a list is a child node of a div, and the entire div is intended,
                we enclose the div by a single blockquote.

        Note that new behavior is more consistent with that of Internet Explorer and Firefox.
        To demonstrate this, the following tests are added.

        Tests: editing/execCommand/indent-div-inside-list.html
               editing/execCommand/indent-nested-blockquotes.html
               editing/execCommand/indent-nested-div.html
               editing/execCommand/indent-second-paragraph-in-blockquote.html

        * editing/IndentOutdentCommand.cpp: prepareBlockquoteLevelForInsertion is removed
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem): uses appendParagraphIntoNode now
        (WebCore::IndentOutdentCommand::indentIntoBlockquote): uses appendParagraphIntoNode now
        (WebCore::IndentOutdentCommand::appendParagraphIntoNode): removes a paragraph and appends it to a new node
        (WebCore::IndentOutdentCommand::removeUnnecessaryLineBreakAt): removes a break element at the specified position
        (WebCore::IndentOutdentCommand::indentRegion): exhibits the described behavior
        * editing/IndentOutdentCommand.h: updated prototype

2009-07-20  Dan Bernstein  <mitz@apple.com>

        Try to fix release builds after r46136

        * dom/Element.cpp:

2009-07-17  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Eric Seidel.

        Media Controls: We are specifying the text height, where it is unneeded and the slider is 2px off.
        https://bugs.webkit.org/show_bug.cgi?id=27380

        Adjust the margin of the slider and remove useless height specification to fix alignement of the media controls.

        * css/mediaControlsQT.css:

2009-07-20  Peter Kasting  <pkasting@google.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=27468
        Back out r46060, which caused problems for some Apple developers.

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/WebCoreGenerated.vcproj:

2009-07-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        When loading a custom view into a frame, the old document is still
        around
        <rdar://problem/5145841>

        Safari fires onload before PDF is loaded into the browser
        <rdar://problem/6618869>

        Test: fast/loader/non-html-load-event.html

        * GNUmakefile.am: Added PlaceholderDocument.{cpp,h}
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.
        * dom/Document.h:
        (WebCore::Document::setStyleSelector): Added this protected accessor for
            PlaceholderDocument to use.
        * dom/Element.cpp:
        (WebCore::Element::clientWidth): Check whether the document has a
            renderer.
        (WebCore::Element::clientHeight): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin): Create a PlaceholderDocument for frames
            that do not use an HTML view. Do not nullify the content size in
            that case.
        (WebCore::FrameLoader::transitionToCommitted): For frames that do not
            use an HTML view, call receivedFirstData(), which sets up the
            frame with a new PlaceHolderDocument.
        * loader/PlaceholderDocument.cpp: Added.
        (WebCore::PlaceholderDocument::attach): Sets up the style selector but
            does not create a RenderView.
        * loader/PlaceholderDocument.h: Added.
        (WebCore::PlaceholderDocument::create):
        (WebCore::PlaceholderDocument::PlaceholderDocument):

2009-07-20  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Handle opacity and opacity animations on transform layers in Leopard
        https://bugs.webkit.org/show_bug.cgi?id=27398

        This makes two changes, and only for Leopard. 

        First, whenever opacity is changed on a layer I propagate the 
        change into the content layer and all the children if the layer 
        on which opacity is set is a transform layer (preserve3D is true). 
        The opacity set is the accumulated opacity from this layer
        and all its direct ancestor transform layers. Second, I turn off all 
        hardware opacity animation.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::accumulatedOpacity):
        (WebCore::GraphicsLayer::distributeOpacity):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setOpacityInternal):
        * platform/graphics/mac/GraphicsLayerCA.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setPreserves3D):
        (WebCore::GraphicsLayerCA::setOpacity):
        (WebCore::GraphicsLayerCA::animateFloat):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        (WebCore::GraphicsLayerCA::setOpacityInternal):
        (WebCore::GraphicsLayerCA::updateOpacityOnLayer):

2009-07-20  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=27349
        Add GraphicsContext implementation for the WinCE port.

        Written by Yong Li <yong.li@torchmobile.com>, George Staikos <george.staikos@torchmobile.com> and Lyon Chen <lyon.chen@torchmobile.com>
        with trivial style fixes by Adam Treat <adam.treat@torchmobile.com>

        * platform/graphics/wince/GraphicsContextWince.cpp: Added.

2009-07-20  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Adding the Win SQLite VFS implementation for Chromium, and stubs
        for the Mac and Linux VFSs.

        https://bugs.webkit.org/show_bug.cgi?id=26940

        * WebCore.gypi:
        * platform/chromium/ChromiumBridge.h:
        * platform/sql/chromium/SQLiteFileSystemChromium.cpp: Added.
        * platform/sql/chromium/SQLiteFileSystemChromiumLinux.cpp: Added.
        * platform/sql/chromium/SQLiteFileSystemChromiumMac.cpp: Added.
        * platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp: Added.

2009-07-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=27097
        [Gtk] Segfault when examining an object of ROLE_TABLE via at-spi

        Check that an object is a RenderObject before trying to access its
        renderer and related node.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_role):

2009-07-20  Balazs Kelemen  <kelemen.balazs.3@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] font cache reworking
        https://bugs.webkit.org/show_bug.cgi?id=27265

        Reimplemented Qt's FontCache in a way that follows the shared one.
        Now we can release its elements when those became inactive.
        FontFallbackList had been changed to be able to hold WebCore fonts in its list and to be able to release a FontData what is in the cache.

        No change in behavior, so no tests.

        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::isHashTableDeletedValue):
        (WebCore::FontPlatformDataCacheKey::): Key type for the cache of FontPlatformData objects.
        It can be constructed from a FontPlatformData or from a FontDescription. The keys have to be consistent
        with FontPlatformData::FontPlatformData(const FontDescription&) - if we create the same
        FontPlatformData from two FontDescription then we have to create the same key from them, and vica versa.
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::FontPlatformDataCacheKey::hash):
        (WebCore::FontPlatformDataCacheKey::computeHash):
        (WebCore::FontPlatformDataCacheKey::hashTableDeletedSize):
        (WebCore::FontPlatformDataCacheKeyHash::hash):
        (WebCore::FontPlatformDataCacheKeyHash::equal):
        (WebCore::FontPlatformDataCacheKeyTraits::emptyValue):
        (WebCore::FontPlatformDataCacheKeyTraits::constructDeletedValue):
        (WebCore::FontPlatformDataCacheKeyTraits::isDeletedValue):
        (WebCore::FontCache::getCachedFontPlatformData): Get a FontDescription and returns a FontPlatformData.
        (WebCore::FontCache::getCachedFontData): Get a FontPlatformData and returns a SimpleFontData.
        (WebCore::FontCache::releaseFontData): Get a SimpleFontData and releases it from the cache. Also releases the appropriate FontPlatformData.
        (WebCore::FontCache::purgeInactiveFontData): Frees inactive elements.
        (WebCore::FontCache::invalidate): Frees all inactive elements (call purgeInactiveFontData with default argument)
        * platform/graphics/qt/FontFallbackListQt.cpp:
        (WebCore::FontFallbackList::releaseFontData):
        (WebCore::FontFallbackList::fontDataAt):
        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformData::family): Getter. It is needed for FontPlatformDataCacheKey.
        (WebCore::FontPlatformData::bold): Ditto.
        (WebCore::FontPlatformData::italic): Ditto.
        (WebCore::FontPlatformData::smallCaps): Ditto.
        (WebCore::FontPlatformData::pixelSize): Ditto.
        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Set m_bold.

2009-07-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=26716
        [Gtk] Each XMLHttpRequest leaks memory.

        Free the SoupURI we create to check the URI. Fix suggested by John
        Kjellberg.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::):

2009-07-20  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Holger Freyther.

        [Qt] On Symbian link against system sqlite3
        https://bugs.webkit.org/show_bug.cgi?id=27368

        Add an option to force linking against system sqlite3
        by adding system-sqlite to the CONFIG variable.

        The Symbian specific part of this patch is contributed by 
        Norbert Leser.

        * WebCore.pro:

2009-07-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Change the glib version check to check for the first unstable
        release with g_mapped_file_unref. Otherwise this would be useless
        until 2.22 is released, a few months from now.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::startHttp):

2009-07-20  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by and done with Tor Arne Vestbø.

        Fix fast/css/pseudo-required-optional-*.html in the Qt build
        after r46062.

        These tests triggered a bug in RenderThemeQt where we did not fall back
        to the unstyled painting of text areas and input fields when they have
        a styled background.

        Our re-implementation of isControlStyled incorrectly only checked the
        border for determining whether to style or not. The base-implementation
        performs the same check, but also includes the background. Removing
        our implementation fixes the appearance.

        * platform/qt/RenderThemeQt.cpp: Removed isControlStyled reimplementation.
        * platform/qt/RenderThemeQt.h: Ditto.

2009-07-20  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        Add missing (sorted) header files to the HEADERS variable in the qmake
        .pro file for improved completion in IDEs.

        * WebCore.pro:

2009-07-19  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        [V8] Factor V8ConsoleMessage out of V8Proxy
        https://bugs.webkit.org/show_bug.cgi?id=27421

        No behavior change.

        * WebCore.gypi:
        * bindings/v8/V8ConsoleMessage.cpp: Added.
        (WebCore::V8ConsoleMessage::V8ConsoleMessage):
        (WebCore::V8ConsoleMessage::dispatchNow):
        (WebCore::V8ConsoleMessage::dispatchLater):
        (WebCore::V8ConsoleMessage::processDelayed):
        (WebCore::V8ConsoleMessage::handler):
        * bindings/v8/V8ConsoleMessage.h: Added.
        (WebCore::V8ConsoleMessage::Scope::Scope):
        (WebCore::V8ConsoleMessage::Scope::~Scope):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::logInfo):
        (WebCore::reportUnsafeAccessTo):
        (WebCore::V8Proxy::runScript):
        (WebCore::V8Proxy::callFunction):
        (WebCore::V8Proxy::newInstance):
        (WebCore::V8Proxy::initContextIfNeeded):
        (WebCore::V8Proxy::processConsoleMessages):

2009-07-19  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Adam Barth.

        Remove unused member variable.

        * svg/SVGPolyElement.h:

2009-07-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        HTMLAudioElement: constructor should set "autobuffer" attribute
        https://bugs.webkit.org/show_bug.cgi?id=27422

        Test: media/audio-constructor-autobuffer.html

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::constructAudio):
            Set 'autobuffer' attribute.

2009-07-19  Thierry Bastian <thierry.bastian@nokia.com>

        Reviewed by Simon Hausmann.

        Fix the Qt build with mingw.

        * WebCore.pro: Don't use MSVC commandline options to disable warnings
        with mingw.

2009-07-19  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        [V8] Phase 2: Remove event listener methods from V8Proxy
        https://bugs.webkit.org/show_bug.cgi?id=27415

        No behavior change.

        * bindings/v8/V8ObjectEventListener.cpp:
        (WebCore::weakObjectEventListenerCallback):
        (WebCore::V8ObjectEventListener::~V8ObjectEventListener):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::disconnectEventListeners):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::eventListeners):
        (WebCore::V8Proxy::objectListeners):
        * bindings/v8/custom/V8AbstractWorkerCustom.cpp:
        (WebCore::getEventListener):
        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::~V8EventListener):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGElementInstanceCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::getEventListener):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::getEventListener):
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):

2009-07-18  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha.

        [Gtk] soup/ResourceHandleSoup.cpp:533: error: 'g_mapped_file_free' was not declared in this scope
        https://bugs.webkit.org/show_bug.cgi?id=27230

        Use g_mapped_file_unref for GLIB version 2.22 onwards.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::startHttp):

2009-07-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Add spread radius support to -webkit-box-shadow
        https://bugs.webkit.org/show_bug.cgi?id=27417
        rdar://problem/7072267

        Test: fast/box-shadow/spread.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForShadow): Added a property ID parameter and used it to
            include the spread length for box-shadow but not for text-shadow.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
            Pass the property ID to valueForShadow().

        * css/CSSParser.cpp:
        (WebCore::ShadowParseContext::ShadowParseContext): Added property,
            spread, and allowSpread members. Added a property ID parameter to
            the constructor. Initialize the property and allowSpread members.
        (WebCore::ShadowParseContext::allowLength): Added allowSpread.
        (WebCore::ShadowParseContext::commitValue): Pass the spread value to
            the ShadowValue constructor. Reset allowSpread.
        (WebCore::ShadowParseContext::commitLength): Allow spread after blur
            for the box-shadow property.
        (WebCore::ShadowParseContext::commitColor): Reset allowSpread.
        (WebCore::CSSParser::parseShadow): Pass the property ID to
            ShadowParseContext().

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Get the spread value from
            the shadow value and pass it to the ShadowData constructor.

        * css/ShadowValue.cpp:
        (WebCore::ShadowValue::ShadowValue): Added spread.
        (WebCore::ShadowValue::cssText): Added spread.

        * css/ShadowValue.h:
        (WebCore::ShadowValue::create): Added spread.

        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc): Blend the spread value.
        (WebCore::PropertyWrapperShadow::blend): Added 0 spread to the default
            shadow.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally): Account for spread in
            the visual overflow calculations.
        (WebCore::InlineFlowBox::placeBoxesVertically): Ditto.
        (WebCore::InlineFlowBox::paint): Ditto.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::overflowHeight): Ditto.
        (WebCore::RenderBlock::overflowWidth): Ditto.
        (WebCore::RenderBlock::overflowLeft): Ditto.
        (WebCore::RenderBlock::overflowTop): Ditto.
        (WebCore::RenderBlock::overflowRect): Ditto.
        (WebCore::RenderBlock::layoutBlock): Ditto.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow): Inflate the shadow-
            casting rect by the shadow spread value. Adjust border radii if
            necessary.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Account for spread in the
            visual overflow calculations.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateRects): Ditto.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded): Account for spread.
        (WebCore::RenderObject::adjustRectForOutlineAndShadow): Ditto.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::adjustOverflowForBoxShadowAndReflect): Ditto.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setTextShadow): Assert that text shadows do not
            have spread.

        * rendering/style/ShadowData.cpp:
        (WebCore::ShadowData::ShadowData): Added spread.
        (WebCore::ShadowData::operator==): Compare spread.
        * rendering/style/ShadowData.h:
        (WebCore::ShadowData::ShadowData): Added spread.

2009-07-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Jan Alonzo.

        Minor FrameLoader.cpp cleanup
        https://bugs.webkit.org/show_bug.cgi?id=27406

        No behavior change.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::executeIfJavaScriptURL):

2009-07-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        [V8] Move event listener methods from V8Proxy to V8EventListenerList
        https://bugs.webkit.org/show_bug.cgi?id=27408

        Move some event listener code out of V8Proxy and into the event
        listener list.

        I'd like to remove these methods from V8Proxy entirely and just expose
        getters for the lists themselves, but I'll do that in a follow up
        patch.

        * bindings/v8/V8EventListenerList.cpp:
        (WebCore::V8EventListenerList::findWrapper):
        * bindings/v8/V8EventListenerList.h:
        (WebCore::V8EventListenerList::findOrCreateWrapper):
        * bindings/v8/V8ObjectEventListener.cpp:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::findV8EventListener):
        (WebCore::V8Proxy::findOrCreateV8EventListener):
        (WebCore::V8Proxy::removeV8EventListener):
        (WebCore::V8Proxy::findObjectEventListener):
        (WebCore::V8Proxy::findOrCreateObjectEventListener):
        (WebCore::V8Proxy::removeObjectEventListener):
        * bindings/v8/V8Proxy.h:

2009-07-18  Jeremy Orlow  <jorlow@chromium.org>

        Rubber stamped by Adam Barth.

        Revert https://bugs.webkit.org/show_bug.cgi?id=27383
        https://bugs.webkit.org/show_bug.cgi?id=27407

        Revert Jens' patch.  I believe he forgot to include a file.

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        * bindings/v8/V8DataGridDataSource.cpp: Removed.
        * bindings/v8/V8DataGridDataSource.h: Removed.
        * bindings/v8/V8GCController.h:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8HTMLDataGridElementCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):

2009-07-17  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.
        
        https://bugs.webkit.org/show_bug.cgi?id=27405

        Fixes an issue when decoding HTML entities with an unknown named entity that 
        caused null-characters to be inserted into the decoded result.

        Test: http/tests/security/xssAuditor/link-onclick-ampersand.html
              http/tests/security/xssAuditor/javascript-link-ampersand.html

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::decodeHTMLEntities): Added check to conditional so that
        non-zero entity values are not inserted during decoding process.

2009-07-17  Jan Michael Alonzo  <jmalonzo@webkit.org>

        <http://webkit.org/b/18363> [GTK] Combo boxes cannot be opened pressing space

        Reviewed by Holger Freyther.

        Add Gtk to platforms that want to open the menulist using the
        spacebar.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::menuListDefaultEventHandler):

2009-07-17  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25523
        [GTK] The text displayed by push buttons is not exposed to assistive technologies

        Add new public method text() to RenderButton and use it from
        AccessibilityRenderObject::stringValue().

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::stringValue):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::text):
        * rendering/RenderButton.h:

2009-07-17  Anton Muhin  <antonm@chromium.org>

        Reviewed by Dimitri Glazkov.

        Restore proxy retrieval
        https://bugs.webkit.org/show_bug.cgi?id=27369

        No new tests are needed.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):

2009-07-17  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=27351
        Added platform "Symbian" to WEBCORE_NAVIGATOR_PLATFORM
        Use uname to find the correct platform for Linux.

        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::platform):

2009-07-17  Jens Alfke  <snej@chromium.org>

        Reviewed by Dimitri Glazkov.

        Hook up V8 bindings for DataGrid elements.
        https://bugs.webkit.org/show_bug.cgi?id=27383
        http://code.google.com/p/chromium/issues/detail?id=16730

        Tests: Enhanced LayoutTests/fast/dom/HTMLDataGridElement/*
        to handle exceptions, check appropriate JS prototypes, and
        test column-list's item() method as well as array-indexing.

        * WebCore.gypi: Added new source files.
        * bindings/scripts/CodeGeneratorV8.pm: Made GenerateBatchedAttributeData put #if's around conditional attributes.
        * bindings/v8/DOMObjectsInclude.h: #include DataGrid headers.
        * bindings/v8/V8DOMWrapper.cpp: Add bindings from HTML tags to datagrid templates.
        (WebCore::V8DOMWrapper::getTemplate): Customize datagrid template.
        * bindings/v8/V8DataGridDataSource.cpp: Added. (Based on JSDataGridDataSource)
        (WebCore::V8DataGridDataSource::V8DataGridDataSource):
        (WebCore::V8DataGridDataSource::~V8DataGridDataSource):
        * bindings/v8/V8DataGridDataSource.h: Added. (Based on JSDataGridDataSource)
        (WebCore::V8DataGridDataSource::create):
        (WebCore::V8DataGridDataSource::isJSDataGridDataSource):
        (WebCore::V8DataGridDataSource::jsDataSource):
        (WebCore::asV8DataGridDataSource):
        * bindings/v8/V8GCController.h: Added new handle type "DATASOURCE".
        * bindings/v8/V8Index.h: Conditionalize datagrid stuff.
        * bindings/v8/custom/V8CustomBinding.h: Declare more accessors. Conditionalize.
        * bindings/v8/custom/V8HTMLDataGridElementCustom.cpp: Fill in dataSource accessors.
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):

2009-07-17  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        StorageArea should only contain methods we intend to proxy.
        https://bugs.webkit.org/show_bug.cgi?id=27181

        Right now, StorageAreaSync takes in a StorageArea* and calls methods
        like importItem.  Really, StorageAreaSync should be operating directly
        on StorageAreaImpl* and those methods should be removed from StorageArea
        since StorageAreaSync should never be attached to anything other than a
        StorageAreaImpl.

        This was pointed out in the review for
        https://bugs.webkit.org/show_bug.cgi?id=27072

        Also clean up StorageNamespaceImpl to operate directly on
        StorageAreaImpl.  Also, get rid of the factory for StorageArea
        since nothing should ever create a StorageArea directly.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/StorageArea.cpp: Removed.
        * storage/StorageArea.h:
        (WebCore::StorageArea::~StorageArea):
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::copy):
        * storage/StorageAreaImpl.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::create):
        (WebCore::StorageAreaSync::StorageAreaSync):
        * storage/StorageAreaSync.h:
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::copy):
        (WebCore::StorageNamespaceImpl::storageArea):
        * storage/StorageNamespaceImpl.h:

2009-07-17  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add v8 implementation for DOM Storage ScriptObjectQuarantine.
        https://bugs.webkit.org/show_bug.cgi?id=27327

        Wrap the storage object with a generic object as is done elsewhere in
        the file (but continue to hit a NOTIMPLEMENTED if DOM_STORAGE is not
        enabled.

        * bindings/v8/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):

2009-07-17  Mads Ager  <ager@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=27394
        Fix access to global object wrappers after navigation of their
        frame in the V8 bindings.  This fixes selenium test failures.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::updateDocument):

2009-07-17  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build by removing implicit float <-> double conversions.

        * inspector/InspectorController.cpp:
        (WebCore::constrainedAttachedWindowHeight):

2009-07-17  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Fix of <rdar://problem/5712795> Win: Cannot change the height of the docked Web Inspector (14272)
        https://bugs.webkit.org/show_bug.cgi?id=14272
        
        Moved preference setting for attached inspector height and inspector height calculation from
        WebInspectorClient.mm into InspectorController.cpp, to make this code cross-platform and enable
        Windows resizing of attached inspector.

        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:

2009-07-17  Dan Bernstein  <mitz@apple.com>

        Another attempt at fixing the build after r46063

        * WebCore.xcodeproj/project.pbxproj: Made ExceptionCode.h a private
            header, because it is now included from htmlediting.h, which is
            a private header.

2009-07-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=27396
        Moving cursor in Thai text sometimes jumps over two characters

        Test: editing/text-iterator/thai-cursor-movement.html

        * platform/text/TextBreakIteratorICU.cpp: (WebCore::cursorMovementIterator): Added a special
        case for five Thai characters, matching ICU/CLDR changes.

2009-07-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Some constructor objects exposed on Window have the wrong prototype chain
        https://bugs.webkit.org/show_bug.cgi?id=27276

        Several Constructor classes were already being passed a global object
        during construction, but they were ignoring it for prototype lookup.
        I've fixed those to use the passed global object instead.

        Most of these Constructor classes should just be auto-generated, but I
        refrained from changing them over to auto-gen in this patch.

        Fixed CodeGeneratorJS to pass a global object to getDOMConstructor when
        available, otherwise default to deprecatedGlobalObjectForPrototype(exec)
        to match existing behavior.

        Test: fast/dom/prototype-inheritance.html

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor): use the existing globalObject pointer for prototype lookup
        * bindings/js/JSDOMBinding.h:
        (WebCore::deprecatedGlobalObjectForPrototype): Make it easy to detect where the wrong global object is being used.
        (WebCore::deprecatedGetDOMStructure):
        * bindings/js/JSDOMGlobalObject.h: remove error-prone getDOMConstructor, require passing JSDOMGlobalObject*
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::webKitPoint): pass "this" for the global object.
        (WebCore::JSDOMWindow::webKitCSSMatrix): pass "this" for the global object.
        (WebCore::JSDOMWindow::xsltProcessor): pass "this" for the global object.
        (WebCore::JSDOMWindow::worker): pass "this" for the global object.
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor): use the existing globalObject pointer for prototype lookup
        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::JSMessageChannelConstructor): use the existing globalObject pointer for prototype lookup
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor): use the existing globalObject pointer for prototype lookup
        * bindings/js/JSWebKitCSSMatrixConstructor.cpp:
        (WebCore::JSWebKitCSSMatrixConstructor::JSWebKitCSSMatrixConstructor): add new globalObject parameter and use it
        * bindings/js/JSWebKitCSSMatrixConstructor.h:
        * bindings/js/JSWebKitPointConstructor.cpp:
        (WebCore::JSWebKitPointConstructor::JSWebKitPointConstructor): add new globalObject parameter and use it
        * bindings/js/JSWebKitPointConstructor.h:
        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::JSWorkerConstructor::JSWorkerConstructor): add new globalObject parameter and use it
        * bindings/js/JSWorkerConstructor.h:
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor): use the existing globalObject pointer for prototype lookup
         -- XMLHttpRequest constructor was also missing a length.  Added one.
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::JSXSLTProcessorConstructor::JSXSLTProcessorConstructor):
        * bindings/js/JSXSLTProcessorConstructor.h:
        * bindings/scripts/CodeGeneratorJS.pm:

2009-07-17  Dan Bernstein  <mitz@apple.com>

        Build fix

        * editing/htmlediting.cpp:
        (WebCore::visiblePositionBeforeNode):
        (WebCore::visiblePositionAfterNode):

2009-07-17  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix for symbol lookup error.

        Move AbstractWorker from SHARED_WORKERS to WORKERS as Worker derives from it now
        Changed in http://trac.webkit.org/changeset/46048

        * GNUmakefile.am:

2009-07-17  Ryosuke Niwa  <ryosuke.niwa@gmail.com>

        Reviewed by Eric Seidel.

        htmlediting.cpp needs more utility functions to fix the bug 26816
        https://bugs.webkit.org/show_bug.cgi?id=27038

        In order to fix the bug 26816, we need several utility functions be added to htmlediting.cpp

        No tests because functions haven't been used anywhere yet.

        * dom/Range.cpp:
        (WebCore::Range::create):
        (WebCore::Range::comparePoint): added const qualifier
        (WebCore::Range::compareNode): added const qualifier
        * dom/Range.h:
        * editing/htmlediting.cpp:
        (WebCore::unsplittableElementForPosition): find the enclosing unsplittable element (editing root & table cell)
        (WebCore::positionBeforeNode): added ASSERT(node)
        (WebCore::positionAfterNode): added ASSERT(node)
        (WebCore::visiblePositionBeforeNode):
        (WebCore::visiblePositionAfterNode):
        (WebCore::createRange): create a range object from two visible positions
        (WebCore::extendRangeToWrappingNodes): extend range to include nodes that starts and ends at the boundaries
        (WebCore::canMergeLists): typo
        (WebCore::indexForVisiblePosition): added const qualifier
        (WebCore::isVisiblyAdjacent): typo
        (WebCore::isNodeVisiblyContainedWithin): determine if a node is inside a range or within the visible boundaries of the range
        * editing/htmlediting.h:

2009-07-17  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25551
        Added support for the "required" attribute, the valueMissing flag
        to the ValidityState object and :required/:optional CSS pseudoclasses.
        Part of HTML5 sec. Forms specs.
        http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#attr-input-required

        Tests: fast/css/pseudo-required-optional-001.html
               fast/css/pseudo-required-optional-002.html
               fast/css/pseudo-required-optional-003.html
               fast/css/pseudo-required-optional-004.html
               fast/css/pseudo-required-optional-005.html
               fast/css/pseudo-required-optional-006.html
               fast/forms/ValidityState-valueMissing-001.html
               fast/forms/ValidityState-valueMissing-002.html
               fast/forms/ValidityState-valueMissing-003.html
               fast/forms/ValidityState-valueMissing-004.html
               fast/forms/ValidityState-valueMissing-005.html
               fast/forms/ValidityState-valueMissing-006.html
               fast/forms/ValidityState-valueMissing-007.html
               fast/forms/ValidityState-valueMissing-008.html
               fast/forms/ValidityState-valueMissing-009.html
               fast/forms/required-attribute-001.html
               fast/forms/required-attribute-002.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType): pseudoRequired/pseudoOptional
        * css/CSSSelector.h:
        (WebCore::CSSSelector::): ditto
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): ditto
        * dom/Element.h:
        (WebCore::Element::isOptionalFormControl): check for optional controls
        (WebCore::Element::isRequiredFormControl): check for required controls
        * html/HTMLAttributeNames.in: required attribute
        * html/HTMLButtonElement.h:
        (WebCore::HTMLButtonElement::isOptionalFormControl): ditto
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::required): requiredAttr getter
        (WebCore::HTMLFormControlElement::setRequired): requiredAttr setter
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::valueMissing): method definition
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::valueMissing): validation code
        (WebCore::HTMLInputElement::isRequiredFormControl): ditto
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isOptionalFormControl): ditto
        * html/HTMLInputElement.idl: required DOM attribute
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::isOptionalFormControl): ditto
        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::valueMissing): validation code
        (WebCore::HTMLTextAreaElement::isOptionalFormControl): ditto
        (WebCore::HTMLTextAreaElement::isRequiredFormControl): ditto
        * html/HTMLTextAreaElement.idl: required DOM attribute
        * html/ValidityState.cpp:
        * html/ValidityState.h:
        (WebCore::ValidityState::valueMissing): validation flag

2009-07-17  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=27390 CSS custom 
        cursor hotspots should work in quirks mode
        - and corresponding <rdar://problem/6554340>

        Enable hotspots in quirks mode.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):

        Update this manual test to reflect the fact that hotspots are now 
        expected to work in quirks mode.
        * manual-tests/css3-cursor-fallback-quirks.html:

2009-07-17  Peter Kasting  <pkasting@google.com>

        Reviewed by Steve Falkenburg.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Only add Cygwin to the path when it isn't already there.  This avoids
        causing problems for people who purposefully have non-Cygwin versions of
        executables like svn in front of the Cygwin ones in their paths.

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/WebCoreGenerated.vcproj:

2009-07-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=27384
        Random crashes in appcache/update-cache.html test

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponse): Reorder code to avoid using a handle
        after canceling it.

2009-07-17  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Need to refactor Worker to derive from AbstractWorker
        https://bugs.webkit.org/show_bug.cgi?id=26948

        Changed Worker to derive from AbstractWorker, which involved moving
        AbstractWorker files from being wrapped by ENABLE_SHARED_WORKERS to
        ENABLE_WORKERS.

        Removed obsolete functionality from the JS/V8 bindings that is now
        inherited from AbstractWorker.

        * WebCore.pro:
        Moved AbstractWorker files out of SHARED_WORKERS section and into WORKERS.
        * bindings/js/JSAbstractWorkerCustom.cpp:
        Changed to be wrapped by ENABLE(WORKERS), not ENABLE(SHARED_WORKERS).
        * bindings/js/JSWorkerCustom.cpp:
        Removed obsolete event listener code (now in base class)
        (WebCore::JSWorker::mark):
        No longer need to explicitly mark event listeners (handled by base class).
        * bindings/v8/V8Index.h:
        Moved AbstractWorker lines out of SHARED_WORKERS section and into WORKERS.
        * bindings/v8/custom/V8AbstractWorkerCustom.cpp:
        Changed to be wrapped by ENABLE(WORKERS), not ENABLE(SHARED_WORKERS).
        * bindings/v8/custom/V8CustomBinding.h:
        Moved AbstractWorker lines out of SHARED_WORKERS section and into WORKERS.
        * bindings/v8/custom/V8WorkerCustom.cpp:
        Removed obsolete event listener code that now lives in the base class.
        (WebCore::V8WorkerConstructor): Cleaned up legacy style nits.
        * workers/AbstractWorker.cpp:
        Changed to be wrapped by ENABLE(WORKERS), not ENABLE(SHARED_WORKERS).
        * workers/AbstractWorker.h:
        Changed to be wrapped by ENABLE(WORKERS), not ENABLE(SHARED_WORKERS).
        * workers/Worker.cpp:
        Removed event listener code (now in base class).
        (WebCore::Worker::Worker): Now derives from AbstractWorker.
        (WebCore::Worker::notifyFinished): Calls dispatchLoadErrorEvent on base class.
        * workers/Worker.h:
        Removed APIs that now live in the base class.
        * workers/Worker.idl:
        Now derives from AbstractWorker.
        Removed APIs that live in the base class, and added a GenerateToJS flag.

2009-07-17  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=27379
        Absolutely-positioned elements with a scrollbar wrap prematurely.  Make sure to include
        the vertical scrollbar width for overflow:scroll elements.

        Added fast/css/positioned-overflow-scroll.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcPrefWidths):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::calcPrefWidths):

2009-07-17  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitri Glazkov.

        Need a DOM_STORAGE guard in DerivedSroucesAllInOne.cpp
        https://bugs.webkit.org/show_bug.cgi?id=27375

        In https://bugs.webkit.org/show_bug.cgi?id=27360 I added Storage.cpp
        and StorageEvent.cpp.  Unfortunately, until later this afternoon,
        DOM_STORAGE is not turned on by default in Chromium, and so these two
        files are never generated.  This breaks the compile.

        There are no other instances of guards in the file, which puzzles me...
        but I think adding guards is the right way to go about this.

        * bindings/v8/DerivedSourcesAllInOne.cpp:  Added the guard.

2009-07-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=26496

        Let WebCore always enforce the connection-per-host limit itself.

        * loader/loader.cpp:
        (WebCore::Loader::Host::servePendingRequests):

2009-07-17  Chris Marrin  <cmarrin@apple.com>

        Reviewed by David Hyatt.

        Some transitions don't work correctly on Leopard
        https://bugs.webkit.org/show_bug.cgi?id=27356

        We only have code to do component animation using valueFunction.
        So on Leopard we always need to do matrix animation in hardware.
        This fix ensures that. 

        This is currently not testable because it appears only in the
        hardware animation and we can't yet do pixel tests while 
        hardware animating.

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::animateTransform):

2009-07-17  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Gustavo Noronha.

        [GTK+] Crash in screenAvailable due a null Widget*

        JSDOMWindow::open called screenAvailableRect(0). The other
        Screen methods can be called with a null widget as well, fix the
        crashing test by checking for null.

        In screenRect and screenAvailableRect it is not tried to use
        a default screen as the existing implementation didn't try either
        in case of not having a toplevel widget.

        LayoutTests/fast/frames/crash-removed-iframe.html caused a crash.

        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::getVisual): New method to get a visual or return zero.
        (WebCore::screenDepth): Use getVisual.
        (WebCore::screenDepthPerComponent): Use getVisual.
        (WebCore::screenIsMonochrome): Use screenDepth which will do the null checking
        (WebCore::screenRect): Check for !widget.
        (WebCore::screenAvailableRect): Check for !widget.

2009-07-17  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix the include path for the Symbian port
        https://bugs.webkit.org/show_bug.cgi?id=27358

        * WebCore.pro:

2009-07-17  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Make it possible to set the plugin directories from the DRT.
        Part of https://bugs.webkit.org/show_bug.cgi?id=27215

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::installedPlugins): Now optionally takes
        a populate argument, so we can avoid loading system plugins from the
        DRT and thus avoid their strerr errors that can make tests fail.
        (WebCore::PluginDatabase::clear): Make it possible to clear the
        database. Called from setPluginDirectories.
        * plugins/PluginDatabase.h:
        (WebCore::PluginDatabase::setPluginDirectories): Make public

2009-07-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        PluginViewMac: Stop the plugin when loading fails

        Also, prevent event propagation when in the stopped state

        * plugins/mac/PluginViewMac.cpp:

2009-07-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        PluginViewMac: Allow query and set of drawing and event models

        We now support querying and setting of the drawing and event model,
        but we still only support the CoreGraphics drawing model, and the
        Carbon event model.

        If unsupported drawing or event models are detected we show the
        missing-plugin icon.

        * plugins/PluginView.cpp:
        * plugins/PluginView.h:
        * plugins/mac/PluginViewMac.cpp:

2009-07-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Initialize two PluginView members using memset

        m_npWindow is used on all platforms, not just for XP_UNIX,
        so always initialize it. m_npCgContext on the other hand
        is only used for XP_MACOSX.

        * plugins/PluginView.cpp:

2009-07-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Add more debug logging in PluginView

        * plugins/PluginView.cpp: Add debug for setValue
        * plugins/gtk/PluginViewGtk.cpp: Add debug for getValue
        * plugins/mac/PluginViewMac.cpp: Add debug for getValue and more
        * plugins/qt/PluginViewQt.cpp: Add debug for getValue
        * plugins/win/PluginViewWin.cpp: Add debug for getValue

2009-07-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Holger Freyther.

        Use same license in PluginDebug.cpp as in the original PluginDebug.h

        * plugins/PluginDebug.cpp: Use license from PluginDebug.h

2009-07-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Add more debugging functionality for the WebCore NPAPI layer

        * GNUmakefile.am: Add PluginDebug.cpp
        * WebCore.gypi: Add PluginDebug.cpp
        * WebCore.pro: Add PluginDebug.cpp
        * WebCore.vcproj/WebCore.vcproj: Add PluginDebug.cpp
        * WebCoreSources.bkl: Add PluginDebug.cpp
        * plugins/PluginDebug.h: Move errorStrings to PluginDebug.cpp
        * plugins/PluginDebug.cpp: New file

2009-07-17  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by David Levin.

        Fix Chromium build with DOM_STORAGE enabled.
        https://bugs.webkit.org/show_bug.cgi?id=27360

        2 minor changes as noted below:

        * bindings/v8/DerivedSourcesAllInOne.cpp: Add the generated .cpp files.
        * storage/StorageAreaImpl.cpp:  #include "DOMWindow.h"

2009-07-16  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        Add --web-sockets flag and ENABLE_WEB_SOCKETS define.
        https://bugs.webkit.org/show_bug.cgi?id=27206
        
        Add ENABLE_WEB_SOCKETS

        * Configurations/FeatureDefines.xcconfig: add ENABLE_WEB_SOCKETS
        * GNUmakefile.am: add ENABLE_WEB_SOCKETS
        * WebCore.vcproj/WebCoreCommon.vsprops: add ENABLE_WEB_SOCKETS
        * WebCore.vcproj/build-generated-files.sh: add ENABLE_WEB_SOCKETS

2009-07-16  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Oliver Hunt.

        Added a third bunch of Haiku-specific files for WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=26952

        Adding five files, EventLoopHaiku.cpp, FileChooserHaiku.cpp,
        FileSystemHaiku.cpp, KeyboardCodes.h and MIMETypeRegistryHaiku.cpp

        * platform/haiku/EventLoopHaiku.cpp: Added.
        (WebCore::EventLoop::cycle):
        * platform/haiku/FileChooserHaiku.cpp: Added.
        (WebCore::FileChooser::FileChooser):
        (WebCore::FileChooser::basenameForWidth):
        * platform/haiku/FileSystemHaiku.cpp: Added.
        (WebCore::fileSystemRepresentation):
        (WebCore::homeDirectoryPath):
        (WebCore::openTemporaryFile):
        (WebCore::closeFile):
        (WebCore::writeToFile):
        (WebCore::unloadModule):
        (WebCore::listDirectory):
        * platform/haiku/KeyboardCodes.h: Added.
        * platform/haiku/MIMETypeRegistryHaiku.cpp: Added.
        (WebCore::):
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):

2009-07-16  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Oliver Hunt.

        Added a second bunch of Haiku-specific files for WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=26952

        Adding four files, ContextMenuHaiku.cpp, ContextMenuItemHaiku.cpp,
        DragDataHaiku.cpp and DragImageHaiku.cpp

        * platform/haiku/ContextMenuHaiku.cpp: Added.
        (WebCore::ContextMenuReceiver::ContextMenuReceiver):
        (WebCore::ContextMenuReceiver::HandleMessage):
        (WebCore::ContextMenuReceiver::Result):
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::itemCount):
        (WebCore::ContextMenu::insertItem):
        (WebCore::ContextMenu::platformDescription):
        (WebCore::ContextMenu::setPlatformDescription):
        * platform/haiku/ContextMenuItemHaiku.cpp: Added.
        (ContextMenuItem::ContextMenuItem):
        (ContextMenuItem::~ContextMenuItem):
        (ContextMenuItem::releasePlatformDescription):
        (ContextMenuItem::type):
        (ContextMenuItem::setType):
        (ContextMenuItem::action):
        (ContextMenuItem::setAction):
        (ContextMenuItem::title):
        (ContextMenuItem::setTitle):
        (ContextMenuItem::platformSubMenu):
        (ContextMenuItem::setSubMenu):
        (ContextMenuItem::setChecked):
        (ContextMenuItem::setEnabled):
        (ContextMenuItem::enabled):
        * platform/haiku/DragDataHaiku.cpp: Added.
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asColor):
        (WebCore::DragData::createClipboard):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
        * platform/haiku/DragImageHaiku.cpp: Added.
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):

2009-07-16  Stephen White  <senorblanco@chromium.org>

        Reviewed by Darin Fisher and Brett Wilson.

        Refactor Skia implementation of gradients and patterns.

        http://bugs.webkit.org/show_bug.cgi?id=26618

        The following layout tests were breaking on Chromium/Linux:

        LayoutTests/svg/custom/js-late-gradient-creation.svg (bad baseline PNG)
        LayoutTests/svg/custom/js-late-gradient-and-object.creation.svg
        LayoutTests/svg/custom/js-late-pattern-creation.svg (bad baseline PNG)
        LayoutTests/svg/custom/js-late-pattern-and-object-creation.svg

        I could've fixed these the easy way, by copying the same 5
        lines of code we use everywhere we need patterns or gradients, but
        I decided to fix it the hard way:  by refactoring the code so that
        PlatformContextSkia::setupPaintForFilling() and
        PlatformContextSkia::setupPaintForStroking() do the right thing,
        and also handle gradients and patterns.
        
        This required pushing the gradients and patterns set in 
        (generic) GraphicsContext::setFillPattern() and friends down into
        PlatformContextSkia.  For this, I followed the setPlatformXXX()
        pattern used elsewhere in GraphicsContext, and stubbed them out on
        the other platforms with #if !PLATFORM(SKIA).  This also required
        pushing changes to the gradientSpaceTransform from the Gradient into 
        GradientSkia.

        Since it's a Skia context, I decided to cache the values as
        SkShaders.  There were existing m_pattern and m_gradient SkShaders,
        but they were unused, and whose use was ambiguous, so I
        replaced them with one SkShader each for filling and stroking.

        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::setGradientSpaceTransform):
        (WebCore::Gradient::setPlatformGradientSpaceTransform):
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setStrokePattern):
        (WebCore::GraphicsContext::setFillPattern):
        (WebCore::GraphicsContext::setStrokeGradient):
        (WebCore::GraphicsContext::setFillGradient):
        (WebCore::GraphicsContext::setPlatformFillGradient):
        (WebCore::GraphicsContext::setPlatformFillPattern):
        (WebCore::GraphicsContext::setPlatformStrokeGradient):
        (WebCore::GraphicsContext::setPlatformStrokePattern):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/skia/GradientSkia.cpp:
        (WebCore::Gradient::setPlatformGradientSpaceTransform):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformFillGradient):
        (WebCore::GraphicsContext::setPlatformFillPattern):
        (WebCore::GraphicsContext::setPlatformStrokeGradient):
        (WebCore::GraphicsContext::setPlatformStrokePattern):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::State::State):
        (PlatformContextSkia::State::~State):
        (PlatformContextSkia::drawRect):
        (PlatformContextSkia::setupPaintCommon):
        (PlatformContextSkia::setupPaintForFilling):
        (PlatformContextSkia::setupPaintForStroking):
        (PlatformContextSkia::setFillColor):
        (PlatformContextSkia::setStrokeColor):
        (PlatformContextSkia::setStrokeShader):
        (PlatformContextSkia::setFillShader):
        * platform/graphics/skia/PlatformContextSkia.h:
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::skiaDrawText):
        (WebCore::paintSkiaText):
        * svg/graphics/SVGPaintServer.cpp:
        (WebCore::SVGPaintServer::teardown):

2009-07-16  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Oliver Hunt.

        Added Haiku-specific files for WebCore/platform/image-decoders/.
        https://bugs.webkit.org/show_bug.cgi?id=26949

        Adding a new file, ImageDecoderHaiku.cpp.

        * platform/image-decoders/haiku/ImageDecoderHaiku.cpp: Added.
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::zeroFill):
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::setSize):
        (WebCore::RGBA32Buffer::asNewNativeImage):
        (WebCore::RGBA32Buffer::hasAlpha):
        (WebCore::RGBA32Buffer::setHasAlpha):
        (WebCore::RGBA32Buffer::setStatus):
        (WebCore::RGBA32Buffer::operator=):
        (WebCore::RGBA32Buffer::width):
        (WebCore::RGBA32Buffer::height):

2009-07-16  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        Added Haiku-specific files for WebCore/page/.
        https://bugs.webkit.org/show_bug.cgi?id=26949

        Adding three new files, DragControllerHaiku.cpp, EventHandlerHaiku.cpp
        and FrameHaiku.cpp

        * page/haiku/DragControllerHaiku.cpp: Added.
        (WebCore::DragController::isCopyKeyDown):
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::maxDragImageSize):
        (WebCore::DragController::cleanupAfterSystemDrag):
        * page/haiku/EventHandlerHaiku.cpp: Added.
        (WebCore::isKeyboardOptionTab):
        (WebCore::EventHandler::invertSenseOfTabsToLinks):
        (WebCore::EventHandler::tabsToAllControls):
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::eventActivatedView):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::createDraggingClipboard):
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::accessKeyModifiers):
        * page/haiku/FrameHaiku.cpp: Added.
        (WebCore::Frame::dragImageForSelection):

2009-07-16  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        Added Haiku-specific files for WebCore/editing/.
        https://bugs.webkit.org/show_bug.cgi?id=26949

        Adding one new file, EditorHaiku.cpp

        * editing/haiku/EditorHaiku.cpp: Added.
        (WebCore::Editor::newGeneralClipboard):

2009-07-16  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        Added Haiku-specific files for WebCore/bindings/js/.
        https://bugs.webkit.org/show_bug.cgi?id=26949

        Adding a new file, ScriptControllerHaiku.cpp

        * bindings/js/ScriptControllerHaiku.cpp: Added.
        (WebCore::ScriptController::createScriptInstanceForWidget):

2009-07-16  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        Added Haiku-specific files for WebCore/platform/text/.
        https://bugs.webkit.org/show_bug.cgi?id=26949

        Adding two new files, StringHaiku.cpp
        and TextBreakIteratorInternalICUHaiku.cpp

        * platform/text/haiku/StringHaiku.cpp: Added.
        (WebCore::String::String):
        (WebCore::String::operator BString):
        * platform/text/haiku/TextBreakIteratorInternalICUHaiku.cpp: Added.
        (WebCore::currentTextBreakLocaleID):

2009-07-16  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Sends the basename of a selected file for non-multipart form submission.
        <https://bugs.webkit.org/show_bug.cgi?id=26505>

        Test: fast/forms/get-file-upload.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::appendFormData):

2009-07-16  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        [V8] Centralize hidden property names
        https://bugs.webkit.org/show_bug.cgi?id=27359

        No behavior change.  Just moving these names to a central location.
        I'll move the rest of our hidden property names as I sweep though the
        bindings.

        * WebCore.gypi:
        * bindings/v8/V8HiddenPropertyName.cpp: Added.
        (WebCore::V8HiddenPropertyName::objectPrototype):
        (WebCore::V8HiddenPropertyName::isolatedWorld):
        * bindings/v8/V8HiddenPropertyName.h: Added.
        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::V8IsolatedWorld):
        (WebCore::V8IsolatedWorld::getEntered):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::getHiddenObjectPrototype):
        (WebCore::V8Proxy::installHiddenObjectPrototype):

2009-07-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION (r41238) Repainted portion of a scaled image does not line up with full image
        https://bugs.webkit.org/show_bug.cgi?id=26747
        rdar://problem/7009243

        Test: fast/repaint/background-misaligned.html

        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled): Moved a variable definition closer to where
        it is used.
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw): In the subimage code path, compute a
        pixel-aligned source rect, because the subiamge is always pixel-aligned
        in source space, and adjust the destination rect to preserve the
        source -> destination mapping. Clip to the (original) destination rect
        to prevent bleeding out.

2009-07-16  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Adam Barth.

        Add a sessionStorageEnabled setting to the settings class.
        https://bugs.webkit.org/show_bug.cgi?id=27318

        Allow LocalStorage to be enabled without enabling SessionStorage at
        runtime.  There is a settings class setting for localStorage, but not
        for sessionStorage.  We want to be able to test one of these features
        without necessarily enabling the other.

        SessionStorage defaults to true so as to not change behavior and
        because there really aren't any security concerns around SessionStorage
        (unlike LocalsStorage).  The flag is needed in Chromium only because
        we want to enable the compile time flag in the default build, but don't
        want it on by default until it's been thoroughly tested.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):  Check the new flag
        (WebCore::DOMWindow::localStorage):  A bit of cleanup
        * page/Settings.cpp:
        (WebCore::Settings::Settings):  Default the flag to true
        (WebCore::Settings::setSessionStorageEnabled):  Add the new flag
        * page/Settings.h:
        (WebCore::Settings::sessionStorageEnabled):  Get the new flag

2009-07-16  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Revert 45987.  Tests did not pass on Windows.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::appendFormData):

2009-07-16  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Added SHARED_WORKER flag to Windows build files, as well as associated .ccp/.h files.
        Added missing V8 bindings to the AllInOne file

        https://bugs.webkit.org/show_bug.cgi?id=27321

        * WebCore.vcproj/WebCore.vcproj:
        Added missing files to build.
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        Added missing V8 bindings (V8AbstractWorker.cpp and V8SharedWorker.cpp)
        * DerivedSources.cpp
        Added missing JS bindings (JSAbstractWorker.cpp and JSSharedWorker.cpp)

2009-07-16  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by David Levin.

        Add a getter in MessagePortChannel for the PlatformMessagePortChannel.

        https://bugs.webkit.org/show_bug.cgi?id=27337

        * dom/MessagePortChannel.h:
        (WebCore::MessagePortChannel::channel):

2009-07-16  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Darin Adler.

        Fix tooltip does not get its directionality from its element's directionality.
        https://bugs.webkit.org/show_bug.cgi?id=24187

        Per mitz's suggestion in comment #6, while getting the plain-text 
        title, we also get the directionality of the title. How to handle 
        the directionality is up to clients. Clients could ignore it, 
        or use attribute or unicode control characters to display the title
        as what they want.

        WARNING: NO TEST CASES ADDED OR CHANGED

        * WebCore.base.exp: Replace 2 names due to signature change.
        * loader/EmptyClients.h: 
        (WebCore::EmptyChromeClient::setToolTip): Add direction as 2nd parameter.
        * page/Chrome.cpp:
        (WebCore::Chrome::setToolTip): Calculate tooltip direction as well and pass it to client to take care when display tooltip.
        * page/ChromeClient.h: Add direction as 2nd parameter to pure virtual function setToolTip().
        * page/chromium/ChromeClientChromium.h:
        (WebCore::ChromeClientChromium::setToolTip): Add setToolTip() 
        temprarily to make chromium compile after pick up this webkit patch.
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::spellingToolTip): Besides getting the 
        spelling tooltip, get its directionality as well.
        (WebCore::HitTestResult::title): Besides getting the title, 
        get its directionality as well.
        * rendering/HitTestResult.h: Add 2 more methods.

2009-07-16  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Oliver Hunt.

        [CAIRO] pattern of a canvas-element changes after modifications on canvas-element
        https://bugs.webkit.org/show_bug.cgi?id=20578

        Copy pixel image in ImageBuffer::image() just like CG and Skia glue.

        Test: fast/canvas/canvas-pattern-modify.html

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (copySurface):
        (WebCore::ImageBuffer::image):

2009-07-16  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=27353
        Images mispositioned because of bug in percentage-based relative positioning.

        Added fast/css/nested-floating-relative-position-percentages.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::relativePositionOffsetX):

2009-07-16  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Sends the basename of a selected file for non-multipart form submission.
        <https://bugs.webkit.org/show_bug.cgi?id=26505>

        Test: fast/forms/get-file-upload.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::appendFormData):

2009-07-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Video size sometimes jumps just after the video starts loading
        https://bugs.webkit.org/show_bug.cgi?id=27352

        Ensure that the media player is at or after the 'HaveMetadata' state so that
        the instrinsic size is known before we create the layer for video. This avoids
        a flash caused by computing the video rect using the default intrinsic size, and then
        re-computing it when that size changes.
        
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::isReadyForRendering):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::supportsAcceleratedRendering):

2009-07-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Antti Koivisto.
        Patch by Brady Eidson and Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=26496
        <rdar://problem/7065391> Microsoft Outlook Web Access fails because XHR stream connection blocks script loading/revalidation

        After refreshing a page and when all CachedResources on that page are in validation mode, they got an exemption
        from the connection-per-host limit.  Removing that exemption makes the test case load smoothly after reloads.

        * loader/loader.cpp:
        (WebCore::Loader::Host::servePendingRequests): Remove the resourceIsCacheValidator exemption to the connection-per-host limit.

2009-07-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] V8IsolatedWorld::evaluate needs to call didCreateIsolatedScriptContext
        https://bugs.webkit.org/show_bug.cgi?id=27335

        evaluateInNewContext makes this delegate call.  evaluateInNewWorld
        needs to make the same call.  This does not appear to be testable with
        our current technology.

        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::evaluate):

2009-07-15  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Fix a typo: application/atom=xml -> application/atom+xml.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):

2009-07-16  Dean McNamee  <deanm@chromium.org>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=27292
        Improve handling of <canvas> path operations on an empty path.
        Implement Skia's Path::hasCurrentPoint().

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::lineTo):
        (WebCore::CanvasRenderingContext2D::quadraticCurveTo):
        (WebCore::CanvasRenderingContext2D::bezierCurveTo):
        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::hasCurrentPoint):

2009-07-15  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        Setting white-space and word-wrap via CSS in textarea doesn't override the wrap attribute
        https://bugs.webkit.org/show_bug.cgi?id=26254

        Make it so that setting white-space and word-wrap via CSS
        overrides the wrap attribute.

        This involves having the shadow div in the textarea inherit
        the CSS from its parent instead of hard-coding it in
        RenderTextControlMultiline.
        
        Committer note: Earlier I reverted this change because I did it incorrectly
        by leaving out css/html.css. In the patch, the filename was the old name
        css/html4.css and that led to my error.

        * css/html.css:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle):

2009-07-15  James Hawkins  <jhawkins@google.com>

        Reviewed by Adam Barth.

        [V8] Remove a local variable that is shadowing a function parameter.
        https://bugs.webkit.org/show_bug.cgi?id=27309

        No test required as this modification does not change the current behavior.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):

2009-07-15  Adam Langley  <agl@google.com>

        No review: reverting previous change.

        Revert r45959:

        2009-07-15  Dumitru Daniliuc  <dumi@chromium.org>
        Reviewed by Dimitri Glazkov.

        Adding the Win SQLite VFS implementation for Chromium.

        https://bugs.webkit.org/show_bug.cgi?id=26940


        The Chromium side of this patch was landed in 20839, but broke the build. It
        was reverted in r20840. Thus, I'm reverting this side of the patch too.

        * WebCore.gypi:
        * platform/chromium/ChromiumBridge.h:
        * platform/sql/chromium/SQLiteFileSystemChromium.cpp: Removed.
        * platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp: Removed.

2009-07-15  David Levin  <levin@chromium.org>

        Layout test fix, reverting previous change.

        Reverting r45962 as it caused several layout test failures.

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle):

2009-06-08  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        Setting white-space and word-wrap via CSS in textarea doesn't override the wrap attribute
        https://bugs.webkit.org/show_bug.cgi?id=26254

        Make it so that setting white-space and word-wrap via CSS
        overrides the wrap attribute.

        This involves having the shadow div in the textarea inherit
        the CSS from its parent instead of hard-coding it in
        RenderTextControlMultiline.

        * css/html4.css:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle):

2009-07-15  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Adding the Win SQLite VFS implementation for Chromium.

        https://bugs.webkit.org/show_bug.cgi?id=26940

        * platform/chromium/ChromiumBridge.h:
        * platform/sql/chromium: Added.
        * platform/sql/chromium/SQLiteFileSystemChromium.cpp: Added.
        * platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp: Added.

2009-07-15  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Bug 25151 - workers that fail to load scripts not firing error event.
        https://bugs.webkit.org/show_bug.cgi?id=25151

        This fixes the problem that an error event is not fired when the worker
        script fails to load. Some reasons this may occur are an invalid URL for
        the worker script or a cross-origin redirect.

        We also moves the code to complete the URL and check its origin from
        Worker constructor to WorkerScriptLoader loading functions in order to
        move the exception throwing logic out of the scope of Worker constructor.
        Due to this change, we also remove the output ExceptionCode parameter
        in the worker constructor. Corresponding JS/V8 binding codes have been
        updated to reflect this change.

        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::constructWorker):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        (WebCore::Worker::notifyFinished):
        * workers/Worker.h:
        (WebCore::Worker::create):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::importScripts):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::toCrossOriginRedirectPolicy):
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        (WebCore::notifyLoadErrorTask):
        (WebCore::WorkerScriptLoader::createResourceRequest):
        (WebCore::WorkerScriptLoader::didFail):
        (WebCore::WorkerScriptLoader::didFailRedirectCheck):
        (WebCore::WorkerScriptLoader::didReceiveAuthenticationCancellation):
        (WebCore::WorkerScriptLoader::notifyError):
        * workers/WorkerScriptLoader.h:
        (WebCore::):
        (WebCore::WorkerScriptLoader::url):

2009-07-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        text-shadow is not drawn for text with transparent colour
        https://bugs.webkit.org/show_bug.cgi?id=21374

        Test: fast/text/shadow-translucent-fill.html

        * rendering/InlineTextBox.cpp:
        (WebCore::paintTextWithShadows): If the text fill color is not opaque,
        paint all shadows separately from the text, by casting them from
        clipped-out opaque text.

2009-07-15  Adam Treat  <adam.treat@torchmobile.com>

        Fix the Qt build.

        * html/HTMLAreaElement.cpp:

2009-07-15  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Cleanup DOM Storage dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=27180

        DOM Storage had several unnecessary (and probably unintended)
        dependencies.  This patch replaces many includes of header files with
        forward declaration of classes, making some destructors explicit, and
        taking some factories out of the header files.

        This will allow things like StorageAreaSync to take a StorageAreaImpl*
        (as it should) rather than a StorageArea* which previously weren't
        possible because the dependencies were such a tangled mess.

        * storage/LocalStorageTask.cpp:
        (WebCore::LocalStorageTask::~LocalStorageTask):
        * storage/LocalStorageTask.h:
        * storage/Storage.cpp:
        (WebCore::Storage::~Storage):
        * storage/Storage.h:
        * storage/StorageArea.cpp:
        * storage/StorageArea.h:
        * storage/StorageAreaImpl.cpp:
        * storage/StorageAreaImpl.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::~StorageAreaSync):
        * storage/StorageAreaSync.h:
        * storage/StorageEvent.cpp:
        (WebCore::StorageEvent::create):
        (WebCore::StorageEvent::StorageEvent):
        * storage/StorageEvent.h:
        * storage/StorageNamespace.h:
        * storage/StorageNamespaceImpl.cpp:
        * storage/StorageNamespaceImpl.h:
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::~StorageSyncManager):
        * storage/StorageSyncManager.h:

2009-07-15  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Incorrect animation when trying to duplicate effect of transform-origin
        https://bugs.webkit.org/show_bug.cgi?id=27310

        The bug is that matrix animation is being used when animating
        a list of transform functions that match in the from and to states.
        This sometimes works. But because of the way CA does matrix animation
        function lists like the one shown in the testcase animate incorrectly.

        This fixes the bug by always doing component animation
        as long as the function lists match. This allows CA
        to animate the components and then recompose the result
        into the correct matrix.

        Test: animations/transform-origin-vs-functions.html

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::animateTransform):

2009-07-15  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by David Levin.

        Upstream the V8NPObject and NPV8Object build changes for WebCore.gypi.

        Add upstreamed V8 bindings files into WebCore.gypi so they can be seen
        downstream
        https://bugs.webkit.org/show_bug.cgi?id=27274

        Changes the build file for chromium.  Test built the chromium tree
        to verify.

        * WebCore.gypi:

2009-07-15  Mark Rowe  <mrowe@apple.com>

        I like it when the code compiles.

        * WebCore.base.exp:

2009-07-15  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Renamed parseURL to deprecatedParseURL.

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::setValue): Renamed.
        * bindings/js/JSElementCustom.cpp:
        (WebCore::allowSettingSrcToJavascriptURL): Renamed.
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        (WebCore::allowSettingJavascriptURL): Renamed.
        * bindings/js/JSHTMLIFrameElementCustom.cpp:
        (WebCore::JSHTMLIFrameElement::setSrc): Renamed.
        * bindings/objc/DOM.mm:
        (-[DOMElement _getURLAttribute:]): Renamed.
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLDocument _createDocumentFragmentWithMarkupString:baseURLString:]): Renamed.
        * bindings/v8/custom/V8CustomBinding.cpp:
        (WebCore::allowSettingFrameSrcToJavascriptUrl): Renamed.
        * css/CSSHelper.cpp:
        (WebCore::deprecatedParseURL): Renamed.
        * css/CSSHelper.h: Renamed and updated comment.
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler): Renamed.
        (WebCore::HTMLAnchorElement::parseMappedAttribute): Renamed.
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::parseMappedAttribute): Renamed.
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute): Renamed.
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseMappedAttribute): Renamed.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::parseMappedAttribute): Renamed.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseMappedAttribute): Renamed.
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute): Renamed.
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::sourceURI): Renamed.
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseMappedAttribute): Renamed.
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute): Renamed.
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseMappedAttribute): Renamed.
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::parseMappedAttribute): Renamed.
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag): Renamed.
        * html/PreloadScanner.cpp:
        (WebCore::PreloadScanner::processAttribute): Renamed.
        (WebCore::PreloadScanner::emitCSSRule): Renamed.
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::declareAndWriteDragImage): Renamed.
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeImage): Renamed.
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::declareAndWriteDragImage): Renamed.
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::declareAndWriteDragImage): Renamed.
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteImageURL): Renamed.
        (WebCore::HitTestResult::absoluteMediaURL): Renamed.
        (WebCore::HitTestResult::absoluteLinkURL): Renamed.
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler): Renamed.
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::sourceURI): Renamed.
        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::defaultEventHandler): Renamed.
        * wml/WMLImageLoader.cpp:
        (WebCore::WMLImageLoader::sourceURI): Renamed.

2009-07-15  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        CSSHelper.h's parseURL is a function that no one should ever call
        Part 1: Eliminate callers in the CSS parser.
        https://bugs.webkit.org/show_bug.cgi?id=26599

        Test: fast/css/uri-token-parsing.html

        * css/CSSHelper.h: Added a comment explaining why nobody should ever call this
        function. A FIXME suggests a next step, which would be to rename it deprecatedParseURL.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Removed unneeded call to parseURL;
        CSSParser::text already takes care of parsing the URI token syntax, and the
        parseURL function does no good.
        (WebCore::CSSParser::parseContent): Ditto.
        (WebCore::CSSParser::parseFillImage): Ditto.
        (WebCore::CSSParser::parseFontFaceSrc): Ditto.
        (WebCore::CSSParser::parseBorderImage): Ditto.
        (WebCore::isCSSWhitespace): Added. Helper function that makes the text function
        easier to read.
        (WebCore::CSSParser::text): Tweak logic so that leading and trailing whitespace
        are both trimmed before removing the quote marks. Changed to use the
        isCSSWhitespace, isASCIIHexDigit, and toASCIIHexValue functions for clarity.

        * css/CSSParser.h: Removed stray "public:" in this header.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::substring): Optimized the case where the substring covers
        the entire string, so we just share the StringImpl instead of making a new one.
        This case came up in earlier versions of the CSS parser changes above.
        (WebCore::StringImpl::substringCopy): Streamlined the logic here and made it
        not call substring any more. Before, this was relying on the substring function
        always making a copy of any non-empty substring.

2009-07-15  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        After double-clicking a word, using Shift-arrow to select behaves unpredictably
        https://bugs.webkit.org/show_bug.cgi?id=27177
        rdar://problem/7034324

        Test: editing/selection/extend-selection-after-double-click.html

        The bug was due to the m_lastChangeWasHorizontalExtension flag, which was not
        being cleared in many cases where it should have been.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection): Set m_lastChangeWasHorizontalExtension
        to false. This catches all sorts of cases that don't flow through the modify function.
        Before, the flag would reflect the last call to the modify function, which was not
        necessarily the last selection change.
        (WebCore::SelectionController::willBeModified): Rearrange function for clarity.
        Remove code that sets m_lastChangeWasHorizontalExtension; that is now handled elsewhere. 
        (WebCore::SelectionController::modify): Call setLastChangeWasHorizontalExtension after
        setSelection when setting up a trial selection controller, since setSelection now
        clears that flag. Also changed both trial selection controller cases to set the flag,
        although it's not strictly necessary in both cases. Added code to set
        m_lastChangeWasHorizontalExtension when extending the selection, which used to be
        handled in willBeModified. Now we need to do it after the selection change.

2009-07-15  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitri Glazkov.

        Need to update DOM Storage files in GYPI file.
        https://bugs.webkit.org/show_bug.cgi?id=27317

        Need to update DOM Storage files in the GYPI file.  They're pretty out
        of date and we're on the path towards enabling them for everyone!

        * WebCore.gypi:

2009-07-15  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26794
        Make Yacc-generated parsers to use fastMalloc/fastFree.
        
        Define YYMALLOC and YYFREE to fastMalloc and fastFree
        respectively.

        * css/CSSGrammar.y:
        * xml/XPathGrammar.y:

2009-07-15  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=27193
        Don't run in to anonymous blocks.  No other browsers do this, and our implementation of run-in
        is effectively broken as a result.

        No new tests. Changed fast/runin/001.html and fast/runin/generated.html to match new behavior.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::handleRunInChild):

2009-07-15  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Darin Adler.

        Test: fast/js/instanceof-operator.html

        Fix for: Bug 25205 -  XMLHttpRequest instance is not an instanceof XMLHttpRequest
        https://bugs.webkit.org/show_bug.cgi?id=25205

        In addition to for XMLHttpRequest, this also fixes for:
        - Audio
        - Image
        - MessageChannel
        - Option
        - WebKitCSSMatrix
        - WebKitPoint
        - Worker
        - XSLTProcessor

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSAudioConstructor.h:
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMConstructorObject::createStructure):
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSImageConstructor.h:
        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::JSMessageChannelConstructor):
        * bindings/js/JSMessageChannelConstructor.h:
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        * bindings/js/JSOptionConstructor.h:
        * bindings/js/JSWebKitCSSMatrixConstructor.cpp:
        (WebCore::JSWebKitCSSMatrixConstructor::JSWebKitCSSMatrixConstructor):
        * bindings/js/JSWebKitCSSMatrixConstructor.h:
        * bindings/js/JSWebKitPointConstructor.cpp:
        (WebCore::JSWebKitPointConstructor::JSWebKitPointConstructor):
        * bindings/js/JSWebKitPointConstructor.h:
        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::JSWorkerConstructor::JSWorkerConstructor):
        * bindings/js/JSWorkerConstructor.h:
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor):
        * bindings/js/JSXMLHttpRequestConstructor.h:
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::JSXSLTProcessorConstructor::JSXSLTProcessorConstructor):
        * bindings/js/JSXSLTProcessorConstructor.h:

2009-07-15  Kai Br�ning  <kai@granus.net>

        Reviewed by Dave Hyatt.

        CSS21 attribute selectors not dynamic for xml.
        https://bugs.webkit.org/show_bug.cgi?id=25072

        Moved the relevant test in StyledElement::attributeChanged()
        to a new function Element::recalcStyleIfNeededAfterAttributeChanged()
        so it can be called from both StyledElement::attributeChanged()
        and Element::attributeChanged().
        Refactored Element::attributeChanged() into
        Element::updateAfterAttributeChanged() and
        Element::recalcStyleIfNeededAfterAttributeChanged(), which are called
        separately from StyledElement::attributeChanged().

        Test: fast/css/attribute-selector-dynamic.xml

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore::Element::updateAfterAttributeChanged):
        (WebCore::Element::recalcStyleIfNeededAfterAttributeChanged):
        * dom/Element.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):

2009-07-15  Alpha Lam  <hclam@chromium.org>

        Reviewed by David Levin.

        [V8] Layout test failures for drawImage in Canvas
        https://bugs.webkit.org/show_bug.cgi?id=27311

        Fixing several canvas layout tests failures due to a
        missing return statement in CanvasRenderingContext2DDrawImage() which
        was accidentally removed in r45929.

        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:

2009-07-15  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26969

        If the httpMethod() of the request passed to SubresourceLoader::create is not
        supported by the client we must expect to call didFail() while m_loader is still null.

        * loader/DocumentThreadableLoader.cpp:
        (DocumentThreadableLoader::didFail):Changed.

2009-07-15  Mark Rowe  <mrowe@apple.com>

        Fix the Mac build.

        * WebCore.base.exp:
        * css/MediaQueryEvaluator.cpp:
        * rendering/SVGRenderTreeAsText.cpp:
        * rendering/style/SVGRenderStyle.cpp:
        * svg/graphics/SVGPaintServer.cpp:

2009-07-07  Alpha Lam  <hclam@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] drawImage method of HTMLCanvasElement to accept HTMLVideoElement as argument
        https://bugs.webkit.org/show_bug.cgi?id=27170

        Changed CanvasRenderingContext2DDrawImage() to accept HTMLVideoElement
        as a parameter of drawImage() for HTMLCanvasElement.

        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:

2009-07-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix isolated world constructors
        https://bugs.webkit.org/show_bug.cgi?id=27287

        Don't enter V8Proxy::m_context before creating DOM constructors.
        Instead, use getWrapperContext to get the right context.

        After this patch, all my tests pass.  I'll enable the feature
        downstream and land the tests.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getConstructor):
        (WebCore::V8DOMWrapper::lookupDOMWrapper):
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::evaluate):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::createWrapperFromCache):
        (WebCore::V8Proxy::isContextInitialized):
        (WebCore::V8Proxy::disposeContextHandles):
        (WebCore::V8Proxy::installDOMWindow):
        (WebCore::V8Proxy::initContextIfNeeded):
        (WebCore::V8Proxy::getHiddenObjectPrototype):
        (WebCore::V8Proxy::installHiddenObjectPrototype):
        * bindings/v8/V8Proxy.h:

2009-07-15  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Darin Adler.

        useless null-check statement in visible_units.cpp@logicalStartOfLine
        https://bugs.webkit.org/show_bug.cgi?id=27154

        Simple fix.

        * editing/visible_units.cpp:
        (WebCore::logicalStartOfLine): Doubled honorEditableBoundaryAtOrAfter() call removed.

2009-07-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=27304
        WebKit should provide usage and eligibility information about the page cache.

        * WebCore.base.exp:

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::childFrameCount):
        * history/CachedFrame.h:

        * history/PageCache.cpp:
        (WebCore::PageCache::frameCount):
        (WebCore::PageCache::autoreleasedPageCount):
        * history/PageCache.h:
        (WebCore::PageCache::pageCount):

2009-07-15  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Levin.

        Chromium's canvas forgets its context after fillText again
        https://bugs.webkit.org/show_bug.cgi?id=27293

        No new tests because the test for this was already added in
        https://bugs.webkit.org/show_bug.cgi?id=26436

        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::compositeTextComposite):

2009-07-14  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=27283

        Implement the new 'rem' unit from CSS3.

        Added some rem-* tests in fast/css.

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::validUnit):
        (WebCore::unitFromString):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::lex):
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValue::createCSSValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLengthInt):
        (WebCore::CSSPrimitiveValue::computeLengthIntForLength):
        (WebCore::CSSPrimitiveValue::computeLengthShort):
        (WebCore::CSSPrimitiveValue::computeLengthFloat):
        (WebCore::CSSPrimitiveValue::computeLengthDouble):
        (WebCore::CSSPrimitiveValue::cssText):
        (WebCore::CSSPrimitiveValue::parserValue):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::):
        (WebCore::CSSPrimitiveValue::isUnitTypeLength):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::initForStyleResolve):
        (WebCore::convertToLength):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapFillSize):
        (WebCore::CSSStyleSelector::mapFillXPosition):
        (WebCore::CSSStyleSelector::mapFillYPosition):
        (WebCore::CSSStyleSelector::createTransformOperations):
        * css/CSSStyleSelector.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::device_heightMediaFeatureEval):
        (WebCore::device_widthMediaFeatureEval):
        (WebCore::heightMediaFeatureEval):
        (WebCore::widthMediaFeatureEval):
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue):
        * css/tokenizer.flex:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::usesRemUnits):
        (WebCore::Document::setUsesRemUnits):
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::cssPrimitiveToLength):
        * svg/graphics/SVGPaintServer.cpp:
        (WebCore::applyStrokeStyleToContext):
        (WebCore::dashArrayFromRenderingStyle):
        * svg/graphics/SVGPaintServer.h:

2009-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        Remove extraneous qualifier, accidentally added in http://trac.webkit.org/changeset/45884.

        * bindings/v8/V8DOMWrapper.h: Removed extraneous qualifier.

2009-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        [V8] Update bindings for ValiditeState patch.
        https://bugs.webkit.org/show_bug.cgi?id=19562

        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:

2009-07-15  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Cleanup - Remove obsolete code from the make system
        https://bugs.webkit.org/show_bug.cgi?id=27299

        * WebCore.pro:

2009-07-15  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Fix the build without media elements.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteMediaURL): Add #if ENABLE(VIDEO)
        markers around the body of the method.

2009-07-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Move storeLastActivePanel out of the
        ifdef ENABLE_JAVASCRIPT_DEBUGGER section in IDL;
        Add default panel for the first opening of the
        WebInspector.

        https://bugs.webkit.org/show_bug.cgi?id=27263

        * inspector/InspectorController.cpp:
        (InspectorController::setWindowVisible):
        * inspector/InspectorController.idl:

2009-07-14  Darin Adler  <darin@apple.com>

        Try to fix Windows build.

        * bindings/scripts/CodeGeneratorCOM.pm: Add Reflect and ReflectURL support.

2009-07-14  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Oliver Hunt.

        HTMLMediaElement::supportsFullscreen() should return false
        https://bugs.webkit.org/show_bug.cgi?id=27284

        (Reverting a part of 45875)

        HTMLVideoElement::supportsFullscreen() will properly do the
        job, and check if the backend supports fullscreen.

        HTMLVideoElement is the only subclass to support fullscreen
        (conditionnaly). HTMLAudioElement fullscreen is not supported
        and is a different kind of fullscreen, if it comes to be wanted.

        No test can be done currently given that none of the media
        backends support fullscreen.

        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::supportsFullscreen):

2009-07-14  Darin Adler  <darin@apple.com>

        Reviewed by Dimitri Glazkov.

        Next step in making DOM attribute getter/setters consistently use AtomicString
        https://bugs.webkit.org/show_bug.cgi?id=25425

        This covers eight DOM classes, and for each one of the classes:

        - Changes the IDL to use the Reflect syntax for all simple cases.
        - Removes unused functions in the classes, mainly newly unused ones that were
          used for reflection before.
        - Removes unneeded explicitly defined destructors.
        - Explicitly declares destructors as virtual.
        - Removes unneeded includes.
        - Makes members protected or private rather than public where possible.
        - Renames "doc" to "document".
        - Tweaks formatting to match our latest style in a few places.
        - Improves some FIXME comments.

        Over time we'll want to do this for all HTML DOM classes.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::HTMLAnchorElement):
        * html/HTMLAnchorElement.h:
        (WebCore::HTMLAnchorElement::endTagRequirement):
        (WebCore::HTMLAnchorElement::tagPriority):
        * html/HTMLAnchorElement.idl:
        * html/HTMLAppletElement.cpp:
        * html/HTMLAppletElement.h:
        * html/HTMLAppletElement.idl:
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::parseMappedAttribute):
        * html/HTMLAreaElement.h:
        (WebCore::HTMLAreaElement::endTagRequirement):
        (WebCore::HTMLAreaElement::tagPriority):
        * html/HTMLAreaElement.idl:
        * html/HTMLBRElement.cpp:
        (WebCore::HTMLBRElement::parseMappedAttribute):
        * html/HTMLBRElement.h:
        * html/HTMLBRElement.idl:
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::HTMLBaseElement):
        (WebCore::HTMLBaseElement::removedFromDocument):
        (WebCore::HTMLBaseElement::process):
        * html/HTMLBaseElement.h:
        * html/HTMLBaseElement.idl:
        * html/HTMLBaseFontElement.cpp:
        (WebCore::HTMLBaseFontElement::HTMLBaseFontElement):
        * html/HTMLBaseFontElement.h:
        (WebCore::HTMLBaseFontElement::endTagRequirement):
        (WebCore::HTMLBaseFontElement::tagPriority):
        * html/HTMLBaseFontElement.idl:
        * html/HTMLBlockquoteElement.cpp:
        (WebCore::HTMLBlockquoteElement::HTMLBlockquoteElement):
        * html/HTMLBlockquoteElement.h:
        (WebCore::HTMLBlockquoteElement::tagPriority):
        * html/HTMLBlockquoteElement.idl:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::HTMLBodyElement):
        (WebCore::HTMLBodyElement::addSubresourceAttributeURLs):
        * html/HTMLBodyElement.h:
        (WebCore::HTMLBodyElement::endTagRequirement):
        (WebCore::HTMLBodyElement::tagPriority):
        * html/HTMLBodyElement.idl:
        Made changes as described above.

        * loader/FrameLoader.cpp: Removed unneeded include of HTMLAnchorElement.h.

2009-07-14  Steve Falkenburg  <sfalken@apple.com>

        Reorganize JavaScriptCore headers into:
        API: include/JavaScriptCore/
        Private: include/private/JavaScriptCore/

        Reviewed by Darin Adler.

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/build-generated-files.sh:

2009-07-14  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Change all Noncopyable inheriting visibility to public.
        https://bugs.webkit.org/show_bug.cgi?id=27225

        Change all Noncopyable inheriting visibility to public because
        it is needed to the custom allocation framework (bug #20422).

        * bindings/js/GCController.h:
        * bindings/js/WorkerScriptController.h:
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::):
        * bridge/runtime.h:
        * css/CSSSelector.h:
        * css/CSSSelectorList.h:
        * css/CSSStyleSelector.h:
        * dom/ClassNames.h:
        * dom/MessagePortChannel.h:
        * dom/XMLTokenizerLibxml2.cpp:
        * dom/XMLTokenizerScope.h:
        * editing/ReplaceSelectionCommand.cpp:
        * editing/SelectionController.h:
        * editing/TextIterator.cpp:
        * history/PageCache.h:
        * html/CanvasRenderingContext2D.h:
        * html/HTMLParser.h:
        * html/HTMLParserQuirks.h:
        * html/PreloadScanner.h:
        * loader/Cache.h:
        * loader/CrossOriginPreflightResultCache.h:
        * loader/FrameLoader.h:
        * loader/ProgressTracker.h:
        * loader/ThreadableLoader.h:
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/archive/ArchiveResourceCollection.h:
        * loader/icon/IconDatabase.h:
        * loader/icon/IconLoader.h:
        * loader/icon/PageURLRecord.h:
        * loader/loader.h:
        * page/ContextMenuController.h:
        * page/EventHandler.h:
        * page/FrameTree.h:
        * page/Page.h:
        * page/PageGroup.h:
        * page/PageGroupLoadDeferrer.h:
        * page/mac/EventHandlerMac.mm:
        * platform/AutodrainedPool.h:
        * platform/ContextMenu.h:
        * platform/EventLoop.h:
        * platform/HostWindow.h:
        * platform/Pasteboard.h:
        * platform/PurgeableBuffer.h:
        * platform/RunLoopTimer.h:
        * platform/ThreadGlobalData.h:
        * platform/ThreadTimers.h:
        * platform/Timer.h:
        * platform/TreeShared.h:
        * platform/graphics/FontData.h:
        * platform/graphics/GlyphWidthMap.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/skia/GraphicsContextPlatformPrivate.h:
        * platform/graphics/skia/PlatformContextSkia.h:
        * platform/graphics/win/QTMovieWin.cpp:
        * platform/mac/LocalCurrentGraphicsContext.h:
        * platform/network/FormDataBuilder.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/text/StringBuffer.h:
        * platform/text/TextCodec.h:
        * platform/win/WindowMessageBroadcaster.h:
        * rendering/CounterNode.h:
        * rendering/LayoutState.h:
        * rendering/RenderFrameSet.h:
        * rendering/RenderView.h:
        * rendering/TransformState.h:
        * svg/SVGAnimatedProperty.h:
        * svg/SynchronizableTypeWrapper.h:
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerRunLoop.cpp:
        * xml/XPathExpressionNode.h:
        * xml/XPathParser.h:
        * xml/XPathPredicate.h:
        * xml/XPathStep.h:

2009-07-14  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        Fails to save document state when navigating away from a page with a
        reference fragment.
        https://bugs.webkit.org/show_bug.cgi?id=27281

        Test: fast/history/saves-state-after-fragment-nav.html

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::isCurrentDocument): Use equalIgnoringRef
        to compare URLs.

2009-07-14  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Sam Weinig.

        Inspector: Remove Unintended Global Variables
        https://bugs.webkit.org/show_bug.cgi?id=27203

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype._ensureCommandLineAPIInstalled):
        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype.dataGridForDOMStorage):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        * inspector/front-end/inspector.js:
        (WebInspector.animateStyle):

2009-07-14  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=19562
        Added build stuff and stub for the ValidityState class, part of HTML5
        section Forms:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#validitystate

        Test: fast/forms/ValidityState-001.html

        * DerivedSources.cpp: Inclusion of ValidityState files
        * DerivedSources.make: ditto
        * GNUmakefile.am: ditto
        * WebCore.gypi: ditto
        * WebCore.pro: ditto
        * WebCore.vcproj/WebCore.vcproj: ditto
        * WebCore.xcodeproj/project.pbxproj: ditto
        * WebCoreSources.bkl: ditto
        * html/HTMLButtonElement.idl: validity attribute
        * html/HTMLFieldSetElement.idl: ditto
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::validity): ValidityState getter
        * html/HTMLFormControlElement.h: ditto
        * html/HTMLInputElement.idl: validity attribute
        * html/HTMLSelectElement.idl: ditto
        * html/HTMLTextAreaElement.idl: ditto
        * html/ValidityState.cpp: Added.
        (WebCore::ValidityState::ValidityState):
        (WebCore::ValidityState::valid): validation flag
        * html/ValidityState.h: Added.
        (WebCore::ValidityState::create): validation flag
        (WebCore::ValidityState::control): ditto
        (WebCore::ValidityState::valueMissing): ditto
        (WebCore::ValidityState::typeMismatch): ditto
        (WebCore::ValidityState::patternMismatch): ditto
        (WebCore::ValidityState::tooLong): ditto
        (WebCore::ValidityState::rangeUnderflow): ditto
        (WebCore::ValidityState::rangeOverflow): ditto
        (WebCore::ValidityState::stepMismatch): ditto
        (WebCore::ValidityState::customError): ditto
        * html/ValidityState.idl: Added.

2009-07-14  Ryosuke Niwa  <rniwa@google.com>

        Reviewed by Eric Seidel.

        Outdenting a line inside a blockquote tag does nothing
        https://bugs.webkit.org/show_bug.cgi?id=25316

        The bug was caused by the code checking whether the blockquote is created by WebKit or not.
        We simply remove this code to be consistent with Firefox and Internet Explorer.
        Also, enclosingBlockFlow == enclosingNode in outdentParagraph isn't a sufficient condition to insert
        the placeholder before the enclosingNode because there could be contents before the current paragraph.
        Instead, we should split the enclosingNode (which is a blockquote) at the starting position of outdentation.
        It turned out that this solves the bug 25315 also: https://bugs.webkit.org/show_bug.cgi?id=25315

        Test: editing/execCommand/outdent-regular-blockquote.html

        * editing/IndentOutdentCommand.cpp:
        (WebCore::isIndentBlockquote): no longer checks whether a blockquote is created by WebKit or not.
        (WebCore::IndentOutdentCommand::outdentParagraph): takes care of the case enclosingBlockFlow == enclosingNode

2009-07-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix isolated world wrappers for Node prototypes
        https://bugs.webkit.org/show_bug.cgi?id=27277

        This change does two things:

        1) We bypass the wrapper cache in the isolated world.  This is because
           the wrapper template cache has prototypes that lead to the main
           world.  We can add a template cache for the isolated world if
           performance warrants.

        2) We introduce a smarter way to grab the wrapper context for a frame
           that is aware that proxy <-> context do not stand in one-to-one
           correspondence.  This generalizes our solution for the node wrapper
           case to prototypes.

        The net result is that Node wrappers get the right prototypes.  As
        before, tests to follow.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setHiddenWindowReference):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        (WebCore::V8DOMWrapper::convertNodeToV8Object):
        (WebCore::V8DOMWrapper::convertWindowToV8Object):
        (WebCore::V8DOMWrapper::getWrapperContext):
        * bindings/v8/V8DOMWrapper.h:

2009-07-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix isolated world wrappers for Nodes
        https://bugs.webkit.org/show_bug.cgi?id=27271

        Previously, we keepy a pointer to the DOMMap on V8Proxy, but this
        caused us to miss the branch in V8DOMMap.cpp for isolated worlds.

        I have tests, but I can't land them until I get this feature under
        control.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertNodeToV8Object):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::V8Proxy):

2009-07-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix isolated world crash on getting window.location
        https://bugs.webkit.org/show_bug.cgi?id=27268

        I have a test for this locally, but it requires a compile-time hack to
        run.  Once I get the feature's stability under control, we can turn the
        feature on and add the tests.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setHiddenWindowReference):
        * bindings/v8/V8IsolatedWorld.h:
        (WebCore::V8IsolatedWorld::context):

2009-07-14  Brent Fulgham  <bfulgham@webkit.org>

        Correct failing tests after r45875.  The original patch did not
        test the m_player member for null, causing crashes.  This will
        happen fairly frequently in real use.  Was this original patch
        ever tested?
        https://bugs.webkit.org/show_bug.cgi?id=27246

        Test via existing media tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::supportsFullscreen): Check for null pointer.
        (WebCore::HTMLMediaElement::supportsSave): Check for null pointer.

2009-07-14  Avi Drissman  <avi@chromium.org>

        Reviewed by Darin Fisher.

        Explicitly mark the HTML generated for the Mac as being UTF-8 encoded.
        The Windows clipboard format is explicitly documented as being UTF-8,
        and all Linux apps assume UTF-8. On the Mac, though, unless otherwise
        indicated, Windows-1252 is assumed, which is wrong.

        Bug: https://bugs.webkit.org/show_bug.cgi?id=27262

        No new tests.

        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::writeRange):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeSelection):

2009-07-14  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Dimitri Glazkov.

        Upstream V8NPObject.h and V8NPObject.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=27103

        This just upstreams the files from the chromium code base. Only
        minor changes to formatting and similar were done, so no testing
        is required because nothing really changed.  Code verified to compile.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::bindToWindowObject):
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/v8/V8NPObject.cpp: Added.
        (npObjectInvokeImpl):
        (npObjectMethodHandler):
        (npObjectInvokeDefaultHandler):
        (weakTemplateCallback):
        (npObjectGetProperty):
        (npObjectNamedPropertyGetter):
        (npObjectIndexedPropertyGetter):
        (npObjectGetNamedProperty):
        (npObjectGetIndexedProperty):
        (npObjectSetProperty):
        (npObjectNamedPropertySetter):
        (npObjectIndexedPropertySetter):
        (npObjectSetNamedProperty):
        (npObjectSetIndexedProperty):
        (weakNPObjectCallback):
        (createV8ObjectForNPObject):
        (forgetV8ObjectForNPObject):
        * bindings/v8/V8NPObject.h: Added.
        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):


2009-07-14  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Darin Adler.

        Add HTMLMediaElement::supportSave() and a
        HitTestResult::absoluteMediaURL() functions
        https://bugs.webkit.org/show_bug.cgi?id=27246

        Added an implementation of supportsSave() into HTMLMediaElement
        that delegates to MediaPlayerPrivateImpl so that the media engine
        is able to signal whether or not a media source supports saving.

        Also added a function to HitTestResult that allows for retrieval
        of the currentSrc associated with the "hit" media element. 
        
        These functions are just pipeing with no visible UI change so there
        are no related layout test changes.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::supportsFullscreen): 
        (WebCore::HTMLMediaElement::supportsSave):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::supportsSave):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::supportsFullscreen):
        (WebCore::MediaPlayerPrivateInterface::supportsSave):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::altDisplayString):
        (WebCore::HitTestResult::absoluteMediaURL):
        * rendering/HitTestResult.h:

2009-07-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        [V8] Implement Reflect and ReflectURL attribute support.
        https://bugs.webkit.org/show_bug.cgi?id=27273

        * bindings/scripts/CodeGeneratorV8.pm: Added support for Reflect and ReflectURL attributes.

2009-07-14  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27266
        Add hasCurrentPoint() to WebCore::Path.
        This fixes Skia-based Chromium regression caused by the fix for
        https://bugs.webkit.org/show_bug.cgi?id=27187.
        For Skia, the new method always returns 'true', pending actual implementation.
        This means Chromium still will differ from Gecko behavior, but at least its Canvas
        will not be completely broken.

        Existing Canvas Layout Tests should pass in Chromium after this change.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::lineTo): insteand of Path::isEmpty() test for hasCurrentPoint().
        (WebCore::CanvasRenderingContext2D::quadraticCurveTo): ditto.
        (WebCore::CanvasRenderingContext2D::bezierCurveTo): ditto.

        * platform/graphics/Path.h:
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::hasCurrentPoint):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::isEmpty):
        (WebCore::Path::hasCurrentPoint):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::hasCurrentPoint):
        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::hasCurrentPoint):
        * platform/graphics/wx/PathWx.cpp:
        (WebCore::Path::hasCurrentPoint):
        All these files add a Path::hasCurrentPoint() for various platforms.

2009-07-14  Nate Chapin  <japhet@chromium.org>

        Reviewed by Sam Weinig.

        Upstream RGBColor from src.chromium.org.

        https://bugs.webkit.org/show_bug.cgi?id=27133

        * WebCore.gypi: Add RGBColor
        * css/RGBColor.cpp: Added.
        (WebCore::RGBColor::create):
        (WebCore::RGBColor::red):
        (WebCore::RGBColor::green):
        (WebCore::RGBColor::blue):
        * css/RGBColor.h: Added.
        (WebCore::RGBColor::RGBColor):

2009-07-10  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Darin Fisher.

        [V8] Rename the didCreate/DestroyScriptContext calls to make it
        clear that that those refer to the frame's contxt.  Add another
        similar call for when creating contexts via evaluateInNewContext.
        https://bugs.webkit.org/show_bug.cgi?id=27104

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInNewContext):
        (WebCore::V8Proxy::disposeContextHandles):
        (WebCore::V8Proxy::initContextIfNeeded):
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::didCreateScriptContextForFrame):
        (WebCore::EmptyFrameLoaderClient::didDestroyScriptContextForFrame):
        (WebCore::EmptyFrameLoaderClient::didCreateIsolatedScriptContext):
        * loader/FrameLoaderClient.h:

2009-07-14  Brent Fulgham  <bfulgham@webkit.org>

        Revert http://trac.webkit.org/changeset/45864 after
        breaking of Windows build.

        * storage/LocalStorageTask.cpp:
        * storage/LocalStorageTask.h:
        * storage/Storage.cpp:
        * storage/Storage.h:
        * storage/StorageArea.cpp:
        * storage/StorageArea.h:
        * storage/StorageAreaImpl.cpp:
        * storage/StorageAreaImpl.h:
        * storage/StorageAreaSync.cpp:
        * storage/StorageAreaSync.h:
        * storage/StorageEvent.cpp:
        * storage/StorageEvent.h:
        (WebCore::StorageEvent::create):
        (WebCore::StorageEvent::StorageEvent):
        * storage/StorageNamespace.h:
        * storage/StorageNamespaceImpl.cpp:
        * storage/StorageNamespaceImpl.h:
        * storage/StorageSyncManager.cpp:
        * storage/StorageSyncManager.h:

2009-07-11  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Adler.

        Cleanup DOM Storage dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=27180

        DOM Storage had several unnecessary (and probably unintended)
        dependencies.  This patch replaces many includes of header files with
        forward declaration of classes, making some destructors explicit, and
        taking some factories out of the header files.

        This will allow things like StorageAreaSync to take a StorageAreaImpl*
        (as it should) rather than a StorageArea* which previously weren't
        possible because the dependencies were such a tangled mess.

        * storage/LocalStorageTask.cpp:
        (WebCore::LocalStorageTask::~LocalStorageTask):
        * storage/LocalStorageTask.h:
        * storage/Storage.cpp:
        (WebCore::Storage::~Storage):
        * storage/Storage.h:
        * storage/StorageArea.cpp:
        * storage/StorageArea.h:
        * storage/StorageAreaImpl.cpp:
        * storage/StorageAreaImpl.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::~StorageAreaSync):
        * storage/StorageAreaSync.h:
        * storage/StorageEvent.cpp:
        (WebCore::StorageEvent::create):
        (WebCore::StorageEvent::StorageEvent):
        * storage/StorageEvent.h:
        * storage/StorageNamespace.h:
        * storage/StorageNamespaceImpl.cpp:
        * storage/StorageNamespaceImpl.h:
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::~StorageSyncManager):
        * storage/StorageSyncManager.h:


2009-07-14  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=26983

        Check to make sure the view is attached to a frame() in the visibleContentsResized()
        method as it can be triggered before the view is attached by Frame::createView(...)
        setting various values such as setScrollBarModes(...) for example.  An ASSERT is
        triggered when a view is layout before being attached to a frame().

        * page/FrameView.cpp:
        (WebCore::FrameView::visibleContentsResized):
        * page/FrameView.h:

2009-07-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: show last opened panel when invoking inspector.

        https://bugs.webkit.org/show_bug.cgi?id=27263

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::storeLastActivePanel):
        (WebCore::InspectorController::specialPanelForJSName):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::Setting::Setting):
        * inspector/InspectorController.idl:
        * inspector/front-end/inspector.js:
        (WebInspector.set currentPanel):
        (WebInspector.loaded):

2009-07-14  Anton Muhin  <antonm@chromium.org>

        Reviewed by Dimitri Glazkov.

        Speed up access to NodeList length.
        https://bugs.webkit.org/show_bug.cgi?id=27264

        That's a minimal alternation of the code.

        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER): 1) use AtomicString for comparison, 2) use
        v8::Integer::New instead of v8::Number::New.

2009-07-14  Anton Muhin  <antonm@chromium.org>

        Reviewed by Dimitri Glazkov.

        Do not do unnecessary conversions from v8::Handle<v8::Value> to
        v8::Handle<v8::Object> and accompanying changes.
        https://bugs.webkit.org/show_bug.cgi?id=26953

        Three things:

        1) do not cast from v8::Value to v8::Object if unnecessary---casts are cheap,
        but are not free (they check for emptiness of handle);
        2) inline conversion from wrapper to node;
        3) simplify case to an ASSERT.

        This is just a refactoring, so no new tests are needed.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInNewContext):
        (WebCore::V8Proxy::convertToSVGPODTypeImpl):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::convertDOMWrapperToNative):
        (WebCore::V8Proxy::convertToNativeObject):
        (WebCore::V8Proxy::convertToNativeEvent):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::toCanvasStyle):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8CustomBinding.cpp:
        (WebCore::V8Custom::GetTargetFrame):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::V8Custom::ClearTimeoutImpl):
        (WebCore::NAMED_ACCESS_CHECK):
        (WebCore::INDEXED_ACCESS_CHECK):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-07-14  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Straight quotes should match fancy quotes in in-page search
        https://bugs.webkit.org/show_bug.cgi?id=27217

        Tests: fast/text/find-quotes.html

        * editing/TextIterator.cpp:
        (WebCore::foldQuoteMark): Added.
        (WebCore::foldQuoteMarks): Added.
        (WebCore::SearchBuffer::SearchBuffer): Call foldQuoteMarks on the target string.
        (WebCore::SearchBuffer::append): Call foldQuoteMarks on characters as they are
        added to the search buffer.

        * platform/text/CharacterNames.h: Added more quotation mark character names.
        Sorted character names with the sort tool.

2009-07-13  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: handle debugger shortcuts while on source frame or on
        script file selector.

        https://bugs.webkit.org/show_bug.cgi?id=27224

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._loaded):

2009-07-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Use standard HashCountedSet instead of a hand rolled one
        in HTMLDocument.

        * html/HTMLDocument.cpp:
        (WebCore::addItemToMap):
        (WebCore::removeItemFromMap):
        * html/HTMLDocument.h:

2009-07-13  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Darin Adler and Maciej Stachowiak.

        Implement HTML5 draggable
        https://bugs.webkit.org/show_bug.cgi?id=26262

        This adds support for the HTML5 draggable attribute and its DOM binding. It maps the draggable property
        to the CSS properties -webkit-user-drag and -webkit-user-select respectively.

        Spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#the-draggable-attribute

        Test: fast/html/draggable.html

        * css/html.css:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::draggable):
        * html/HTMLAnchorElement.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::draggable):
        (WebCore::HTMLElement::setDraggable):
        * html/HTMLElement.h:
        * html/HTMLElement.idl:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::draggable):
        * html/HTMLImageElement.h:

2009-07-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Image rendered as layer contents looks different from image rendered via CG.
        <rdar://problem/7048830> 
        
        Fix a visible color profile difference between between images rendered via Core Graphics
        and those rendered via a compositing layer, by assigning the GenericRGB profile to
        untagged images (which come through as having the DeviceRGB profile) when they are set
        as layer contents.

        Test: compositing/color-matching/image-color-matching.html

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setContentsToImage):

2009-07-13  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=27220
        Assertion failure in createSearcher() (usearch_open() status is U_USING_DEFAULT_WARNING)

        * editing/TextIterator.cpp:
        (WebCore::createSearcher): Add U_USING_DEFAULT_WARNING as a possible status code
        in the assertion. Affects only the assertion.

2009-07-13  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=26925
        <rdar://problem/7027850> URL Fragment Breaks Application Cache Loads

        Test: http/tests/appcache/main-resource-hash.html

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::resourceForURL):
        (WebCore::ApplicationCache::resourceForRequest):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::cacheForMainRequest):
        (WebCore::ApplicationCacheGroup::fallbackCacheForMainRequest):
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource):
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didFail):
        (WebCore::ApplicationCacheGroup::addEntry):
        Remove URL fragment at appcache code borders.

        * loader/appcache/ApplicationCacheResource.h:
        (WebCore::ApplicationCacheResource::create):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::findOrCreateCacheGroup):
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):
        Assert that there is no URL fragment in URL at key points in appcache code.

2009-07-13  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=27166
        rdar://problem/7015857
        Find for strings composed entirely of spaces doesn't work

        Test: fast/text/find-spaces.html

        * editing/TextIterator.cpp:
        (WebCore::findPlainText): Removed unneeded special case.
        The empty string case already works correctly.

2009-07-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Remove NPPVpluginPrivateModeBool, it was removed from the spec.
        
        * bridge/npapi.h:

2009-07-13  Feng Qian  <feng@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=27237

        Make V8DOMMap.h compiling with gcc option -Werror=non=virtual-dtor.  

        * bindings/v8/V8DOMMap.h:
        (WebCore::WeakReferenceMap::WeakReferenceMap):
        (WebCore::WeakReferenceMap::~WeakReferenceMap):

2009-07-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        Remove an accidental add of bidi.(cpp|h) to WebCore.gypi.

        * WebCore.gypi: Removed bidi.cpp and bidi.h

2009-07-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        Update WebCore.gyp in preparation to hooking it up.

        * WebCore.gypi: Added files that were mid-stream while switching over.

2009-07-13  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, another small fix for Chromium build.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):

2009-07-13  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, fix Chromium build bustage.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::JavaScriptConsoleMessage::addToPage):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::handleConsoleMessage):

2009-07-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=27234
        <rdar://problem/7054356>

        Add null page check in HTMLDocument::hasFocus.

        Test: fast/dom/HTMLDocument/hasFocus-frameless-crash.html

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::hasFocus): Add page null check.
        (WebCore::HTMLDocument::createTokenizer): Cleanup page null check.

2009-07-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Disable continuous spell checking in the inspector
        https://bugs.webkit.org/show_bug.cgi?id=27131

        * inspector/front-end/inspector.html: Added spellcheck="false" to the
            main-panels and console-prompt containers.

2009-07-13  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Chromium Linux: fix assertion when rendering google.com.kh

        https://bugs.webkit.org/show_bug.cgi?id=26924

        Some shapers (i.e. Khmer) will produce cluster logs which report that
        /no/ code points contributed to certain glyphs. Because of this, we
        take any code point which contributed to the glyph in question, or any
        subsequent glyph.  If we run off the end, then we take the last code
        point.

        Added LayoutTests/fast/text/international/khmar-selection.html

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::offsetForPositionForComplexText):

2009-07-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        spellcheck="false" is ignored
        <rdar://problem/7054177>

        * editing/Editor.cpp:
        (WebCore::markMisspellingsOrBadGrammar): Moved code to check the
            spellcheck attribute from here...
        (WebCore::Editor::spellCheckingEnabledInFocusedNode): ...to here.
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Bail out
            if spell chcking is disabled by the spellcheck attribute.
        * editing/Editor.h:

2009-07-13  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Add new configuration flag for redistributable Windows build.
        https://bugs.webkit.org/show_bug.cgi=27087
        
        * WebCore.vcproj/WebCore.vcproj: Add new WinCairo.vsprops to
          Debug_Cairo and Release_Cairo builds.
        * config.h: Check for presence of WIN_CAIRO and select appropriate
          configuration.  Defaults to standard Apple build.

2009-07-13  Peter Kasting  <pkasting@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=19562
        Back out previous patch for this bug (too many problems).

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/HTMLButtonElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFormControlElement.cpp:
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::form):
        * html/HTMLInputElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/ValidityState.cpp: Removed.
        * html/ValidityState.h: Removed.
        * html/ValidityState.idl: Removed.

2009-07-13  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add HTMLAllCollection to WebCore.gypi.

        https://bugs.webkit.org/show_bug.cgi?id=27223

        * WebCore.gypi: Add HTMLAllCollection.

2009-07-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        [V8] Add a missing check for constructor call in WebKitCSSMatrixConstructor.
        https://bugs.webkit.org/show_bug.cgi?id=27218

        Test: fast/css/matrix-as-function-crash.html

        * bindings/v8/custom/V8WebKitCSSMatrixConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Added a check for constructor call.

2009-07-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed make dist build fix.

        * GNUmakefile.am:

2009-07-13  Cédric Luthi  <cedric.luthi@gmail.com>

        Reviewed by Tor Arne Vestbø.

        Fix NPWindow clip rect in PluginViewMac

        The rect should be in window-coordinates. This bug can be observed
        with Flash 10 here: http://www.permadi.com/tutorial/cursorTracker/

        * plugins/mac/PluginViewMac.cpp:

2009-07-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Ariya Hidayat.

        Fix Qt implementation of WebCore::directoryName to return the absolute
        directory name instead of the base file name.

        * platform/qt/FileSystemQt.cpp:
        (WebCore::directoryName):

2009-07-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Ariya Hidayat.

        Fix WebCore::Path::isEmpty() for the Qt port to return true
        if there is no element in the path.

        QPainterPath::isEmpty() returns also true if there is one single
        MoveTo element inside, which makes sense but doesn't patch Webcore's
        is-empty definition.

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::isEmpty): Use elementCount() == 0.

2009-07-13  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Dimitri Glazkov.

        Upstream fixes to NPV8Object.cpp that make ~30 layout tests pass.
        https://bugs.webkit.org/show_bug.cgi?id=27127

        There were a number of bugs introduced during the last upstreaming
        effort that broke around 30 layout tests.  This fixes those bugs.
        It also has compile fixes to match the recent cutting apart of
        V8Proxy.

        * bindings/v8/NPV8Object.cpp:
        (freeV8NPObject):
        (npCreateV8ScriptObject):
        (NPN_Invoke):
        (NPN_InvokeDefault):
        (NPN_EvaluateHelper):
        (NPN_SetException):
        (NPN_Construct):

2009-07-13  Mads Ager  <ager@chromium.org>

        Reviewed by Adam Barth.

        Fix memory leak in the V8 binding layer. 
        https://bugs.webkit.org/show_bug.cgi?id=27163

        Reinitializing the context is not necessary when clearing the proxy for navigation
        and it will lead us to hold on to an empty context for each frame.

        Test for empty context instead of empty global object handle when
        updating the document for a context.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::clearForNavigation):
        (WebCore::V8Proxy::updateDocument):

2009-07-13  John Gregg  <johnnyg@google.com>

        Reviewed by David Levin.

        Correct the logic to determine if a V8 callback returns a value.
        https://bugs.webkit.org/show_bug.cgi?id=27155

        * bindings/v8/custom/V8CustomVoidCallback.cpp:
        (WebCore::invokeCallback):
        - Don't crash if result.IsEmpty().

2009-07-13  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Add ENABLE(SHARED_WORKERS) flag and define SharedWorker APIs
        https://bugs.webkit.org/show_bug.cgi?id=26932

        Initial IDL definition and bindings for SharedWorkers.

        * Configurations/FeatureDefines.xcconfig:
        Added new files for SharedWorker support.
        * DerivedSources.make:
        Added new files for SharedWorker support.
        * GNUmakefile.am:
        Added new files for SharedWorker support.
        * WebCore.gypi:
        Added new files for SharedWorker support.
        * WebCore.pro:
        Added new files for SharedWorker support.
        * WebCore.xcodeproj/project.pbxproj:
        Added new files for SharedWorker support.
        * bindings/js/JSAbstractWorkerCustom.cpp: Added.
        (WebCore::JSAbstractWorker::mark):
        Custom mark handler that marks the event listeners.
        (WebCore::JSAbstractWorker::addEventListener):
        (WebCore::JSAbstractWorker::removeEventListener):
        (WebCore::JSAbstractWorker::toJS):
        Custom toJS handler which differentiates between various subclasses.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::sharedWorker):
        SharedWorker constructor (only enabled when SHARED_WORKERS is
        enabled).
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        (WebCore::toEventTarget):
        Added support for converting to/from SharedWorkers.
        * bindings/js/JSSharedWorkerConstructor.cpp: Added.
        (WebCore::JSSharedWorkerConstructor::JSSharedWorkerConstructor):
        (WebCore::constructSharedWorker):
        (WebCore::JSSharedWorkerConstructor::getConstructData):
        * bindings/js/JSSharedWorkerConstructor.h: Added.
        (WebCore::JSSharedWorkerConstructor::classInfo):
        * bindings/js/JSSharedWorkerCustom.cpp: Added.
        (WebCore::JSSharedWorker::mark):
        Custom mark function that marks the internal MessagePort.
        * bindings/v8/DOMObjectsInclude.h:
        Updated to include new header files.
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8AbstractWorkerCustom.cpp: Added.
        (WebCore::getEventListener):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        V8 handlers for add/removeEventListener().
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8SharedWorkerCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        Custom constructor for SharedWorker.
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toSharedWorker):
        * dom/EventTarget.h:
        * page/DOMWindow.idl:
        * workers/AbstractWorker.cpp: Added.
        (WebCore::AbstractWorker::AbstractWorker):
        Common base class for SharedWorker and (soon) Worker. The functions below were copied from Worker.cpp.
        This is the first step in refactoring Worker to derive from AbstractWorker to enable code sharing.
        (WebCore::AbstractWorker::~AbstractWorker):
        (WebCore::AbstractWorker::addEventListener):
        (WebCore::AbstractWorker::removeEventListener):
        (WebCore::AbstractWorker::dispatchEvent):
        (WebCore::AbstractWorker::dispatchLoadErrorEvent):
        (WebCore::AbstractWorker::dispatchScriptErrorEvent):
        * workers/AbstractWorker.h: Added.
        Definitions of functionality shared by Worker.h and SharedWorker.h. In a future patch, Worker will derive from AbstractWorker.
        (WebCore::AbstractWorker::scriptExecutionContext):
        (WebCore::AbstractWorker::setOnerror):
        (WebCore::AbstractWorker::onerror):
        (WebCore::AbstractWorker::eventListeners):
        (WebCore::AbstractWorker::refEventTarget):
        (WebCore::AbstractWorker::derefEventTarget):
        * workers/AbstractWorker.idl: Added.
        * workers/SharedWorker.cpp: Added.
        (WebCore::SharedWorker::SharedWorker):
        (WebCore::SharedWorker::~SharedWorker):
        * workers/SharedWorker.h: Added.
        (WebCore::SharedWorker::create):
        (WebCore::SharedWorker::port):
        (WebCore::SharedWorker::toSharedWorker):
        * workers/SharedWorker.idl: Added.

2009-07-13  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Cleanup - Remove prf install target
        https://bugs.webkit.org/show_bug.cgi?id=27191

        qtwebkit.prf has been removed; this cleans up the related
        install target as well.

        * WebCore.pro: Remove prf install target

2009-07-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Oliver Hunt.

        Facebook Chat is broken due to XSS auditor
        https://bugs.webkit.org/show_bug.cgi?id=27179

        Instead of just using the script's URL as to detect an XSS attack, we
        now use a bit of context before the URL.  In particular, we use the
        bytes from the beginning of the attribute name to the end of the
        attribute value.  In virtually all injection attacks, the attacker
        would need to supply the attribute name as well as the attribute value.
        However, in the Facebook false positive, the attribute name is not
        present in the URL.

        Tests: http/tests/security/xssAuditor/script-tag-src-redirect-safe.html
               http/tests/security/xssAuditor/script-tag-with-source-double-quote.html
               http/tests/security/xssAuditor/script-tag-with-source-no-quote.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag):
        * html/HTMLTokenizer.h:
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc):
        * page/XSSAuditor.h:

2009-07-12  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Refactor ConsoleMessage to add MessageType attribute.
        https://bugs.webkit.org/show_bug.cgi?id=20625

        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::printErrorMessage):
        * dom/Document.cpp:
        (WebCore::Document::reportException):
        (WebCore::Document::addMessage):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::reportErrorToConsole):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::addToConsole):
        (WebCore::ConsoleMessage::isEqual):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::startGroup):
        (WebCore::InspectorController::endGroup):
        (WebCore::InspectorController::addProfileFinishedMessageToConsole):
        (WebCore::InspectorController::addStartProfilingMessageToConsole):
        (WebCore::InspectorController::count):
        * inspector/InspectorController.h:
        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype.addMessage):
        (WebInspector.ConsoleMessage): Added type property.
        (WebInspector.ConsoleMessage.prototype.toMessageElement):
        (WebInspector.ConsoleMessage.prototype.toString):
        (WebInspector.ConsoleMessage.prototype.isEqual):
        (WebInspector.ConsoleCommandResult):
        (WebInspector.ConsoleGroup.prototype.addMessage):
        (WebInspector.ConsoleGroup.prototype._titleClicked):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._addTip):
        (WebInspector.Resource.prototype._checkWarning):
        * inspector/front-end/inspector.css: Changed ".console-group-title-level" to ".console-group-title"
        * inspector/front-end/inspector.js:
        (WebInspector.addMessageToConsole):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::printAccessDeniedMessage):
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::addMessageToConsole):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reportLocalLoadFailed):
        (WebCore::FrameLoader::shouldAllowNavigation):
        * page/ChromeClient.h:
        * page/Console.cpp:
        (WebCore::printMessageSourceAndLevelPrefix):
        (WebCore::Console::addMessage):
        (WebCore::Console::error):
        (WebCore::Console::log):
        (WebCore::Console::dir):
        (WebCore::Console::trace):
        (WebCore::Console::assertCondition):
        (WebCore::Console::timeEnd):
        (WebCore::Console::warn):
        * page/Console.h: Added MessageType enum.
        (WebCore::):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessageTimerFired):
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc):
        (WebCore::XSSAuditor::canLoadObject):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::reportWarning):
        (WebCore::SVGDocumentExtensions::reportError):
        * wml/WMLErrorHandling.cpp:
        (WebCore::reportWMLError):
        * workers/GenericWorkerTask.h: Added GenericWorkerTask8 for the extra argument.
        (WebCore::GenericWorkerTask8::create):
        (WebCore::GenericWorkerTask8::GenericWorkerTask8):
        (WebCore::GenericWorkerTask8::performTask):
        (WebCore::createCallbackTask):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::addMessage):
        (WebCore::WorkerContext::importScripts):
        * workers/WorkerContext.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::postConsoleMessageTask):
        (WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerObjectProxy.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::reportUnsafeUsage):
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::parseErrorFunc):

2009-07-12  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Upstream UndetectableHTMLCollection.idl as HTMLAllCollection.idl.

        https://bugs.webkit.org/show_bug.cgi?id=27132

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * dom/HTMLAllCollection.idl: Added.

2009-07-12  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Maciej Stachowiak.

        Inspector: Duplicate Computation in Autocompletion
        https://bugs.webkit.org/show_bug.cgi?id=26778

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype._completionsReady):

2009-07-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=27196
        Rename bidi.cpp to RenderBlockLineLayout.cpp and remove bidi.h

        * GNUmakefile.am: Updated.
        * WebCore.gypi: Updated.
        * WebCore.pro: Updated.
        * WebCore.vcproj/WebCore.vcproj: Updated.
        * WebCore.xcodeproj/project.pbxproj: Updated.
        * WebCoreSources.bkl: Updated.
        * rendering/RenderBlock.h: Removed unnecessary forward declaration and
            updated comments.
        * rendering/RenderBlockLineLayout.cpp: Copied from WebCore/rendering/bidi.cpp.
            Removed unnecessary #include statements.
        (WebCore::BidiRun::BidiRun): Moved here from bidi.h.
        (WebCore::RenderBlock::layoutInlineChildren): Removed outdated comment.
        * rendering/bidi.cpp: Removed.
        * rendering/bidi.h: Removed.

2009-07-12  Dan Bernstein  <mitz@apple.com>

        - Windows build fix

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dataChanged):

2009-07-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - Image cleanup

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData): Use the data() accessor
        instead of the m_data member.
        (WebCore::BitmapImage::dataChanged): Ditto.
        * platform/graphics/Image.h: Re-ordered #includes and class
        declarations. Removed the drawPatternCallback() declaration. Made member
        variables private.
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::drawPatternCallback): Changed this from a member function to a
        static function.
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dataChanged): Use the data() accessor
        instead of the m_data member.
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged): Ditto.

2009-07-12  Daniel Bates  <dbates@intudata.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27189
        
        Fixes insufficient check in XSSAuditor::canSetBaseElementURL that caused 
        XSSAuditor to incorrectly block HTML Base elements whose base path coincided 
        with the URL of the page.

        Test: http/tests/security/xssAuditor/base-href-safe3.html

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canSetBaseElementURL): Changed conditional to only call 
        XSSAuditor::findInRequest() if the host in the page URL disagrees with the host 
        in the base element URL.

2009-07-12  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Text searching with ICU should take the user's default locale into account
        https://bugs.webkit.org/show_bug.cgi?id=27184
        rdar://problem/6812121

        No simple way to test this since it's dependent on user locale.
        After this, the user's default locale is used only on Mac.

        * editing/TextIterator.cpp:
        (WebCore::createSearcher): Pass result of the currentSearchLocaleID
        function as the locale.

        * platform/text/TextBreakIteratorInternalICU.h: Added declaration of
        currentSearchLocaleID function.

        * platform/text/android/TextBreakIteratorInternalICU.cpp:
        (WebCore::currentSearchLocaleID): Added. Returns the empty string.
        * platform/text/chromium/TextBreakIteratorInternalICUChromium.cpp:
        (WebCore::currentSearchLocaleID): Ditto.
        * platform/text/gtk/TextBreakIteratorInternalICUGtk.cpp:
        (WebCore::currentSearchLocaleID): Ditto.

        * platform/text/mac/TextBreakIteratorInternalICUMac.mm:
        (WebCore::textBreakLocalePreference): Added. Returns the value of
        the AppleTextBreakLocale preference.
        (WebCore::topLanguagePreference): Added. Returns the value of the
        first item in the AppleLanguages preference.
        (WebCore::canonicalLanguageIdentifier): Added. Cover for the
        CFLocaleCreateCanonicalLanguageIdentifierFromString function.
        (WebCore::getLocale): Added. Transfers the locale from a CFStringRef
        into a buffer.
        (WebCore::getSearchLocale): Added. Calls topLanguagePreference,
        canonicalLanguageIdentifier, and getLocale.
        (WebCore::currentSearchLocaleID): Added. Calls getSearchLocale once.
        (WebCore::getTextBreakLocale): Changed to call
        textBreakLocalePreference, topLanguagePreference,
        canonicalLanguageIdentifier, and getLocale.

        * platform/text/win/TextBreakIteratorInternalICUWin.cpp:
        (WebCore::currentSearchLocaleID): Added. Returns the empty string.
        * platform/wx/TemporaryLinkStubs.cpp:
        (WebCore::currentSearchLocaleID): Ditto.

2009-07-12  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        Create a PangoLayout that properly represents the visual
        appearance of the text in the web page so that the line boundary
        modes of getText{At,Before,After}Offset work correctly.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (UTF16ToUTF8):
        (g_substr):
        (convertUniCharToUTF8):
        (getPangoLayoutForAtk):

2009-07-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Simon Fraser.

        Bug 27187 - Match Gecko behaviour for canvas path mutation APIs on an empty path
        <https://bugs.webkit.org/show_bug.cgi?id=27187>

        Simple API change, check for the empty path and add appropriate point if necessary.

        Test: fast/canvas/canvas-modify-emptyPath.html

        * Info.plist:
        * WebCore.xcodeproj/project.pbxproj:
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::lineTo):
        (WebCore::CanvasRenderingContext2D::quadraticCurveTo):
        (WebCore::CanvasRenderingContext2D::bezierCurveTo):

2009-07-11  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Antti Koivisto.

        HTMLMediaElement.canPlayType "maybe" and "probably" reversed
        https://bugs.webkit.org/show_bug.cgi?id=27186

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::supportsType):
            Return "probably" if type has codecs parameter.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::supportsType):
            Ditto.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::supportsType):
            Ditto.

2009-07-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe.

        A worker-thread inspired follow-up for:
        https://bugs.webkit.org/show_bug.cgi?id=26496 and <rdar://problem/7046520>
        REGRESSION: XHR stream connection blocks iFrame loading and resource downloading

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::loadRequestAsynchronously): Don't perform the XHR compensation when the XHR
          is running on a worker thread. Accessing the global Cache data structures from a non-main thread is
          not currently supported.

2009-07-11  Simon Fraser  <simon.fraser@apple.com>

        Enable support for accelerated compositing and 3d transforms on Leopard.
        <https://bugs.webkit.org/show_bug.cgi?id=20166>
        <rdar://problem/6120614>

        Reviewed by Oliver Hunt.

        * Configurations/FeatureDefines.xcconfig:

2009-07-11  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build after r45724.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMethod::QtRuntimeMethod):

2009-07-10  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=26921

        Implements support for HTML entities, so XSSAuditor can protect against attacks
        encoded with HTML entities.

        Tests: http/tests/security/xssAuditor/inline-event-HTML-entities.html
               http/tests/security/xssAuditor/javascript-link-HTML-entities-control-char.html
               http/tests/security/xssAuditor/javascript-link-HTML-entities-named.html
               http/tests/security/xssAuditor/javascript-link-HTML-entities-null-char.html
               http/tests/security/xssAuditor/javascript-link-HTML-entities.html
               http/tests/security/xssAuditor/link-onclick-entities.html
               http/tests/security/xssAuditor/script-tag-entities.html
               http/tests/security/xssAuditor/script-tag-with-source-entities.html

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canEvaluateJavaScriptURL):
        (WebCore::XSSAuditor::decodeURL): Modified to call WebCore::XSSAuditor::decodeHTMLEntities
        to decode HTML entities.
        (WebCore::XSSAuditor::decodeHTMLEntities): Added method to decode HTML entities.
        (WebCore::XSSAuditor::findInRequest):
        * page/XSSAuditor.h:

2009-07-10  David Kilzer  <ddkilzer@apple.com>

        Bug 27007: Build fixes when ICONDATABASE is disabled

        <https://bugs.webkit.org/show_bug.cgi?id=27007>

        Reviewed by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj: Added IconDatabaseNone.cpp
        to the project.
        * loader/icon/IconDatabase.cpp: Added
        #if ENABLE(ICONDATABASE)/#endif macro guard.
        * loader/icon/IconDatabase.h: Removed three public methods from
        #if ENABLE(ICONDATABASE)/#endif macro so that they may be
        stubbed out in IconDatabaseNone.cpp.
        * loader/icon/IconDatabaseNone.cpp: Added
        #if !ENABLE(ICONDATABASE)/#endif macro guard.
        (WebCore::IconDatabase::importIconURLForPageURL): Added.
        (WebCore::IconDatabase::importIconDataForIconURL): Added.
        (WebCore::IconDatabase::shouldStopThreadActivity): Added.

2009-07-10  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=27151

        Fixes issue where JavaScript URLs that contain null- and non-null control characters can
        bypass XSSAuditor.

        Tests: http/tests/security/xssAuditor/javascript-link-control-char.html
               http/tests/security/xssAuditor/javascript-link-null-char.html
               http/tests/security/xssAuditor/javascript-link.html

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate): Separated out logic for JavaScript URLs from 
        inline scripts. For JavaScript URLs, calls XSSAuditor::canEvaluateJavaScriptURL.
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluate): Made similar changes to evaluate() as in
        bindings/js/ScriptController.cpp.
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canEvaluateJavaScriptURL): Separated out logic for JavaScript URLs
        into its own method.
        * page/XSSAuditor.h:

2009-07-10  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Kilzer.

        WebKit needs a style linting tool
        https://bugs.webkit.org/show_bug.cgi?id=25884

        Fix bunch of style issues by autofix of cpplint.
        This patch is created to demonstrate the autofix of cpplint.py.

        No new testcases because it's a style fix

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseMediaQuery):
        (WebCore::CSSParser::validUnit):
        (WebCore::CSSParser::parseValue):
        (WebCore::skipCommaInDashboardRegion):
        (WebCore::CSSParser::parseDashboardRegions):
        (WebCore::ShadowParseContext::commitValue):
        (WebCore::ShadowParseContext::commitLength):
        (WebCore::ShadowParseContext::commitColor):
        (WebCore::BorderImageParseContext::commitNumber):
        (WebCore::BorderImageParseContext::commitWidth):
        (WebCore::BorderImageParseContext::commitRule):
        (WebCore::BorderImageParseContext::commitBorderImage):
        (WebCore::CSSParser::lex):
        (WebCore::CSSParser::text):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/MediaList.cpp:
        (WebCore::MediaList::deleteMedium):
        * css/MediaQuery.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::parseAspectRatio):
        * css/MediaQueryEvaluator.h:
        * css/MediaQueryExp.h:
        (WebCore::MediaQueryExp::operator==):
        * css/WebKitCSSMatrix.h:
        * dom/Comment.h:
        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * dom/Document.h:
        (WebCore::Document::setHasDashboardRegions):
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::nodeName):
        * dom/DocumentFragment.h:
        * dom/DynamicNodeList.h:
        * dom/EditingText.h:
        * dom/Element.cpp:
        (WebCore::Element::dispatchAttrAdditionEvent):
        * dom/NamedAttrMap.cpp:
        (WebCore::NamedNodeMap::item):
        * dom/Node.cpp:
        (WebCore::Node::nodeValue):
        (WebCore::Node::nodeIndex):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::create):
        * dom/Notation.h:
        * dom/ProcessingInstruction.h:
        * dom/Range.cpp:
        (WebCore::Range::processContents):
        * dom/StyledElement.cpp:
        (WebCore::toHex):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::PendingCallbacks::PendingStartElementNSCallback::~PendingStartElementNSCallback):
        (WebCore::PendingCallbacks::PendingStartElementNSCallback::call):
        (WebCore::PendingCallbacks::):
        (WebCore::OffsetBuffer::readOutBytes):
        (WebCore::handleElementNamespaces):
        (WebCore::handleElementAttributes):
        (WebCore::attributesStartElementNsHandler):
        * dom/XMLTokenizerQt.cpp:
        (WebCore::attributesStartElementNsHandler):
        (WebCore::XMLTokenizer::parseStartElement):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeNode):
        * editing/Editor.cpp:
        (WebCore::Editor::pasteAsPlainText):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::directionOfEnclosingBlock):
        * editing/SmartReplaceICU.cpp:
        (WebCore::addAllCodePoints):
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::icon):
        (WebCore::HistoryItem::adoptVisitCounts):
        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyFillColor):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::setActive):
        (WebCore::HTMLAnchorElement::isLiveLink):
        * html/HTMLAppletElement.h:
        * html/HTMLAudioElement.h:
        * html/HTMLBRElement.h:
        * html/HTMLBaseElement.h:
        * html/HTMLBaseFontElement.h:
        * html/HTMLDListElement.h:
        * html/HTMLDirectoryElement.h:
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::HTMLFieldSetElement):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::reset):
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::parseMappedAttribute):
        * html/HTMLHeadElement.h:
        * html/HTMLHtmlElement.h:
        * html/HTMLImageElement.h:
        (WebCore::HTMLImageElement::setLoadManually):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::selection):
        * html/HTMLIsIndexElement.h:
        * html/HTMLMarqueeElement.cpp:
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::):
        * html/HTMLMenuElement.h:
        * html/HTMLMetaElement.h:
        * html/HTMLModElement.h:
        * html/HTMLOListElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::childrenChanged):
        * html/HTMLParamElement.h:
        * html/HTMLQuoteElement.h:
        * html/HTMLStyleElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.h:
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::deleteRow):
        * html/HTMLTitleElement.h:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseNonHTMLText):
        (WebCore::HTMLTokenizer::parseEntity):
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::write):
        * html/HTMLUListElement.h:
        * html/HTMLVideoElement.h:
        * html/TimeRanges.h:
        (WebCore::TimeRanges::Range::Range):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::enableResourceTracking):
        (WebCore::InspectorController::disableResourceTracking):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::newInspectorJSONObject):
        * page/Console.cpp:
        (WebCore::Console::addMessage):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::defaultKeyboardEventHandler):
        * page/Frame.cpp:
        (WebCore::Frame::jsDefaultStatusBarText):
        * page/android/DragControllerAndroid.cpp:
        (WebCore::DragController::dragOperation):
        * page/android/EventHandlerAndroid.cpp:
        (WebCore::EventHandler::tabsToAllControls):
        (WebCore::EventHandler::eventActivatedView):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        * page/gtk/DragControllerGtk.cpp:
        (WebCore::DragController::dragOperation):
        * page/qt/DragControllerQt.cpp:
        * page/win/DragControllerWin.cpp:
        (WebCore::DragController::isCopyKeyDown):
        * page/win/FrameWin.h:
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::mouseEventOffsetToThumb):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setVerticalAlignLength):
        (WebCore::InheritedFlags::setUnicodeBidi):
        (WebCore::InheritedFlags::setCursor):
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):
        * rendering/style/SVGRenderStyleDefs.h:
        * rendering/style/StyleInheritedData.h:
        (WebCore::StyleInheritedData::operator!=):
        * storage/DatabaseTask.h:
        * svg/GradientAttributes.h:
        * svg/LinearGradientAttributes.h:
        * svg/PatternAttributes.h:
        * svg/RadialGradientAttributes.h:
        * svg/SVGAnimatedPathData.h:
        * svg/SVGAnimatedPoints.h:
        * svg/SVGAnimationElement.h:
        * svg/SVGClipPathElement.h:
        * svg/SVGElementInstance.h:
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::build):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::build):
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::build):
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::build):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::build):
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::build):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEFuncAElement.h:
        * svg/SVGFEFuncBElement.h:
        * svg/SVGFEFuncGElement.h:
        * svg/SVGFEFuncRElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::build):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::build):
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::build):
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::build):
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/SVGFESpotLightElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::build):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::parseMappedAttribute):
        * svg/SVGList.h:
        * svg/SVGListTraits.h:
        (WebCore::):
        * svg/SVGMPathElement.h:
        * svg/SVGMetadataElement.h:
        * svg/SVGParserUtilities.cpp:
        (WebCore::SVGPathParser::parseSVG):
        (WebCore::SVGPathParser::calculateArc):
        * svg/SVGPathElement.h:
        * svg/SVGPathSegClosePath.h:
        * svg/SVGSVGElement.h:
        * svg/SVGSetElement.h:
        * svg/SVGSwitchElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::parseMappedAttribute):
        * svg/SVGTextPathElement.h:
        * svg/SVGTitleElement.h:
        * svg/SVGTransformable.cpp:
        (WebCore::):
        * svg/SVGViewSpec.cpp:
        (WebCore::):
        * svg/animation/SMILTime.cpp:
        (WebCore::operator+):
        (WebCore::operator-):
        (WebCore::operator*):
        * svg/animation/SVGSMILElement.h:
        * svg/graphics/SVGResource.cpp:
        (WebCore::clientMap):
        * wml/WMLPostfieldElement.cpp:
        (WebCore::WMLPostfieldElement::value):
        * wml/WMLSetvarElement.cpp:
        (WebCore::WMLSetvarElement::value):
        * workers/WorkerRunLoop.cpp:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dropProtection):
        * xml/XPathPath.h:

2009-07-10  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7049066>.
        Update SnowLeopard media controller layout.

        * css/mediaControlsQT.css:
            Update for new layout.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::movieLoadType):
            Added to replace isStreaming.
        * html/HTMLMediaElement.h:
            Declare movieLoadType, remove isStreaming.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlStatusDisplayElement::update):
            Use movieLoadType instead of isStreaming.
        (WebCore::MediaControlTimelineContainerElement::rendererIsNeeded):
            MediaControlElement is the base class, not HTMLInputElement.
        (WebCore::MediaControlStatusDisplayElement::rendererIsNeeded):
            Ditto.
        (WebCore::MediaControlRewindButtonElement::rendererIsNeeded):
            Don't display rewind button for live streams.
        (WebCore::MediaControlReturnToRealtimeButtonElement::rendererIsNeeded):
            MediaControlInputElement is the base class, not HTMLInputElement.
        * rendering/MediaControlElements.h:

        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::getMediaUIPartStateFlags):
            New, return wkDrawMediaUIPart flags.
        (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::paintMediaControlsBackground):
        (WebCore::RenderThemeMac::paintMediaCurrentTime):
        (WebCore::RenderThemeMac::paintMediaTimeRemaining):
            Use getMediaUIPartStateFlags.

2009-07-10  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=19562
        Added build stuff and stub for the ValidityState class, part of HTML5
        section Forms:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#validitystate

        Test: fast/forms/ValidityState-001.html

        * DerivedSources.cpp: Fix aimed to include ValidityState files
        * DerivedSources.make: ditto
        * GNUmakefile.am: ditto
        * WebCore.gypi: ditto
        * WebCore.pro: ditto
        * WebCore.vcproj/WebCore.vcproj: ditto
        * WebCore.xcodeproj/project.pbxproj: ditto
        * WebCoreSources.bkl: ditto
        * html/HTMLButtonElement.idl: "validity" attribute
        * html/HTMLFieldSetElement.idl: ditto
        * html/HTMLFormControlElement.cpp: object getter
        (WebCore::HTMLFormControlElement::validity):
        * html/HTMLFormControlElement.h: ditto
        * html/HTMLInputElement.idl: "validity" attribute
        * html/HTMLSelectElement.idl: ditto
        * html/HTMLTextAreaElement.idl: ditto
        * html/ValidityState.cpp: Added.
        (WebCore::ValidityState::ValidityState):
        (WebCore::ValidityState::valid): validation flag
        * html/ValidityState.h: Added.
        (WebCore::ValidityState::create): creation routine
        (WebCore::ValidityState::control): ValidityState's parent getter
        (WebCore::ValidityState::valueMissing): validation flag
        (WebCore::ValidityState::typeMismatch): ditto
        (WebCore::ValidityState::patternMismatch): ditto
        (WebCore::ValidityState::tooLong): ditto
        (WebCore::ValidityState::rangeUnderflow): ditto
        (WebCore::ValidityState::rangeOverflow): ditto
        (WebCore::ValidityState::stepMismatch): ditto
        (WebCore::ValidityState::customError): ditto
        * html/ValidityState.idl: Added.

2009-07-10  Brady Eidson  <beidson@apple.com>

        Style cleanup over my last patch.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::~XMLHttpRequest):

2009-07-10  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoffrey Garen.

        * inspector/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::dynamicGlobalObject):
        * inspector/JavaScriptCallFrame.h: New helper method, used below.

        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::detach): In the special case
        where we detach from a window currently executing JavaScript,
        manually tear down our representation of the JavaScript
        call stack, since we won't get any more callbacks from JavaScriptCore
        to automatically tear it down. It's too bad that WebCore is
        responsible for this kind of tracking -- in the future, it would
        be nice if more of the breakpoint handling was inside of JavaScriptCore.

2009-07-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Antti Koivisto.

        https://bugs.webkit.org/show_bug.cgi?id=26496 and <rdar://problem/7046520>
        REGRESSION: XHR stream connection blocks iFrame loading and resource downloading

        With this test we ended up going over the maximum-connections-per-host limit that CFNetwork expected.
        When that happened, the first request that was over the limit ended up in a bizarre state where it 
        wasn't fully serviced until after the long running XHR was complete.

        Loader and Loader::Host work together to try to not exceed the max-connection limit but non-cache
        resources - such as XHR - could still end up causing this limit to be exceeded.

        This fix adds a workaround specifically for XHR while we hash out a more thorough solution that will
        handle this at the resource handle level.

        * loader/loader.cpp:
        (WebCore::Loader::nonCacheRequestInFlight):
        (WebCore::Loader::nonCacheRequestComplete):
        (WebCore::Loader::Host::Host):
        (WebCore::Loader::Host::nonCacheRequestInFlight):
        (WebCore::Loader::Host::nonCacheRequestComplete):
        (WebCore::Loader::Host::servePendingRequests): Take nonCacheRequestsInFlight into account.
        * loader/loader.h:
        (WebCore::Loader::Host::processingResource): Take nonCacheRequestsInFlight into account.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::~XMLHttpRequest): 
        (WebCore::XMLHttpRequest::loadRequestAsynchronously): Bump the nonCacheRequestInFlight count.
        (WebCore::XMLHttpRequest::didFail): Decrement that count if the Loader was notified.
        (WebCore::XMLHttpRequest::didFinishLoading): Ditto.

2009-07-10  Antti Koivisto  <antti@apple.com>

        Try to unbreak non-Mac build.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::formDidFocus):
        (WebCore::ChromeClient::formDidBlur):

2009-07-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders Carlsson.

        The rest of the fix for <rdar://problem/7038831> REGRESSION (TOT): 
        In Mail, a crash occurs at WebCore::Widget::afterMouseDown() after 
        clicking To Do's close box

        Make the Widget* in passMouseDownEventToWidget() a RefPtr.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passMouseDownEventToWidget):

2009-07-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        rename getDOMStructure calls w/o JSGlobalObject* to deprecatedGetDOMStructure
        https://bugs.webkit.org/show_bug.cgi?id=27157

        This is the first step to fixing
        https://bugs.webkit.org/show_bug.cgi?id=27088

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.h:
        (WebCore::deprecatedGetDOMStructure):
        (WebCore::createDOMObjectWrapper):
        (WebCore::createDOMNodeWrapper):
        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::JSNamedNodesCollection):
        * bindings/js/JSRGBColor.cpp:
        (WebCore::JSRGBColor::JSRGBColor):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcFallbackObjectImp::ObjcFallbackObjectImp):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::RuntimeArray):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::RuntimeMethod):
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::RuntimeObjectImp):

2009-07-10  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Antti Koivisto.

        Add delegate methods about focus and blur and state change
        https://bugs.webkit.org/show_bug.cgi?id=27153

        Call the appropriate new ChromeClient methods for focus and blur.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::dispatchFocusEvent):
        (WebCore::HTMLFormControlElement::dispatchBlurEvent):
        * html/HTMLFormControlElement.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::formDidFocus):
        (WebCore::EmptyChromeClient::formDidBlur):
        * page/ChromeClient.h:

2009-07-10  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/7048741> REGRESSION: Error about missing SwMenuX.dll opening pages with Shockwave
        
        Use altered search path while loading plug-ins. This modifies the DLL search order
        to look in the directory containing the plug-in even if a call to SetDllDirectory
        was previously made. Use of SetDllDirectory removes the current directory from the search path,
        breaking the previous strategy for locating any dependent DLLs of the plug-in.
        
        Reviewed by Jon Honeycutt.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::load): Use LoadLibraryEx with LOAD_WITH_ALTERED_SEARCH_PATH

2009-07-10  Adam Roben  <aroben@apple.com>

        Sort all our Xcode projects

        Accomplished using sort-Xcode-project-file.

        Requested by Dave Kilzer.

        * WebCore.xcodeproj/project.pbxproj:

2009-07-10  Adam Langley  <agl@google.com>

        Reviewed by Darin Fisher.

        Chromium Linux: use disabled images for disabled widgets.

        https://bugs.webkit.org/show_bug.cgi?id=27106

        Previously, checkboxes and radio controls rendered the same even if disabled.
        The Chromium side of this change is r20224.

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintCheckbox):
        (WebCore::RenderThemeChromiumSkia::paintRadio):

2009-07-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by John Sullivan.

        Fix crash when changing the zoom level in http://iphone.akamai.com/
        <rdar://problem/7029077>

        RenderLayerBacking's paintIntoLayer() method called updateLayerListsIfNeeded(),
        which could potentially destroy that compositing layer, causing a crash.
        Prevent this from happening by not doing a compositing update from paintIntoLayer().

        The existing updateLayerListsIfNeeded() was renamed to updateCompositingAndLayerListsIfNeeded(),
        and still does the compositing update. The new updateLayerListsIfNeeded() does not touch
        compositing layers, and is still called from paintIntoLayer().
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::updateLayerListsIfNeeded):
        (WebCore::RenderLayer::updateCompositingAndLayerListsIfNeeded):
        * rendering/RenderLayer.h:

2009-07-10  Drew Wilson  <atwilson@google.com>

        Reviewed by Darin Adler.

        Need to remove UsesManualToJSImplementation() in favor of CustomToJS.
        https://bugs.webkit.org/show_bug.cgi?id=27010

        Added support for CustomToJS IDL attribute to replace the hard-coded class list in UsesManualToJSImplementation().

        This is just a cleanup of existing functionality, so existing LayoutTests adequately cover this patch.

        * bindings/scripts/CodeGeneratorJS.pm:
        Removed UsesManualToJSImplementation(), added support for CustomToJS attribute.
        * css/CSSRule.idl:
        * css/CSSValue.idl:
        * css/StyleSheet.idl:
        * dom/Document.idl:
        * dom/Event.idl:
        * dom/Node.idl:
        * html/ImageData.idl:
        * svg/SVGElementInstance.idl:
        * svg/SVGPathSeg.idl:
        Added CustomToJS attribute to all the above IDL files.

2009-07-10  Dan Bernstein  <mitz@apple.com>

        - fix the build by reverting the ill-advised r45711

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToAnchor):

2009-07-09  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Tim Hatcher.

        Updated WebCore.base.exp to add some needed functions.

        * WebCore.base.exp:

2009-07-10  Dan Bernstein  <mitz@apple.com>

        - address a review comment from Simon Fraser which I forgot to include
          in the last check-in

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToAnchor): Pass true to getRect() for
        maximum transform friendliness!

2009-07-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        - fix https://bugs.webkit.org/show_bug.cgi?id=27137
          <rdar://problem/7043124> REGRESSION (r44311): Reproducible crash due
          to infinite recursion into FrameLoader::gotoAnchor() ->
          FrameView::layout()

        Test: fast/loader/goto-anchor-infinite-layout.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::gotoAnchor): Moved the code to update layout,
        find the renderer to scroll to, and scroll from here to methods on
        FrameView, and replaced it with a call to
        FrameView::maintainScrollPositionAtAnchor().
        (WebCore::FrameLoader::completed): Call maintainScrollPositionAtAnchor()
        instead of setLockedToAnchor().

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView): Removed initialization of
        m_lockedToAnchor.
        (WebCore::FrameView::reset): Reset m_maintainScrollPositionAnchor instead
        of m_lockedToAnchor.
        (WebCore::FrameView::layout): Removed the code related to scrolling to
        the anchor from here, because scrolling can trigger events which
        invalidate the layout, and as such, belongs with the post-layout tasks.
        (WebCore::FrameView::maintainScrollPositionAtAnchor): Added. When called
        with a node scrolls the view to the top of that node and maintains it
        scrolled to the top of the node during subsequent layouts, until
        this function is called with 0 or other things trigger scrolling.
        (WebCore::FrameView::scrollRectIntoViewRecursively): Reset
        m_maintainScrollPositionAnchor.
        (WebCore::FrameView::setScrollPosition): Ditto.
        (WebCore::FrameView::scrollToAnchor): Added. Scrolls to the top of
        m_maintainScrollPositionAnchor, if it is set.
        (WebCore::FrameView::performPostLayoutTasks): Call scrollToAnchor().
        (WebCore::FrameView::setWasScrolledByUser): Reset
        m_maintainScrollPositionAnchor.

        * page/FrameView.h: Removed lockedToAnchor(), setLockedToAnchor(),
        and m_lockedToAnchor. Added maintainScrollPositionAtAnchor() and
        m_maintainScrollPositionAnchor.

2009-07-04  Sriram Yadavalli  <sriram.yadavalli@nokia.com>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=26439

        QtWebKit fails in loading www.nytimes.com in Windows/Linux

        QNetworkReplyHandler is ignoring content associated with 401 error.
        This causes the XHR response handling to fail.

        Simon: Added also ProxyAuthenticationRequiredError, to handle the same
        case when going through proxies, as suggested by Prasanth.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):

2009-07-10  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        Enable HTML 5 Messaging to fix message channel Qt DRT failures in
        fast/events.

        * WebCore.pro:

2009-07-09  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Maciej Stachowiak.

        added InlineBox::isLeaf()
        firstLeafChild()/lastLeafChild() not virtual and not callable on InlineBox anymore.
        firstLeafChild()/lastLeafChild() will no longer return a node outside of the given subtree.   
        Removed firstLeafChildAfterBox()/lastLeafChildBeforeBox()
        Removed potentially quadratic behavior if all nodes before/after a given box are empty InlineFlowBoxes

        Currently, these methods are called on RootInlineBox objects only, so above changes should not have
        any observable effect (only the removal of the square performance behavior could apply, 
        but the conditions for that are probably of a rather theoretical nature).

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::nextLeafChild):
        (WebCore::InlineBox::prevLeafChild):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::isLeaf):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::firstLeafChild):
        (WebCore::InlineFlowBox::lastLeafChild):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::firstChild):
        (WebCore::InlineFlowBox::lastChild):
        (WebCore::InlineFlowBox::isLeaf):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::closestLeafChildForXPos):

2009-07-09  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Maciej Stachowiak.

        Added InlineBox::baselinePosition() and lineHeight() methods
        (adapted remaining code accordingly to use those methods)

        No change in functionality.

        * rendering/InlineBox.h:
        (WebCore::InlineBox::baselinePosition):
        (WebCore::InlineBox::lineHeight):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesVertically):

2009-07-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 27142 - canPlayType() should return empty string for unsupported content
        <https://bugs.webkit.org/show_bug.cgi?id=27142>

        Return "" instead of "no" for unsupport media types. 

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):

2009-07-09  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Maciej Stachowiak.

        Implement the part of HTML5 spec that deals with parsing of <rp> and <rt> tags
        in that their end tags are optional if followed by <rp>/<rt>.

        Also specify a new accessibility role "annotation" for <rp> and <rt>.

        Affected code parts are not enclosed in #IF ENABLE(RUBY), since the parsing
        is not affected by whether ruby is rendered properly or not (in fact, it may 
        be more profound without ruby layouting, since the contents of <rp> are not hidden).

        Test: fast/ruby/parse-rp.html

        * accessibility/AccessibilityObject.h:
        (WebCore::):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::roleValue):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::endTagRequirement):
        (WebCore::HTMLElement::tagPriority):
        (WebCore::inlineTagList):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::rpCreateErrorCheck):
        (WebCore::HTMLParser::rtCreateErrorCheck):
        (WebCore::HTMLParser::getNode):
        * html/HTMLParser.h:
        * html/HTMLTagNames.in:

2009-07-09  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, fix for previous commit.

        The change http://trac.webkit.org/changeset/45695 did not correctly
        enabled GTL and QT build flags. This caused layout tests failure.
        This is speculative fix for those failures.

        * GNUmakefile.am: added ENABLE_CHANNEL_MESSAGING flag.
        * WebCore.pro: ditto.
        * page/DOMWindow.idl: touched to cause recompile.
        * workers/WorkerContext.idl: ditto.

2009-07-09  Drew Wilson  <atwilson@google.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=26903

        Turned on CHANNEL_MESSAGING by default because the MessageChannel API
        is now implemented for Web Workers and is reasonably stable.

        Tests: fast/events/message-channel-gc-2.html
               fast/events/message-channel-gc-3.html
               fast/events/message-channel-gc-4.html
               fast/events/message-channel-gc.html
               fast/events/message-channel-listener-circular-ownership.html
               fast/events/message-port-clone.html
               fast/events/message-port-constructor-for-deleted-document.html
               fast/events/message-port-deleted-document.html
               fast/events/message-port-deleted-frame.html
               fast/events/message-port-inactive-document.html
               fast/events/message-port-no-wrapper.html
               fast/events/message-port.html
               fast/workers/worker-cloneport.html
               fast/workers/worker-messageport-gc.html
               fast/workers/worker-messageport.html

        * Configurations/FeatureDefines.xcconfig: Turned on ENABLE_CHANNEL_MESSAGING.
        * WebCore/WebCore.vcproj/WebCoreCommon.vsprops: ditto.
        * WebCore/WebCore.vcproj/build-generated-files.sh: ditto.
        * WebCore/page/DOMWindow.idl: touch the file to cause re-generation of headers.
        * WebCore/workers/WorkerContext.idl: ditto.


2009-07-09  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        Full page zoom breaks remaining and elapsed time display in the <video> controller.
        https://bugs.webkit.org/show_bug.cgi?id=27123

        We are changing the size of the time remaining and time elapsed field, to
        automatically hide them, when the controller is too short.

        Because we toggle the size between 0 and the previous value of the
        controller, we miss any width change that may occur during full page zoom,
        and we fail to restore a correct width.

        This change fixes that problem by using a cloned style on which we
        set the width to 0, and restoring the previous style when going back to
        the normal width.

        We take care about properly using the cloned style or the pseudo style,
        by overriding styleForElement().

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlElement::styleForElement):
        (WebCore::MediaControlElement::attach):
        (WebCore::MediaControlElement::updateStyle):
        (WebCore::MediaControlInputElement::styleForElement):
        (WebCore::MediaControlInputElement::attach):
        (WebCore::MediaControlInputElement::updateStyle):
        (WebCore::MediaControlTimeDisplayElement::MediaControlTimeDisplayElement):
        (WebCore::MediaControlTimeDisplayElement::styleForElement):
        (WebCore::MediaControlTimeDisplayElement::setVisible):
        * rendering/MediaControlElements.h:
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::shouldShowTimeDisplayControls): Make sure
        we take in account the zoom level when deciding if we should hide the 
        ellapsed and remaining time.

2009-07-09  Michael Nordman  <michaeln@google.com>

        Reviewed by Darin Adler.

        Fix chromium build bustage due to Widget being a RefCounted class.
        https://bugs.webkit.org/show_bug.cgi?id=27139

        * platform/chromium/PopupMenuChromium.cpp:
        * platform/chromium/PopupMenuChromium.h:

2009-07-09  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 27130 - Need to implement ARIA role="toolbar"
        https://bugs.webkit.org/show_bug.cgi?id=27130

        Test: platform/mac/accessibility/aria-toolbar.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::RoleEntry::):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper roleDescription]):

2009-07-09  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Upstream WebCore.gypi, the project file for Chromium build.
        https://bugs.webkit.org/show_bug.cgi?id=27135

        * WebCore.gypi: Added.

2009-07-09  Jon Honeycutt  <jhoneycutt@apple.com>

        A more robust fix for <rdar://problem/6930280> Reproducible crash at
        USA Today photo gallery

        Reviewed by Steve Falkenburg.

        * plugins/win/PluginMessageThrottlerWin.cpp:
        (WebCore::PluginMessageThrottlerWin::messageThrottleTimerFired):
        Protect the PluginView from destruction before calling its window proc.

2009-07-09  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/6978804> WER #16: Repro Access Violation in
        WebCore::PluginView::bindingInstance (1310178023)

        Reviewed by Darin Adler.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::bindingInstance):
        Protect the PluginView from destruction before calling NPN_GetValue. If
        the renderer for the PluginView was destroyed during the call, and the
        PluginView's ref count is now 1, return null.

2009-07-09  Jon Honeycutt  <jhoneycutt@apple.com>

        Speculative fix for <rdar://problem/6991251> WER #13: Crash in
        WebKit!WebCore::PluginView::performRequest+203 (1311461169)

        Reviewed by Darin Adler.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::performRequest):
        Protect the PluginView from destruction before performing a load.
        Removed some trailing whitespace.

2009-07-09  Jon Honeycutt  <jhoneycutt@apple.com>

        Build fix.

        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::setJavaScriptPaused):

2009-07-09  Beth Dakin and Jon Honeycutt <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Make Widget RefCounted to fix or make fixable:

        <rdar://problem/7038831> REGRESSION (TOT): In Mail, a crash occurs 
        at WebCore::Widget::afterMouseDown() after clicking To Do's close 
        box
        <rdar://problem/6978804> WER #16: Repro Access Violation in 
        WebCore::PluginView::bindingInstance (1310178023)
        -and-
        <rdar://problem/6991251> WER #13: Crash in WebKit!
        WebCore::PluginView::performRequest+203 (1311461169) 

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::createPlugin):
        Changed to return PassRefPtr
        (WebCore::EmptyFrameLoaderClient::createJavaAppletWidget):
        Ditto.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadSubframe):
        (WebCore::FrameLoader::loadPlugin):
        Make the widget variable a RefPtr. Use .get() when passing it to
        RenderPart::setWidget().
        (WebCore::FrameLoader::createJavaAppletWidget):
        Make the widget variable a RefPtr.

        * loader/FrameLoader.h:
        Changed the return type of createJavaAppletWidget().

        * loader/FrameLoaderClient.h:
        Change the return types of createPlugin() and 
        createJavaAppletWidget().

        * page/Frame.cpp:
        (WebCore::Frame::createView):
        No need to call .get() since setWidget() takes a RefPtr.

        * page/FrameView.cpp:
        (WebCore::FrameView::layoutIfNeededRecursive):
        children() now returns a HashSet of RefPtrs.

        * page/FrameView.h:
        Remove inheritance from RefCounted; we pick this up from ScrollView
        through Widget.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::addChild):
        addChild() now takes a PassRefPtr and m_children now keeps a 
        HashSet of RefPtrs.

        * platform/ScrollView.h:
        ScrollView constructor is now protected.
        (WebCore::ScrollView::children):
        m_children is now a HashSet of RefPtrs.

        * platform/Scrollbar.h:
        Remove inheritance from RefCounted; we pick this up from ScrollView
        through Widget.

        * platform/Widget.h:
        Inherit from RefCounted. Cleaned up some whitespace. Make m_widget 
        a RefPtr.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::create):
        Adopt the PluginView when returning it.

        * plugins/PluginView.h:
        Changed create() to return a PassRefPtr.

        * rendering/RenderApplet.cpp:
        Receive result in a RefPtr when calling createJavaAppletWidget().

        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::setWidget): 
        setWidget() now takes a PassRefPtr. Also removed the manual ref of 
        FrameViews. This is handled by having m_widget be a RefPtr. Removed 
        deleteWidget().

        * rendering/RenderPart.h:
        Removed override of deleteWidget().

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):
        (WebCore::RenderWidget::setWidget):
        (WebCore::RenderWidget::paint):
        (WebCore::RenderWidget::setOverlapTestResult):
        (WebCore::RenderWidget::updateWidgetPosition):
        Use .get().
        (WebCore::RenderWidget::clearWidget):
        Don't call deleteWidget(). It was removed. 

        * rendering/RenderWidget.h:
        Removed deleteWidget(). Made m_widget a RefPtr.
        (WebCore::RenderWidget::widget):
        Use .get().

2009-07-09  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 27129 - AX: possible assertion for a non-native image in accessibility
        https://bugs.webkit.org/show_bug.cgi?id=27129 

        It's possible for an image that is not really an image to assert, because its renderer
        is turned into a RenderImage.

        Test: accessibility/non-native-image-crash.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::RoleEntry::):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper roleDescription]):

2009-07-09  Simon Fraser  <simon.fraser@apple.com>

        Build fix for SnowLeopard.
        
        Avoid using the contentsTransform methods if not on Leopard, because
        we don't need to call them.

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::updateContentsTransform):
        * platform/graphics/mac/WebLayer.mm:
        (-[WebLayer setNeedsDisplayInRect:]):
        * platform/graphics/mac/WebTiledLayer.mm:
        (-[WebTiledLayer setNeedsDisplayInRect:]):

2009-07-09  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Improve the appearance of text in compositing layers when -[CALayer geometryFlipped]
        is not available.
        <rdar://problem/6120614>

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setContentsOrientation):
        (WebCore::GraphicsLayer::contentsOrientation):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        Add a m_contentsOrientation member and getter/setter to control whether
        the contents of this layer have a transform applied to them before display.

        * platform/graphics/mac/GraphicsLayerCA.h:
        New method to return the default contents orientation.

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::flipTransform):
        Convenience method to return a transform with a Y flip.

        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::setSize):
        After the size changes we have to update the contentsTransform.

        (WebCore::GraphicsLayerCA::setGeometryOrientation):
        (WebCore::GraphicsLayerCA::geometryOrientation):
        If -setGeometryFlipped: is not available, use a children transform.
        
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        Tiled layers have issues with flipped contentsTransform, so just use
        top-down drawing for them. Call updateContentsTransform() to set the
        new contents transform after swapping layers.
        
        (WebCore::GraphicsLayerCA::defaultContentsOrientation):
        Use bottom-up when -geometryFlipped is not available, otherwise top-down.
        
        (WebCore::GraphicsLayerCA::updateContentsTransform):
        Set the layer contents transform based on contentsOrientation().

        (WebCore::GraphicsLayerCA::setContentsLayer):
        We have to manually flip contents layers if we're not using -geometryFlipped.
        
        * platform/graphics/mac/WebLayer.h:
        * platform/graphics/mac/WebLayer.mm:
        Do early return if layerContents is nil. Flip the CTM if the layer has
        bottom-up coordinates, so that CG sees a CTM with no flip.
        Do the CGContextRestoreGState() after drawing the debug indicator.
        
        (-[WebLayer setNeedsDisplayInRect:]):
        * platform/graphics/mac/WebTiledLayer.mm:
        (-[WebTiledLayer setNeedsDisplayInRect:]):
        Need to map the dirty rect through the contentsTransform.

2009-07-09  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        <rdar://problem/6921671> Visit counter shouldn't be incremented by redirects.

        Can't test this functionality with layout tests.

        * WebCore.base.exp:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::recordVisitAtTime):
        (WebCore::HistoryItem::visited):
        * history/HistoryItem.h:
        Only increase visit count if explicitly told to. Now, some visits change last access time,
        but do not increase visit count.

2009-07-09  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7046098> MediaControllerThemeQT requires QuickTime 7.6.3

        Require QuickTime 7.6.3 or higher to enable the new media controller UI.

        * rendering/RenderThemeMac.mm:
        (WebCore::mediaControllerTheme):

2009-07-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Remove incorrect comment.

        * page/MouseEventWithHitTestResults.h:

2009-07-09  Mads Ager  <ager@chromium.org>

        Reviewed by Dimitri Glazkov.

        Update the V8 bindings codegenerator to use the RGBColor::create
        method to handle refcounts for RGBColor objects correctly.
        
       * bindings/scripts/CodeGeneratorV8.pm: Use RGBColor::create to create RGBColor objects.

2009-07-09  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson.

        Crash in RenderMedia::styleDidChange.
        <rdar://problem/7044313> CrashTracer: quicklook crashed generating thumbnail for page with 
        media element (RenderMedia::styleDidChange 115)

        Speculative fix for crash in styleDidChange. Null check controller elements before tell
        them to update style.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::styleDidChange):

2009-07-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Move V8DOMWrapper to its own file
        https://bugs.webkit.org/show_bug.cgi?id=27121

        * bindings/v8/V8DOMWrapper.cpp: Added.
        (WebCore::GetToStringName):
        (WebCore::ConstructorToString):
        (WebCore::V8DOMWrapper::convertSVGElementInstanceToV8Object):
        (WebCore::V8DOMWrapper::convertSVGObjectWithContextToV8Object):
        (WebCore::V8DOMWrapper::domObjectHasJSWrapper):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject):
        (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMObject):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode):
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8DOMWrapper::convertToV8Object):
        (WebCore::V8DOMWrapper::setHiddenWindowReference):
        (WebCore::V8DOMWrapper::domWrapperType):
        (WebCore::V8DOMWrapper::convertToNativeObjectImpl):
        (WebCore::V8DOMWrapper::convertToSVGPODTypeImpl):
        (WebCore::V8DOMWrapper::lookupDOMWrapper):
        (WebCore::V8DOMWrapper::convertDOMWrapperToNodeHelper):
        (WebCore::V8DOMWrapper::wrapNativeNodeFilter):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        (WebCore::V8DOMWrapper::setDOMWrapper):
        (WebCore::V8DOMWrapper::maybeDOMWrapper):
        (WebCore::V8DOMWrapper::isDOMEventWrapper):
        (WebCore::V8DOMWrapper::isWrapperOfType):
        (WebCore::V8DOMWrapper::htmlElementType):
        (WebCore::V8DOMWrapper::svgElementType):
        (WebCore::V8DOMWrapper::convertEventToV8Object):
        (WebCore::):
        (WebCore::V8DOMWrapper::convertNodeToV8Object):
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        (WebCore::V8DOMWrapper::convertEventListenerToV8Object):
        (WebCore::V8DOMWrapper::convertDOMImplementationToV8Object):
        (WebCore::V8DOMWrapper::convertStyleSheetToV8Object):
        (WebCore::V8DOMWrapper::convertCSSValueToV8Object):
        (WebCore::V8DOMWrapper::convertCSSRuleToV8Object):
        (WebCore::V8DOMWrapper::convertWindowToV8Object):
        * bindings/v8/V8DOMWrapper.h: Added.
        (WebCore::V8DOMWrapper::convertDOMWrapperToNative):
        (WebCore::V8DOMWrapper::wrapCPointer):
        (WebCore::V8DOMWrapper::extractCPointer):
        (WebCore::V8DOMWrapper::convertDOMWrapperToNode):
        (WebCore::V8DOMWrapper::convertToV8Object):
        (WebCore::V8DOMWrapper::convertToNativeObject):
        (WebCore::V8DOMWrapper::convertToNativeEvent):
        (WebCore::V8DOMWrapper::extractCPointerImpl):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8Proxy.h:

2009-07-09  David Hyatt  <hyatt@apple.com>

        Reviewed by Adele Peterson.

        Crash in setFocusedFrame.
        <rdar://7032869> Crashing in setFocusedFrame on blogger.com.

        Speculative fix for crasher in setFocusedFrame.  Make sure to ref both frames and fire
        the events only after the local member has been updated.

        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedFrame):

2009-07-09  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson.

        Possible crashes when mouse clicks not dispatched because range input destroyed while 
        thumb is being dragged (e.g. scrub to end of movie)
        <rdar://problem/7037494> 
        https://bugs.webkit.org/show_bug.cgi?id=27101

        Some shadow nodes "capture" all mouse events from mouseDown to mouseUp so they continue to 
        get mouse events even when the mouse is moved outside of the node. This is done by putting
        EventHandler into a mode where it sends all mouse events to the node regardless of the
        actual mouse position. The mode is set on mouseDown and cleared on mouseUp but if the
        node is deleted while in this mode, the mouseUp is never sent and EventHandler continues
        to try to send events to the deleted node. This sometimes results in a crash, and sometimes
        in a page that doesn't respond to click events.

        Tests: fast/forms/search-delete-while-cancel-button-clicked.html
               fast/forms/slider-delete-while-dragging-thumb.html
               media/audio-delete-while-slider-thumb-clicked.html
               media/audio-delete-while-step-button-clicked.html

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlSeekButtonElement::detach):
            New, call setCapturingMouseEventsNode if capturing mouse events.
        * rendering/MediaControlElements.h:
            Declare detach().

        * rendering/RenderSlider.cpp:
        (WebCore::SliderThumbElement::detach):
            New, call setCapturingMouseEventsNode if capturing mouse events.

        * rendering/TextControlInnerElements.cpp:
        (WebCore::SearchFieldCancelButtonElement::detach):
            New, call setCapturingMouseEventsNode if capturing mouse events.
        * rendering/TextControlInnerElements.h:
            Declare detach().

2009-07-09  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Dimitri Glazkov.

        Enter the Frame's context before creating new objects in setContextDebugId.

        https://bugs.webkit.org/show_bug.cgi?id=27112

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setContextDebugId):

2009-07-09  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * WebCore.pro: Add new storage impl files to the build.

2009-07-08  Adam Barth  <abarth@webkit.org>

        Rubber stamped by Eric Seidel.

        [V8] Move DOM wrapper functions in V8Proxy to V8DOMWrapper
        https://bugs.webkit.org/show_bug.cgi?id=27107

        This patch is just renaming.  Code motion will occur next.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        (WebCore::createScriptObject):
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/v8/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::handleEvent):
        (WebCore::V8AbstractEventListener::getReceiverObject):
        * bindings/v8/V8Collection.cpp:
        (WebCore::toOptionsCollectionSetter):
        * bindings/v8/V8Collection.h:
        (WebCore::getV8Object):
        (WebCore::getNamedPropertyOfCollection):
        (WebCore::nodeCollectionNamedPropertyGetter):
        (WebCore::getIndexedPropertyOfCollection):
        (WebCore::nodeCollectionIndexedPropertyGetter):
        (WebCore::nodeCollectionIndexedPropertyEnumerator):
        (WebCore::collectionIndexedPropertyEnumerator):
        (WebCore::collectionStringOrNullIndexedPropertyGetter):
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::DOMData::handleWeakObject):
        (WebCore::DOMData::removeObjectsFromWrapperMap):
        * bindings/v8/V8GCController.cpp:
        (WebCore::enumerateDOMObjectMap):
        (WebCore::DOMObjectVisitor::visitDOMWrapper):
        (WebCore::GCPrologueVisitor::visitDOMWrapper):
        (WebCore::GCEpilogueVisitor::visitDOMWrapper):
        * bindings/v8/V8Helpers.cpp:
        (WebCore::wrapNPObject):
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::acceptNode):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8DOMWrapper::convertSVGElementInstanceToV8Object):
        (WebCore::V8DOMWrapper::convertSVGObjectWithContextToV8Object):
        (WebCore::V8DOMWrapper::domObjectHasJSWrapper):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject):
        (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMObject):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode):
        (WebCore::V8Proxy::evaluateInNewContext):
        (WebCore::V8Proxy::getConstructor):
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8Proxy::retrieveWindow):
        (WebCore::V8Proxy::updateDocumentWrapperCache):
        (WebCore::V8Proxy::clearForNavigation):
        (WebCore::V8Proxy::installDOMWindow):
        (WebCore::setDOMExceptionHelper):
        (WebCore::V8DOMWrapper::convertToV8Object):
        (WebCore::V8DOMWrapper::setHiddenWindowReference):
        (WebCore::V8DOMWrapper::domWrapperType):
        (WebCore::V8DOMWrapper::convertToNativeObjectImpl):
        (WebCore::V8DOMWrapper::convertToSVGPODTypeImpl):
        (WebCore::V8DOMWrapper::lookupDOMWrapper):
        (WebCore::V8DOMWrapper::convertDOMWrapperToNodeHelper):
        (WebCore::V8DOMWrapper::wrapNativeNodeFilter):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        (WebCore::V8DOMWrapper::setDOMWrapper):
        (WebCore::V8DOMWrapper::maybeDOMWrapper):
        (WebCore::V8DOMWrapper::isDOMEventWrapper):
        (WebCore::V8DOMWrapper::isWrapperOfType):
        (WebCore::V8DOMWrapper::htmlElementType):
        (WebCore::V8DOMWrapper::svgElementType):
        (WebCore::V8DOMWrapper::convertEventToV8Object):
        (WebCore::V8DOMWrapper::convertNodeToV8Object):
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        (WebCore::V8DOMWrapper::convertEventListenerToV8Object):
        (WebCore::V8DOMWrapper::convertDOMImplementationToV8Object):
        (WebCore::V8DOMWrapper::convertStyleSheetToV8Object):
        (WebCore::V8DOMWrapper::convertCSSValueToV8Object):
        (WebCore::V8DOMWrapper::convertCSSRuleToV8Object):
        (WebCore::V8DOMWrapper::convertWindowToV8Object):
        (WebCore::V8Proxy::bindJsObjectToWindow):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8DOMWrapper::convertDOMWrapperToNative):
        (WebCore::V8DOMWrapper::wrapCPointer):
        (WebCore::V8DOMWrapper::extractCPointer):
        (WebCore::V8DOMWrapper::convertDOMWrapperToNode):
        (WebCore::V8DOMWrapper::convertToV8Object):
        (WebCore::V8DOMWrapper::convertToNativeObject):
        (WebCore::V8DOMWrapper::convertToNativeEvent):
        (WebCore::V8DOMWrapper::extractCPointerImpl):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        (WebCore::V8Proxy::constructDOMObject):
        (WebCore::toV8):
        * bindings/v8/V8SVGPODTypeWrapper.h:
        (WebCore::V8SVGPODTypeUtil::toSVGPODType):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::retrieve):
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):
        (WebCore::WorkerContextExecutionProxy::GetConstructor):
        (WebCore::WorkerContextExecutionProxy::ToV8Object):
        (WebCore::WorkerContextExecutionProxy::EventToV8Object):
        (WebCore::WorkerContextExecutionProxy::toV8):
        * bindings/v8/custom/V8AttrCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasPixelArrayCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::toV8):
        (WebCore::toCanvasStyle):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8ClientRectListCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8CustomBinding.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::INDEXED_ACCESS_CHECK):
        (WebCore::NAMED_ACCESS_CHECK):
        (WebCore::V8Custom::GetTargetFrame):
        * bindings/v8/custom/V8CustomSQLStatementCallback.cpp:
        (WebCore::V8CustomSQLStatementCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8CustomSQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLTransactionCallback.cpp:
        (WebCore::V8CustomSQLTransactionCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp:
        (WebCore::V8CustomSQLTransactionErrorCallback::handleEvent):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::V8Custom::ClearTimeoutImpl):
        (WebCore::NAMED_ACCESS_CHECK):
        (WebCore::INDEXED_ACCESS_CHECK):
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::getItem):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8HTMLFrameSetElementCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_SETTER):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8HTMLSelectElementCollectionCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::removeElement):
        * bindings/v8/custom/V8InspectorControllerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_ACCESS_CHECK):
        (WebCore::NAMED_ACCESS_CHECK):
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8NavigatorCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        (WebCore::toV8):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGElementInstanceCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8StorageCustom.cpp:
        (WebCore::V8Custom::v8StorageNamedPropertyEnumerator):
        (WebCore::storageGetter):
        (WebCore::storageSetter):
        (WebCore::storageDeleter):
        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        (WebCore::toV8):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WebKitCSSMatrixConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::SetTimeoutOrInterval):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-07-08  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        Make sure we can click outside the slider thumb and start dragging.
        https://bugs.webkit.org/show_bug.cgi?id=26229

        Previously we were assuming that if the thumb hasn't been clicked, we
        wouldn't issue any value change upon dragging.

        We need to handle the two different cases:
        - Clicked in the thumb, we need to make sure the cursor is always pointing
        the same slider thumb point.
        - Clicked outside, the cursor should always be pointing to the center of
        the thumb.

        For simplicity, we don't remember the original point of the mouse down,
        but a vector between that point and the thumb.

        * rendering/RenderSlider.cpp:
        (WebCore::SliderThumbElement::SliderThumbElement):
        (WebCore::SliderThumbElement::defaultEventHandler):
        (WebCore::RenderSlider::mouseEventVectorToThumb): Utility function.
        * rendering/RenderSlider.h:

2009-07-08  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=27100
        <rdar://problem/7042621>

        Don't display "loading" in the <video> controller when
        there is no src specified.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlStatusDisplayElement::update): The only
        way to find out if we have an element is currentSrc(). networkState()
        will always report LOADING according to the spec.

2009-07-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [V8] Move V8GCController functions to their own file
        https://bugs.webkit.org/show_bug.cgi?id=27102

        * bindings/v8/V8GCController.cpp: Added.
        * bindings/v8/V8GCController.h: Added.
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8Proxy.h:

2009-07-08  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Split StorageArea and StorageNamespace into an interface and implementation.
        https://bugs.webkit.org/show_bug.cgi?id=27072

        I need to split StorageNamespace and StorageArea into an interface and
        implementation.  In a later patch, I'll implement a proxy interface
        that'll run inside the Chromium renderer process.

        Additionally, fix the alphabetical ordering of files I recently added
        in the project files.

        This is a continuation of other refactoring work:
        https://bugs.webkit.org/show_bug.cgi?id=25376

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/StorageArea.cpp:
        (WebCore::StorageArea::create):
        * storage/StorageArea.h:
        (WebCore::StorageArea::~StorageArea):
        * storage/StorageAreaImpl.cpp: Copied from WebCore/storage/StorageArea.cpp.
        (WebCore::StorageAreaImpl::create):
        (WebCore::StorageAreaImpl::~StorageAreaImpl):
        (WebCore::StorageAreaImpl::StorageAreaImpl):
        (WebCore::StorageAreaImpl::copy):
        (WebCore::StorageAreaImpl::length):
        (WebCore::StorageAreaImpl::key):
        (WebCore::StorageAreaImpl::getItem):
        (WebCore::StorageAreaImpl::setItem):
        (WebCore::StorageAreaImpl::removeItem):
        (WebCore::StorageAreaImpl::clear):
        (WebCore::StorageAreaImpl::contains):
        (WebCore::StorageAreaImpl::importItem):
        (WebCore::StorageAreaImpl::securityOrigin):
        (WebCore::StorageAreaImpl::close):
        (WebCore::StorageAreaImpl::blockUntilImportComplete):
        (WebCore::StorageAreaImpl::dispatchStorageEvent):
        * storage/StorageAreaImpl.h: Copied from WebCore/storage/StorageArea.h.
        * storage/StorageAreaSync.h:
        * storage/StorageNamespace.cpp:
        (WebCore::StorageNamespace::localStorageNamespace):
        (WebCore::StorageNamespace::sessionStorageNamespace):
        * storage/StorageNamespace.h:
        (WebCore::StorageNamespace::~StorageNamespace):
        * storage/StorageNamespaceImpl.cpp: Copied from WebCore/storage/StorageNamespace.cpp.
        (WebCore::StorageNamespaceImpl::localStorageNamespace):
        (WebCore::StorageNamespaceImpl::sessionStorageNamespace):
        (WebCore::StorageNamespaceImpl::StorageNamespaceImpl):
        (WebCore::StorageNamespaceImpl::~StorageNamespaceImpl):
        (WebCore::StorageNamespaceImpl::copy):
        (WebCore::StorageNamespaceImpl::storageArea):
        (WebCore::StorageNamespaceImpl::close):
        * storage/StorageNamespaceImpl.h: Copied from WebCore/storage/StorageNamespace.h.

2009-07-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [V8] Move garbage collector related functions from V8Proxy to V8GCController
        https://bugs.webkit.org/show_bug.cgi?id=26967

        This patch just moves the functions around in V8Proxy.  We'll actually
        move them to a separate file in another patch.

        * bindings/v8/NPV8Object.cpp:
        (freeV8NPObject):
        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::~ScheduledAction):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::gcProtectJSWrapper):
        (WebCore::ScriptController::gcUnprotectJSWrapper):
        * bindings/v8/ScriptInstance.cpp:
        (WebCore::V8ScriptInstance::clear):
        (WebCore::V8ScriptInstance::set):
        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::ScriptValue):
        (WebCore::ScriptValue::operator=):
        (WebCore::ScriptValue::clear):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::disposeListenerObject):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::~V8LazyEventListener):
        (WebCore::V8LazyEventListener::getListenerFunction):
        (WebCore::V8LazyEventListener::getWrappedListenerFunction):
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::V8NodeFilterCondition):
        (WebCore::V8NodeFilterCondition::~V8NodeFilterCondition):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8GCController::registerGlobalHandle):
        (WebCore::V8GCController::unregisterGlobalHandle):
        (WebCore::V8GCController::gcProtect):
        (WebCore::V8GCController::gcUnprotect):
        (WebCore::V8Proxy::destroyGlobal):
        (WebCore::V8Proxy::updateDocumentWrapper):
        (WebCore::V8Proxy::clearDocumentWrapper):
        (WebCore::V8Proxy::disposeContextHandles):
        (WebCore::V8Proxy::initContextIfNeeded):
        * bindings/v8/V8Proxy.h:
        (WebCore::):
        (WebCore::GlobalHandleInfo::GlobalHandleInfo):
        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::V8EventListener):

2009-07-08  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.
        
        https://bugs.webkit.org/show_bug.cgi?id=26918
        
        Prevents injection of HTML Base tag.

        Tests: http/tests/security/xssAuditor/base-href-control-char.html
               http/tests/security/xssAuditor/base-href-null-char.html
               http/tests/security/xssAuditor/base-href-safe.html
               http/tests/security/xssAuditor/base-href-safe2.html
               http/tests/security/xssAuditor/base-href-scheme-relative.html
               http/tests/security/xssAuditor/base-href.html

        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::parseMappedAttribute):
        (WebCore::HTMLBaseElement::process): Modified to call XSSAuditor::canSetBaseElementURL
        to determine if it is safe to use base element URL.
        * html/HTMLBaseElement.h: Added field m_hrefAttrValue to store unparsed base element URL.
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canSetBaseElementURL):
        * page/XSSAuditor.h:

2009-07-08  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Upstream V8 npruntime bindings.

        https://bugs.webkit.org/show_bug.cgi?id=27094

        * bindings/v8/npruntime.cpp: Upstreamed from src.chromium.org.
        (StringKey::operator==):
        (StringKey::StringKeyHash::hash):
        (StringKey::StringKeyHash::equal):
        (StringKeyHashTraits::constructDeletedValue):
        (StringKeyHashTraits::isDeletedValue):
        (getStringIdentifierMap):
        (getIntIdentifierMap):
        * bindings/v8/npruntime_impl.h: Upstreamed from src.chromium.org.
        * bindings/v8/npruntime_internal.h: Upstreamed from src.chromium.org.
        * bindings/v8/npruntime_priv.h: Upstreamed from src.chromium.org.

2009-07-08  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Darin Fisher.

        Extending the PlatformFileHandle definition from PLATFORM(WIN) to
        PLATFORM(WIN_OS)

        https://bugs.webkit.org/show_bug.cgi?id=27013

        * platform/FileSystem.h:

2009-07-08  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.
        
        https://bugs.webkit.org/show_bug.cgi?id=27071
        
        Resolves issue when HTTP parameters contain null- and  non-null-control- characters.

        Tests: http/tests/security/xssAuditor/anchor-url-dom-write-location-inline-event-null-char.html
               http/tests/security/xssAuditor/embed-tag-control-char.html
               http/tests/security/xssAuditor/embed-tag-null-char.html
               http/tests/security/xssAuditor/embed-tag.html
               http/tests/security/xssAuditor/link-onclick-control-char.html
               http/tests/security/xssAuditor/link-onclick-null-char.html
               http/tests/security/xssAuditor/object-embed-tag-control-char.html
               http/tests/security/xssAuditor/object-embed-tag-null-char.html
               http/tests/security/xssAuditor/object-embed-tag.html
               http/tests/security/xssAuditor/object-tag.html
               http/tests/security/xssAuditor/script-tag-post-control-char.html
               http/tests/security/xssAuditor/script-tag-post-null-char.html
               http/tests/security/xssAuditor/script-tag-with-source-control-char.html
               http/tests/security/xssAuditor/script-tag-with-source-null-char.html

        * page/XSSAuditor.cpp:
        (WebCore::isNonNullControlCharacter): Called by XSSAuditor::decodeURL.
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canCreateInlineEventListener):
        (WebCore::XSSAuditor::canLoadObject):
        (WebCore::XSSAuditor::decodeURL): Added parameters matchNullCharacters,
        and matchNonNullControlCharacters.
        (WebCore::XSSAuditor::findInRequest): Added parameters matchNullCharacters,
        and matchNonNullControlCharacters.
        * page/XSSAuditor.h:

2009-07-08  Marc-Antoine Ruel  <maruel@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add DerivesSourcesAllInOne.cpp to help with release windows compilation.
        https://bugs.webkit.org/show_bug.cgi?id=27093

        This is specific for v8, no change in behavior.

        * bindings/v8/DerivedSourcesAllInOne.cpp: Added.

2009-07-08  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=27086

        Make sure the Media controller doesn't fade in for no reason.
        This is happening because a update() call to the controller
        panel may reset the opacity to 1.0, given that it reloads the
        style.

        We also add a different fade in and fade out time to soften
        the fade out effect.

        No test case because this depends on how the movie is loaded.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::RenderMedia):
        (WebCore::RenderMedia::updateControls):
        (WebCore::RenderMedia::updateControlVisibility): Simplify
        , and make sure we stop the timer if there is no animation
        to do.
        (WebCore::RenderMedia::opacityAnimationTimerFired): 
        * rendering/RenderMedia.h:

2009-07-08  David Kilzer  <ddkilzer@apple.com>

        Bug 27081: Wrap RunLoopTimerCF.cpp in PLATFORM(MAC) && HAVE(RUNLOOP_TIMER)

        <https://bugs.webkit.org/show_bug.cgi?id=27081>

        Reviewed by Timothy Hatcher.

        * platform/cf/RunLoopTimerCF.cpp: This code is only used on
        Mac OS X when HAVE(RUNLOOP_TIMER) is enabled, so wrap the code
        in that macro as well.

2009-07-08  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.

        Add -[WebView _isProcessingUserGesture]
        https://bugs.webkit.org/show_bug.cgi?id=27084

        Rename FrameLoader::userGestureHint() to FrameLoader::isProcessingUserGesture()
        for clarity.

        * WebCore.base.exp: Add WebCore::FrameLoader::isProcessingUserGesture()
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::processingUserGesture):
        * loader/FrameLoader.cpp: 
        (WebCore::FrameLoader::requestFrame):
        (WebCore::FrameLoader::isProcessingUserGesture):
        * loader/FrameLoader.h:

2009-07-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed (an earlier version) by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=27090
        Remove lockBackForwardList argument from HTMLFormElement::submit()

        No change in behavior, so no tests.

        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::submit):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit):
        * html/HTMLFormElement.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::scheduleFormSubmission):
        * loader/FrameLoader.h:
        Don't pass lockBackForwardList around when it's known to be false.

2009-07-08  Marc-Antoine Ruel  <maruel@chromium.org>

        Reviewed by Adam Barth.

        Fix V8 idl codegen to use unique constant names
        <https://bugs.webkit.org/show_bug.cgi?id=27089>

        Embed the interface name in the global constant names so coagulating all
        the .cc files into one compile unit works with V8 bindings.

        Nothing added; Still compiles and pass tests.

        * bindings/scripts/CodeGeneratorV8.pm:

2009-07-08  Brent Fulgham  <bfulgham@webkit.org>

        Build fix: Add missing #includes for Windows (cURL) build.
        The <winsock2.h> and <windows.h> headers were not being
        included in Windows cURL builds.

        * platform/network/ResourceHandleInternal.h:
        * platform/network/curl/ResourceHandleManager.h:

2009-07-08  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Kilzer.

        WebKit needs a style linting tool
        https://bugs.webkit.org/show_bug.cgi?id=25884

        Fix bunch of style issues in WebCore/rendering.
        This patch is created to demonstrate cpplint.py.

        No testcase because it's just a style fixes.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::layout):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeEllipsisBox):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintTextMatchMarker):
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
        * rendering/MediaControlElements.h:
        * rendering/RenderArena.cpp:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::startDelayUpdateScrollInfo):
        (WebCore::RenderBlock::finishDelayUpdateScrollInfo):
        (WebCore::RenderBlock::updateScrollInfoAfterLayout):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::newLine):
        (WebCore::RenderBlock::floatBottom):
        (WebCore::RenderBlock::leftBottom):
        (WebCore::RenderBlock::rightBottom):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcReplacedWidthUsing):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::layoutLegend):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::FlexBoxIterator::FlexBoxIterator):
        (WebCore::FlexBoxIterator::reset):
        (WebCore::FlexBoxIterator::first):
        (WebCore::FlexBoxIterator::next):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderFrameSet.cpp:
        (WebCore::borderStartEdgeColor):
        * rendering/RenderFrameSet.h:
        * rendering/RenderImage.cpp:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateVisibilityStatus):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::calculateRects):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::panScroll):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::updateMarqueeStyle):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::updateControls):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        (WebCore::RenderObject::localCaretRect):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::adjustRectsForAspectRatio):
        * rendering/RenderSlider.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::outerBorderBottom):
        * rendering/RenderTableCol.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::itemIsSeparator):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::supportsHover):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::supportsFocusRing):
        * rendering/SVGCharacterLayoutInfo.cpp:
        (WebCore::SVGCharacterLayoutInfo::addStackContent):
        * rendering/SVGCharacterLayoutInfo.h:
        * rendering/TextControlInnerElements.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):

2009-07-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Reduce complexity of lifetime management in DynamicNodeList caches
        <https://bugs.webkit.org/show_bug.cgi?id=27068>

        Switch the Cache object used by DynamicNodeList into a normal
        refcounted object rather than having a weird flag controlled
        refcounting system, where positive refcount did not automatically
        imply the cache object would actually still be live.

        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeList::DynamicNodeList):
        (WebCore::DynamicNodeList::~DynamicNodeList):
        (WebCore::DynamicNodeList::Caches::Caches):
        (WebCore::DynamicNodeList::Caches::create):
        * dom/DynamicNodeList.h:
        * dom/Node.cpp:
        (WebCore::Node::childNodes):
        (WebCore::Node::getElementsByTagNameNS):
        (WebCore::Node::getElementsByName):
        (WebCore::Node::getElementsByClassName):
        (WebCore::NodeListsNodeData::invalidateCaches):
        (WebCore::NodeListsNodeData::isEmpty):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::NodeListsNodeData):

2009-07-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.
        
        -webkit-perspective should be a Length
        https://bugs.webkit.org/show_bug.cgi?id=27066
        
        -webkit-perspective should not take a magic valueless number, but should
        be a normal Length value which responds to zooming. Treat valueless numbers
        as pixels for backward compatibility.
        
        Test: transforms/3d/general/perspective-units.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2009-07-07  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=27047

        We need to make sure that when we reattach, we also reattach
        the children in every MediaControlElement. Else we may end up
        having no remaining or elapsed time.

        We have to handle that, because we are using a special shadow
        tree in the DOM, and that we are ourselves handling
        attaching/detaching the renderer.

        The strategy here is to try to implement ::attach(), and try
        to reuse as much code as we can from the super class, including
        children attachement.

        Test: media/controls-after-reload.html

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlElement::styleForElement): Code factoring.
        (WebCore::MediaControlElement::rendererIsNeeded): Code factoring.
        (WebCore::MediaControlElement::attach): Implement attach
        and call super class so that children are also attached.
        (WebCore::MediaControlElement::updateStyle): Use attach()
        (WebCore::MediaControlInputElement::styleForElement): Code factoring.
        (WebCore::MediaControlInputElement::rendererIsNeeded): Code factoring.
        (WebCore::MediaControlInputElement::attach): See above.
        (WebCore::MediaControlInputElement::updateStyle): Use attach()
        * rendering/MediaControlElements.h:
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::updateControls): Directly run attach() on
        the m_panel, which is a root node for our shadow tree.

2009-07-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Repaint issue after layer drops out of composited mode.
        <https://bugs.webkit.org/show_bug.cgi?id=27022>

        RenderLayers cache repaint rects in the form of m_repaintRect and m_outlineBox,
        and expect these to stay valid from one style change to the next. These rects
        are relative to the repaint container, so if a layer stops being composited,
        we need to recompute them.
        
        Test: compositing/repaint/layer-repaint-rects.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::computeRepaintRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):

2009-07-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt and Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=26963
          <rdar://problem/7030998> Reproducible crash at
          FontCache::getFontData() when a custom font is used in a pseudo-style

        Test: fast/css/pseudo-cache-stale.html

        * dom/Element.cpp:
        (WebCore::Element::pseudoStyleCacheIsInvalid): Added. Given the old
        style and the new style, goes over cached pseudo-styles in the old
        style and re-resolves the same style types off the new style. If any of
        the new pseudo-styles is different from the currently cached
        corresponding style, returns true. Otherwise, returns false.
        (WebCore::Element::recalcStyle): Validate the pseudo-style cache before
        deciding to keep the existing style.
        * dom/Element.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::uncachedFirstLineStyle): Added this version that
        returns an uncached first-line style based off the given style.
        (WebCore::RenderObject::getUncachedPseudoStyle): Added the 'ownStyle'
        parameter.
        * rendering/RenderObject.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getPseudoStyleCache): Added. Returns the cached
        pseudo-styles in the passed-in vector.
        * rendering/style/RenderStyle.h:

2009-07-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        - fix https://bugs.webkit.org/show_bug.cgi?id=27042
          <rdar://problem/7010981> Incomplete painting of newly created floats

        Tests: fast/repaint/float-in-new-block-with-layout-delta.html
               fast/repaint/float-new-in-block.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren): If the child has never been
        laid out before, paint its overhanging floats in addition to itself.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatWithRect::FloatWithRect): Added and
        initialized a boolean everHadLayout member.
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Paint floats that have
        never been laid out before and did not move from (0, 0).

2009-07-07  Brady Eidson  <beidson@apple.com>

        Contributions from both Darin Adler and Brady Eidson.
        Reviewed by Darin Adler.

        <rdar://problem/7024039> REGRESSION (r42158): Back-forward navigation does not work correctly on nytimes.com

        In r42158 we lost some exclusions to making back/forward items for subframe navigations when a main frame
        navigation was still in progress.

        This patch makes things even better than it used to be by:
        - Locking back/forward history at the time the navigation is scheduled, not after the load has committed.
        - Locking back/forward history if *any* ancestor frame is still loading instead of just the main frame.

        Test: fast/loader/subframe-navigate-during-main-frame-load.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm): Move out the history locking logic into a standalone function so it can be
          used from multiple sites.
        (WebCore::mustLockBackForwardList): Returns true if any ancestor frame is still loading.
        (WebCore::FrameLoader::scheduleLocationChange): Respect mustLockBackForwardList() in addition to the passed in
          lockBackForwardList flag.
        (WebCore::FrameLoader::scheduleFormSubmission): Ditto.

2009-07-07  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.

        Upstream DOMObjectsInclude.h from src.chromium.org.

        https://bugs.webkit.org/show_bug.cgi?id=27035

        * bindings/v8/DOMObjectsInclude.h: Added.

2009-07-07  Nate Chapin  <japhet@chromium.org>

        Reviewed by David Levin.

        Relanding r45559, which was rolled back at r45574.

        https://bugs.webkit.org/show_bug.cgi?id=26857

        * bindings/scripts/CodeGeneratorV8.pm: Updated a function name in auto-generated bindings.
        * bindings/v8/V8Binding.cpp: Moved from src.chromium.org.
        * bindings/v8/V8Binding.h: Contents moved from src.chromium.org.
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::getListenerFunction):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::handleConsoleMessage):
        (WebCore::V8Proxy::compileScript):
        (WebCore::V8Proxy::sourceName):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::handleConsoleMessage):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::NAMED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::removeElement):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-07-07  Gregory Hughes  <gfhughesVO+webkit@gmail.com>

        Reviewed by Darin Adler.

        AX: Some webpages do not send AXLoadComplete
        https://bugs.webkit.org/show_bug.cgi?id=26995

        When sending the AXLayoutComplete notification it is possible
        that the AXObjectCache was cleared, resulting in no valid
        object to send the notification to. This fix ensures that an
        AX object is created and cached if one does not already exist.

        Not able to add a test because notifications get sent after the layout test is completed.

        * dom/Document.cpp:
        (WebCore::Document::implicitClose):

2009-07-06  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=27015

        Make sure that the CSS properties letter-spacing, word-spacing,
        line-height, text-transform, text-indent, text-shadow,
        text-decoration and color do not affect the media element controls,
        that display text.

        Controls that display text are only present in when the theme
        MediaControllerThemeQT is being used.

        Test: media/controls-styling.html

        * css/mediaControlsQT.css:
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlElement::updateStyle): Special case for
        text-decoration. text-decoration can't be overriden from CSS, because
        text-decoration is additive for historical reasons.

2009-07-07  Albert Wong  <ajwong@chromium.org>

        Not reviewed, Chromium build fix.

        Add in missing header fix syntax issue that crept into last patch.
        https://bugs.webkit.org/show_bug.cgi?id=27027

        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::paintMediaFullscreenButton):

2009-07-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Make use of geometry information to decide which layers become composited.

        <rdar://problem/7011947>
        <https://bugs.webkit.org/show_bug.cgi?id=27021>
        
        In addition to looking at painting order, also, optionally, take layer
        overlap into account when deciding which RenderLayers need to be composited.

        No testcase because DRT doesn't dump which layers are composited.
        
        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayers):
        Removed the unused CompositingUpdate parameter, and just do an early return
        when there is no view.
        
        * rendering/RenderLayer.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::rendererContentChanged):
        (WebCore::RenderLayer::dirtyZOrderLists):
        (WebCore::RenderLayer::dirtyNormalFlowList):
        (WebCore::RenderLayer::styleChanged):
        (WebCore::RenderLayer::mustOverlapCompositedLayers):
        (WebCore::RenderLayer::setMustOverlapCompositedLayers):
        Change "overlay" to "overlap" for consistency with the use of "overlap"
        elsewhere.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):
        compositingLayersNeedUpdate() renamed to compositingLayersNeedRebuild().
        
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):
        Tell the compositor that we started an accelerated animation or transition.
        
        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::compositingLayersNeedRebuild):
        Renamed, since it's explicitly about changes in hierarchy now.
        
        (WebCore::RenderLayerCompositor::setCompositingConsultsOverlap):
        (WebCore::RenderLayerCompositor::compositingConsultsOverlap):
        New getter and setter for whether compositing should take overlap into account.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        Add m_compositingConsultsOverlap, re-order some member variables.
        
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingEnabledFlag):
        Whitespace cleanup and method rename.
        
        (WebCore::RenderLayerCompositor::setCompositingLayersNeedRebuild):
        Method and variable renaming.
        
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        Now we have to run through the layer hierarchy every time if looking
        at overlap, because changes in layout can now alter compositing behavior.
        We minimize work by tracking whether we actually need to change the layer
        hierarchy via needLayerRebuild.
        
        (WebCore::RenderLayerCompositor::updateBacking):
        3D transforms turn off overlap mode.
        
        (WebCore::RenderLayerCompositor::layerWasAdded):
        (WebCore::RenderLayerCompositor::layerWillBeRemoved):
        Method rename.
        
        (WebCore::RenderLayerCompositor::addToOverlapMap):
        (WebCore::RenderLayerCompositor::overlapsCompositedLayers):
        Utility methods to add a layer to the overlapMap (computing the absolute
        bounding box only if we haven't already done so), and testing the map
        entries.
        
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        If a layer would composite only because it comes after other compositing
        layers in the painting order, then consult the overlap map to determine whether
        it overlaps, and thus actually needs to composite.
        
        Add layers to the map when they must be composited.
        
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        Only do re-parenting work if the updateHierarchy flag is set.
        
        (WebCore::RenderLayerCompositor::didStartAcceleratedAnimation):
        When we start an accelerated transition or animation, we stop looking at
        overlap because we can no longer guarantee correct front-to-back ordering while the
        accelerated animation is running.

        (WebCore::RenderLayerCompositor::needsToBeComposited):
        Method renames.
        
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setMaximalOutlineSize):
        Add comment indicating that this could be optimized.

2009-07-14  Anton Muhin  <antonm@chromium.org>

        Reviewed by Darin Fisher.

        Speed up creation of V8 wrappers for DOM nodes.

        https://bugs.webkit.org/show_bug.cgi?id=26882

        This patch doesn't require new tests as it a set of refactorings
        to speed up wrapper creation.  

        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8Proxy.h:

2009-07-07  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha.

        [GTK] textarea height property works only if other property are defined
        https://bugs.webkit.org/show_bug.cgi?id=18984

        Let WebCore handle textarea's metrics instead of readjusting it RenderthemeGtk.

        Test: fast/forms/textarea-metrics.html

        * platform/gtk/RenderThemeGtk.cpp:
        * platform/gtk/RenderThemeGtk.h:

2009-07-07  Ben Murdoch  <benm@google.com>

        Reviewed by Antti Koivisto.

        HTML5 Database becomes locked if a transaction is in progress when the page is refreshed.
        https://bugs.webkit.org/show_bug.cgi?id=25711

        Fix for https://bugs.webkit.org/show_bug.cgi?id=25711 where web
        storage databases could become locked until the browser is shut
        down if the page is refreshed whilst a transaction is in progress.

        Test: storage/database-lock-after-reload.html

        * storage/Database.cpp:
        (WebCore::Database::Database):
        (WebCore::Database::close): add code to inform the database thread we've closed the database.
        (WebCore::Database::performOpenAndVerify): add code to inform the database thread we've opened a database.
        * storage/Database.h:
        (WebCore::Database::opened): return true iff the underlying sqlite database has been opened but not closed.
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::databaseThread): Before the database thread terminates, close any databases that ran transactions in this thread.
        (WebCore::DatabaseThread::recordDatabaseOpen): Records a database that executed a transaction in this thread.
        (WebCore::DatabaseThread::recordDatabaseClosed): Removes a database from the set of open databases.
        * storage/DatabaseThread.h:
        (WebCore::DatabaseThread::getThreadID): return the thread id for the database thread.

2009-07-07  Jiahua Huang  <jhuangjiahua@gmail.com>

        Reviewed by Jan Alonzo.

        [Gtk] Paste of rich text from firefox results garbled markup
        https://bugs.webkit.org/show_bug.cgi?id=26791

        Fix problem with UTF-16 clipboard pasted.

        * manual-tests/gtk/paste-richtext-from-firefox.html: Added.
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::documentFragment):

2009-07-07  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Change 'Continue debug' shortcut from F5 to F8 for consistency with Firebug.

        https://bugs.webkit.org/show_bug.cgi?id=23849

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):

2009-07-06  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Maciej Stachowiak.

        Update RenderThemeChromiumMac for wkDrawMediaUIPart and wkDrawMediaSlider API
        change.

        Fix compile RenderThemeChromiumMac.mm due to API changes from r45572
        https://bugs.webkit.org/show_bug.cgi?id=27018

        This is mainly an API change update to fix the chromium compile.  It
        also has a small fix of a typo in RenderThemeMac.mm.

        Compilation against the head of chromium trunk passed.  Since this is
        a compile fix, that should be sufficient.

        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::):
        (WebCore::RenderThemeChromiumMac::paintMediaFullscreenButton):
        (WebCore::RenderThemeChromiumMac::paintMediaMuteButton):
        (WebCore::RenderThemeChromiumMac::paintMediaPlayButton):
        (WebCore::RenderThemeChromiumMac::paintMediaSeekBackButton):
        (WebCore::RenderThemeChromiumMac::paintMediaSeekForwardButton):
        (WebCore::RenderThemeChromiumMac::paintMediaSliderTrack):
        (WebCore::RenderThemeChromiumMac::paintMediaSliderThumb):
        * rendering/RenderThemeMac.mm:
        (WebCore::):

2009-07-06  David Kilzer  <ddkilzer@apple.com>

        Bug 27002: Build fix when DASHBOARD_SUPPORT is disabled with -Wunused-parameter

        <https://bugs.webkit.org/show_bug.cgi?id=27002>

        Reviewed by Geoff Garen.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::prepareGradientForDashboard):
        Mark gradient as an unused parameter when DASHBOARD_SUPPORT is
        disabled.

2009-07-06  David Kilzer  <ddkilzer@apple.com>

        Bug 27001: Fix improper use of PassRefPtr<Node> to RefPtr<Node>

        <https://bugs.webkit.org/show_bug.cgi?id=27001>

        Reviewed by Geoff Garen.

        PassRefPtr<> should only be used for arguments to functions that
        take ownership of the object, or as return values from functions
        that relinquish ownership of the object.

        * editing/Editor.cpp:
        (WebCore::Editor::increaseSelectionListLevelOrdered): Changed
        stack-allocated PassRefPtr<Node> to RefPtr<Node> and call
        release() on returned object.
        (WebCore::Editor::increaseSelectionListLevelUnordered): Ditto.

2009-07-06  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7035474> Make new media controller UI default on SnowLeopard

        * rendering/RenderThemeMac.mm:
        (WebCore::mediaControllerTheme):
            New media controller UI is enabled by default on SnowLeopard.

2009-07-06  Nate Chapin  <japhet@chromium.org>

        Unreviewed, build fix.

        Roll out r45559 to fix Chromium canary.

        https://bugs.webkit.org/show_bug.cgi?id=26857

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Binding.cpp: Removed.
        * bindings/v8/V8Binding.h:
        (WebCore::toInt32):
        (WebCore::toWebCoreString):
        (WebCore::fromWebCoreString):
        (WebCore::toWebCoreStringWithNullCheck):
        (WebCore::isUndefinedOrNull):
        (WebCore::v8Boolean):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::getListenerFunction):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::handleConsoleMessage):
        (WebCore::V8Proxy::compileScript):
        (WebCore::V8Proxy::sourceName):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::handleConsoleMessage):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::NAMED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::removeElement):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-07-06  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7008093> Media controller can’t be used to scrub when movie is 
        narrow — track is too narrow

        Do not show media controller time display elements when the a movie is too narrow.

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
            The 'state' parameter to wkDrawMediaUIPart is now an unsigned bitfield.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlTimeDisplayElement::MediaControlTimeDisplayElement):
            Give current time and time remaining controls a common base class.
        (WebCore::MediaControlTimeDisplayElement::setVisible):
            New method, hide and show the element.
        * rendering/MediaControlElements.h:

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::RenderMedia):
            Initialize m_previousVisible.
        (WebCore::RenderMedia::layout):
            Show/hide the time display elements as the movie width changes.
        (WebCore::RenderMedia::createCurrentTimeDisplay):
        (WebCore::RenderMedia::createTimeRemainingDisplay):
            Base class is now MediaControlTimeDisplayElement, not MediaControlElement.
        (WebCore::RenderMedia::shouldShowTimeDisplayControls):
            New, decide if time display elements should be visible or not.
        * rendering/RenderMedia.h:

        * rendering/RenderThemeMac.mm:
        (WebCore::):
        (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::paintMediaControlsBackground):
        (WebCore::RenderThemeMac::paintMediaCurrentTime):
        (WebCore::RenderThemeMac::paintMediaTimeRemaining):
            The 'state' parameter to wkDrawMediaUIPart is now an unsigned bitfield.

2009-07-06  David Kilzer  <ddkilzer@apple.com>

        Bug 27000: Minor clean up to runtime_root.{cpp|h}

        <https://bugs.webkit.org/show_bug.cgi?id=27000>

        Reviewed by Geoff Garen.

        * bridge/runtime_root.cpp: Added blank line between license and
        the first #include statement.
        * bridge/runtime_root.h: Added comment to #endif.

2009-07-06  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Maciej Stachowiak.

        generalize the special height treatment for SVG (to be re-used for ruby):
            renamed InlineBox::m_isSVG to m_hasVirtualHeight
            renamed InlineBox::isSVG() to hasVirtualHeight()
            renamed InlineBox::setIsSVG() to setHasVirtualHeight()

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::height):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::isText):
        (WebCore::InlineBox::setIsText):
        (WebCore::InlineBox::isSVGRootInlineBox):
        (WebCore::InlineBox::hasVirtualHeight):
        (WebCore::InlineBox::setHasVirtualHeight):
        (WebCore::InlineBox::virtualHeight):
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::createFlowBox):
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::createTextBox):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::createRootBox):
        * rendering/SVGInlineFlowBox.h:
        (WebCore::SVGInlineFlowBox::virtualHeight):
        * rendering/SVGInlineTextBox.h:
        (WebCore::SVGInlineTextBox::virtualHeight):
        * rendering/SVGRootInlineBox.h:
        (WebCore::SVGRootInlineBox::virtualHeight):

2009-07-06  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin Adler.

        REGRESSION(r45285): focus rings are black on windows safari
        https://bugs.webkit.org/show_bug.cgi?id=26821
        <rdar://problem/7018252>

        Add a mechanism for setting a custom focus ring color, and relocate the 
        determination of focus ring color to base class RenderTheme.

        No new tests.  Already-existing tests run in pixel mode would have caught this regression

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue): Move the responsibility
        of determining focus color to base class RenderTheme.
        * rendering/RenderTheme.cpp:
        (WebCore::customFocusRingColor): Added static local.
        (WebCore::RenderTheme::setCustomFocusRingColor): Added
        (WebCore::RenderTheme::focusRingColor): Use custom color over platform color.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::platformFocusRingColor): default implementation, black color
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderTheme::themeForPage): Circumstances that lead to returning the RenderThemeWin
        are the same under which we want to use the focus ring color from SafariTheme.
        (WebCore::RenderThemeSafari::platformFocusRingColor): Renamed from focusRingColor
        * rendering/RenderThemeSafari.h:

        Renaming focusRingColor to platformFocusRingColor in these files:
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::platformFocusRingColor):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::platformFocusRingColor):
        * rendering/RenderThemeChromiumSkia.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformFocusRingColor):

        Cleanup leftover from removal of WebCore::Color in r45285 in these files:
        * WebCore.order:
        * platform/graphics/Color.h:

2009-07-06  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Hyatt.

        Bug 15135: REGRESSION (r19843-r19850): Changing a flexbox's
        contents makes its container scroll to the top
        https://bugs.webkit.org/show_bug.cgi?id=15135

        Delay updateing scroll bar of descendants of flexbox until their
        positions are determined.  In this way we can prevent descendants
        of flexible boxes from changing positions of their scrollbars
        using tentative positions.

        Test: fast/flexbox/repaint-scrollbar.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::startDelayUpdateScrollInfo):
        (WebCore::RenderBlock::finishDelayUpdateScrollInfo):
        (WebCore::RenderBlock::updateScrollInfoAfterLayout):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::layoutOnlyPositionedObjects):
        * rendering/RenderBlock.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):

2009-07-06  Hironori Bono  <hbono@chromium.org>

        Reviewed by Maciej Stachowiak.

        Make unconfirmed IME text affect textarea's value.
        This matches input and contentEditable elements as well
        IE and Firefox.

        This fixes https://bugs.webkit.org/show_bug.cgi?id=25061.

        Input elements would go down this code path because it
        would always get a null compositionNode from frame->editor().
        Special casing compositionNodes is wrong because we explicitly
        want unconfirmed IME input in the textarea's value (assuming we
        want to match IE and Firefox here).

        This change is originally created by Ojan Vafai <ojan@chromium.org> and
        I just changed its manual tests with an automated test on his behalf.

        Test: platform/mac/editing/input/text-control-ime-input.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::text):
        (WebCore::RenderTextControl::textWithHardLineBreaks):

2009-07-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adele Peterson.

        Add the ability for wheel events to latch to a node.
        
        * WebCore.base.exp:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleWheelEvent):
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::wheelEvent):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2009-07-06  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix a bunch of layout test crahses in Chromium caused by a bad usage of DEFINE_STATIC_LOCAL.

        https://bugs.webkit.org/show_bug.cgi?id=26997

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8ValueToWebCoreString): Use a regular static declaration instead of DEFINE_STATIC_LOCAL.

2009-07-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: suggest global properties based on async evaluation.

        https://bugs.webkit.org/show_bug.cgi?id=26976

        Before this change, empty string was evaluated to the global object
        (or scope chain object) synchronously. This is now fixed and global
        object is evaluated using the same control flow.

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype.completions):
        (WebInspector.Console.prototype._evalInInspectedWindow):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._variablesInScope):

2009-07-06  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        Fix crash when indenting in an empty table cell.
        https://bugs.webkit.org/show_bug.cgi?id=26872

        The crash is that we would call splitTreeToNode where the node
        and the nodeToSplitTo were the same node.

        Test: editing/execCommand/indent-empty-table-cell.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::splitTreeToNode):
        Added an assert in that node and nodeToSplitTo
        are different nodes to make this assumption explicit.

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::isAtUnsplittableElement):
        (WebCore::IndentOutdentCommand::indentRegion):
        * editing/IndentOutdentCommand.h:

2009-07-06  Nate Chapin  <japhet@chromium.org>

        Reviewed by David Levin.

        Upstream V8Binding and update some function names.

        https://bugs.webkit.org/show_bug.cgi?id=26857

        * bindings/scripts/CodeGeneratorV8.pm: Update function names in auto-generated files.
        * bindings/v8/V8Binding.cpp: Upstreamed from src.chromium.org.
        * bindings/v8/V8Binding.h: Upstreamed from src.chromium.org.
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::getListenerFunction):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::handleConsoleMessage):
        (WebCore::V8Proxy::compileScript):
        (WebCore::V8Proxy::sourceName):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::handleConsoleMessage):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::NAMED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::removeElement):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-07-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Jan Alonzo.

        Use soup's content sniffing
        https://bugs.webkit.org/show_bug.cgi?id=26982

        Drop our hackish content sniffing code, and use the new libsoup
        feature to do that job for us.

        Testing this is in a cross-platform way is not obvious or possible
        while we are using platform-specific code for sniffing.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::gotHeadersCallback):
        (WebCore::contentSniffedCallback):
        (WebCore::gotChunkCallback):
        (WebCore::ResourceHandle::startHttp):

2009-07-05  Antonio Gomes  <antonio.gomes@openbossa.org>

        Reviewed by Darin Adler.

        REGRESSION (r40499): fast/dom/cssTarget-crash.html fails
        https://bugs.webkit.org/show_bug.cgi?id=20342

        Re-added code removed by commit r40499.
        Without this, both Qt and Mac were crashing while running the test.

        Note that this does not entirely fix the bug. It fixes the WebCore
        crash, but the test no longer seems to work due to loader changes.
        So this patch does not reenable the test. The test probably has to
        be rewritten.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removedFromDocument): Re-added code to
        set the CSS target of the document to 0.

2009-07-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=26943

        When one transition finishes slightly before another the longer
        one will fire a second time. This is because the second
        ImplicitAnmation object is culled too early, before its final
        RenderStyle is in place. This is done by cleanupFinishedAnimations()
        so I got rid of that method completely and now cleanup each
        transition or animation at the point where I am setting the final
        style, or when I detect that the transition or animation has been
        terminated early (which happens when you remove it from the style).

        Test: transitions/extra-transition.html

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::animate):
        * page/animation/CompositeAnimation.h:

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::getTimeToNextEvent):
        Avoid a divide by zero if m_animation->duration() is zero, which can happen
        if the duration is changed to zero while the animation is running.

2009-07-05  Simon Fraser  <simon.fraser@apple.com>

        Revert the previous commit because it broke the
        animations/transition-and-animation-1.html
        testcase.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::getTimeToNextEvent):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::animate):
        (WebCore::CompositeAnimation::cleanupFinishedAnimations):
        * page/animation/CompositeAnimation.h:

2009-07-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=26943

        When one transition finishes slightly before another the longer
        one will fire a second time. This is because the second 
        ImplicitAnmation object is culled too early, before its final
        RenderStyle is in place. This is done by cleanupFinishedAnimations()
        so I got rid of that method completely and now cleanup each 
        transition or animation at the point where I am setting the final
        style, or when I detect that the transition or animation has been
        terminated early (which happens when you remove it from the style).

        Test: transitions/extra-transition.html

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::animate):
        * page/animation/CompositeAnimation.h:

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::getTimeToNextEvent):
        Avoid a divide by zero if m_animation->duration() is zero, which can happen
        if the duration is changed to zero while the animation is running.

2009-07-05  Lars Knoll  <lars.knoll@nokia.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=26843

        Fix run-time crashes in JavaScriptCore with the Metrowerks compiler on Symbian.

        The Metrowerks compiler on the Symbian platform moves the globally
        defined Hashtables into read-only memory, despite one of the members
        being mutable. This causes crashes at run-time due to write access to
        read-only memory.

        Avoid the use of const with this compiler by introducing the
        JSC_CONST_HASHTABLE macro.

        Based on idea by Norbert Leser.

        * bindings/scripts/CodeGeneratorJS.pm: Use JSC_CONST_HASHTABLE for hash tables
        define in the bindings.

2009-07-05  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Maciej Stachowiak.

        Bug 26897 - Dynamic SVG images do not display correctly
        https://bugs.webkit.org/show_bug.cgi?id=26897

        Use repaint() to fix a rendering problem with a SVG image embedded in xhtml.

        Test: svg/custom/createImageElement2.xhtml

        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):

2009-07-05  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=26960
        [Gtk] caret offset not updated when selecting text

        Report the caret offset from the end of the selection so it works
        correctly for multi-char selections too (ie, anything that is not
        the zero width caret).

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_text_get_caret_offset):

2009-07-05  Holger Hans Peter Freyther  <zecke@selfish.org>

        Unreviewed link fix for Qt.

        Fix Qt link error by adding two new localized strings

        In r45474 two new strings got added to LocalizedStrings.h add
        the definition of them to Qt.

        * platform/qt/Localizations.cpp:
        (WebCore::mediaElementLoadingStateText):
        (WebCore::mediaElementLiveBroadcastStateText):

2009-07-03  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION (r44670-r44680): Typing is suprisingly slow in password field on reddit.com
        https://bugs.webkit.org/show_bug.cgi?id=26959
        rdar://problem/7029882

        The code to handle iteration boundaries was malfunctioning when the boundary was
        at the edge of a shadow tree. This happens all the time with <input> elements.

        It's not immediately obvious how to make a regression test for this since the
        symptom was a performance problem, not incorrect behavior. I'll add a test if I
        figure out a way to make one.

        * editing/TextIterator.cpp:
        (WebCore::parentCrossingShadowBoundaries): Renamed from parentOrShadowParent.
        (WebCore::depthCrossingShadowBoundaries): Updated for name change.
        (WebCore::nextInPreOrderCrossingShadowBoundaries): Added.
        (WebCore::previousInPostOrderCrossingShadowBoundaries): Added.
        (WebCore::setUpFullyClippedStack): Updated for name change.
        (WebCore::TextIterator::TextIterator): Updated for name change. Use
        nextInPreOrderCrossingShadowBoundaries instead of Range::pastLastNode to fix the bug.
        (WebCore::TextIterator::advance): Updated for name change.
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        Tweaked formatting.
        (WebCore::SimplifiedBackwardsTextIterator::advance): Ditto. Changed code that
        initializes m_pastStartNode to use previousInPostOrderCrossingShadowBoundaries.
        (WebCore::SimplifiedBackwardsTextIterator::handleNonTextNode): Tweaked formatting.
        (WebCore::SimplifiedBackwardsTextIterator::exitNode): Ditto.

2009-07-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Background audio stops playing when JS GC runs
        https://bugs.webkit.org/show_bug.cgi?id=26956
        
        Ensure we keep the Audio object around while it is playing, so that it
        doesn't get collected.
        
        Not testable because there's no way to know whether the audio keeps
        playing without holding a reference to it.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::isObservableThroughDOM):

2009-07-02  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=26814
        [Gtk] Caret-moved events are not issued for the correct offset
        when text is selected forward

        Report the caret offset from the end of the selection, otherwise
        we'll report the same offset when moving the caret while
        modififying the selection (eg, with Shift Right).

        * editing/gtk/SelectionControllerGtk.cpp:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):

2009-07-02  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=26815
        [Gtk] text-selection-changed events are not issued for the correct
        object when the selection spans multiple objects

        Get the focused node from the end of the selection, not the start,
        so we can detect when we cross object boundaries.

        * editing/gtk/SelectionControllerGtk.cpp:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):

2009-07-02  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=26947

        Fix the media controls hit tests. They may lose click events.

        Test cases already covered in the video-controls-zoomed tests.

        Don't trust wkHitTestMediaUIPart for the tests. We are accurate enough.

        * rendering/RenderThemeMac.h: Remove hitTestMediaControlPart.
        * rendering/RenderThemeMac.mm: Remove hitTestMediaControlPart.

2009-07-02  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Eric Seidel.

        RenderBlock and RenderInline have confusingly named object creation methods:
        RenderBlock::createRootBox/createRootInlineBox
        RenderInline::createFlowBox/createInlineFlowBox
        where the 2nd method in both cases just calls the first and then appends the created object.
        I therefore renamed those methods to something IMHO more informative:
        
        createRootBox()         -> createRootInlineBox()
        createRootInlineBox()   -> createAndAppendRootInlineBox();
        createFlowBox()         -> createInlineFlowBox();
        createInlineFlowBox()   -> createAndAppendInlineFlowBox();

        https://bugs.webkit.org/show_bug.cgi?id=26828

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::createRootInlineBox):
        (WebCore::RenderBlock::createAndAppendRootInlineBox):
        * rendering/RenderBlock.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::createInlineFlowBox):
        (WebCore::RenderInline::createAndAppendInlineFlowBox):
        * rendering/RenderInline.h:
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::createInlineFlowBox):
        * rendering/RenderSVGInline.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::createRootInlineBox):
        * rendering/RenderSVGText.h:
        * rendering/bidi.cpp:
        (WebCore::createInlineBoxForRenderer):

2009-07-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Fix typo in the resource panel enabler caption.

        https://bugs.webkit.org/show_bug.cgi?id=26753

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):

2009-07-02  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Adam Roben.

        [Win] HTML5 Drag and drop, dragend is not fired when pressing Esc
        https://bugs.webkit.org/show_bug.cgi?id=26699

        * manual-tests/drag-escape.html: Added.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dragSourceEndedAt):

2009-07-02  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser. 
        
        https://bugs.webkit.org/show_bug.cgi?id=26944

        Make sure we support full page zoom in video controls.

        This is tracked by a the video-controls-zoom test case.

        * css/mediaControlsQT.css: Make sure we don't have any inherited margin.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlElement::updateStyle): Propagate the style to the innertext.
        * rendering/RenderThemeMac.mm: Adjust the painting rect.
        (WebCore::getUnzoomedRectAndAdjustCurrentContext):
        (WebCore::RenderThemeMac::paintMediaSliderTrack):
        (WebCore::RenderThemeMac::paintMediaCurrentTime):
        (WebCore::RenderThemeMac::paintMediaTimeRemaining):

2009-07-02  Pierre d'Herbemont  <pdherbemont@apple.com>

        Fix the Gtk build after r45474. The localized strings should
        have been added there.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::mediaElementLoadingStateText):
        (WebCore::mediaElementLiveBroadcastStateText):

2009-07-02  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=26939

        Media controller is rendered badly at http://www.mozilla.com/en-US/firefox/video/firefox-3.5.html

        We fix two things:
        - We use px instead of em, because px is used everywhere else
        and because 0.09em hit the font size limit.
        - We use -webkit-box instead of inline-block because in strict mode
        inline-block has a different behavior.

        Test: media/controls-strict.html

        * css/mediaControlsQT.css:

2009-07-02  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        TextIterator should use hasOverflowClip when checking for overflow instead of looking at the style.
        https://bugs.webkit.org/show_bug.cgi?id=26942

        * editing/TextIterator.cpp:
        (WebCore::fullyClipsContents):

2009-07-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Dave Hyatt.

        Fix for <rdar://problem/5230700>
        Remove local .xhtml file workaround

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit): Work around is no longer necessary.

2009-07-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Sort, add functions used by WebKit.
        
        * WebCore.base.exp:

2009-07-02  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Sam Weinig.

        More of <rdar://problem/6969425> Safari 4.0 doesn't recognize text/plain files if their extension is unknown.

        * platform/network/mac/WebCoreURLResponse.mm:
        (webNSURLResponseMIMEType): Give Tiger a chance to query the UTI machinery.

2009-07-02  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Chromium Linux: fix complex text rendering with line break characters.

        https://bugs.webkit.org/show_bug.cgi?id=26935

        If the CSS white-space property is inhibiting line breaking, we might
        find end-of-line characters rendered via the complex text path. Fonts
        don't provide glyphs for these code points so, if we find one, we
        simulate the space glyph being interposed in this case.  Because the
        input is variable-length per code point, we walk the input in step
        with the output.

        Covered by:
            LayoutTests/fast/text/international/bidi-linebreak-002.html
            LayoutTests/fast/text/international/bidi-linebreak-003.html
            LayoutTests/fast/text/international/hindi-whitespace.html

        * platform/graphics/chromium/HarfbuzzSkia.cpp:
        (WebCore::stringToGlyphs):

2009-07-02  Victor Wang  <victorw@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=26521
        Expose file size to chromium.

        Implement getFileSize() for Chromium.

        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/FileSystemChromium.cpp:
        (WebCore::getFileSize):

2009-07-02  Nate Chapin  <japhet@chromium.org>

        Unreviewed, build fix.

        * bindings/v8/V8SVGPODTypeWrapper.h: Lost a space in nested template argument list.

2009-07-02  Simon Fraser  <simon.fraser@apple.com>

        Build fix: add missing #include.

        * platform/mac/ThemeMac.mm:

2009-07-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/7028682> ThemeMac::paintRadio() throws Obj-C exceptions when zoomed

        Add BEGIN_BLOCK_OBJC_EXCEPTIONS/END_BLOCK_OBJC_EXCEPTIONS guards around code
        that can possibly throw Objective-C exceptions when drawing Mac form controls.

        * platform/mac/ThemeMac.mm:
        (WebCore::paintCheckbox):
        (WebCore::paintRadio):
        (WebCore::paintButton):
        (WebCore::ThemeMac::inflateControlPaintRect):

2009-07-02  Nate Chapin  <japhet@chromium.org>

        Reviewed by David Levin.

        Upstream V8SVGPODTypeWrapper.

        https://bugs.webkit.org/show_bug.cgi?id=26907

        * bindings/scripts/CodeGeneratorV8.pm: Update function being renamed in V8SVGPODTypeWrapper.h.
        * bindings/v8/V8SVGPODTypeWrapper.h: Upstreamed from src.chromium.org.

2009-07-02  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Adds an abstraction layer between the DB classes and the file
        system, which allows us to add our own logic for storing, opening,
        deleting, etc. databases.

        The patch was tested using the tests in WebCore/storage.

        https://bugs.webkit.org/show_bug.cgi?id=26054

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open): Delegating the job of opening DB files to SQLiteFileSystem to allow use of custom VFSs.
        * platform/sql/SQLiteFileSystem.cpp: Added.
        * platform/sql/SQLiteFileSystem.h: Added.
        * platform/win/FileSystemWin.cpp:
        (WebCore::directoryName): Implemented.
        * storage/Database.cpp:
        (WebCore::Database::databaseSize): The code that returns the size of a DB file moved to SQLiteFileSystem.
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::DatabaseTracker): Added the ability to register a custom SQLite VFS.
        (WebCore::DatabaseTracker::trackerDatabasePath): DB file-related operations moved to SQLiteFileSystem.
        (WebCore::DatabaseTracker::openTrackerDatabase): DB file-related operations moved to SQLiteFileSystem.
        (WebCore::DatabaseTracker::originPath): DB file-related operations moved to SQLiteFileSystem.
        (WebCore::DatabaseTracker::fullPathForDatabase): DB file-related operations moved to SQLiteFileSystem.
        (WebCore::DatabaseTracker::usageForDatabase): DB file-related operations moved to SQLiteFileSystem.
        (WebCore::DatabaseTracker::deleteOrigin): DB file-related operations moved to SQLiteFileSystem.
        (WebCore::DatabaseTracker::deleteDatabaseFile): DB file-related operations moved to SQLiteFileSystem.
        * storage/OriginUsageRecord.cpp:
        (WebCore::OriginUsageRecord::diskUsage): DB file-related operations moved to SQLiteFileSystem.

2009-07-02  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        Always clip replaced elements to border radii.
        https://bugs.webkit.org/show_bug.cgi?id=26933

        Make sure to always clip replaced elements to border radii, even when overflow is visible.
        Stop defaulting those elements to overflow:hidden in the UA sheet, since it is now no longer
        necessary.

        Covered by existing tests (since the UA default changing keeps the behavior exactly the same).

        * css/html.css:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):

2009-07-02  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Simon Fraser.

        convertFromScrollbarToContainingView and friends should be in ScrollView
        https://bugs.webkit.org/show_bug.cgi?id=26929

        This is breaking Chromium's build because PopupMenuChromium inherits
        from ScrollView, but these functions are pure virtual in it.  I could
        put it directly in PopupMenuChromium, but that seems a bit silly since
        the functions are fairly generic.

        Passes existing layout tests.

        * page/FrameView.cpp:  Remove the 4 functions Hyatt just added
        (IntRect WebCore::FrameView::convertFromScrollbarToContainingView):
        (IntRect WebCore::FrameView::convertFromContainingViewToScrollBar):
        (IntPoint WebCore::FrameView::convertFromScrollbarToContainingView):
        (IntPoint WebCore::FrameView::convertFromContainingViewToScrollBar):
        * page/FrameView.h: ditto
        * platform/ScrollView.cpp:  Move the 4 functions from FrameView here
        (IntRect WebCore::ScrollView::convertFromScrollbarToContainingView):
        (IntRect WebCore::ScrollView::convertFromContainingViewToScrollBar):
        (IntPoint WebCore::ScrollView::convertFromScrollbarToContainingView):
        (IntPoint WebCore::ScrollView::convertFromContainingViewToScrollBar):
        * platform/ScrollView.h: ditto

2009-07-02  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Darin Fisher.

        Fix https://bugs.webkit.org/show_bug.cgi?id=26088 - TransparencyWin 
        doesn't handle errors well at all; revise it to fail silently 
        (drawing nothing), and bulletproof FontChromiumWin to handle the
        failure accordingly.

        Tests: fast/text/text-large-negative-letter-spacing-with-opacity.html
               fast/text/text-letter-spacing.html

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::initializeForGDI):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::~TransparencyAwareFontPainter):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::TransparencyAwareGlyphPainter):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::~TransparencyAwareGlyphPainter):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::drawGlyphs):
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::TransparencyWin):
        (WebCore::TransparencyWin::setupLayerForNoLayer):
        (WebCore::TransparencyWin::setupLayerForOpaqueCompositeLayer):
        (WebCore::TransparencyWin::setupLayerForWhiteLayer):
        (WebCore::TransparencyWin::setupTransformForKeepTransform):
        (WebCore::TransparencyWin::setupTransformForScaleTransform):
        (WebCore::TransparencyWin::initializeNewContext):
        (WebCore::TransparencyWin::compositeOpaqueComposite):
        (WebCore::TransparencyWin::compositeTextComposite):
        (WebCore::TransparencyWin::makeLayerOpaque):
        * platform/graphics/chromium/TransparencyWin.h:
        (WebCore::TransparencyWin::platformContext):

2009-07-02  Eric Carlson  <eric.carlson@apple.com>

        Change #import to #include to fix non-ObjC builds.

        * rendering/MediaControlElements.cpp:

2009-07-02  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * platform/network/mac/WebCoreURLResponse.mm:
        (mimeTypeFromUTITree):

2009-07-02  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        Fix for bug 22119, clicks in the scrollbars of transformed content don't work.  Add new
        conversion methods for going across parent/child widget boundaries that can be implemented
        by the FrameView and ScrollbarClient to be transform-aware.

        Test cases added in platform/mac/fast/forms and platform/mac/fast/overflow.

        * WebCore.base.exp:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent):
        * page/FrameView.cpp:
        (WebCore::FrameView::convertFromScrollbarToContainingView):
        (WebCore::FrameView::convertFromContainingViewToScrollbar):
        (WebCore::FrameView::convertFromRenderer):
        (WebCore::FrameView::convertToRenderer):
        (WebCore::FrameView::convertToContainingView):
        (WebCore::FrameView::convertFromContainingView):
        * page/FrameView.h:
        * platform/ScrollView.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::convertToContainingView):
        (WebCore::Scrollbar::convertFromContainingView):
        * platform/Scrollbar.h:
        * platform/ScrollbarClient.h:
        (WebCore::ScrollbarClient::convertFromScrollbarToContainingView):
        (WebCore::ScrollbarClient::convertFromContainingViewToScrollbar):
        * platform/Widget.cpp:
        (WebCore::Widget::convertFromContainingWindow):
        (WebCore::Widget::convertToContainingWindow):
        (WebCore::Widget::convertFromRootToContainingWindow):
        (WebCore::Widget::convertFromContainingWindowToRoot):
        (WebCore::Widget::convertToContainingView):
        (WebCore::Widget::convertFromContainingView):
        * platform/Widget.h:
        * platform/graphics/IntPoint.h:
        (WebCore::IntPoint::move):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::convertFromRootToContainingWindow):
        (WebCore::Widget::convertFromContainingWindowToRoot):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isPointInOverflowControl):
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::convertFromScrollbarToContainingView):
        (WebCore::RenderDataGrid::convertFromContainingViewToScrollbar):
        * rendering/RenderDataGrid.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::convertFromScrollbarToContainingView):
        (WebCore::RenderLayer::convertFromContainingViewToScrollbar):
        (WebCore::RenderLayer::scrollbarOffset):
        (WebCore::RenderLayer::hitTestOverflowControls):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::isPointInOverflowControl):
        (WebCore::RenderListBox::convertFromScrollbarToContainingView):
        (WebCore::RenderListBox::convertFromContainingViewToScrollbar):
        * rendering/RenderListBox.h:

2009-07-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt and Simon Fraser.

        - fix <rdar://problem/6933052> SPOD playing video in a div with a box
          shadow

        Test: fast/box-shadow/transform-fringing.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow): Clip out the
        box even if it has an opaque background, but in that case, inset the
        clip path by 1 pixel, to avoid antialiasing artifacts.
        Do not inset the clip rect by 1 pixel if the CTM is purely a
        translation.
        Move the shadow-casting path away in the non-rounded-rect case (it
        was already being done in the rounded-rect case), to avoid a black
        fringe when the CTM is not purely a translation.

2009-07-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6969425> Safari 4.0 doesn't recognize text/plain files if their extension is unknown.

        Walk the CoreTypes UTI tree for extensions with unknown MIME types, using the first MIME type found.

        For many types of text files (such as source code files) this ends up being text/plain.

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]): Tweak the logging output.

        * platform/network/mac/WebCoreURLResponse.h:
        * platform/network/mac/WebCoreURLResponse.mm:
        (mimeTypeFromUTITree): 
        (webNSURLResponseMIMEType): Use mimeTypeFromUTITree() to find a UTI-based MIME type for this file's extension.
        (-[NSURLResponse _webcore_reportedMIMEType]): Return the actual MIME type that CFNetwork gave us.

2009-07-02  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/6518119>

        Add a rewind button and hide the timeline for live broadcasts when
        in MediaUI mode.

        * css/CSSPrimitiveValueMappings.h: 
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Add the new pseudo element.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType): Ditto.
        * css/CSSSelector.h: 

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Ditto.

        * css/CSSValueKeywords.in: Ditto.
        * css/mediaControls.css: Ditto.
        * css/mediaControlsQT.css: Ditto.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::rewind): New.
        (WebCore::HTMLMediaElement::returnToRealTime): New.
        (WebCore::HTMLMediaElement::isStreaming): New.
        * html/HTMLMediaElement.h:

        * page/mac/WebCoreViewFactory.h: Declare mediaElementLoadingStateText and mediaElementLiveBroadcastStateText.

        * platform/LocalizedStrings.h: Add localized media state messages.

        * platform/ThemeTypes.h: Add the new pseudo element.

        * platform/mac/LocalizedStringsMac.mm: 
        (WebCore::mediaElementLoadingStateText): Add localized media state.
        (WebCore::mediaElementLiveBroadcastStateText): Ditto.

        * platform/mac/WebCoreSystemInterface.h: Change BOOL param wkDrawMediaUIPart to an int to support
           multiple states.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

        * rendering/MediaControlElements.cpp: 
        (WebCore::MediaControlElement::MediaControlElement): Deal with new elements.
        (WebCore::MediaControlElement::attachToParent): Ditto.
        (WebCore::MediaControlElement::update): Ditto.
        (WebCore::MediaControlElement::updateStyle): Ditto.
        (WebCore::MediaControlTimelineContainerElement::MediaControlTimelineContainerElement): Ditto.
        (WebCore::MediaControlTimelineContainerElement::rendererIsNeeded): Ditto.
        (WebCore::MediaControlStatusDisplayElement::MediaControlStatusDisplayElement): Ditto.
        (WebCore::MediaControlStatusDisplayElement::update): Ditto.
        (WebCore::MediaControlStatusDisplayElement::rendererIsNeeded): Ditto.
        (WebCore::MediaControlInputElement::MediaControlInputElement): Ditto.
        (WebCore::MediaControlInputElement::attachToParent): Ditto.
        (WebCore::MediaControlInputElement::updateStyle): Ditto.
        (WebCore::MediaControlRewindButtonElement::MediaControlRewindButtonElement): Ditto.
        (WebCore::MediaControlRewindButtonElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement): Ditto.
        (WebCore::MediaControlReturnToRealtimeButtonElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlReturnToRealtimeButtonElement::rendererIsNeeded): Ditto.
        (WebCore::MediaControlTimelineElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlTimelineElement::update): Ditto.
        (WebCore::MediaControlFullscreenButtonElement::rendererIsNeeded): Ditto.
        * rendering/MediaControlElements.h: Ditto.

        * rendering/RenderMedia.cpp: 
        (WebCore::RenderMedia::styleDidChange): Deal with the new elements.
        (WebCore::RenderMedia::createPanel): Ditto.
        (WebCore::RenderMedia::createRewindButton): Ditto.
        (WebCore::RenderMedia::createReturnToRealtimeButton): Ditto.
        (WebCore::RenderMedia::createStatusDisplay): Ditto.
        (WebCore::RenderMedia::createTimelineContainer): Ditto.
        (WebCore::RenderMedia::createCurrentTimeDisplay): Ditto.
        (WebCore::RenderMedia::createTimeRemainingDisplay): Ditto.
        (WebCore::RenderMedia::updateControls): Ditto.
        (WebCore::RenderMedia::forwardEvent): Ditto.
        * rendering/RenderMedia.h:

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint): Deal with the new elements.

        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintMediaRewindButton): Deal with the new elements.
        (WebCore::RenderTheme::paintMediaReturnToRealtimeButton): Ditto.
        (WebCore::RenderTheme::paintMediaControlsBackground): Ditto.

        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMediaRewindButton): Deal with the new elements.
        (WebCore::RenderThemeMac::paintMediaReturnToRealtimeButton): Ditto.
        (WebCore::RenderThemeMac::paintMediaControlsBackground): Ditto.

        * rendering/style/RenderStyleConstants.h: Add constants for the new elements.

2009-07-01  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Darin Fisher.

        Small refactoring of MessagePortChannel so that PlatformMessagePortChannel
        may be defined at the WebKit layer.

        https://bugs.webkit.org/show_bug.cgi?id=26905

        * dom/MessageChannel.cpp:
        (WebCore::MessageChannel::MessageChannel):
        * dom/MessagePortChannel.cpp:
        * dom/MessagePortChannel.h:
        * dom/default/PlatformMessagePortChannel.cpp:
        (WebCore::MessagePortChannel::createChannel):
        (WebCore::MessagePortChannel::create):
        (WebCore::MessagePortChannel::MessagePortChannel):
        (WebCore::MessagePortChannel::~MessagePortChannel):

2009-07-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <video> fails to show on http://camendesign.com/code/video_for_everybody
        <rdar://problem/7026010>
        https://bugs.webkit.org/show_bug.cgi?id=26919

        Fix an issue introduced in r44961. In that revision we changed to only update
        compositing layer geometry when all siblings had been laid out (i.e. we pushed
        the updates one level down). However, that left out the root layer, so this
        fix ensures that the root layer geometry gets updated at the end.

        Test: compositing/geometry/root-layer-update.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):

2009-07-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein
        
        <rdar://problem/7026010> <video> fails to show on http://camendesign.com/code/video_for_everybody

        First part of fix: when outline width changes, don't to a synchronous
        layer update right away, but just set the flag to say that compositing
        layers need updating. The synchronous layer update left the layer geometries
        out of whack when it happened in the middle of layout (e.g. when inside ::first-letter).
        
        Test: compositing/geometry/outline-change.html

        * rendering/RenderView.cpp:
        (WebCore::RenderView::setMaximalOutlineSize):

2009-07-01  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26842
        Build fix when ENABLE_DATABASE is off

        Move Database.h into ENABLE(DATABASE) guard so toggling ENABLE_DATABASE
        off does not break builds.

        * bindings/js/ScriptObjectQuarantine.cpp:

2009-07-01  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.
        
        https://bugs.webkit.org/show_bug.cgi?id=26899
        
        Modified XSSAuditor::decodeURL to only remove null characters so that 
        it is consistent with the behavior of HTMLTokenizer and prevents 
        injected scripts that contain control characters. 

        Tests: http/tests/security/xssAuditor/script-tag-control-char.html
               http/tests/security/xssAuditor/script-tag-null-char.html

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::decodeURL): Modified to only remove null characters. 
        * page/XSSAuditor.h: Reverted naming of third argument of method XSSAuditor::decodeURL
        from allowControlCharacters back to allowNullCharacters.
        * platform/network/ResourceResponseBase.cpp: Reverted back to rev #45003.
        (WebCore::isControlCharacter):
        * platform/network/ResourceResponseBase.h: Reverted back to rev #45003.  

2009-07-01  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        - supported keyboard shortcuts compatible with Firebug in Scripts Debugger:
        F5, Ctrl+/ (win,lin), Command+/ (mac) - continue
        F10, Ctrl+' (win, lin), Command+' (mac) - step over
        F11, Ctrl+; (win, lin), Command+; (mac) - step into
        Shift+F11, Ctrl+Shift+; (win, lin), Command+Shift+; (mac) - step out

        - added call stack navigation shortcuts:
        Ctrl+. - next call frame
        Ctrl+, - previouse call frame

        https://bugs.webkit.org/show_bug.cgi?id=23849

        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane):
        (WebInspector.CallStackSidebarPane.prototype.handleKeyEvent):
        (WebInspector.CallStackSidebarPane.prototype._selectNextCallFrameOnStack):
        (WebInspector.CallStackSidebarPane.prototype._selectPreviousCallFrameOnStack):
        (WebInspector.CallStackSidebarPane.prototype._selectedPlacardByIndex):
        (WebInspector.CallStackSidebarPane.prototype._selectedCallFrameIndex):
        * inspector/front-end/KeyboardShortcut.js: Added.
        (WebInspector.KeyboardShortcut):
        (WebInspector.KeyboardShortcut.makeKey):
        (WebInspector.KeyboardShortcut.makeKeyFromEvent):
        (WebInspector.KeyboardShortcut.makeKeyFromCodeAndModifiers_):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.handleKeyEvent):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2009-07-01  Daniel Erat  <derat@google.com>

        Reviewed by David Levin.

        Chromium Linux: Move the scrollbar thumb on middle-click.

        https://bugs.webkit.org/show_bug.cgi?id=26910
        http://code.google.com/p/chromium/issues/detail?id=11976

        Tested by building Chrome and checking that the scrollbar moves as expected.

        * platform/chromium/ScrollbarThemeChromium.cpp:
        * platform/chromium/ScrollbarThemeChromium.h:
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        * platform/chromium/ScrollbarThemeChromiumLinux.h:
        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        * platform/chromium/ScrollbarThemeChromiumWin.h:

2009-07-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Add a preference/setting to toggle whether content sniffing is enabled for file URLs.

        * WebCore.base.exp:

        * page/Settings.cpp:
        (WebCore::Settings::setLocalFileContentSniffingEnabled):
        * page/Settings.h:
        (WebCore::Settings::localFileContentSniffingEnabled):

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):

2009-07-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        Bug 26909: aria-label needs to be supported
        https://bugs.webkit.org/show_bug.cgi?id=26909

        Test: accessibility/aria-label.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityDescription):
        * html/HTMLAttributeNames.in:

2009-07-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        More datagrid columns work.  Make sure columns cache both a style for the column header as well
        as a style for the column background (behind the cells).

        Hook up to CSSStyleSelector methods for obtaining the pseudo styles for columns (stubbed out and
        unimplemented).

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::pseudoStyleForDataGridColumn):
        (WebCore::CSSStyleSelector::pseudoStyleForDataGridColumnHeader):
        * css/CSSStyleSelector.h:
        * html/DataGridColumn.h:
        (WebCore::DataGridColumn::setColumnList):
        (WebCore::DataGridColumn::columnStyle):
        (WebCore::DataGridColumn::setColumnStyle):
        (WebCore::DataGridColumn::headerStyle):
        (WebCore::DataGridColumn::setHeaderStyle):
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::recalcStyleForColumn):
        (WebCore::RenderDataGrid::columnStyle):
        (WebCore::RenderDataGrid::headerStyle):
        (WebCore::RenderDataGrid::paintColumnHeaders):
        * rendering/RenderDataGrid.h:

2009-07-01  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Oliver Hunt.
        
        <rdar://problem/7009870> After <audio> movie finishes playing, Pause button fails to change 
        back to Play button

        Grab onto the current time when QTKit "ended" notification fires and use it as 
        duration from that point on as QuickTime sometimes refuses to play all the way to
        the time it reports for duration and buffered. HTMLMediaElement assumes that there
        more to play in this situation and tries to restart playback, endlessly.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
            Rename m_duration to m_reportedDuration. Declare m_cachedDuration.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
            Rename m_duration to m_reportedDuration. Initialize m_cachedDuration.
        (WebCore::MediaPlayerPrivate::duration):
            Return m_cachedDuration once it has been set.
        (WebCore::MediaPlayerPrivate::updateStates):
            Rename m_duration to m_reportedDuration.
        (WebCore::MediaPlayerPrivate::didEnd):
            Set m_cachedDuration to currentTime().

2009-07-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 26900: AX: Manual spell check with Command-; does not bring up suggestions
        https://bugs.webkit.org/show_bug.cgi?id=26900

        Editable web areas should have a clickpoint that uses where the selection is.

        Test: accessibility/editable-webarea-context-menu-point.html

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::clickPoint):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2009-07-01  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        Remove unused code in SVGTransformList and SVGTransformDistance
        <https://bugs.webkit.org/show_bug.cgi?id=26891>

        * svg/SVGTransformDistance.cpp:
        (WebCore::SVGTransformDistance::SVGTransformDistance):
        * svg/SVGTransformList.cpp:
        * svg/SVGTransformList.h:

2009-07-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

        Begin stubbing out functions for layout, painting and style/geometry caching on columns.  Not enough
        is implemented for this to do much of anything yet, but it should help keep patch sizes down. :)

        * html/DataGridColumn.cpp:
        (WebCore::DataGridColumn::columnChanged):
        * html/DataGridColumn.h:
        (WebCore::DataGridColumn::setId):
        (WebCore::DataGridColumn::setLabel):
        (WebCore::DataGridColumn::setType):
        (WebCore::DataGridColumn::setSortable):
        (WebCore::DataGridColumn::setSortDirection):
        (WebCore::DataGridColumn::setColumnList):
        (WebCore::DataGridColumn::style):
        (WebCore::DataGridColumn::setStyle):
        (WebCore::DataGridColumn::rect):
        (WebCore::DataGridColumn::setRect):
        * html/DataGridColumnList.cpp:
        (WebCore::DataGridColumnList::DataGridColumnList):
        (WebCore::DataGridColumnList::setDataGridNeedsLayout):
        (WebCore::DataGridColumnList::add):
        (WebCore::DataGridColumnList::remove):
        (WebCore::DataGridColumnList::move):
        (WebCore::DataGridColumnList::clear):
        (WebCore::DataGridColumnList::primaryColumnChanged):
        * html/DataGridColumnList.h:
        (WebCore::DataGridColumnList::create):
        (WebCore::DataGridColumnList::dataGrid):
        (WebCore::DataGridColumnList::clearDataGrid):
        * html/HTMLDataGridColElement.cpp:
        (WebCore::HTMLDataGridColElement::HTMLDataGridColElement):
        (WebCore::HTMLDataGridColElement::findDataGridAncestor):
        (WebCore::HTMLDataGridColElement::insertedIntoTree):
        (WebCore::HTMLDataGridColElement::removedFromTree):
        * html/HTMLDataGridColElement.h:
        (WebCore::HTMLDataGridColElement::dataGrid):
        * html/HTMLDataGridElement.cpp:
        (WebCore::HTMLDataGridElement::HTMLDataGridElement):
        (WebCore::HTMLDataGridElement::~HTMLDataGridElement):
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::styleDidChange):
        (WebCore::RenderDataGrid::recalcStyleForColumns):
        (WebCore::RenderDataGrid::recalcStyleForColumn):
        (WebCore::RenderDataGrid::styleForColumn):
        (WebCore::RenderDataGrid::layout):
        (WebCore::RenderDataGrid::layoutColumns):
        (WebCore::RenderDataGrid::paintColumnHeaders):
        (WebCore::RenderDataGrid::paintColumnHeader):
        * rendering/RenderDataGrid.h:
        (WebCore::RenderDataGrid::renderName):
        (WebCore::RenderDataGrid::canHaveChildren):

2009-07-01  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=26807
        
        Fixes this address by checking whether frame->document()->decoder() is null. 

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::findInRequest):

2009-07-01  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=26885

        Correctly reset history length to '0', not '1'. Old relict from early WML days.
        Add some new WML testcases covering the use of history length (by onenterforward event handling)

        Tests: wml/onenterforward-event.html
               wml/onenterforward-inline-event.html
               wml/ontimer-event.html
 
        * wml/WMLPageState.cpp:
        (WebCore::WMLPageState::reset):

2009-07-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        Make sure setting attributes on dcol elements properly updates the corresponding DataGridColumn object.

        Added new test in fast/dom/HTMLDataGridElement.

        * html/HTMLDataGridColElement.cpp:
        (WebCore::HTMLDataGridColElement::parseMappedAttribute):
        * html/HTMLDataGridColElement.h:

2009-07-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/6998524> REGRESSION (r44474): Form text field has focus ring, looks focused,
        even though the field is not actually focused for keyboard input
        
        Add the concept of whether or not the Page is focused by adding a boolean to the focusController.  This allows the
        focused frame and focused node to both be cached and changed programmatically even when the Page itself doesn't
        actually happen to have focus at that time.

        * WebCore.base.exp:
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
        (WebCore::FocusController::setFocusedFrame):
        (WebCore::FocusController::setFocused):
        (WebCore::FocusController::setActive):
        * page/FocusController.h:
        (WebCore::FocusController::isFocused):

2009-07-01  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Move some API headers from WebCore.pro to headers.pri so that they
        get installed when running make install from the build directory.

        * WebCore.pro:

2009-07-01  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Ariya Hidayat.

        Ran WebKitTools/Scripts/generate-qt-inspector-resource to update the
        qrc file with new png files from the web inspector.

        * inspector/front-end/WebKit.qrc:

2009-06-30  Mark Rowe  <mrowe@apple.com>

        Land some code that has a hope of compiling.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::imageSourceOptions):

2009-06-30  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Simon Fraser.

        Flip back on block caching. Throwing away block data, while 
        a perceived memory win, is a performance hit in cases where we 
        are repainting large images (i.e. backgrounds) frequently 
        (i.e. a flash video playing on top).  
        <rdar://problem/6933515> REGRESSION(L-SL): Large JPEG images are 
        decoded on drawing, slowing down painting of sites that frequently 
        repaint e.g. because of Flash (pandora.com, Starcraft 2)

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::imageSourceOptions):

2009-06-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.

        - Rename html4.css to html.css, since we target HTML5 now
        https://bugs.webkit.org/show_bug.cgi?id=26873

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::loadFullDefaultStyle):
        * css/html.css: Copied from css/html4.css.
        * css/html4.css: Removed.
        * css/themeWin.css:
        * platform/Theme.h:
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):
        * rendering/RenderTheme.h:

2009-06-30  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Gustavo Noronha.

        [GTK] Drag and drop support
        https://bugs.webkit.org/show_bug.cgi?id=23642

        Define DragImageRef as GdkPixbuf and implement essential
        functions which manipulate drag images.

        * platform/DragImage.h:
        * platform/gtk/DragImageGtk.cpp:
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::createDragImageFromImage):

2009-06-30  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        StorageNamespace.cpp build issue
        https://bugs.webkit.org/show_bug.cgi?id=26859

        Moved #endif //ENABLE(DOM_STORAGE) position
        so that the build doesn't fail.
        The namespace WebCore was started after the #if ENABLE(DOM_STORAGE)
        but closed after the #endif.

        * storage/StorageNamespace.cpp:

2009-06-30  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/7020825> HTMLMediaElement should not assume seeking is only possible in 
        buffered time ranges

        * html/HTMLMediaElement.cpp:
            Don't ASSERT if the network state goes to Idle when when the ready state is 
            HaveEnoughData or higher, it is perfectly legal.
        (WebCore::HTMLMediaElement::setReadyState): 
            Don't clear m_seeking after posting a 'seeking' event.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::seek):
            Do nothing when asked to seek to the same time we are already seeking to. Check requested
            seek time against maxTimeSeekable, not maxTimeLoaded.
        (WebCore::MediaPlayerPrivate::doSeek):
            Don't bother stopping a movie that isn't playing. Minor cleanup to make the code more readable.
        (WebCore::MediaPlayerPrivate::seekTimerFired):
            Check requested seek time against maxTimeSeekable, not maxTimeLoaded.
        (WebCore::MediaPlayerPrivate::updateStates):
            A streaming movie has as much data as it needs once it reaches "playable", so 
            set the ready state to HaveFutureData. A movie with metadata doesn't drop back 
            to "have nothing" when seeking. A streaming movie doesn't use the network when paused.
        (WebCore::MediaPlayerPrivate::timeChanged):
            It may not be possible to seek to a specific time in a streamed movie but when seeking 
            in a streaming movie QuickTime sets the time to closest time possible and posts a  
            timechanged notification, so update m_seekTo so we can detect when the seek completes.

2009-06-30  Steve Falkenburg  <sfalken@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=26860

        Reviewed by Sam Weinig.

        Blacklist Yahoo Application State plug-in for versions prior to 1.0.0.6.
        Earlier versions cause corruption crashes.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::isPluginBlacklisted):

2009-06-30  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7005207> <video> in canvas broken with ACCEL_COMPOSITING
        
        Fix drawImage of video in CanvasRenderingContext2D when
        accelerated compositing is enabled. This is done by
        adding a new paint method to HTMLVideoElement that
        is only called from canvas, which will create the software
        renderer if necessary, but otherwise calls the regular
        paint method. Meanwhile, add logic to the software video
        renderer so that it can be created without calling repaint
        every time it sees a new frame.
        
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::paintCurrentFrameInContext):
        * html/HTMLVideoElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::paintCurrentFrameInContext):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::paintCurrentFrameInContext):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovie):
        (WebCore::MediaPlayerPrivate::createQTVideoRenderer):
        (WebCore::MediaPlayerPrivate::currentRenderingMode):
        (WebCore::MediaPlayerPrivate::setUpVideoRendering):
        (WebCore::MediaPlayerPrivate::tearDownVideoRendering):
        (WebCore::MediaPlayerPrivate::paintCurrentFrameInContext):

2009-06-30  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=26858

        Get <dcol> elements reflected into the datagrid's column list.  Make sure columns get added/removed
        properly.  (Attribute changes are still not caught.  That is coming in a separate patch.)

        Added fast/dom/HTMLDataGridElement/DataGridColumns-dom.html

        * html/DataGridColumn.h:
        (WebCore::DataGridColumn::create):
        (WebCore::DataGridColumn::setColumnList):
        (WebCore::DataGridColumn::DataGridColumn):
        * html/DataGridColumnList.cpp:
        (WebCore::DataGridColumnList::add):
        (WebCore::DataGridColumnList::remove):
        (WebCore::DataGridColumnList::clear):
        * html/DataGridColumnList.h:
        * html/HTMLDataGridColElement.cpp:
        (WebCore::HTMLDataGridColElement::HTMLDataGridColElement):
        (WebCore::HTMLDataGridColElement::findDatagridAncestor):
        (WebCore::HTMLDataGridColElement::ensureColumn):
        (WebCore::HTMLDataGridColElement::insertedIntoTree):
        (WebCore::HTMLDataGridColElement::removedFromTree):
        (WebCore::HTMLDataGridColElement::sortable):
        (WebCore::HTMLDataGridColElement::setSortable):
        * html/HTMLDataGridColElement.h:
        (WebCore::HTMLDataGridColElement::column):
        (WebCore::HTMLDataGridColElement::setColumn):
        (WebCore::HTMLDataGridColElement::datagrid):
        * html/HTMLDataGridElement.cpp:
        (WebCore::HTMLDataGridElement::setDataSource):
        (WebCore::HTMLDataGridElement::dataSource):

2009-06-30  Jeremy Orlow (jorlow@chromium.org)

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26852

        Fix some minor build issues in the v8 bindings.

        * bindings/v8/custom/V8StorageCustom.cpp:
        (WebCore::V8Custom::v8StorageNamedPropertyEnumerator):
        (WebCore::storageGetter):
        (WebCore::storageSetter):
        (WebCore::storageDeleter):
        * storage/StorageArea.cpp:

2009-06-30  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Chromium Linux: use different fonts for each script run.

        https://bugs.webkit.org/show_bug.cgi?id=26853

        Previously, when rendering complex text, we picked a single font which
        could render all the glyphs needed for the run. However, this meant
        that sometimes lines were rendered with, for example, [LATIN, THAI,
        LATIN] and we could end up with a different font for the Latin parts
        than for lines without Thai in them.

        With this patch, we pick a font for each script run.

        This change is covered by existing layout tests.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::drawGlyphs):
        (WebCore::TextRunWalker::TextRunWalker):
        (WebCore::TextRunWalker::~TextRunWalker):
        (WebCore::TextRunWalker::nextScriptRun):
        (WebCore::TextRunWalker::fontPlatformDataForScriptRun):
        (WebCore::TextRunWalker::setupFontForScriptRun):
        (WebCore::TextRunWalker::allocHarfbuzzFont):
        (WebCore::setupForTextPainting):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::setupPaint):

2009-06-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt, Dan Bernstein.
        
        <rdar://problem/6191676> Redraw issues scrolling overflow:scroll div with compositing

        There are two parts to this fix. First, if a compositing layer has overflow clipping
        or a mask, then the compositing layer does not need to be sized to encompass all
        non-composited children.
        
        Second, when scrolling, we have to back up to the compositing ancestor and have
        it reposition descendant compositing layers, because overflow doesn't follow
        the z-order tree.
        
        Test: compositing/overflow/overflow-scroll.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        Pass the UpdateCompositingLayers flag when updating layers after layout, so that
        we can reposition compositing layers if we're not about to do a layer rebuild.
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        Only update compositing layers if the flag is set.
        
        (WebCore::RenderLayer::scrollToOffset):
        Do compositing layer updates from the compositing ancestor in one fell swoop.

        * rendering/RenderLayer.h:
        Replace the unused FullUpdate flag with one that allows us to specify whether
        compositing layers should be updated.
        
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):
        * rendering/RenderLayerBacking.h:
        New param that we can pass to updateCompositingDescendantGeometry to control
        whether the update goes deep.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        We can return earlier if this is not a self-painting layer.
        If the layer has overflow clip or a mask, then the composited bounds are just the
        local bounds, excluding descendants.
        
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry):
        * rendering/RenderLayerCompositor.h:
        Renamed from updateCompositingChildrenGeometry, and added a flag that allows
        us to do a deep update.

2009-06-30  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=26764
        Uncaught NOT_FOUND_ERR: DOMException 8 loading empty text file

        Test: fast/parser/empty-text-resource.html

        * loader/TextDocument.cpp: (WebCore::TextTokenizer::finish): Create document tree if it
        hasn't been created yet.

2009-06-30  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Renamed scrollbarUnderPoint to scrollbarAtPoint.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollbarAtPoint):
        * platform/ScrollView.h:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::handleMouseDownEvent):
        (WebCore::PopupListBox::handleMouseMoveEvent):

2009-06-30  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        <rdar://problem/6960286> CrashTracer: [REGRESSION] 1120 crashes in Safari at com.apple.WebCore WebCore::JSLazyEventListener::parseCode const 62

        <select> elements and other elements the produce popups can keep their popups
        live across a page load.  If this occurs and the <select> element has an
        onchange handler it is possible to get into a state where we try to execute
        JS on a page that no longer has an execution context. 

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::parseCode):
          Be paranoid and add a null check, but assert as well because we shouldn't
          actually get to this point.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::valueChanged):

2009-06-30  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        <https://bugs.webkit.org/show_bug.cgi?id=25435>

        Added support for sending MessagePorts to/from Workers via postMessage().

        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::messageChannel):
        Exposes MessageChannel constructor WorkerContext.
        * bindings/js/JSWorkerCustom.cpp:
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        Now correctly handles being instantiated from within a Worker.
       * platform/CrossThreadCopier.h:
        (WebCore::GenericWorkerTaskTraits<PassOwnPtr>):
        Added support for passing PassOwnPtr as argument to GenericWorkerTask
       * workers/GenericWorkerTask.h:
        (WebCore::):
        * workers/Worker.cpp:
        (WebCore::Worker::postMessage):
        Now handles disentangling/entangling MessagePorts sent to/from via postMessage.
        (WebCore::Worker::dispatchMessage):
        * workers/Worker.h:
        * workers/Worker.idl:
        Added an optional MessagePort argument to postMessage()
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::hasPendingActivity):
        Workers now report pending activity whenever there are remotely entangled ports.
        (WebCore::WorkerContext::postMessage):
        Now handles disentangling/entangling MessagePorts sent to/from via postMessage.
        (WebCore::WorkerContext::dispatchMessage):
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:
        Added an optional MessagePort argument to postMessage()
        * workers/WorkerContextProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        Updated messaging infrastructure to transport an optional MessagePort/MessagePortChannel.
        (WebCore::MessageWorkerContextTask::create):
        (WebCore::MessageWorkerContextTask::MessageWorkerContextTask):
        (WebCore::MessageWorkerContextTask::performTask):
        (WebCore::MessageWorkerTask::create):
        (WebCore::MessageWorkerTask::MessageWorkerTask):
        (WebCore::MessageWorkerTask::performTask):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerContext):
        * workers/WorkerMessagingProxy.h:
        Added additional postMessage() API that accepts a MessagePort
        * workers/WorkerObjectProxy.h:
        Added additional postMessage() API that accepts a MessagePort

2009-06-30  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Chromium: Add complex text support on Linux.

        https://bugs.webkit.org/show_bug.cgi?id=25068

        This patch adds complex text support on Linux using Harfbuzz. It's not
        the fastest code possible: some caching of font tables will certainly
        be required. However, it's probably the simplest code that works.

        This will require checking in new baselines in the Chromium tree for
        those layout tests which now pass.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::drawGlyphs):
        (WebCore::truncateFixedPointToInteger):
        (WebCore::TextRunWalker::TextRunWalker):
        (WebCore::TextRunWalker::~TextRunWalker):
        (WebCore::TextRunWalker::reset):
        (WebCore::TextRunWalker::setXOffsetToZero):
        (WebCore::TextRunWalker::rtl):
        (WebCore::TextRunWalker::setBackwardsIteration):
        (WebCore::TextRunWalker::nextScriptRun):
        (WebCore::TextRunWalker::glyphs):
        (WebCore::TextRunWalker::length):
        (WebCore::TextRunWalker::xPositions):
        (WebCore::TextRunWalker::advances):
        (WebCore::TextRunWalker::width):
        (WebCore::TextRunWalker::logClusters):
        (WebCore::TextRunWalker::numCodePoints):
        (WebCore::TextRunWalker::widthOfFullRun):
        (WebCore::TextRunWalker::allocHarfbuzzFont):
        (WebCore::TextRunWalker::deleteGlyphArrays):
        (WebCore::TextRunWalker::createGlyphArrays):
        (WebCore::TextRunWalker::expandGlyphArrays):
        (WebCore::TextRunWalker::shapeGlyphs):
        (WebCore::TextRunWalker::setGlyphXPositions):
        (WebCore::setupForTextPainting):
        (WebCore::fontPlatformDataForTextRun):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::glyphIndexForXPositionInScriptRun):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/graphics/chromium/HarfbuzzSkia.cpp: Added.
        (WebCore::SkiaScalarToHarfbuzzFixed):
        (WebCore::stringToGlyphs):
        (WebCore::glyphsToAdvances):
        (WebCore::canRender):
        (WebCore::getOutlinePoint):
        (WebCore::getGlyphMetrics):
        (WebCore::getFontMetric):
        (WebCore::harfbuzzSkiaGetTable):

2009-06-30  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7019799> Slow loading MediaDocument can fall back to plug-in unnecessarily

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::updateStates):
            Always fall back to a plug-in if m_hasUnsupportedTracks is set.
        (WebCore::MediaPlayerPrivate::disableUnsupportedTracks):
            Set m_hasUnsupportedTracks if we disable a track.

2009-06-30  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix inverted if/else that's causing a layout test in src.chromium.org to fail.

        https://bugs.webkit.org/show_bug.cgi?id=26820

        * bindings/v8/V8Proxy.cpp:
        (WebCore::GCPrologueVisitor::visitDOMWrapper): if (port2), not if (!port2).

2009-06-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6946611> REGRESSION (r30673): Shade10:" D_Snap
          to Grid" window is clipping

        Added an app-specific quirk to revert the behavior of <link> elements
        to the way it was before r30673, namely that if the rel attribute
        is not "stylesheet" but the type attribute contains "text/css", the
        link behaves as a stylesheet link.

        * WebCore.base.exp: Exported setTreatsAnyTextCSSLinkAsStylesheet().
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process): Check
            Settings::treatsAnyTextCSSLinkAsStylesheet() and if true, allow a
            style sheet link if the type contains "text/css".
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
            Initialize m_treatsAnyTextCSSLinkAsStylesheet.
        (WebCore::Settings::setTreatsAnyTextCSSLinkAsStylesheet): Added.
        * page/Settings.h:
        (WebCore::Settings::treatsAnyTextCSSLinkAsStylesheet): Added.

2009-06-30  Adrien Nader  <camaradetux@gmail.com>

        Reviewed by Xan Lopez.

        Fix typo in GNUMakefile.am: it reads WebCOre instead of WebCore.

        * GNUmakefile.am:

2009-06-30  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        [Gtk] Turn on ENABLE_DATAGRID so we can run the layout tests.

        * GNUmakefile.am:

2009-06-30  Raju Kunnath  <raju.kunnath@nokia.com>

        Reviewed by Simon Hausmann.

        <https://bugs.webkit.org/show_bug.cgi?id=26752>

        [Qt] Windows release build issue with Qt4.5 due to -GL flag on msvc2005 and msvc2008. 

        * WebCore.pro: Removed -GL compiler option for win32-msvc2005|win32-msvc2008.

2009-06-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        Initialize member variables in the right order. Fixes compiler
        warning.

        * platform/image-decoders/bmp/BMPImageReader.cpp:
        (WebCore::BMPImageReader::BMPImageReader):

2009-06-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26831
        Fix compiler warning in WorkerLoaderProxy.h

        Forward declaration of a class within a class is not allowed,
        since the compiler can't know if the declaration is legal at that
        point. This gives the following compiler warning:

        ../../WebCore/workers/WorkerLoaderProxy.h:40: warning: declaration
        "class WebCore::ScriptExecutionContext::Task" does not declare
        anything

        Include the full ScriptExecutionHeader header instead.

        * workers/WorkerLoaderProxy.h:

2009-06-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        Remove unused function.

        * plugins/gtk/PluginPackageGtk.cpp:

2009-06-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Change RenderLayer::updateLayerPositions() to use a bitmask instead of two
        boolean arguments. FullUpdate is unused at present, but will be used soon.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::scrollToOffset):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::):

2009-06-29  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix one more bad merge in V8Proxy.

        https://bugs.webkit.org/show_bug.cgi?id=26819

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setDOMException): setDOMExceptionHelper() instead of convertToV8Object().

2009-06-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Remove more unused scons support.

        * SConstruct: Removed.

2009-06-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Dave Hyatt.

        Fix some incorrect create functions.

        * html/DataGridColumn.h:
        (WebCore::DataGridColumn::create):
        * html/DataGridColumnList.h:
        (WebCore::DataGridColumnList::create):

2009-06-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Dave Hyatt.

        Remove initialize method from DataGridDataSource and add
        DOMDataGridDataSource.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSDataGridDataSource.cpp:
        * bindings/js/JSDataGridDataSource.h:
        * bindings/js/JSHTMLDataGridElementCustom.cpp:
        (WebCore::JSHTMLDataGridElement::setDataSource):
        * html/DOMDataGridDataSource.cpp: Added.
        (WebCore::DOMDataGridDataSource::DOMDataGridDataSource):
        (WebCore::DOMDataGridDataSource::~DOMDataGridDataSource):
        * html/DOMDataGridDataSource.h: Added.
        (WebCore::DOMDataGridDataSource::create):
        (WebCore::DOMDataGridDataSource::isDOMDataGridDataSource):
        (WebCore::asDOMDataGridDataSource):
        * html/DataGridDataSource.h:
        (WebCore::DataGridDataSource::isDOMDataGridDataSource):
        (WebCore::DataGridDataSource::isJSDataGridDataSource):
        * html/HTMLDataGridElement.cpp:
        (WebCore::HTMLDataGridElement::HTMLDataGridElement):
        (WebCore::HTMLDataGridElement::setDataSource):
        (WebCore::HTMLDataGridElement::dataSource):
        * html/HTMLDataGridElement.h:

2009-06-29  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix a couple of bad merge items from my previous V8Proxy patch.

        https://bugs.webkit.org/show_bug.cgi?id=26813

        * bindings/v8/V8Collection.h:
        (WebCore::nodeCollectionNamedPropertyGetter):  Fix a bad function name that slipped through.
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setDOMException):  Fix a bad merge that caused a couple of lines of extraneous, breaking code to get in.

2009-06-29  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser  <simon.fraser@apple.com>.

        https://bugs.webkit.org/show_bug.cgi?id=26706

        Fixed crash due to dereference of m_toStyle

        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::isTargetPropertyEqual):

2009-06-29  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7014813> Ask media engine if a movie is streamed or downloaded.

        * WebCore.base.exp: 
            Export _wkQTMovieGetType

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::hasSingleSecurityOrigin):
            Move to keep with other non-callback functions.
        (WebCore::MediaPlayer::movieLoadType):
            New, returns the movie type.
        * platform/graphics/MediaPlayer.h:
            Declare MovieLoadType enum and movieLoadType method.

        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::movieLoadType):
            Default implementation of movieLoadType

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovie):
            Don't base m_isStreaming on protocol, there are other types of streaming movies.
        (WebCore::MediaPlayerPrivate::maxTimeBuffered):
            Don't assume all streams are unbuffered.
        (WebCore::MediaPlayerPrivate::updateStates):
            Update m_isStreaming once we have metadata.
        (WebCore::MediaPlayerPrivate::disableUnsupportedTracks):
            Tracks that are disabled to begin with shouldn't be included in m_enabledTrackCount.
        (WebCore::MediaPlayerPrivate::movieLoadType):
            New, return movie type.

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
            Add wkQTMovieGetType.

2009-06-29  Alice Liu  <alice.liu@apple.com>

        Fixed <rdar://problem/6930280> Reproducible crash at USA Today photo gallery

        Reviewed by Anders Carlsson.

        No test added because the crash requires a flash plugin

        * plugins/win/PluginMessageThrottlerWin.cpp:
        Rely on the hWnd of the plugin to tell us whether the PluginView has 
        been deleted during execution of its wndProc.
        (WebCore::PluginMessageThrottlerWin::messageThrottleTimerFired):

2009-06-29  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26811
         [Chromium] Remove a flag and functions used to enable workers in runtime.

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/WorkerContextExecutionProxy.h:

2009-06-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.
        
        <rdar://problem/6976712> Text antialiasing problems when rendering into compositing layers.
        
        Improve the appearance of text in compositing layers by making use of
        CA's layer geometry flipping, rather that doing it ourselves with a flip
        transform. This allows CG to use font autohinting in the layer text.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setGeometryOrientation):
        (WebCore::GraphicsLayer::geometryOrientation):
        New methods to set whether this layer uses flipped geometry.
        
        * platform/graphics/mac/GraphicsLayerCA.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setGeometryOrientation):
        (WebCore::GraphicsLayerCA::geometryOrientation):
        Subclass in order to call into CA
        
        (WebCore::GraphicsLayerCA::setContentsLayer):
        Now that CA is doing the geometry flipping, we no longer need to flip the content
        layers for image and video manually
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):
        Turn on flipping on the root layer.

2009-06-29  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Adam Treat.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=26246

        Implement most WML specific <select> element features.
        Add 'iname' / 'ivalue' support and support variable references.

        Add two tests covering most select/variable related functionality.
        Needs more tests when adding full 'iname' / 'ivalue' support (used in conjuction with onpick).

        Tests: http/tests/wml/post-data-to-server.html
               wml/select-element-variables.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::optionCount): Refactored from HTMLSelectElement::length() for use within HTML & WML.
        * dom/SelectElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::length): Use new SelectElement::optionCount() function. (no functional changes for HTML).
        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::handleIntrinsicEventIfNeeded): Activated commented code taking care of WMLSelectElement initialization.
        * wml/WMLSelectElement.cpp: Add a bunch of new code handling WML specific feature processing.
        (WebCore::WMLSelectElement::title):
        (WebCore::WMLSelectElement::formControlName):
        (WebCore::WMLSelectElement::defaultEventHandler):
        (WebCore::WMLSelectElement::selectInitialOptions):
        (WebCore::WMLSelectElement::calculateDefaultOptionIndices):
        (WebCore::WMLSelectElement::selectDefaultOptions):
        (WebCore::WMLSelectElement::initializeVariables):
        (WebCore::WMLSelectElement::updateVariables):
        (WebCore::WMLSelectElement::parseIndexValueString):
        (WebCore::WMLSelectElement::valueStringToOptionIndices):
        (WebCore::WMLSelectElement::optionIndicesToValueString):
        (WebCore::WMLSelectElement::optionIndicesToString):
        (WebCore::WMLSelectElement::name):
        (WebCore::WMLSelectElement::value):
        (WebCore::WMLSelectElement::iname):
        (WebCore::WMLSelectElement::ivalue):
        * wml/WMLSelectElement.h:

2009-06-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Put <datagrid> behind an ifdef.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/js/JSDataGridColumnListCustom.cpp:
        * bindings/js/JSDataGridDataSource.cpp:
        * bindings/js/JSDataGridDataSource.h:
        * bindings/js/JSHTMLDataGridElementCustom.cpp:
        * html/DataGridColumn.cpp:
        * html/DataGridColumn.h:
        * html/DataGridColumn.idl:
        * html/DataGridColumnList.cpp:
        * html/DataGridColumnList.h:
        * html/DataGridColumnList.idl:
        * html/DataGridDataSource.h:
        * html/HTMLDataGridCellElement.cpp:
        * html/HTMLDataGridCellElement.h:
        * html/HTMLDataGridCellElement.idl:
        * html/HTMLDataGridColElement.cpp:
        * html/HTMLDataGridColElement.h:
        * html/HTMLDataGridColElement.idl:
        * html/HTMLDataGridElement.cpp:
        * html/HTMLDataGridElement.h:
        * html/HTMLDataGridElement.idl:
        * html/HTMLDataGridRowElement.cpp:
        * html/HTMLDataGridRowElement.h:
        * html/HTMLDataGridRowElement.idl:
        * html/HTMLTagNames.in:
        * page/DOMWindow.idl:
        * rendering/RenderDataGrid.cpp:
        * rendering/RenderDataGrid.h:

2009-06-29  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat and Adam Roben.

        Fix compilation with MINGW. Ported MSVC inline assembly to
        GNU inline assembly. Also fixed casting errors where gcc
        refused to cast a pointer-to-function to a pointer-to-object,
        without an intermediate cast to a non-pointer type.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::hookedBeginPaint):
        (WebCore::PluginView::hookedEndPaint):
        (WebCore::hook):
        (WebCore::setUpOffscreenPaintingHooks):

2009-06-26  John Sullivan  <sullivan@apple.com>

        Added Speech submenu to context menu on Mac when there's a non-editable selection
        (it was already present when there's an editable selection). 
        Also added support for disabling "Stop Speaking" when there is no speaking to stop.

        Reviewed by Tim Hatcher.

        * loader/EmptyClients.h:
        (WebCore::EmptyContextMenuClient::isSpeaking):
        implemented this new virtual function to return false
        
        * page/ContextMenuClient.h:
        declared this new pure virtual function
        
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        insert Speech item (after a separator) on Mac when there's selected non-editable text
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        enable Stop Speaking item only if the context menu client returns true for isSpeaking()

2009-06-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        - fix https://bugs.webkit.org/show_bug.cgi?id=26783
          <rdar://problem/7014543> REGRESSION (r45296): Subfolders not displayed
          in MobileMe iDisk Web App

        Test: added a case to fast/dom/Element/scrollWidth.html

        Ensure that scroll{Width, Height} is greater or equal to
        client{Width, Height}.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):

2009-06-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26780
        
        Do not make compositing layers for non-self-painting RenderLayers,
        since these exist only to push a clip onto the clipping stack. If such
        a layer gets compositied for some other reason, it should not paint.
        
        Also ensure that we update composited layer positions correctly
        inside overflow:scroll layers. We can't assume that the contents
        are child layers, so we have to go up to the compositing ancestor,
        and tell it to update all its child layer positions as we do 
        after layout.

        Tests: compositing/layers-inside-overflow-scroll.html
               compositing/self-painting-layers.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        (WebCore::RenderLayerCompositor::needsToBeComposited):

2009-06-28  Luke Kenneth Casson Leighton  <lkcl@lkcl.net>

        Reviewed by Eric Seidel.

        PurgeableBuffer #defines leave out functions on gtk MacOSX 10.4 build
        https://bugs.webkit.org/show_bug.cgi?id=23057

        Define these functions for Gtk as well.

        * platform/PurgeableBuffer.h:

2009-06-28  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Update CodeGeneratorV8.pm to match the new api for V8Proxy.

        https://bugs.webkit.org/show_bug.cgi?id=26765

        * bindings/scripts/CodeGeneratorV8.pm: Match the current version of V8Proxy.

2009-06-28  Nicolas Sylvain  <nsylvain@chromium.org>

        Reviewed by Dimitri Glazkov.

        If loading a font fails because of the sandbox, we ask the browser process to 
        try to load it by calling ensureFontLoaded. If it still fails after 
        ensureFontLoaded, we hit a ASSERT_NOT_REACHED. 

        This case happens once in a while during browser shutdown. The browser will 
        queue a message to the renderer to shutdown, and will then stop answering sync 
        messages from the renderer. If the renderer is still loading a page during this 
        time, it might try to call the browser process to ask to load a font. The 
        browser process will ignore the request, and the font will fail to load, even 
        after the second try. 

        This is unfortunate, but there is no real risk here, since the renderer will be 
        going away as soon as it processes another message. 

        This can't be layout tested as it depends on the sandbox. 

        https://bugs.webkit.org/show_bug.cgi?id=26743 

        * platform/graphics/chromium/FontChromiumWin.cpp:
        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:
        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:

2009-06-28  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=15457

        Test: plugins/netscape-plugin-map-data-to-src.html

        Fix problems with Real or WMP plugins not displaying because "data" was set
        on the OBJECT tag instead of "src".  This is based on what Firefox does, see
        http://mxr.mozilla.org/mozilla-central/source/layout/generic/nsObjectFrame.cpp#3045

        * rendering/RenderPartObject.cpp:
        (WebCore::mapDataParamToSrc):
        (WebCore::RenderPartObject::updateWidget):

2009-06-27  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Jan Alonzo.

        [Qt] Build fix after r45290
        https://bugs.webkit.org/show_bug.cgi?id=26769

        * WebCore.pro:

2009-06-27  Emilio Pozuelo Monfort  <pochu27@gmail.com>

        Reviewed by Jan Alonzo.

        [GTK] Don't use deprecated GTKsymbols.
        https://bugs.webkit.org/show_bug.cgi?id=26583

        * plugins/gtk/gtk2xtbin.c:
        (gtk_xtbin_class_init):
        (gtk_xtbin_new):
        (gtk_xtbin_destroy):

2009-06-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=26780
        
        Fix up previous change. When computeCompositingRequirements() determines
        that the current layer is composited, it needs to inform its parent
        by setting compositingState.m_subtreeIsCompositing() to true. That didn't
        always happen after the previous patch. Clarified the logic here.
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::CompositingState::CompositingState):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2009-06-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=26780
        
        First part: fix the RenderLayer::hasCompositingDescendant() flag to be set
        correctly.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        Do not unconditionally set compositingState.m_subtreeIsCompositing, because
        that can clobber the value from an earlier sibling. Add some more comments.
        
        Remove a final use of Vector iterators.
        
        (WebCore::RenderLayerCompositor::recursiveRepaintLayerRect):
        Move the normalFlowList() processing outside the test for isStackingContext().

2009-06-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser and Antti Koivisto.

        - make paintFillLayerExtended() non-virtual and remove its clipY and
          clipH parameters

        These parameters were computed and passed along to
        paintFillLayerExtended in order to vertically constrain the rect fill to
        the damage rect, because Qt cannot paint tall rectangles (see
        <http://websvn.kde.org/?view=rev&revision=42721>). Since the damage rect
        is passed along in the PaintInfo, the extra parameters are redundant,
        and the intersection can just take place in paintFillLayerExtended().

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintFillLayers):
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxDecorations):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintMask):
        (WebCore::RenderBox::paintMaskImages):
        (WebCore::RenderBox::paintFillLayers):
        (WebCore::RenderBox::paintFillLayer):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        (WebCore::RenderFieldset::paintMask):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations):
        (WebCore::RenderTable::paintMask):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        (WebCore::RenderTableCell::paintMask):

2009-06-27  Ryosuke Niwa  <rniwa@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26762

        Clean up for IndentOutdentCommand::indentRegion, and solved most of problems related to the bug 21712.
        https://bugs.webkit.org/show_bug.cgi?id=21712

        Added few utility functions to htmlediting.h/cpp

        isVisibilyAdjacent checks whether the first position is visibly next to the second position.
        i.e. there is no visible node between the first and second positions

        canMergeLists checks whether two lists can be merged.
        It checks the type of list, the editing boundary, and adjacency of the lists.

        Tests: editing/execCommand/indent-nested-lists-1.html
               editing/execCommand/indent-nested-lists-2.html
               editing/execCommand/indent-nested-lists-3.html
               editing/execCommand/indent-nested-lists-4.html
               editing/execCommand/indent-nested-lists-5.html
               editing/execCommand/indent-nested-lists-6.html
               editing/execCommand/indent-nested-lists-7.html
               editing/execCommand/outdent-nested-lists-1.html
               editing/execCommand/outdent-nested-lists-2.html
               editing/execCommand/outdent-nested-lists-3.html
               editing/execCommand/outdent-nested-lists-4.html

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::prepareBlockquoteLevelForInsertion):
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem):
        (WebCore::IndentOutdentCommand::indentIntoBlockquote):
        (WebCore::IndentOutdentCommand::indentRegion):
        * editing/IndentOutdentCommand.h:
        * editing/htmlediting.cpp:
        (WebCore::enclosingListChild):
        (WebCore::canMergeLists):
        (WebCore::isVisibilyAdjacent):
        * editing/htmlediting.h:

2009-06-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Fix completion when iterating options using Tab.

        https://bugs.webkit.org/show_bug.cgi?id=26722

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype._completionsReady):

2009-06-27  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=25889
        [GTK] scrollbar policy for main frame is not implementable

        Override visibleContentRect to handle GTK+'s case, in which
        scrollbars or equivalent decoration are painted by the parent
        widget.

        * platform/ScrollView.cpp:
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::visibleContentRect):

2009-06-27  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=26708
        
        Fix addresses false negatives with respect to scheme relative paths, iFrame JavaScript URLs,
        and UTF-7 encoded payloads.   

        Tests: http/tests/security/xssAuditor/http-equiv-utf-7-encoded.html
               http/tests/security/xssAuditor/iframe-javascript-url.html
               http/tests/security/xssAuditor/script-tag-utf-7-encoded.html
               http/tests/security/xssAuditor/script-tag-with-source-relative-scheme.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler): Moved XSSAuditor check to HTMLTokenizer::parseTag.
        (WebCore::HTMLTokenizer::parseTag):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadSubframe): Modified to inform XSSAuditor of parent frame so
        as to compare against iFrame javascript URL.
        * page/XSSAuditor.cpp: Removed method XSSAuditor::isControlCharacter. Instead, exposed method
        isControlCharacter in ResourceResponseBase.cpp.
        (WebCore::XSSAuditor::XSSAuditor):
        (WebCore::XSSAuditor::decodeURL): Modified to decode string using specified encoder.
        (WebCore::XSSAuditor::findInRequest): Generalized to arbitrary frame so as to prevent execution
        of iFrame javascript URL.
        * page/XSSAuditor.h: Added field m_parentFrame.
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::isControlCharacter):
        * platform/network/ResourceResponseBase.h:

2009-06-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 26771: Canvas is incorrectly tainted when drawing from a video element that uses <source> elements

        The drawImage(<video>) logic naively assumes that it just needs
        to check the src attribute of the video element when in fact it
        needs to look at the url that is being played instead.  Failure
        to do this means that video provided through source elements 
        taints the canvas.

        Test: media/video-canvas-source.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::checkOrigin):
        (WebCore::CanvasRenderingContext2D::drawImage):
        * html/CanvasRenderingContext2D.h:

2009-06-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=26695
        
        Added the ability to do scrollbar hit testing in EventHandler, changed the
        signature of a PlatformWheelEvent constructor, and changed scrollbarUnderMouse
        to scrollbarUnderPoint, and updated all calls to that function.        

        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        * page/EventHandler.h:
        (WebCore::):
        * platform/PlatformWheelEvent.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollbarUnderPoint):
        * platform/ScrollView.h:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::handleMouseDownEvent):
        (WebCore::PopupListBox::handleMouseMoveEvent):
        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):


2009-06-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7011924> Opacity transitions should not trigger hardware compositing mode
        
        Don't go into compositing mode just for opacity transitions, but they will be
        hardware acclerated if we're already compositing.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::requiresCompositingForTransform):
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):
        * rendering/RenderLayerCompositor.h:

2009-06-26  Simon Fraser  <simon.fraser@apple.com>

        Rubber-stamped by Dave Levin

        Rename ioCompState to compositingState to better match WebCore coding style.
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):

2009-06-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - revert unintentional project changes from r45277

        * WebCore.xcodeproj/project.pbxproj:

2009-06-26  Mark Rowe  <mrowe@apple.com>

        Fix the Windows build.

        * WebCore.vcproj/WebCore.vcproj: Remove ColorSafari.cpp as
        the file was deleted from SVN.

2009-06-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=26766

        Change to use array indexing rather than Vector enumerators; the former
        are preferred style.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::hasNonCompositingContent):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::updateCompositingChildrenGeometry):
        (WebCore::RenderLayerCompositor::recursiveRepaintLayerRect):
        (WebCore::RenderLayerCompositor::layerHas3DContent):

2009-06-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        - fix <rdar://problem/6961476> REGRESSION (r42043): scrollWidth reported
          as 1 px

        Test: fast/dom/Element/scrollWidth.html

        Changed scrollWidth and scrollHeight to use the same logic for
        visible overflow boxes that is used for clipped overflow boxes. In
        particular, borders are not included and
        {leftmost,rightmost,lowest}Position() are used. This logic matches IE8.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):

2009-06-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        Bug 26725: aria-hidden, aria-disabled, aria-readonly need to be implemented
        https://bugs.webkit.org/show_bug.cgi?id=26725

        Tests: accessibility/aria-disabled.html
               accessibility/aria-hidden.html
               accessibility/aria-readonly.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaIsHidden):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::isEnabled):
        (WebCore::AccessibilityRenderObject::canSetValueAttribute):
        * accessibility/AccessibilityRenderObject.h:
        * html/HTMLAttributeNames.in:

2009-06-26  Brett Wilson  <brettw@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26759

        GIFImageDecoder is broken.

        Make the GIFImageDecoder.repetitionCount function const to match the
        base class. The mismatched definitions were causing the function to not
        get called.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::repetitionCount):
        * platform/image-decoders/gif/GIFImageDecoder.h:

2009-06-26  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser  <simon.fraser@apple.com>.

        Additional fix for https://bugs.webkit.org/show_bug.cgi?id=26651

        The flag should always default to true to avoid it getting set
        to false in a build with accelerated compositing turned off
        and then disabling accelerated compositing when subsequently
        running a build with it turned on.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):

2009-06-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Followup for the fix for <rdar://problem/6961578> REGRESSION (r43511): Opening .fdf files from Acrobat Professional fails

        Now that other MIME type correction stuff is in our swizzled method, Tiger needs it too!

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        * platform/network/mac/WebCoreURLResponse.h:

2009-06-26  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=26732

        For the final step of https://bugs.webkit.org/show_bug.cgi?id=25376,
        combine LocalStorage and SessionStorage into StorageNamespace. The
        synching code (for LocalStorage) has already been removed, so these
        classes are now very similar.  All they do is essentially contain a
        logical grouping of origins that are attached to specific contexts
        (be it PageGroups for LocalStorage and Page for SessionStorage).

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * page/Chrome.cpp:
        (WebCore::Chrome::createWindow):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::localStorage):
        * page/DOMWindow.h:
        * page/Page.cpp:
        (WebCore::Page::sessionStorage):
        (WebCore::Page::setSessionStorage):
        * page/Page.h:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::localStorage):
        * page/PageGroup.h:
        * storage/LocalStorage.cpp: Removed.
        * storage/LocalStorage.h: Removed.
        * storage/LocalStorageTask.cpp:
        * storage/LocalStorageThread.cpp:
        * storage/SessionStorage.cpp: Removed.
        * storage/SessionStorage.h: Removed.
        * storage/StorageArea.cpp:
        (WebCore::StorageArea::create):
        (WebCore::StorageArea::StorageArea):
        (WebCore::StorageArea::copy):
        (WebCore::StorageArea::length):
        (WebCore::StorageArea::key):
        (WebCore::StorageArea::getItem):
        (WebCore::StorageArea::setItem):
        (WebCore::StorageArea::removeItem):
        (WebCore::StorageArea::clear):
        (WebCore::StorageArea::contains):
        (WebCore::StorageArea::importItem):
        (WebCore::StorageArea::close):
        (WebCore::StorageArea::dispatchStorageEvent):
        * storage/StorageArea.h:
        (WebCore::):
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::scheduleFinalSync):
        * storage/StorageNamespace.cpp: Copied from WebCore/storage/LocalStorage.cpp.
        (WebCore::localStorageNamespaceMap):
        (WebCore::StorageNamespace::localStorageNamespace):
        (WebCore::StorageNamespace::sessionStorageNamespace):
        (WebCore::StorageNamespace::StorageNamespace):
        (WebCore::StorageNamespace::~StorageNamespace):
        (WebCore::StorageNamespace::copy):
        (WebCore::StorageNamespace::storageArea):
        (WebCore::StorageNamespace::close):
        * storage/StorageNamespace.h: Copied from WebCore/storage/LocalStorage.h.

2009-06-26  Nate Chapin  <japhet@chromium.org>

        Reviewed by David Levin.

        Upstream V8Proxy.  This involved updating a lot of function and variable names to match WebKit style, hence the large size.

        https://bugs.webkit.org/show_bug.cgi?id=26623

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::~ScheduledAction):
        (WebCore::ScheduledAction::execute):
        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::ScriptCallStack):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::isSafeScript):
        (WebCore::ScriptController::gcProtectJSWrapper):
        (WebCore::ScriptController::gcUnprotectJSWrapper):
        (WebCore::ScriptController::processingUserGesture):
        (WebCore::ScriptController::evaluate):
        (WebCore::ScriptController::setEventHandlerLineNumber):
        (WebCore::ScriptController::bindToWindowObject):
        (WebCore::ScriptController::collectGarbage):
        (WebCore::ScriptController::haveInterpreter):
        (WebCore::createScriptObject):
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        * bindings/v8/ScriptInstance.cpp:
        (WebCore::V8ScriptInstance::clear):
        (WebCore::V8ScriptInstance::set):
        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/v8/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * bindings/v8/ScriptScope.cpp:
        (WebCore::ScriptScope::ScriptScope):
        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::ScriptValue):
        (WebCore::ScriptValue::operator=):
        (WebCore::ScriptValue::clear):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        (WebCore::V8AbstractEventListener::handleEvent):
        (WebCore::V8AbstractEventListener::disposeListenerObject):
        (WebCore::V8AbstractEventListener::getReceiverObject):
        * bindings/v8/V8Collection.cpp:
        (WebCore::toOptionsCollectionSetter):
        * bindings/v8/V8Collection.h:
        (WebCore::getV8Object):
        (WebCore::getNamedPropertyOfCollection):
        (WebCore::nodeCollectionNamedPropertyGetter):
        (WebCore::getIndexedPropertyOfCollection):
        (WebCore::nodeCollectionIndexedPropertyGetter):
        (WebCore::nodeCollectionIndexedPropertyEnumerator):
        (WebCore::collectionIndexedPropertyEnumerator):
        (WebCore::collectionStringOrNullIndexedPropertyGetter):
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::weakDOMObjectCallback):
        (WebCore::DOMData::removeObjectsFromWrapperMap):
        * bindings/v8/V8Helpers.cpp:
        (WebCore::wrapNPObject):
        (WebCore::toV8Context):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::~V8LazyEventListener):
        (WebCore::V8LazyEventListener::getListenerFunction):
        (WebCore::V8LazyEventListener::callListenerFunction):
        (WebCore::V8LazyEventListener::getWrappedListenerFunction):
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::V8NodeFilterCondition):
        (WebCore::V8NodeFilterCondition::~V8NodeFilterCondition):
        (WebCore::V8NodeFilterCondition::acceptNode):
        * bindings/v8/V8ObjectEventListener.cpp:
        (WebCore::weakObjectEventListenerCallback):
        (WebCore::V8ObjectEventListener::~V8ObjectEventListener):
        * bindings/v8/V8Proxy.cpp: Added.
        * bindings/v8/V8Proxy.h:
        (WebCore::):
        (WebCore::GlobalHandleInfo::GlobalHandleInfo):
        (WebCore::V8Proxy::):
        (WebCore::V8Proxy::V8Proxy):
        (WebCore::V8Proxy::frame):
        (WebCore::V8Proxy::inlineCode):
        (WebCore::V8Proxy::setInlineCode):
        (WebCore::V8Proxy::timerCallback):
        (WebCore::V8Proxy::setTimerCallback):
        (WebCore::V8Proxy::setEventHandlerLineNumber):
        (WebCore::V8Proxy::finishedWithEvent):
        (WebCore::V8Proxy::wrapCPointer):
        (WebCore::V8Proxy::extractCPointer):
        (WebCore::V8Proxy::convertDOMWrapperToNative):
        (WebCore::V8Proxy::convertDOMWrapperToNode):
        (WebCore::V8Proxy::convertToV8Object):
        (WebCore::V8Proxy::convertToNativeObject):
        (WebCore::V8Proxy::convertToNativeEvent):
        (WebCore::V8Proxy::context):
        (WebCore::V8Proxy::extractCPointerImpl):
        (WebCore::V8Proxy::utilityContext):
        (WebCore::V8Proxy::constructDOMObject):
        (WebCore::throwError):
        (WebCore::toV8):
        * bindings/v8/V8Utilities.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::retrieve):
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):
        (WebCore::WorkerContextExecutionProxy::GetConstructor):
        (WebCore::WorkerContextExecutionProxy::ToV8Object):
        (WebCore::WorkerContextExecutionProxy::EventToV8Object):
        (WebCore::WorkerContextExecutionProxy::toV8):
        (WebCore::WorkerContextExecutionProxy::forgetV8EventObject):
        (WebCore::WorkerContextExecutionProxy::evaluate):
        (WebCore::WorkerContextExecutionProxy::runScript):
        * bindings/v8/custom/V8AttrCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasPixelArrayCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::toV8):
        (WebCore::toCanvasStyle):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8ClientRectListCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8CustomBinding.cpp:
        (WebCore::allowSettingFrameSrcToJavascriptUrl):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::INDEXED_ACCESS_CHECK):
        (WebCore::NAMED_ACCESS_CHECK):
        (WebCore::V8Custom::GetTargetFrame):
        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::V8EventListener):
        (WebCore::V8EventListener::~V8EventListener):
        (WebCore::V8EventListener::callListenerFunction):
        * bindings/v8/custom/V8CustomSQLStatementCallback.cpp:
        (WebCore::V8CustomSQLStatementCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8CustomSQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLTransactionCallback.cpp:
        (WebCore::V8CustomSQLTransactionCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp:
        (WebCore::V8CustomSQLTransactionErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomVoidCallback.cpp:
        (WebCore::V8CustomVoidCallback::handleEvent):
        (WebCore::invokeCallback):
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):
        * bindings/v8/custom/V8DOMParserConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):
        (WebCore::convertBase64):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::createWindow):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::V8Custom::ClearTimeoutImpl):
        (WebCore::NAMED_ACCESS_CHECK):
        (WebCore::INDEXED_ACCESS_CHECK):
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::getItem):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8HTMLFrameSetElementCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_SETTER):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8HTMLSelectElementCollectionCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::removeElement):
        * bindings/v8/custom/V8InspectorControllerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_ACCESS_CHECK):
        (WebCore::NAMED_ACCESS_CHECK):
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8NavigatorCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        (WebCore::toV8):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGElementInstanceCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        (WebCore::toV8):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WebKitCSSMatrixConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WebKitPointConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::SetTimeoutOrInterval):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::getEventListener):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::getEventListener):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLSerializerConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XPathEvaluatorConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-06-26  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/7011047> Profiler shows the record button 'on' even
        though it's finished

        I consolidated the creation of the user initiated profile name into
        its own function and then called it from console::profile instead of
        calling startUserInitiatedProfiling().  This way we don't call
        toggleRecordButton() which turns on the record button.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::getCurrentUserInitiatedProfileName):
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        * inspector/InspectorController.h:
        * page/Console.cpp:
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):

2009-06-26  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26691

        Cleanup: Move focusRingColor to RenderTheme.

        Most of this CL involves deleting files and removing dead code.

        focusRingColor() is now defined in RenderTheme rather than in
        misc. places on each port.  The default color is specified as
        black in renderTheme and ports can override it in their own
        custom renderThemes.

        Behavior should be identical except for the following cases,
        this lists platform and what the focus ring color used to be
        before this cl and the file where it used to be defined:

        Android - red
        WebCore/platform/android/TemporaryLinkStubs.cpp

        Cairo - aqua focus ring color - 0xFF7DADD9
        WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp

        wx - red
        WebCore/platform/wx/TemporaryLinkStubs.cpp

        QT - black
        WebCore/platform/graphics/qt/GraphicsContextQt.cpp

        Manual test: manual-tests/focusringcolor-change-on-theme-change.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue):
        * manual-tests/focusringcolor-change-on-theme-change.html: Added.
        * platform/android/TemporaryLinkStubs.cpp:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/chromium/ColorChromium.cpp: Removed.
        * platform/graphics/chromium/ColorChromiumMac.mm: Removed.
        * platform/graphics/mac/ColorMac.h:
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::oldAquaFocusRingColor):
        (WebCore::setUsesTestModeFocusRingColor):
        (WebCore::usesTestModeFocusRingColor):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/win/ColorSafari.cpp: Removed.
        * platform/wx/TemporaryLinkStubs.cpp:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::focusRingColor):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::focusRingColor):
        (WebCore::RenderThemeChromiumMac::systemColor):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::focusRingColor):
        * rendering/RenderThemeChromiumSkia.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::focusRingColor):
        (WebCore::RenderThemeMac::systemColor):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::makeRGBAFromCGColor):
        (WebCore::RenderThemeSafari::focusRingColor):
        * rendering/RenderThemeSafari.h:

2009-06-26  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26761
        [Chromium] Enable Dedicated Workers in Chromium.

        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        Remove the check that prevented workers from being created w/o a command-line switch.
        The flag itself and methods will be removed in a subsequent patch, after
        corresponding change in Chromium.

2009-06-26  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Mark Rowe.
        
        Fix: https://bugs.webkit.org/show_bug.cgi?id=26723
        Where the m_mouseDown event was never being set on windows, so the
        client X and Y coordinates were always being reported as zero in a
        dragstart handler.

        Test: editing/selection/drag-start-event-client-x-y.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        Set the m_mouseDown event when the mouse press is handled.
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::mouseDown):
        Removed now redundant setting of m_mouseDown.

2009-06-26  Brady Eidson  <beidson@apple.com>

        Tiger build fix

        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/mac/WebCoreURLResponse.mm:
        (swizzleMIMETypeMethodIfNecessary):

2009-06-26  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=26681
        Problem updating applicationCache when server returns 304
        
        Improve the fix, make the test pass on Tiger.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponse): Fix another code path to remove the
        current item from list.

        * platform/network/mac/ResourceHandleMac.mm: (WebCore::ResourceHandle::start): On Tiger,
        conditional requests that cannot be cached by network layer cause errors with default cache
        policy.

2009-06-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        <rdar://problem/6961578> REGRESSION (r43511): Opening .fdf files from Acrobat Professional fails

        When we disabled content sniffing for file urls we lost knowledge of many file extensions that we
        didn't intend to lose.  Turns out the CoreTypes UTI database doesn't know about every extension Gatekeeper
        knew about.

        By comparing CoreTypes' database to Gatekeepers, this patch adds a hardcoded list of file extension to MIME
        type mappings that are missing in CoreType's database.

        Test: platform/mac/fast/loader/file-url-mimetypes.html

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]): Move the MIME Type swizzling code to
          WebCoreURLResponse.

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit): _webcore_MIMEType -> MIMEType, as we now have only one place
          where we do all MIMEType correction.

        * platform/network/mac/WebCoreURLResponse.h: Remove _webcore_MIMEType, as it is now folded into the swizzled
          implementation of MIMEType.
        * platform/network/mac/WebCoreURLResponse.mm:
        (createBinaryExtensionsSet):
        (createExtensionToMIMETypeMap):
        (swizzleMIMETypeMethodIfNecessary):
        (webNSURLResponseMIMEType): If it's a file URL and there's no MIME type, see if the extension exists in the 
          extension -> MIME type map before turning to the default MIME type.  Also roll in what was previously
          implemented in _webcore_MIMEType.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::~SVGImage): Tweak this ASSERT - SVGImages might get destroyed without ever having a client.

2009-06-25  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        Show the fullscreen button only if the backend has support for it.

        https://bugs.webkit.org/show_bug.cgi?id=26661

        No test since this is not reachable via the DOM.

        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::supportsFullscreen): new
        * html/HTMLVideoElement.h:
        (WebCore::HTMLVideoElement::supportsFullscreen): new
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::supportsFullscreen): new
        (WebCore::MediaPlayer::supportsFullscreen): new
        * platform/graphics/MediaPlayer.h: new
        * platform/graphics/MediaPlayerPrivate.h: new
        (WebCore::MediaPlayerPrivateInterface::supportsFullscreen): new
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlFullscreenButtonElement::rendererIsNeeded): new
        * rendering/MediaControlElements.h:

2009-06-25  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7007776> Controller doesn't automatically update counters when file
        is playing ( http://www.jazzguitar.be/mp3/Michael%20Lewis%20-%20SSSJ.mp3 )

        Update the time display when the movie time changes.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::updateControls):

2009-06-25  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=26659

        Support hidding a control bar element from the Media element controller.

        Update layout tests since the fullscreen button no longer has a renderer.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaTextDisplayElement::update): call updateStyle() so everything
        is updated properly.
        (WebCore::MediaControlInputElement::MediaControlInputElement):
        (WebCore::MediaControlInputElement::update): call updateStyle()
        (WebCore::MediaControlInputElement::updateStyle): create the renderer properly
        or not depending on what rendererIsNeeded() return.
        * rendering/MediaControlElements.h:

2009-06-26  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6968137> Profiler title numbers increment even after a
        reload.

        - Now the numbers are reset when the profiles are.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):

2009-06-26  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/7000796>
        REGRESSION(34681): Breaking up quoted text makes new, unquoted text blue after certain steps; repros with some messages

        Test: editing/inserting/break-blockquote-after-delete.html

        Keep track of whether the typing style should be preserved after the TypingCommand is applied.  When adding onto an open
        typing command, keep that flag up to date.

        In this case, an InsertParagraphSeparatorInQuotedContent command, which should not preserve typing style, 
        was following an open Delete command, which does preserve the typing style.  So we were applying the original
        typing style (from before the delete, so blue text) to the cursor in the unquoted area after breaking up the blockquote.

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::TypingCommand):
        (WebCore::TypingCommand::typingAddedToOpenCommand):
        (WebCore::TypingCommand::insertTextRunWithoutNewlines):
        (WebCore::TypingCommand::insertLineBreak):
        (WebCore::TypingCommand::insertParagraphSeparator):
        (WebCore::TypingCommand::insertParagraphSeparatorInQuotedContent):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::TypingCommand::deleteSelection):
        (WebCore::TypingCommand::updatePreservesTypingStyle):
        * editing/TypingCommand.h: (WebCore::TypingCommand::preservesTypingStyle):

2009-06-26  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Add support for saving and loading of QWebHistory to and from a QByteArray.

        This includes streaming operators for QWebHistory. for convenience.

        New autotests that test QWebHistory and QWebHistoryItem serialization.

        * WebCore.pro:
        * history/HistoryItem.h:
        (WebCore::HistoryItem::dailyVisitCounts):
        (WebCore::HistoryItem::weeklyVisitCounts):
        * history/qt/HistoryItemQt.cpp: Added.
        (WebCore::HistoryItem::restoreState):
        (WebCore::HistoryItem::saveState):

2009-06-26  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Add support for QDataStream operators to String and IntPoint.

        * platform/graphics/IntPoint.h:
        (WebCore::operator<<):
        (WebCore::operator>>):
        * platform/text/PlatformString.h:
        * platform/text/qt/StringQt.cpp:
        (WebCore::operator<<):
        (WebCore::operator>>):

2009-06-26  Ben Murdoch  <benm@google.com>

        Reviewed by Darin Fisher.

        Add #if ENABLE(DOM_STORAGE) to the V8 custom bindings for local/session storage.
        https://bugs.webkit.org/show_bug.cgi?id=26757

        * bindings/v8/custom/V8StorageCustom.cpp

2009-06-26  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Eric Seidel.

        Test: platform/qt/fast/events/event-sender-keydown-frame.html

        Bug 20303: [Qt] Key events are not working in frames.

        Merge scrolling handling code in qt and win port, move it to
        EventHandler.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::scrollRecursively):
        * page/EventHandler.h:

2009-06-26  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26682
        Bug 26682: It should be possible to add image to SVG DOM programmatically (using JavaScript)

        Make sure the xlink:href animated property setting syncs the corresponding attribute with the right namespace.

        Test: svg/custom/createImageElement.svg

        * svg/SVGAnimatedProperty.h:
        (WebCore::synchronizeProperty):

2009-06-26  Takeshi Yoshino  <tyoshino@google.com>

        Reviewed by Timothy Hatcher.

        Bug 26156: In view-source mode, always render the contents using HTMLViewSourceDocument
        https://bugs.webkit.org/show_bug.cgi?id=26156

        When in view-source mode, render the contents using HTMLViewSourceDocument
        regardless it's applicable for any plugin or not.

        Chromium tells WebCore to render the contents of specified URL when
        view-source: prefix is added to the URL. But currently, DOMImplementation
        ignores inViewSourceMode() when the MIME type is indicating that the contents
        are neither texts nor HTML family documents.

        For example, we can check the contents of asf file without launching media
        player. Rendering contents for view-source:-specified input is not what user
        expects.

        http://code.google.com/p/chromium/issues/detail?id=10545

        I want to fix this issue by this patch. IMHO, regardless of this Chromium
        specific issue, I think we should force use of HTMLViewSourceDocument when
        inViewSourceMode() is specified.

        Test: fast/frames/viewsource-on-image-file.html

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createTokenizer):
        * html/HTMLViewSourceDocument.h:

2009-06-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25529
        [Gtk] Expected states not exposed to assistive technologies

        Add support for VISIBLE, EDITABLE and SENSITIVE states.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject):

2009-06-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        "Pointer to incomplete class type is not allowed" error with RVCT
        https://bugs.webkit.org/show_bug.cgi?id=26721

        Based on Norbert Leser's work.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * dom/Node.cpp:
        (WebCore::Node::dispatchMouseEvent):
        * dom/Node.h: Remove the default value for PassRefPtr<Event> args,
        to eliminate dependency on the Event class definition

2009-06-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Maciej Stachowiak.

        [Qt] Build fix after r45183
        https://bugs.webkit.org/show_bug.cgi?id=26748

        * WebCore.pro:

2009-06-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=26681
        <rdar://problem/7003461> Problem updating applicationCache when server returns 304

        Test: http/tests/appcache/update-cache.html

        * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::didReceiveResponse):
        We're already done with the resource, don't try to load it again.

2009-06-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Oliver Hunt.
        
        <rdar://problem/6990481>
        
        Handle perspective computation on non-layer objects.

        Test: transforms/3d/general/perspective-non-layer.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getTransformFromContainer):

2009-06-25  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26653

        Use flex box in the mediaControls.css style, to nicely scale if a button gets
        dynamically added or removed.

        Media tests results are affected by this changes.

        * css/mediaControls.css:
        * css/mediaControlsQT.css:

2009-06-25  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=26724

        Move relavent part of setDefaultFontSize from RenderThemeChromiumWin
        up into RenderThemeChromiumSkia.

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::setDefaultFontSize):
        * rendering/RenderThemeChromiumSkia.h:
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::setDefaultFontSize):
        * rendering/RenderThemeChromiumWin.h:

2009-06-25  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=26733

        Add V8-only methods to FrameLoaderClient that V8 can use to send
        out notifications when it creates/destroys a script context.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::didCreateScriptContext):
        (WebCore::EmptyFrameLoaderClient::didDestroyScriptContext):
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::didCreateScriptContext):
        (WebCore::FrameLoaderClient::didDestroyScriptContext):

2009-06-25  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by David Levin.

        Correct a few typos that snuck in when I was reformatting CodeGeneratorV8.pm
        to match WebKit style.

        * bindings/scripts/CodeGeneratorV8.pm: Corrected lots of typos.

2009-06-25  Adam Langley  <agl@google.com>

        TBRed: fix for Chromium tree.

        Add missing include for r45199.

        https://bugs.webkit.org/show_bug.cgi?id=26736

        r45199 added a reference to throwError without including V8Proxy.h

        * bindings/v8/WorkerScriptController.cpp:

2009-06-25  Adam Langley  <agl@google.com>

        TBRed: fix for Chromium tree.

        https://bugs.webkit.org/show_bug.cgi?id=26735

        Fix V8IsolatedWorld to point to the correct include file.

        The deprecated v8_index.h was removed from the Chromium tree in r19291
        and upstreamed into WebKit with r45193. However V8IsolatedWorld
        slipped in between the cracks and broke the build.

        * bindings/v8/V8IsolatedWorld.h: update with new header location.

2009-06-25  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser  <simon.fraser@apple.com>.

        https://bugs.webkit.org/show_bug.cgi?id=26651
        
        Preference is named "WebKitAcceleratedCompositingEnabled"
        and is a boolean value. When false, prevents compositing layers from
        being created, which prevents hardware animation from running.
        Also forces video to do software rendering. Added a cache for
        the flag in RenderLayerCompositing and made it all work
        on-the-fly when the flag is changed while a page is loaded.

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayers):
        * page/Settings.cpp:
        (WebCore::setNeedsReapplyStylesInAllFrames):
        (WebCore::Settings::Settings):
        (WebCore::Settings::setAcceleratedCompositingEnabled):
        * page/Settings.h:
        (WebCore::Settings::acceleratedCompositingEnabled):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hasAcceleratedCompositing):
        (WebCore::RenderLayer::updateTransform):
        (WebCore::RenderLayer::currentTransform):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateLayerTransform):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::enableCompositingMode):
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingEnabledFlag):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::canAccelerateVideoRendering):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::needsToBeComposited):
        (WebCore::RenderLayerCompositor::destroyRootPlatformLayer):
        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::hasAcceleratedCompositing):
        * rendering/RenderObject.h:
        (WebCore::makeMatrixRenderable):

2009-06-25  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 26701: Implement the missing code for "FIXME: Need to return an
        exception" in WorkerScriptController::evaluate for v8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=26701

        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):

2009-06-25  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Upstream V8Index.

        https://bugs.webkit.org/show_bug.cgi?id=26495

        * bindings/v8/V8Index.cpp: Added.
        (WebCore::V8ClassIndex::GetFactory): Moved from src.chromium.org.
        (WebCore::V8ClassIndex::GetCache): Moved from src.chromium.org.
        * bindings/v8/V8Index.h:
        (WebCore::V8ClassIndex::): Moved from src.chromium.org.
        (WebCore::V8ClassIndex::ToInt): Moved from src.chromium.org.
        (WebCore::V8ClassIndex::FromInt): Moved from src.chromium.org.

2009-06-25  Adam Langley  <agl@google.com>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=26529

        This is hopefully the last step before our renderers can run
        cleanly in a chroot.

        WebKit needs to be able to ask for the correct font to use in
        the case that the current font doesn't include glyphs for
        certain code points. Currently we make a fontconfig call in our
        WebKit port to handle this.

        This patch changes this so that the call is sent our via
        ChromiumBridge.

        http://codereview.chromium.org/132007

        This should not affect any layout tests.

        * platform/chromium/ChromiumBridge.h:
        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::getFontDataForCharacters):

2009-06-25  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26566
        Upstream these files from the chromium v8 code.  No tests were
        affected because this is essentially a code move.

        * bindings/v8/NPV8Object.cpp: Added.
        (allocV8NPObject):
        (freeV8NPObject):
        (listFromVariantArgs):
        (npIdentifierToV8Identifier):
        (npCreateV8ScriptObject):
        (NPN_Invoke):
        (NPN_InvokeDefault):
        (NPN_Evaluate):
        (NPN_EvaluateHelper):
        (NPN_GetProperty):
        (NPN_SetProperty):
        (NPN_RemoveProperty):
        (NPN_HasProperty):
        (NPN_HasMethod):
        (NPN_SetException):
        (NPN_Enumerate):
        (NPN_Construct):
        * bindings/v8/NPV8Object.h: Added.
        (PrivateIdentifier::):
        * bindings/v8/V8NPUtils.cpp: Added.
        (convertV8ObjectToNPVariant):
        (convertNPVariantToV8Object):
        (getStringIdentifier):
        * bindings/v8/V8NPUtils.h: Added.

2009-06-25  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=26436

        Windows Chromium bug fix: save context of destination canvas in
        TransparencyWin::compositeTextComposite() before the function
        modifies the context.

        Test: fast/canvas/translate-text.html

        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::compositeTextComposite):

2009-06-25  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Show the filename and first line for "(program)" in the Profiler/Debugger
        https://bugs.webkit.org/show_bug.cgi?id=25475

        Add support to associate a sourceURL with an eval()'d string
        via a @sourceURL comment.  Currently the sourceURL is only available
        in the script debugger, not in the console or profiler, but it's
        most needed in the script debugger.

        * English.lproj/localizedStrings.js: added new "(program): %s" string
        * inspector/front-end/Script.js:
        (WebInspector.Script): if no sourceURL is available for the Script,
        search for a comment of the form //@ sourceURL=(url) to use
        as the sourceURL instead.
        * manual-tests/inspector/named-evals.html: Added.

2009-06-25  John Gregg  <johnnyg@google.com>

        Reviewed by Sam Weinig.

        Bug 23721: Changing dropdown's selectedIndex within onchange handler fires another onchange
        https://bugs.webkit.org/show_bug.cgi?id=23721

        onchange events fire when a SELECT element has
        focus and the selectedIndex is updated by script in some way--either
        during another onchange, onkeypress, onfocus, or timer--and then
        focus is lost. 

        Fixed by making a separate method for user-driven selectedIndex 
        changes, leaving scripts to use one which doesn't cause onchange to
        be queued.
        
        Test: fast/forms/select-script-onchange.html

        * dom/SelectElement.cpp: check if the pending change is user driven
        before calling onchange
        (WebCore::SelectElement::menuListOnChange):
        (WebCore::SelectElement::setSelectedIndex):
        * dom/SelectElement.h: store whether the pending change is user driven
        (WebCore::SelectElementData::userDrivenChange):
        (WebCore::SelectElementData::setUserDrivenChange):
        * html/HTMLSelectElement.cpp: split into two methods -- script version
        [non-user-driven] corresponds to IDL defined property name
        (WebCore::HTMLSelectElement::setSelectedIndex):
        (WebCore::HTMLSelectElement::setSelectedIndexByUser):
        * html/HTMLSelectElement.h: 
        * rendering/RenderMenuList.cpp: use ByUser method when coming through
        the renderer
        (WebCore::RenderMenuList::valueChanged):

2009-06-25  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=26698

        Combined LocalStorageArea and SessionStorageArea into StorageArea since
        (after my other refactorings) there are no longer substantial
        differences between the two.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::storageArea):
        * storage/LocalStorage.h:
        * storage/LocalStorageArea.cpp: Removed.
        * storage/LocalStorageArea.h: Removed.
        * storage/SessionStorage.cpp:
        (WebCore::SessionStorage::copy):
        (WebCore::SessionStorage::storageArea):
        * storage/SessionStorage.h:
        * storage/SessionStorageArea.cpp: Removed.
        * storage/SessionStorageArea.h: Removed.
        * storage/StorageArea.cpp:
        (WebCore::StorageArea::createLocalStorage):
        (WebCore::StorageArea::StorageArea):
        (WebCore::StorageArea::createSessionStorage):
        (WebCore::StorageArea::copy):
        (WebCore::StorageArea::setItem):
        (WebCore::StorageArea::removeItem):
        (WebCore::StorageArea::clear):
        (WebCore::StorageArea::scheduleFinalSync):
        (WebCore::StorageArea::blockUntilImportComplete):
        (WebCore::StorageArea::dispatchStorageEvent):
        * storage/StorageArea.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):
        (WebCore::StorageAreaSync::scheduleFinalSync):
        (WebCore::StorageAreaSync::syncTimerFired):
        (WebCore::StorageAreaSync::performImport):
        * storage/StorageAreaSync.h:
        * storage/StorageSyncManager.h:

2009-06-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=26671
          <rdar://problem/7001880> Safari 4.0 crashes in
          WebCore::DOMTimer::fired()

        Test: fast/dom/style-sheet-candidate-remove-unrendered-document.html

        When a "style sheet candidate" element is removed from a document,
        call Document::removeStyleSheetCandidateNode() regardless of whether
        the document is rendered. Otherwise, the document's style sheet
        candidate set can end up containing stale references.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::removedFromDocument):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::removedFromDocument):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::removedFromDocument):

2009-06-25  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        Update CodeGeneratorV8.pm to sync up with the changes downstream.

        * bindings/scripts/CodeGeneratorV8.pm: Added HTMLFrameSetElement check,
          FileList as a ref-counted type, and DataGridColumn as typeCanFailConversion.

2009-06-25  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        Add FileList.h include to fix Chromium build.

        * platform/chromium/ClipboardChromium.cpp: Added FileList.h include.

2009-06-25  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Jan Alonzo.

        Bug 26489: Web Inspector: Typo in DatabaseQuery Error Message
        https://bugs.webkit.org/show_bug.cgi?id=26489

        Fixed a Typo in a Web Inspector error message.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._queryError):

2009-06-25  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build, add missing StorageAreaSync files to the build.

        * WebCore.pro:

2009-06-25  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by and done with Tor Arne Vestbø.

        Fix shortcut keyboard handling with plugins on the Qt/Mac build.

        When we receive shortcut events like Ctrl+V then the text in the QKeyEvent is
        empty. If we're asked to disambiguate the event into a Char keyboard event,
        we try to detect this situation and still set the text, to ensure that the
        general event handling sends a key press event after this disambiguation.

        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):

2009-06-25  Eric Seidel  <eric@webkit.org>

        Build fix only, no review.

        Add FileList.h and NotImplemented.h includes in an attempt to fix bots.

        * platform/gtk/ClipboardGtk.cpp:
        * platform/qt/ClipboardQt.cpp:
        * platform/win/ClipboardWin.cpp:
        * platform/wx/ClipboardWx.cpp:

2009-05-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        Expose files in the clipboard in ondrop events
        https://bugs.webkit.org/show_bug.cgi?id=25916

        Make it possible for applications like gmail to implement
        drag and drop of attachments onto email messages.

        This patch exposes an event.dataTransfer.files accessor
        on the drop event.  No information is exposed during dragover.
        This follows the HTML 5 drag and drop security model:
        http://www.w3.org/TR/html5/editing.html#security-risks-in-the-drag-and-drop-model
        The test http/tests/security/clipboard/clipboard-file-access.html
        verifies this behavior.

        Internet Explorer shows historical documentation of supporting
        getData('File') as a way of exposing files on the pasteboard.  The current version of their docs:
        http://msdn.microsoft.com/en-us/library/ms537658(VS.85).aspx
        has removed this reference (as far as I can tell IE never implemented it)
        I have a printed copy of that URL from 2008 on my desk describing getData('File') in IE.
        IE does not follow the HTML5 clipboard security model and always allows access to the full clipboard, even on dragover.

        I choose not to use IE's getData('File') and instead added .files
        so that the accessor could have a type, matching WebKit's existing
        .files accessor on HTMLInputElement.

        Mozilla has equivalent file access:
        event.dataTransfer.mozGetDataAt("application/x-moz-file", 0);
        which also does not return a typed value.
        https://developer.mozilla.org/En/DragDrop/Recommended_Drag_Types#Dragging_Files

        This is only implemented for Mac WebKit.  All other platforms (including Apple's Win WebKit)
        have incomplete Clipboard implementations and will require experts from those platforms
        to add this functionality.  Right now they all have Clipboard*::files() methods which call notImplemented();

        Test: http/tests/security/clipboard/clipboard-file-access.html

        * dom/Clipboard.h:
        * dom/Clipboard.idl:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::files):
        * platform/chromium/ClipboardChromium.h:
        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::files):
        * platform/gtk/ClipboardGtk.h:
        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::absoluteURLsFromPasteboardFilenames):
        (WebCore::absoluteURLsFromPasteboard):
        (WebCore::ClipboardMac::files):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::files):
        * platform/qt/ClipboardQt.h:
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::files):
        * platform/win/ClipboardWin.h:
        * platform/wx/ClipboardWx.cpp:
        (WebCore::ClipboardWx::files):
        * platform/wx/ClipboardWx.h:

2009-06-25  Eric Seidel  <eric@webkit.org>

        No review, only completing revert of r45144.

        Add back files deleted by r45144.

        * storage/LocalStorageArea.cpp: Added.
        (WebCore::LocalStorageArea::create):
        (WebCore::LocalStorageArea::LocalStorageArea):
        (WebCore::LocalStorageArea::scheduleFinalSync):
        (WebCore::LocalStorageArea::itemChanged):
        (WebCore::LocalStorageArea::itemRemoved):
        (WebCore::LocalStorageArea::areaCleared):
        (WebCore::LocalStorageArea::blockUntilImportComplete):
        (WebCore::LocalStorageArea::dispatchStorageEvent):
        * storage/LocalStorageArea.h: Added.
        * storage/SessionStorageArea.cpp: Added.
        (WebCore::SessionStorageArea::copy):
        (WebCore::SessionStorageArea::SessionStorageArea):
        (WebCore::SessionStorageArea::itemChanged):
        (WebCore::SessionStorageArea::itemRemoved):
        (WebCore::SessionStorageArea::areaCleared):
        (WebCore::SessionStorageArea::blockUntilImportComplete):
        (WebCore::SessionStorageArea::dispatchStorageEvent):
        * storage/SessionStorageArea.h: Added.
        (WebCore::SessionStorageArea::create):

2009-06-25  Eric Seidel  <eric@webkit.org>

        No review, reverting r45144 only.

        Roll out r45144 after 18 test failures appeared on the bots.
        https://bugs.webkit.org/show_bug.cgi?id=26698

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::storageArea):
        * storage/LocalStorage.h:
        * storage/SessionStorage.cpp:
        (WebCore::SessionStorage::copy):
        (WebCore::SessionStorage::storageArea):
        * storage/SessionStorage.h:
        * storage/StorageArea.cpp:
        (WebCore::StorageArea::StorageArea):
        (WebCore::StorageArea::~StorageArea):
        (WebCore::StorageArea::setItem):
        (WebCore::StorageArea::removeItem):
        (WebCore::StorageArea::clear):
        * storage/StorageArea.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):
        (WebCore::StorageAreaSync::scheduleFinalSync):
        (WebCore::StorageAreaSync::syncTimerFired):
        (WebCore::StorageAreaSync::performImport):
        * storage/StorageAreaSync.h:
        * storage/StorageSyncManager.h:

2009-06-24  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=26698

        Combined LocalStorageArea and SessionStorageArea into StorageArea since
        (after my other refactorings) there are no longer substantial
        differences between the two.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::storageArea):
        * storage/LocalStorage.h:
        * storage/LocalStorageArea.cpp: Removed.
        * storage/LocalStorageArea.h: Removed.
        * storage/SessionStorage.cpp:
        (WebCore::SessionStorage::copy):
        (WebCore::SessionStorage::storageArea):
        * storage/SessionStorage.h:
        * storage/SessionStorageArea.cpp: Removed.
        * storage/SessionStorageArea.h: Removed.
        * storage/StorageArea.cpp:
        (WebCore::StorageArea::createLocalStorage):
        (WebCore::StorageArea::StorageArea):
        (WebCore::StorageArea::createSessionStorage):
        (WebCore::StorageArea::copy):
        (WebCore::StorageArea::setItem):
        (WebCore::StorageArea::removeItem):
        (WebCore::StorageArea::clear):
        (WebCore::StorageArea::scheduleFinalSync):
        (WebCore::StorageArea::blockUntilImportComplete):
        (WebCore::StorageArea::dispatchStorageEvent):
        * storage/StorageArea.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):
        (WebCore::StorageAreaSync::scheduleFinalSync):
        (WebCore::StorageAreaSync::syncTimerFired):
        (WebCore::StorageAreaSync::performImport):
        * storage/StorageAreaSync.h:
        * storage/StorageSyncManager.h:

2009-06-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        - fix <rdar://problem/7001817> REGRESSION (r41902): Base position track
          at UCSC Genome Browser doesn't work because image map prevents img
          from hit-testing

        Test: fast/replaced/image-map-2.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::nodeAtPoint): Do not reset 'inside' to false if
        the image map failed the hit test.

2009-06-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=26366

        Refactor V8DOMMap to support isolated worlds.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInNewWorld):
        * bindings/v8/ScriptController.h:
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::DOMDataStore::InternalDOMWrapperMap::InternalDOMWrapperMap):
        (WebCore::DOMDataStore::allStores):
        (WebCore::DOMDataStore::allStoresMutex):
        (WebCore::DOMDataStore::domData):
        (WebCore::ScopedDOMDataStore::ScopedDOMDataStore):
        (WebCore::ScopedDOMDataStore::~ScopedDOMDataStore):
        (WebCore::StaticDOMDataStore::StaticDOMDataStore):
        (WebCore::):
        (WebCore::MainThreadDOMData::MainThreadDOMData):
        (WebCore::MainThreadDOMData::getStore):
        (WebCore::ChildThreadDOMData::ChildThreadDOMData):
        (WebCore::ChildThreadDOMData::getStore):
        (WebCore::DOMDataStore::DOMDataStore):
        (WebCore::DOMDataStore::~DOMDataStore):
        (WebCore::DOMDataStoreHandle::DOMDataStoreHandle):
        (WebCore::DOMDataStoreHandle::~DOMDataStoreHandle):
        (WebCore::forget):
        (WebCore::getDOMNodeMap):
        (WebCore::getDOMObjectMap):
        (WebCore::getActiveDOMObjectMap):
        (WebCore::getDOMSVGElementInstanceMap):
        (WebCore::getDOMSVGObjectWithContextMap):
        (WebCore::DOMData::getCurrent):
        (WebCore::DOMData::handleWeakObject):
        (WebCore::DOMData::ensureDeref):
        (WebCore::weakDOMObjectCallback):
        (WebCore::weakActiveDOMObjectCallback):
        (WebCore::weakNodeCallback):
        (WebCore::weakSVGElementInstanceCallback):
        (WebCore::weakSVGObjectWithContextCallback):
        (WebCore::DOMData::derefObject):
        (WebCore::DOMData::derefDelayedObjects):
        (WebCore::DOMData::derefDelayedObjectsInCurrentThread):
        (WebCore::DOMData::removeObjectsFromWrapperMap):
        (WebCore::removeAllDOMObjectsInCurrentThreadHelper):
        (WebCore::visitDOMNodesInCurrentThread):
        (WebCore::visitDOMObjectsInCurrentThread):
        (WebCore::visitActiveDOMObjectsInCurrentThread):
        (WebCore::visitDOMSVGElementInstancesInCurrentThread):
        (WebCore::visitSVGObjectsInCurrentThread):
        * bindings/v8/V8DOMMap.h:
        (WebCore::DOMDataStoreHandle::getStore):
        * bindings/v8/V8IsolatedWorld.cpp: Added.
        (WebCore::getIsolatedWorldKey):
        (WebCore::contextWeakReferenceCallback):
        (WebCore::V8IsolatedWorld::evaluate):
        (WebCore::V8IsolatedWorld::V8IsolatedWorld):
        (WebCore::V8IsolatedWorld::~V8IsolatedWorld):
        (WebCore::V8IsolatedWorld::getEntered):
        * bindings/v8/V8IsolatedWorld.h: Added.
        (WebCore::V8IsolatedWorld::getDOMDataStore):

2009-06-24  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Bug 26604: Search doesn't work in Web Inspector Profiler
        https://bugs.webkit.org/show_bug.cgi?id=26604

        Seems like search was damaged in revision 42808.

        * inspector/front-end/ProfileView.js:
        (WebInspector.ProfileView.prototype.refresh):
        Here and in other functions: nodes we're searching in are profile data grid
        nodes, so there is no more need for '_dataGridNode' references.
        (WebInspector.ProfileView.prototype.searchCanceled):
        (WebInspector.ProfileView.prototype.performSearch.matchesQuery):
        Fixed accidental semicolon that caused 'matchesQuery' always return true.
        (WebInspector.ProfileView.prototype.performSearch):
        To perform search correctly in the case of bottom up tree, we need to populate
        the tree, because there's no 1-to-1 correspondence between profile nodes and
        data grid nodes in this case.
        (WebInspector.ProfileView.prototype._jumpToSearchResult):

2009-06-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.
        
        <rdar://problem/6450239&6574516>
    
        Fix flashing issues caused by compositing layers rendering content before
        a deferred layout has happened. Because the -viewWillDraw machinery doesn't
        work for composited layers, we need to use scheduleViewUpdate() to queue
        up a layout via the run loop observer in WebKit, whenever we know we
        are going to be painting soon.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setContentsNeedDisplay):
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):

2009-06-24  David Levin  <levin@chromium.org>

        Fix all builds.

        * ForwardingHeaders/wtf/FastAllocBase.h: Added.

2009-06-24  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=26658

        Split the syncing portions of LocalStorageArea into StorageAreaSync.
        This name will make more sense in the next patch (in this set) when
        LocalStorageArea and SessionStorageArea are merged to become simply
        StorageArea.  (Thus the synching portion of StorageArea is in
        StorageAreaSync.)

        This looks like a big patch, but really all it's doing is splitting
        code and patching split-related things up.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/LocalStorageArea.cpp:
        (WebCore::LocalStorageArea::create):
        (WebCore::LocalStorageArea::LocalStorageArea):
        (WebCore::LocalStorageArea::scheduleFinalSync):
        (WebCore::LocalStorageArea::itemChanged):
        (WebCore::LocalStorageArea::itemRemoved):
        (WebCore::LocalStorageArea::areaCleared):
        (WebCore::LocalStorageArea::blockUntilImportComplete):
        * storage/LocalStorageArea.h:
        * storage/LocalStorageTask.cpp:
        (WebCore::LocalStorageTask::LocalStorageTask):
        * storage/LocalStorageTask.h:
        (WebCore::LocalStorageTask::createImport):
        (WebCore::LocalStorageTask::createSync):
        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::scheduleImport):
        (WebCore::LocalStorageThread::scheduleSync):
        * storage/LocalStorageThread.h:
        * storage/SessionStorageArea.cpp:
        (WebCore::SessionStorageArea::blockUntilImportComplete):
        * storage/SessionStorageArea.h:
        * storage/StorageArea.h:
        * storage/StorageAreaSync.cpp: Copied from WebCore/storage/LocalStorageArea.cpp.
        * storage/StorageAreaSync.h: Copied from WebCore/storage/LocalStorageArea.h.
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::scheduleImport):
        (WebCore::StorageSyncManager::scheduleSync):
        * storage/StorageSyncManager.h:

2009-06-24  Adam Treat  <adam.treat@torchmobile.com>

        Fix Qt build.

        * WebCore.pro:

2009-06-24  David Levin  <levin@chromium.org>

        Reviewed by David Hyatt.

        Bug 26696: Member functions in DataGridColumnList should return pointers instead of PassRefPtr.
        https://bugs.webkit.org/show_bug.cgi?id=26696

        * html/DataGridColumnList.cpp:
        (WebCore::DataGridColumnList::itemWithName):
        (WebCore::DataGridColumnList::add):
        * html/DataGridColumnList.h:
        (WebCore::DataGridColumnList::item):
        (WebCore::DataGridColumnList::primaryColumn):
        (WebCore::DataGridColumnList::sortColumn):

2009-06-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Dave "Messy" Hyatt.

        Little bit of style cleanup.

        * html/DataGridColumn.cpp:
        * html/DataGridColumn.h:
        * html/DataGridColumn.idl:
        * html/DataGridColumnList.cpp:
        * html/DataGridColumnList.h:
        * html/DataGridColumnList.idl:
        * html/HTMLDataGridCellElement.cpp:
        * html/HTMLDataGridCellElement.h:
        * html/HTMLDataGridCellElement.idl:
        * html/HTMLDataGridColElement.cpp:
        * html/HTMLDataGridColElement.h:
        * html/HTMLDataGridColElement.idl:
        * html/HTMLDataGridElement.h:
        * html/HTMLDataGridElement.idl:
        * html/HTMLDataGridRowElement.cpp:
        * html/HTMLDataGridRowElement.h:
        * html/HTMLDataGridRowElement.idl:

2009-06-24  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        Bug 26668: AX: need a way to retrieve the language for an element
        
        Provides a way to retrieve the language associated with a specific accessibility element.

        Test: accessibility/language-attribute.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::language):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::language):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2009-06-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein.
        
        <rdar://problem/6893811> Instead of downloading files linked from Google Earth, file contents displayed in browser window as text.

        * platform/network/mac/WebCoreURLResponse.mm:
        (createBinaryExtensionsSet): Add '.kmz' to the list of known-to-be-binary extensions.

2009-06-24  Nicolas Weber  <thakis@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26685
        Accomodate for backwards-incompatible skia api changes.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::setCompositeOperation):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap):
        (WebCore::Image::drawPattern):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::State::State):
        (PlatformContextSkia::setupPaintCommon):
        (PlatformContextSkia::setXfermodeMode):
        (PlatformContextSkia::applyClipFromImage):
        * platform/graphics/skia/PlatformContextSkia.h:
        * platform/graphics/skia/SkiaUtils.cpp:
        (WebCore::):
        (WebCore::WebCoreCompositeToSkiaComposite):
        * platform/graphics/skia/SkiaUtils.h:

2009-06-24  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix. Add files that were added in r45093 and r45096

        * GNUmakefile.am:

2009-06-24  Brady Eidson  <beidson@apple.com>

        Fix 64-bit SnowLeopard build.

        * html/DataGridColumnList.cpp:
        (WebCore::DataGridColumnList::remove):
        (WebCore::DataGridColumnList::move):

2009-06-24  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26392
        Bug 26392: In html, modification of xlink:href of an newly inserted svg image does not work.
        https://bugs.webkit.org/show_bug.cgi?id=26328
        Bug 26328: changing href attribute of svg images does not work when changing display attribute as well

        React to href updates even when there is no renderer, i.e. display=none.

        Tests: svg/custom/js-update-image-and-display.svg
               svg/custom/js-update-image-and-display2.svg
               svg/custom/js-update-image-and-display3.svg

        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged):

2009-06-24  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=26687

        Add basic back-end column support to datagrid.

        Added fast/dom/HTMLDataGridElement/ column tests.

        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/DataGridColumn.cpp: Added.
        (WebCore::DataGridColumn::setPrimary):
        * html/DataGridColumn.h: Added.
        (WebCore::DataGridColumn::create):
        (WebCore::DataGridColumn::id):
        (WebCore::DataGridColumn::setId):
        (WebCore::DataGridColumn::label):
        (WebCore::DataGridColumn::setLabel):
        (WebCore::DataGridColumn::type):
        (WebCore::DataGridColumn::setType):
        (WebCore::DataGridColumn::sortable):
        (WebCore::DataGridColumn::setSortable):
        (WebCore::DataGridColumn::sortDirection):
        (WebCore::DataGridColumn::setSortDirection):
        (WebCore::DataGridColumn::primary):
        (WebCore::DataGridColumn::detachFromColumnList):
        (WebCore::DataGridColumn::DataGridColumn):
        * html/DataGridColumn.idl: Added.
        * html/DataGridColumnList.cpp: Added.
        (WebCore::DataGridColumnList::~DataGridColumnList):
        (WebCore::DataGridColumnList::itemWithName):
        (WebCore::DataGridColumnList::add):
        (WebCore::DataGridColumnList::remove):
        (WebCore::DataGridColumnList::move):
        (WebCore::DataGridColumnList::clear):
        (WebCore::DataGridColumnList::primaryColumnChanged):
        * html/DataGridColumnList.h: Added.
        (WebCore::DataGridColumnList::create):
        (WebCore::DataGridColumnList::length):
        (WebCore::DataGridColumnList::item):
        (WebCore::DataGridColumnList::primaryColumn):
        (WebCore::DataGridColumnList::sortColumn):
        * html/DataGridColumnList.idl: Added.
        * html/HTMLDataGridColElement.cpp:
        (WebCore::HTMLDataGridColElement::sortable):
        (WebCore::HTMLDataGridColElement::setSortable):
        (WebCore::HTMLDataGridColElement::sortDirection):
        (WebCore::HTMLDataGridColElement::setSortDirection):
        * html/HTMLDataGridColElement.h:
        * html/HTMLDataGridColElement.idl:
        * html/HTMLDataGridElement.cpp:
        (WebCore::HTMLDataGridElement::HTMLDataGridElement):
        * html/HTMLDataGridElement.h:
        (WebCore::HTMLDataGridElement::columns):
        * html/HTMLDataGridElement.idl:
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::paintObject):
        (WebCore::RenderDataGrid::paintColumnHeaders):
        (WebCore::RenderDataGrid::rebuildColumns):
        * rendering/RenderDataGrid.h:
        (WebCore::RenderDataGrid::gridElement):

2009-06-24  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        Partially fixes: https://bugs.webkit.org/show_bug.cgi?id=24735
        (<rdar://problem/5015942>)
        Where on windows it was not possible to set an element as the drag
        image using setDragImage on the dataTransfer object.
        
        Does not "fix" the case of dragging a link where the default link image
        is still used, even when the -webkit-user-drag is set to "element". This
        is the same behavior as is found on OS X.
        
        Added a manual test because it is not possible to check that what is
        contained in the image snapshot is indeed the requested element.

        * dom/Clipboard.h:
        (WebCore::Clipboard::dragImageElement):
        Made getting the raw pointer from the RefPtr a const operation.
        * manual-tests/drag-with-div-or-image-as-data-image.html: Added.
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::createDragImage):
        Get an image of the rendered element and its subtree.

2009-06-24  Darin Fisher  <darin@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26683
        Fix Chromium build bustage: Add custom binding for HTMLDataGridElement.dataSource

        This change just adds a stub implementation for now to help fix the build.

        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8HTMLDataGridElementCustom.cpp: Added.

2009-06-24  David Kilzer  <ddkilzer@apple.com>

        Build fixes for ENABLE(PLUGIN_PROXY_FOR_VIDEO)

        Reviewed by Adam Roben.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::deliverNotification): Removed
        ExceptionCode parameter from togglePlayState().
        (WebCore::HTMLMediaElement::initialURL): Don't convert a KURL
        object to a String when assigning to a KURL variable.

2009-06-24  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Adam Treat.

        Save memory by not storing attribute values in member variables, if not absolutely needed.
        Also fixes bugs where we're substituting variables too early (noticeable with the upcoming <select> element).

        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::parseMappedAttribute):
        (WebCore::WMLDoElement::label):
        * wml/WMLDoElement.h:
        * wml/WMLFieldSetElement.cpp:
        (WebCore::WMLFieldSetElement::insertedIntoDocument):
        * wml/WMLFieldSetElement.h:
        * wml/WMLOptGroupElement.cpp:
        (WebCore::WMLOptGroupElement::title):
        (WebCore::WMLOptGroupElement::parseMappedAttribute):
        (WebCore::WMLOptGroupElement::groupLabelText):
        * wml/WMLOptGroupElement.h:
        * wml/WMLPostfieldElement.cpp:
        (WebCore::WMLPostfieldElement::name):
        (WebCore::WMLPostfieldElement::value):
        (WebCore::WMLPostfieldElement::encodeData):
        * wml/WMLPostfieldElement.h:
        * wml/WMLSetvarElement.cpp:
        (WebCore::WMLSetvarElement::parseMappedAttribute):
        (WebCore::WMLSetvarElement::name):
        (WebCore::WMLSetvarElement::value):
        * wml/WMLSetvarElement.h:
        * wml/WMLTimerElement.cpp:
        (WebCore::WMLTimerElement::parseMappedAttribute):
        (WebCore::WMLTimerElement::insertedIntoDocument):
        (WebCore::WMLTimerElement::timerFired):
        (WebCore::WMLTimerElement::start):
        (WebCore::WMLTimerElement::value):
        * wml/WMLTimerElement.h:

2009-06-24  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Adam Roben.

        Forgot to initialize m_task member variable. Results in crashes sometimes.

        * wml/WMLAnchorElement.cpp:
        (WebCore::WMLAnchorElement::WMLAnchorElement):

2009-06-24  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed. Forgot to include within last patch.

        * manual-tests/wml/card-title-attr.wml: Added.

2009-06-24  Wajahat Siddiqui <wajahatmeister@gmail.com>
 
        Reviewed by Nikolas Zimmermann.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=26474
        Adding WML <card> title attribute handling.

        * wml/WMLElement.h: marking parseValueSubstitutingVariableReferences and parseValueForbiddingVariableReferences as const
        * wml/WMLElement.cpp:
        * wml/WMLCardElement.h: 
        (WebCore::WMLCardElement::title):
        * wml/WMLCardElement.cpp:
        * wml/manual-test/card-title-attr.wml: Manual test  
 
2009-06-24  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fix the build without ENABLE_VIDEO.

        * html/CanvasRenderingContext2D.cpp: Add #if ENABLE guards.
        * html/CanvasRenderingContext2D.h: Ditto.

2009-06-24  Siddhartha Chattopadhyay  <sidchat@google.com>

        Reviewed by Eric Seidel.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=26200 which I introduced earlier. I had
        the smartReplace set TRUE initially, which was wrong since the purpose of this call is
        to just replace the selection, and place the caret at the end of the selection it replaced.

        * editing/Editor.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        * manual-tests/textarea-caret-position-after-auto-spell-correct.html: Added.

2009-06-24  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Don't use an unsigned int for intervalInMS because we sometimes initialize
        it with a negative value.

        * platform/wx/SharedTimerWx.cpp:
        (WebCore::setSharedTimerFireTime):

2009-06-24  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        The previous checkin had an improper merge.  This fixes the build.

        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag):

2009-06-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=25922
        JS setting dropEffect = "none" causes tryDHTMLDrag
        to return DragOperationNone.  Which is also the value
        tryDHTMLDrag previously used to indicate JS did not
        want to handle the drag.

        Make it possible for the DragController::try* methods
        to return a bool to indicate if javascript accepted
        or rejected the drag event, separate from the DragOperation.

        Tests:
        - fast/events/drag-to-navigate.html
        - fast/events/prevent-drag-to-navigate.html

        * page/DragController.cpp:
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::defaultOperationForDrag):
        (WebCore::DragController::tryDHTMLDrag):
        * page/DragController.h:

2009-06-23  Oliver Hunt  <oliver@apple.com> and Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Sam Weinig and Dave Hyatt.

        <rdar://problem/6164797> Add Canvas API to allow drawing of <video> frames
        <https://bugs.webkit.org/show_bug.cgi?id=25920>

        Add support for drawing the contents of the video element to the canvas
        in accordance with the current HTML5 draft.

        Test: media/video-canvas.html

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::drawImage):
          Standard custom bindings stuff we need to do for all canvas methods.
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::size): Helper function for finding the size of a video element
        (WebCore::CanvasRenderingContext2D::checkOrigin): moved up in the file.
        (WebCore::CanvasRenderingContext2D::drawImage): The various overloads of HTML5's drawImage(<video>)
        * html/CanvasRenderingContext2D.h:
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::hasSingleSecurityOrigin):
          hasSingleSecurityOrigin is needed for security, currently all implementations are trivial
          as we force QT to maintain a single origin.
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::paint): 
            Paint routine on video so we don't have to look at MediaPlayer directly
        * html/HTMLVideoElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::hasSingleSecurityOrigin):
        (WebCore::MediaPlayer::hasSingleSecurityOrigin):
            Default implementations of hasSingleSecurityOrigin
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::setUpVideoRendering):
            A video may need a player now even if it is not visible.
        (WebCore::MediaPlayerPrivate::hasSingleSecurityOrigin):
            Always return true due to restrictions we've placed on QT.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::paint):
            Jump through some hoops to allow windows QT to draw to an intermediate buffer.
            In the long term we'd like to cache the HDC, but this will do for now.
        (WebCore::MediaPlayerPrivate::hasSingleSecurityOrigin):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
            As for Mac we force QT to only allow same origin loads.

2009-06-23  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Chromium: Fix crash with inherited font-size in <option>

        https://bugs.webkit.org/show_bug.cgi?id=26656
        http://code.google.com/p/chromium/issues/detail?id=14853

        In r42597 (https://bugs.webkit.org/show_bug.cgi?id=25244), I changed
        the <select> handing for Chromium to fix a rendering bug. However,
        although the font-size is correctly ignored, getRowHeight wasn't
        updated and so was calculating the height of the rows in an
        inconsistent manner. This can lead to a crash.

        * manual-tests/optgroup-empty-and-nested.html: adding test case for crash
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::getRowHeight):

2009-06-23  Brady Eidson  <beidson@apple.com>

        Patch by Antti Koivisto.
        Reviewed by Brady Eidson.

        <rdar://problem/6988010> Failed resources not reloaded when built against Tiger SDK

        A latent bug that cache revalidation uncovered.  When a CachedResource failed to load,
        it should always be revalidated upon reload.

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::canUseCacheValidator):
        (WebCore::CachedResource::mustRevalidate):

2009-06-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6634228> Crash in [NSScroller mouseDown:] beneath
          EventHandler::passMouseDownEventToWidget()

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passMouseDownEventToWidget): Surround the
        -mouseDown: call with calls to Widget::beforeMouseDown() and
        Widget::afterMouseDown(), which prevent the widget's view hierarchy from
        being removed from its parent view while the scroller is tracking the
        mouse.

2009-06-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Dave Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=26516
        Add initial implementation of DataGridDataSource

        - Initial implementation only supports the initialize callback function.

        Test: fast/dom/HTMLDataGridElement/DataGridDataSource-basic.html

        * WebCore.xcodeproj/project.pbxproj:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSDataGridDataSource.cpp: Added.
        (WebCore::JSDataGridDataSource::JSDataGridDataSource):
        (WebCore::JSDataGridDataSource::~JSDataGridDataSource):
        (WebCore::JSDataGridDataSource::initialize):
        * bindings/js/JSDataGridDataSource.h: Added.
        (WebCore::JSDataGridDataSource::create):
        (WebCore::JSDataGridDataSource::isJSDataGridDataSource):
        (WebCore::JSDataGridDataSource::jsDataSource):
        (WebCore::asJSDataGridDataSource):
        * bindings/js/JSHTMLDataGridElementCustom.cpp: Added.
        (WebCore::JSHTMLDataGridElement::listener):
        (WebCore::JSHTMLDataGridElement::setListener):
        * html/DataGridDataSource.h: Added.
        (WebCore::DataGridDataSource::~DataGridDataSource):
        (WebCore::DataGridDataSource::isJSDataGridDataSource):
        * html/HTMLDataGridElement.cpp:
        (WebCore::HTMLDataGridElement::HTMLDataGridElement):
        (WebCore::HTMLDataGridElement::setDataSource):
        (WebCore::HTMLDataGridElement::initializationTimerFired):
        * html/HTMLDataGridElement.h:
        (WebCore::HTMLDataGridElement::dataSource):
        * html/HTMLDataGridElement.idl:

2009-06-23  Ryosuke Niwa  <rniwa@google.com>

        Reviewed by Justin Garcia.

        Undo the changeset 21212 to fix the regression bug 14062.
        The changeset 21212 attempted to fix rdar://problem/5002441.
        The changeset 21212 modified InsertTextCommand::input so as to convert
        all spaces in text to non-breaking spaces for rdar://problem/5002441.
        However, the bug was originally caused by rebalanceWhitespaceAt
        and this workaround introduced a regression bug 14062.
        Because rebalanceWhitespaceAt appears to behave correctly now,
        the workaround introduced in 21212 is no longer needed.

        Test: editing/inserting/space-after-removeformat.html

        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input):

2009-06-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=26523 <col> 
        elements width can't be changed with javascript

        This patch both fixes setting the width attribute directly in 
        JavaScript, and setting the width on the style attribute. 

        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::parseMappedAttribute): If we have a 
        new width, call setNeedsLayoutAndPrefWidthsRecalc()

        Call calcPrefWidths() on the table cols.
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        
        Call layoutIfNeeded on the table cols.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):

        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::clippedOverflowRectForRepaint): Use new 
        table() convenience function.
        (WebCore::RenderTableCol::calcPrefWidths): Just call 
        setPrefWidthsDirty(false) on ourself and our children.
        (WebCore::RenderTableCol::table):
        * rendering/RenderTableCol.h:

2009-06-23  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Dan Bernstein.

        Add logic to CSSStyleDeclaration::diff to deal with font-sizes that are 
        keyword values. When diff is called on a CSSStyleDeclaration, we check
        the keywordSize to see if font-size matches a keyword value.
        
        This ensures that when we diff a CSSMutableStyleDeclaration returned from
        copyInheritableProperties on a CSSComputedStyleDeclaration that we 
        correctly identify matching font-sizes.
        
        https://bugs.webkit.org/show_bug.cgi?id=26279

        Test: editing/inserting/font-size-clears-from-typing-style.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::cssPropertyMatches):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::cssPropertyMatches):
        (WebCore::CSSStyleDeclaration::diff):
        * css/CSSStyleDeclaration.h:

2009-06-23  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6994790> CrashTracer: [USER] 8 crashes in Mail trying to
        add a blank line to pasted Facebook content (under
        CompositeEditCommand::positionAvoidingSpecialElementBoundary)

        - Just added null checks and I will create a new bug to prevent the
        bad behavior.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary):

2009-06-23  Simon Fraser  <simon.fraser@apple.com>

        Build fix.

        Wrap shouldDoSoftwarePaint() in #if USE(ACCELERATED_COMPOSITING) to avoid warning when 
        ACCELERATED_COMPOSITING is not defined.

        * rendering/RenderLayer.cpp:

2009-06-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.
        
        https://bugs.webkit.org/show_bug.cgi?id=24863
        
        Fix reflection painting on elements with compositing layers.

        Test: compositing/reflections/reflection-on-composited.html

        * rendering/RenderLayer.h:
        Add a new PaintLayerPaintingReflection flag which is set while painting inside
        reflections.
        (WebCore::RenderLayer::setPaintingInsideReflection):
        Add a setter so that RenderLayerBacking can call it.

        * rendering/RenderLayer.cpp:
        (WebCore::shouldDoSoftwarePaint):
        Utility to clarify the logic of when a composited layer should do a software paint.
        
        (WebCore::RenderLayer::paintLayer):
        Use shouldDoSoftwarePaint() to determine when to software-paint a reflected layer.
        Remove transform-related tests from the reflection-painting if test because they appear
        to be unnecessary.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        Add the code to paint reflections to the composited layer painting method.
        
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::paint):
        Set the PaintLayerPaintingReflection flag.

2009-06-23  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.
        
        https://bugs.webkit.org/show_bug.cgi?id=26643
        Memory cache should respect Cache-Control: no-store
        
        Make resources with Cache-Control: no-store uncacheable in the memory cache.
        They get evicted immediately when all clients are gone and are always
        reloaded from the server.

        Conforms to RFC2616 14.9.2 and seems also match Firefox behavior.

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::removeClient):
        (WebCore::CachedResource::canUseCacheValidator):
        (WebCore::CachedResource::mustRevalidate):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::ResourceResponseBase):
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        (WebCore::ResourceResponseBase::cacheControlContainsNoStore):
        * platform/network/ResourceResponseBase.h:

2009-06-23  Brady Eidson  <beidson@apple.com>

        Windows build fix.

        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::play):
        (QTMovieWin::pause):
        (QTMovieWin::setRate):
        (QTMovieWin::setCurrentTime):

2009-06-23  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/6902203> REGRESSION: 'Return' insertion point incorrect
        after manually quoting blank line then hitting return

        If the insertion point is both the begining and ending visible position
        then we need to insert at the end instead of the begining, which is what
        would normally happen if the insertion point was as the begining.

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):

2009-06-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig, and looked over by Eric Carlson.

        <rdar://problem/6980466> Media elements should provide option for changing pitch correction

        Introduce a new boolean property to HTMLMediaElement called webkitPreservesPitch for script to control this.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Currently the platforms that have a flexible pitch preservation 
          property (Quicktime on Mac and Win) have had it on by default, so continue that default for now.
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::webkitPreservesPitch):
        (WebCore::HTMLMediaElement::setWebkitPreservesPitch):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::setPreservesPitch):
        (WebCore::MediaPlayer::MediaPlayer):
        (WebCore::MediaPlayer::preservesPitch):
        (WebCore::MediaPlayer::setPreservesPitch):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setPreservesPitch):

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::createQTMovie): Rework to allow recreation of the movie with almost the
          exact same attributes as before, with pitch preservation being the difference.
        (WebCore::MediaPlayerPrivate::setPreservesPitch): Recreate the QTMovie if the flag actually changes.
        (WebCore::MediaPlayerPrivate::updateStates): Restore current time and rate if this is a recreated movie.
        (WebCore::MediaPlayerPrivate::timeChanged): Clear the time-to-be-restored, as this callback means it
          has been effectively overwritten.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::setPreservesPitch):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWinPrivate::QTMovieWinPrivate):
        (QTMovieWinPrivate::~QTMovieWinPrivate):
        (QTMovieWinPrivate::task): Restore current time and rate if this is a re-created movie.
        (QTMovieWin::play): Clear the time-to-be-restored, as this effectively overwrites it.
        (QTMovieWin::pause): Ditto.
        (QTMovieWin::setRate): Ditto.
        (QTMovieWin::setCurrentTime): Ditto.
        (QTMovieWin::setPreservesPitch): Recreate the Movie if the flag actually changes.
        (QTMovieWin::load): Rework to allow recreation of the Movie with similar state as the movie before it, 
          but changing the pitch preservation flag.
        * platform/graphics/win/QTMovieWin.h:

2009-06-23  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/6998286> Crash after leaving page with <video>
        
        Don't try to post events after going into the page cache.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::documentWillBecomeInactive): Cancel pending events and stop
        event timers so we won't try to post events after going into the cache.

2009-06-23  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Brady Eidson.

        Simplify the interaction between LocalStorageArea/SessionStorageArea
        and StorageArea by creating a "blockUntilImportComplete()" function
        rather than bouncing back and forth between the child and parent
        classes in a somewhat unintuitive manner.

        This patch also paves the way for LocalStorageArea and
        SessionStorageArea being merged into one.  It's part of several in a
        set which are separating syncing (to disk) code from the rest of the
        implementation so that local storage and session storage's code can be
        unified.

        https://bugs.webkit.org/show_bug.cgi?id=25376

        * storage/LocalStorageArea.cpp:
        (WebCore::LocalStorageArea::blockUntilImportComplete):
        * storage/LocalStorageArea.h:
        * storage/StorageArea.cpp:
        (WebCore::StorageArea::length):
        (WebCore::StorageArea::key):
        (WebCore::StorageArea::getItem):
        (WebCore::StorageArea::setItem):
        (WebCore::StorageArea::removeItem):
        (WebCore::StorageArea::clear):
        (WebCore::StorageArea::contains):
        * storage/StorageArea.h:
        (WebCore::StorageArea::blockUntilImportComplete):

2009-06-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        First part of https://bugs.webkit.org/show_bug.cgi?id=26652
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint):
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::paint):
        Replace the 3 boolean params to RenderLayer::paintLayer() with a bit mask for readability.
        
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerBacking.h:
        Remove the unused 'haveTransparency' param to paintIntoLayer().

2009-06-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6997929> Assertion at WebCore::RenderLayer::updateClipRects with hardware acceleration

        The updatingControlTints() painting pass goes through compositing layer boundaries,
        so we need to ensure we don't cache clip rects computed with the wrong root by
        setting temporaryClipRects to true.
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::contentOffsetInCompostingLayer):
        Remove a printf that I left in by mistake.

2009-06-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        WebCore side of <rdar://problem/6946094>.
        
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::setExternalDataObject):
        * platform/win/ClipboardWin.h:

2009-06-23  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=26650

        Add setFormContentType and setFormData since it is awkward for Chromium
        to use setFormInfoFromRequest to set the underlying members.  Also, add
        a clearChildren method that Chromium needs.  These methods are used as
        part of the Chromium code that serializes a HistoryItem for storing in
        the browser's session history.

        * history/HistoryItem.cpp:
        * history/HistoryItem.h:

2009-06-23  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6978938> Need HTML 5 event attributes for media elements

        Test: media/event-attributes.html

        * html/HTMLAttributeNames.in: Add media event attribute names.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseMappedAttribute): Handle media event attributes.

2009-06-23  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon Hausmann.

        Fix Qt build with Phonon.

        The #include <phonon> header no longer exists. And the <Phonon> or
        <Phonon/Phonon> headers have never existed (neither for us nor for the
        Phonon sources). You have to select each and every header that you do
        want now.

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:

2009-06-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Remove duplicated code in Qt & GTK logging initialization

        We now share the getChannelFromName() function in Logging.cpp

        * platform/gtk/LoggingGtk.cpp:
        * platform/qt/LoggingQt.cpp:

2009-06-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Rename the plugin logging channel to plural form 'Plugins'

        This matches both the other logging channel names, as well as the
        WebKit logging channel used by Safari/Mac for plugins.

        * platform/Logging.cpp:
        * platform/Logging.h:
        * platform/gtk/LoggingGtk.cpp:
        * platform/mac/LoggingMac.mm:
        * platform/qt/LoggingQt.cpp:
        * platform/win/LoggingWin.cpp:
        * plugins/PluginDebug.h:
        * plugins/gtk/PluginPackageGtk.cpp:
        * plugins/mac/PluginPackageMac.cpp:
        * plugins/mac/PluginViewMac.cpp:
        * plugins/qt/PluginPackageQt.cpp:

2009-06-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Fix NPAPI mouse translation issues on Mac

        The WindowRef we pass to the plugin refers to the the top level window,
        so the x and y positions have to be relative to this position, but we
        have to manually compensate for title bar decorations and other parents
        of the QWebView since contentsToWindow() only traverses to the QWebView.

        Previously we did this compensation when passing on mouse coordinates to
        the plugin, which caused various issues with translations such as not
        being able to close the Flash settings dialog, or the hand cursor not
        appearing over links.

        We now do the compensation as part of the call to NPP_SetWindow, and
        then pass mouse coordinates in global context without any compensation,
        similar to how both Safari and Mozilla does it.

        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::globalMousePosForPlugin):

2009-06-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Rubber-stamped by Simon Hausmann.

        [Qt] Resolve absolute path to library install_name manually

        Since our target.path is set to the Qt directory (to be able
        to do 'make install') the 'absolute_library_soname' option
        to QMake did not do the right thing.

        We now compute the absolute path manually using DESTDIR.

        * WebCore.pro:

2009-06-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6991146> Scrollbars in hardware layers don't change to the
        inactive look in background windows

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        Don't short-circuit the "painting" pass that is used to udpate control tints.

2009-06-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=26567
        Upstream V8 bindings code generator. With this change, also added interface ancestor
        traversal to IDL parser, which is necessary for V8 bindings. The traversal is used
        to determine whether an interface is a Node to facilitate proper casting and storage
        in V8DOMMap.

        * bindings/scripts/CodeGenerator.pm: Added parent traversal sub, needed
            by V8 bindings.
        * bindings/scripts/CodeGeneratorV8.pm: Added.
        * bindings/scripts/IDLParser.pm: Modified to allow limited parsing for
            parent traversal cases.

2009-06-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Add event handler attribute getter/setters to HTMLFrameSetElement
        as specified in HTML 5.  These match the ones on HTMLBodyElement.

        * dom/Node.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        (WebCore::HTMLFrameSetElement::onblur):
        (WebCore::HTMLFrameSetElement::setOnblur):
        (WebCore::HTMLFrameSetElement::onerror):
        (WebCore::HTMLFrameSetElement::setOnerror):
        (WebCore::HTMLFrameSetElement::onfocus):
        (WebCore::HTMLFrameSetElement::setOnfocus):
        (WebCore::HTMLFrameSetElement::onload):
        (WebCore::HTMLFrameSetElement::setOnload):
        (WebCore::HTMLFrameSetElement::onbeforeunload):
        (WebCore::HTMLFrameSetElement::setOnbeforeunload):
        (WebCore::HTMLFrameSetElement::onmessage):
        (WebCore::HTMLFrameSetElement::setOnmessage):
        (WebCore::HTMLFrameSetElement::onoffline):
        (WebCore::HTMLFrameSetElement::setOnoffline):
        (WebCore::HTMLFrameSetElement::ononline):
        (WebCore::HTMLFrameSetElement::setOnonline):
        (WebCore::HTMLFrameSetElement::onresize):
        (WebCore::HTMLFrameSetElement::setOnresize):
        (WebCore::HTMLFrameSetElement::onstorage):
        (WebCore::HTMLFrameSetElement::setOnstorage):
        (WebCore::HTMLFrameSetElement::onunload):
        (WebCore::HTMLFrameSetElement::setOnunload):
        * html/HTMLFrameSetElement.h:
        * html/HTMLFrameSetElement.idl:

2009-06-22  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Bug 25425: DOM attribute getter/setter functions should use const AtomicString& type
        https://bugs.webkit.org/show_bug.cgi?id=25425

        * bindings/scripts/CodeGeneratorJS.pm: Added handling for ReflectURL.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.

        * dom/Element.cpp:
        (WebCore::Element::getURLAttribute): Added. For use implementing getters
        for ReflectURL.
        * dom/Element.h: Added getURLAttribute.

        * html/HTMLImageElement.idl: Use Reflect and ReflectURL.

2009-06-22  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 26626: Make WorkerContextExecutionProxy::toV8Object handle exception
        objects.
        https://bugs.webkit.org/show_bug.cgi?id=26626

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::ToV8Object):

2009-06-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        Add RenderDataGrid to the build.  Give it some basic default styling (that more or less matches a listbox).  It has a default size
        of 300x150.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * css/html4.css:
        * html/HTMLDataGridElement.cpp:
        (WebCore::HTMLDataGridElement::createRenderer):
        * html/HTMLDataGridElement.h:
        * html/HTMLDataGridElement.idl:
        * rendering/RenderDataGrid.cpp: Added.
        (WebCore::RenderDataGrid::RenderDataGrid):
        (WebCore::RenderDataGrid::~RenderDataGrid):
        (WebCore::RenderDataGrid::calcPrefWidths):
        (WebCore::RenderDataGrid::paintObject):
        (WebCore::RenderDataGrid::valueChanged):
        (WebCore::RenderDataGrid::invalidateScrollbarRect):
        (WebCore::RenderDataGrid::isActive):
        * rendering/RenderDataGrid.h: Added.
        (WebCore::RenderDataGrid::renderName):
        (WebCore::RenderDataGrid::canHaveChildren):
        (WebCore::RenderDataGrid::scrollbarCornerPresent):

2009-06-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=26430
        <rdar://problem/6944442> Elements jump around when they become composited (WWDC checkers demo)
        <rdar://problem/6989006> Lots of time spent in RenderLayerCompositor::calculateCompositedBounds()
            during window resize when using hardware layers
        
        Fix an ordering dependency which caused the compositing position of a layer
        to be affected by some later sibling, which affected the compositing ancestor's
        composited bounds.
        
        The fix is to only update the compositing positions of layers in some subtree
        when updateAfterLayout() has been called on all the layers in that subtree,
        from the ancestor down.
        
        Also cache the composited bounds of a RenderLayerBacking, now that we can
        guarantee that those bounds are accurate.
        
        Test: compositing/sibling-positioning.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::hitTestLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::updateAfterLayout):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::contentOffsetInCompostingLayer):
        (WebCore::RenderLayerBacking::paintContents):
        (WebCore::RenderLayerBacking::compositedBounds):
        (WebCore::RenderLayerBacking::setCompositedBounds):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::updateLayerCompositingState):
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        (WebCore::RenderLayerCompositor::layerWillBeRemoved):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::updateCompositingChildrenGeometry):
        * rendering/RenderLayerCompositor.h:

2009-06-22  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        First step in https://bugs.webkit.org/show_bug.cgi?id=25376

        Add StorageSyncManager.cpp/h

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:

        In preparation for combining SessionStorage and LocalStorage into a
        single StorageManager, move the syncing bits out of LocalStorage and
        into its own class.

        The next step is to combine LocalStorageArea and SessionStorageArea
        into one.  Then SessionStorage and LocalStorage can be combined.

        Note that combining them will cut down on code paths that must be
        proxied, eliminate virtual dispatch, and allow Chromium to (eventually)
        write historical sessionStorage to disk when memory is getting tight.

        Also remove a couple bits of cruft including code for quotas which is
        unnecessary (since a meta-data db is unnecessary since you can just
        count bytes as you read the local storage databases into memory).

        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::LocalStorage):
        (WebCore::LocalStorage::storageArea):
        (WebCore::LocalStorage::close):
        * storage/LocalStorage.h:
        * storage/LocalStorageArea.cpp:
        (WebCore::LocalStorageArea::LocalStorageArea):
        (WebCore::LocalStorageArea::scheduleFinalSync):
        (WebCore::LocalStorageArea::syncTimerFired):
        (WebCore::LocalStorageArea::performImport):
        * storage/LocalStorageArea.h:
        (WebCore::LocalStorageArea::create):
        * storage/LocalStorageTask.cpp:
        (WebCore::LocalStorageTask::performTask):
        * storage/LocalStorageTask.h:
        (WebCore::LocalStorageTask::):
        (WebCore::LocalStorageTask::createImport):
        * storage/LocalStorageThread.cpp:
        * storage/LocalStorageThread.h:
        * storage/SessionStorage.h:
        * storage/StorageSyncManager.cpp: Copied from WebCore/storage/LocalStorage.cpp.
        (WebCore::StorageSyncManager::create):
        (WebCore::StorageSyncManager::StorageSyncManager):
        (WebCore::StorageSyncManager::fullDatabaseFilename):
        (WebCore::StorageSyncManager::close):
        (WebCore::StorageSyncManager::scheduleImport):
        (WebCore::StorageSyncManager::scheduleSync):
        * storage/StorageSyncManager.h: Copied from WebCore/storage/LocalStorage.h.
        (WebCore::):

2009-06-22  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=26622
        Add ChromiumDataObject::copy()

        * platform/chromium/ChromiumDataObject.cpp:
        * platform/chromium/ChromiumDataObject.h:

2009-06-22  Timothy Hatcher  <timothy@apple.com>

        Add a silhouette image for the enable view of the Resource panel.

        Reviewed by Kevin McCullough.

        * inspector/front-end/Images/resourcesSilhouette.png: Added.
        * inspector/front-end/inspector.css:

2009-06-22  Kyle Prete  <kylep@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=26552
        Add V8 JS bindings for Audio Constructor.

        * bindings/v8/custom/V8CustomBinding.h:
        Added a callback declaration for audio ctor to macro.
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        Added the whole file.

2009-06-22  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26600
        StringImpl::copy() no longer copies empty string correctly

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::ustring): Changed method calling syntax to look less like calling a
        static method.
        (WebCore::StringImpl::copy): Reverted part of r41917 that caused the problem.

2009-06-22  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Eric Seidel

        Not auto-testable since it involves sending a keyboard event to
        the popup, which is not possible (eventSender sends the key
        events through webview, we want to go through the webwidget).

        This patch is one part of the fix for issue "keyboard selection in
        Hebrew select element does not work in Windows". The other part of the
        fix is in chromium's webkit/glue layer.
        https://bugs.webkit.org/show_bug.cgi?id=25899

        * manual-tests/keyboard_select_non_english.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::isCharacterTypeEvent): Added. Check whether the event is a 
        character type event. "Char" in Windows or "KeyDown" in Mac is character
        type event.
        (WebCore::PopupListBox::typeAheadFind): Since m_lastCharTime is used to
        indicate whether user types multiple characters continuely as a search
        prefix or not, it should be only assigned when the event is character 
        type event. 

2009-06-22  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6115819> Notify of profile start in console

        Put a message in the console that announces that a profile has started,
        similar to how a console message announces that a profile has finished.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addProfile): Use renamed function.
        (WebCore::InspectorController::addProfileFinishedMessageToConsole):
        Renamed.
        (WebCore::InspectorController::addStartProfilingMessageToConsole):
        New function that logs the message about the profile starting.
        (WebCore::InspectorController::startUserInitiatedProfiling): Ditto
        * inspector/InspectorController.h:
        * inspector/front-end/ProfilesPanel.js: Print the "run" of the profile's
        title if there are multiple profiles, and take into account the fact
        that titles are displayed twice as much now.
        (WebInspector.ProfilesPanel.prototype.displayTitleForProfileLink):
        * page/Console.cpp:
        (WebCore::Console::profile): Call new function.

2009-06-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=26615

        Add IDL interface for datagrid cell elements.  Add a few more properties to the datagrid itself that
        correspond to ones you find on <select> elements.

        Add an expanded property to row elements.

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/HTMLAttributeNames.in:
        * html/HTMLDataGridCellElement.cpp: Added.
        (WebCore::HTMLDataGridCellElement::HTMLDataGridCellElement):
        (WebCore::HTMLDataGridCellElement::label):
        (WebCore::HTMLDataGridCellElement::setLabel):
        (WebCore::HTMLDataGridCellElement::focused):
        (WebCore::HTMLDataGridCellElement::setFocused):
        (WebCore::HTMLDataGridCellElement::checked):
        (WebCore::HTMLDataGridCellElement::setChecked):
        (WebCore::HTMLDataGridCellElement::indeterminate):
        (WebCore::HTMLDataGridCellElement::setIndeterminate):
        (WebCore::HTMLDataGridCellElement::progress):
        (WebCore::HTMLDataGridCellElement::setProgress):
        * html/HTMLDataGridCellElement.h: Added.
        (WebCore::HTMLDataGridCellElement::endTagRequirement):
        (WebCore::HTMLDataGridCellElement::tagPriority):
        * html/HTMLDataGridCellElement.idl: Added.
        * html/HTMLDataGridElement.cpp:
        (WebCore::HTMLDataGridElement::autofocus):
        (WebCore::HTMLDataGridElement::setAutofocus):
        (WebCore::HTMLDataGridElement::disabled):
        (WebCore::HTMLDataGridElement::setDisabled):
        (WebCore::HTMLDataGridElement::size):
        (WebCore::HTMLDataGridElement::setSize):
        * html/HTMLDataGridElement.h:
        * html/HTMLDataGridElement.idl:
        * html/HTMLDataGridRowElement.cpp:
        (WebCore::HTMLDataGridRowElement::checkDTD):
        (WebCore::HTMLDataGridRowElement::expanded):
        (WebCore::HTMLDataGridRowElement::setExpanded):
        * html/HTMLDataGridRowElement.h:
        * html/HTMLDataGridRowElement.idl:
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLTagNames.in:

2009-06-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Add event handler attribute getter/setters to HTMLBodyElement
        as specified in HTML 5.

        - Removes erroneous inclusion of the onresize and onunload event
        handler attributes in Element and Document.

        * dom/Document.cpp:
        (WebCore::Document::getWindowAttributeEventListener):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Node.cpp:
        * dom/Node.h: onblur, onerror, onfocus, and onload all need to be declared
        virtual, since their behavior for HTMLBodyElement differs from the base
        implementation.
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::onblur):
        (WebCore::HTMLBodyElement::setOnblur):
        (WebCore::HTMLBodyElement::onerror):
        (WebCore::HTMLBodyElement::setOnerror):
        (WebCore::HTMLBodyElement::onfocus):
        (WebCore::HTMLBodyElement::setOnfocus):
        (WebCore::HTMLBodyElement::onload):
        (WebCore::HTMLBodyElement::setOnload):
        (WebCore::HTMLBodyElement::onbeforeunload):
        (WebCore::HTMLBodyElement::setOnbeforeunload):
        (WebCore::HTMLBodyElement::onmessage):
        (WebCore::HTMLBodyElement::setOnmessage):
        (WebCore::HTMLBodyElement::onoffline):
        (WebCore::HTMLBodyElement::setOnoffline):
        (WebCore::HTMLBodyElement::ononline):
        (WebCore::HTMLBodyElement::setOnonline):
        (WebCore::HTMLBodyElement::onresize):
        (WebCore::HTMLBodyElement::setOnresize):
        (WebCore::HTMLBodyElement::onstorage):
        (WebCore::HTMLBodyElement::setOnstorage):
        (WebCore::HTMLBodyElement::onunload):
        (WebCore::HTMLBodyElement::setOnunload):
        * html/HTMLBodyElement.h:
        * html/HTMLBodyElement.idl:

2009-06-22  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=26601
        Remove disabled code for appcache dynamic entries

        This also removes code for DOM 3 Core DOMStringList, which we don't use for anything else yet.

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSDOMStringListCustom.cpp: Removed.
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMStringListCustom.cpp: Removed.
        * dom/DOMStringList.cpp: Removed.
        * dom/DOMStringList.h: Removed.
        * dom/DOMStringList.idl: Removed.
        * dom/StaticStringList.cpp: Removed.
        * dom/StaticStringList.h: Removed.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::shouldLoadResourceFromApplicationCache):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::addResource):
        * loader/appcache/ApplicationCache.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        * loader/appcache/ApplicationCacheResource.cpp:
        (WebCore::ApplicationCacheResource::dumpType):
        * loader/appcache/ApplicationCacheResource.h:
        (WebCore::ApplicationCacheResource::):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::storeUpdatedType):
        * loader/appcache/DOMApplicationCache.cpp:
        * loader/appcache/DOMApplicationCache.h:
        * loader/appcache/DOMApplicationCache.idl:
        * page/DOMWindow.idl:

2009-06-22  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * DerivedSources.cpp:
        * html/HTMLElementsAllInOne.cpp:

2009-06-22  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by John Sullivan.

        <rdar://problem/6956606> REGRESSION (S4Beta -> Final): After the password is input,
        Japanese can't be input.

        WebKit uses a per-frame input context for most editable fields, and application's global
        context for password fields, manually controlling secure input state and the list of available
        input sources.

        We were setting TSMDocument property to disable non-Roman input methods after focus changed
        to a password field, but before selection was updated. This resulted in the property being
        applied to a wrong TSMDocument in some cases, because TSMGetActiveDocument() uses input
        context cached by +[NSApplication updateWindows], we change context based on selection,
        not on focus.

        * page/mac/FrameMac.mm: (WebCore::Frame::setUseSecureKeyboardEntry): Since there is only one
        context that we use for password fields - the global one - there is no need to get the active
        one.

2009-06-22  David Levin  <levin@chromium.org>

        Reviewed by David Hyatt and Eric Seidel.

        REGRESSION: When the main page (ScrollView) has a custom scrollbar, it crashes on destruction.
        https://bugs.webkit.org/show_bug.cgi?id=26326

        Test: scrollbars/scrollbar-crash-on-refresh.html

        * dom/Document.cpp:
        (WebCore::Document::detach):
        Gives the FrameView a change to do any necessary cleanup on
        Document::detach() which is where the renderArena gets detroyed.
        * page/FrameView.cpp:
        (WebCore::FrameView::detachCustomScrollbars):
        Gets rid of any custom scrollbars (if the docment supplied them).
        * page/FrameView.h:
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::isCustomScrollbar):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy):
        Removed the check for document()->frame().  If frame() is 0 in this code,
        then the call to animation() is also incorrect (since it does document()->frame()->animation()).
        * rendering/RenderScrollbar.h:
        (WebCore::RenderScrollbar::isCustomScrollbar):

2009-06-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        - fix https://bugs.webkit.org/show_bug.cgi?id=23606
          <rdar://problem/6537777> CSS gradient not repainted when image load
          completes

        Test: fast/repaint/background-generated.html

        * rendering/RenderObject.cpp:
        (WebCore::mustRepaintFillLayers): Return true if the layer does not
        specify a size and the image uses the container size.

2009-06-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=26607

        Add IDL for HTMLDataGridRowElement.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/HTMLAttributeNames.in:
        * html/HTMLDataGridColElement.cpp:
        (WebCore::HTMLDataGridColElement::primary):
        (WebCore::HTMLDataGridColElement::setPrimary):
        * html/HTMLDataGridColElement.h:
        * html/HTMLDataGridColElement.idl:
        * html/HTMLDataGridElement.cpp:
        (WebCore::HTMLDataGridElement::checkDTD):
        (WebCore::HTMLDataGridElement::multiple):
        (WebCore::HTMLDataGridElement::setMultiple):
        * html/HTMLDataGridElement.h:
        * html/HTMLDataGridElement.idl:
        * html/HTMLDataGridRowElement.cpp: Added.
        (WebCore::HTMLDataGridRowElement::HTMLDataGridRowElement):
        (WebCore::HTMLDataGridRowElement::selected):
        (WebCore::HTMLDataGridRowElement::setSelected):
        (WebCore::HTMLDataGridRowElement::focused):
        (WebCore::HTMLDataGridRowElement::setFocused):
        * html/HTMLDataGridRowElement.h: Added.
        (WebCore::HTMLDataGridRowElement::tagPriority):
        * html/HTMLDataGridRowElement.idl: Added.
        * html/HTMLTagNames.in:

2009-06-19  Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=26556

        Fix a crash in case that the QNetworkReply::readReady signal is
        "stuck" in deferred mode due to JavaScript alert, and in the meantime,
        QNetworkreply::finished signal is received and processed before
        QNetworkReply::readReady is processed.

        * manual-tests/qt/unload-alert.html: Added.
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::setLoadMode):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        (WebCore::QNetworkReplyHandler::sendQueuedItems):
        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyHandler::):

2009-06-22  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Fix the Qt build.

        * WebCore.pro:

2009-06-21  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Bug 25425: DOM attribute getter/setter functions should use const AtomicString& type
        https://bugs.webkit.org/show_bug.cgi?id=25425

        * bindings/scripts/CodeGeneratorJS.pm: Tweaked mechanism for includes to be a bit
        more consistent and to make SVGElement.h be included in the header rather than in
        every implementation file that includes the header. Added code to use getAttribute
        and setAttribute directly when the [Reflect] extended attribute is used.

        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.

        * html/HTMLElement.idl: Used [Reflect] for all the attributes in this class that
        reflect content attributes. Restricting this to one class for now to keep the
        patch small and start out slowly.

2009-06-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=26596
        Only expose event handler attributes to elements and documents.

        Test: fast/dom/event-attribute-availability.html

        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Node.cpp:
        * dom/Node.h:
        * dom/Node.idl:

2009-06-21  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=26580
        
        Fix to enable XSSAuditor on child windows.
        
        Test: http/tests/security/xssAuditor/link-opens-new-window.html
        
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::XSSAuditor):
        (WebCore::XSSAuditor::isEnabled):
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canCreateInlineEventListener):
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc):
        (WebCore::XSSAuditor::canLoadObject):
        * page/XSSAuditor.h: Removed method setXSSAuditorEnabled, and field m_isEnabled.
        Moved implementation of isEnabled to XSSAuditor.cpp and changed implementation
        to query Settings.

2009-06-21  David Levin  <levin@chromium.org>

        Reviewed by NOBODY.

        Speculative windows build fix (idea by Mark Rowe).

        * WebCore.vcproj/WebCore.vcproj:

2009-06-21  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (Speculative gtk build fix).

        * GNUmakefile.am:

2009-06-21  David Levin  <levin@chromium.org>

        Reviewed by NOBODY.

        Speculative tiger build fix and a windows build fix.
        More fixes may still be in order.

        * WebCore.vcproj/WebCoreCommon.vsprops:
        * dom/default/PlatformMessagePortChannel.h:
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::tryGetMessage):

2009-06-21  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (Speculative tiger build fix).

        * dom/default/PlatformMessagePortChannel.h:
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::~MessagePortQueue):

2009-06-21  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        <https://bugs.webkit.org/show_bug.cgi?id=26448>
        
        Added optimized GC for MessagePorts when the entangled port is run by the same thread.
        Fixed bug in isProxyFor() that was not properly throwing an exception when trying to clone the entangled port.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::markActiveObjectsForContext):
        Now marks remotely entangled ports as in-use, in addition to those with pending activity.
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::mark):
        Now checks if the entangled port is local (run by same thread) and if so mark()s it.
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::disentangle):
        Removes cloned ports from the ScriptExecutionContext - this allows cloned ports to be GC'd as otherwise they look like remotely entangled ports.
        (WebCore::MessagePort::start):
        (WebCore::MessagePort::locallyEntangledPort):
        Added API for fetching the entangled port if it is run by the same thread
        * dom/MessagePort.h:
        * dom/MessagePortProxyWrapper.h:
        * dom/default/MessagePortProxy.cpp:
        (WebCore::MessagePortProxyWrapper::locallyEntangledPort):
        Added API for fetching the entangled port if it is run by the same thread        
        (WebCore::MessagePortProxy::hasPendingActivity):
        Changed definition of hasPendingActivity() to be stricter - only returns true if there are pending messages.
        (WebCore::MessagePortProxy::locallyEntangledPort):
        * dom/default/MessagePortProxy.h:

2009-06-21  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        <https://bugs.webkit.org/show_bug.cgi?id=25043>
        Removed obsolete MessagePort.startConversation(), active and onclose APIs.

        Refactored MessagePortProxy into MessagePortChannel and a platform-dependent PlatformMessagePortChannel
        implementation. Modified APIs to simplify cross-process implementations by moving the messaging code
        entirely into the platform-dependent proxy.

        Created a thread-safe default PlatformMessagePortChannel implementation.

        Changed DOMWindow messaging to create the MessageEvent in the target ScriptExecutionContext to match how
        cross-thread MessagePorts work.
        
        * GNUMakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
            Added MessagePortChannel/PlatformMessagePortChannel files.
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::mark):
            Changed ports to not mark their entangled pair as reachable, per the spec.
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        * dom/MessageChannel.cpp:
        (WebCore::MessageChannel::MessageChannel):
            Updated to use PlatformMessagePortChannel::createChannel() to entangle the ports.
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::MessagePort):
        (WebCore::MessagePort::~MessagePort):
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::disentangle):
        (WebCore::MessagePort::messageAvailable):
        (WebCore::MessagePort::start):
        (WebCore::MessagePort::close):
        (WebCore::MessagePort::entangle):
        (WebCore::MessagePort::contextDestroyed):
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::setOnmessage):
        (WebCore::MessagePort::hasPendingActivity):
            Changed these APIs to delegate to new PlatformMessagePortChannel APIs.
        * dom/MessagePort.h:
            Renamed isQueueOpen() to started().
        * dom/MessagePort.idl:
            Removed startConversation and onclose.
        * dom/MessagePortProxy.h: Removed.
        * dom/MessagePortChannel.cpp: Added.
        (WebCore::MessagePortChannel::EventData::create):
        (WebCore::MessagePortChannel::EventData::EventData):
        (WebCore::MessagePortChannel::~MessagePortChannel):
        * dom/MessagePortChannel.h: Added.
        (WebCore::MessagePortChannel::EventData::message):
        (WebCore::MessagePortChannel::EventData::channel):
            Changed EventData to hold a reference to a MessagePortChannel object instead of a MessagePort to enable cross-thread messaging.
        (WebCore::MessagePortChannel::MessagePortChannel):
        (WebCore::MessagePortChannel::create):        
        * dom/ScriptExecutionContext.cpp:
        (WebCore:ScriptExecutionContext::dispatchMessagePortEvents):
            Renamed isQueueOpen() to started().
        * dom/default/PlatformMessagePortChannel.cpp: Added.
        (WebCore::MessagePortChannel::entangleIfOpen):
        (WebCore::MessagePortChannel::disentangle):
        (WebCore::MessagePortChannel::postMessageToRemote):
        (WebCore::MessagePortChannel::tryGetMessageFromRemote):
        (WebCore::MessagePortChannel::close):
        (WebCore::MessagePortChannel::isConnectedTo):
        (WebCore::MessagePortChannel::hasPendingActivity):
        (WebCore::PlatformMessagePortChannel::PlatformMessagePortChannel):
        (WebCore::PlatformMessagePortChannel::~PlatformMessagePortChannel):
        (WebCore::PlatformMessagePortChannel::createChannel):
        (WebCore::PlatformMessagePortChannel::entangleIfOpen):
        (WebCore::PlatformMessagePortChannel::disentangle):
        (WebCore::PlatformMessagePortChannel::setRemotePort):
        (WebCore::PlatformMessagePortChannel::remotePort):
        (WebCore::PlatformMessagePortChannel::entangledChannel):
        (WebCore::PlatformMessagePortChannel::setEntangledChannel):
        (WebCore::PlatformMessagePortChannel::postMessageToRemote):
        (WebCore::PlatformMessagePortChannel::tryGetMessageFromRemote):
        (WebCore::PlatformMessagePortChannel::isConnectedTo):
        (WebCore::PlatformMessagePortChannel::close):
        (WebCore::PlatformMessagePortChannel::closeInternal):
        (WebCore::PlatformMessagePortChannel::hasPendingActivity):
        * dom/default/PlatformMessagePortChannel.h: Added.
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::create):
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::tryGetMessage):
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::appendAndCheckEmpty):
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::isEmpty):
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::MessagePortQueue):
        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::PostMessageTimer):
            Changed DOMWindow messaging to create the MessageEvent in the target ScriptExecutionContext to match how cross-thread MessagePorts work.
        (WebCore::PostMessageTimer::event):
        (WebCore::DOMWindow::postMessage):
        (WebCore::DOMWindow::postMessageTimerFired):

2009-06-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix https://bugs.webkit.org/show_bug.cgi?id=15383
          <rdar://problem/5682745> resize: vertical does not restrict to vertical
          resize

        Test: fast/css/resize-single-axis.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize): Ignore movement along the non-resizing
        axis.

2009-06-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Eric Seidel

        Fix for https://bugs.webkit.org/show_bug.cgi?id=26578
        event.currentTarget for listener registered on window should point to the window object like in Firefox

        Test: fast/events/event-trace.html

        * dom/Node.cpp:
        (WebCore::Node::dispatchGenericEvent): Make the DOMWindow the currentTarget when events are dispatched
        to it. We previously used the document because DOMWindow was not yet an EventTarget.

2009-06-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix https://bugs.webkit.org/show_bug.cgi?id=9694
          resize value not compared

        Test: fast/css/resize-value-compared.html

        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::operator==): Compare the resize
        member.

2009-06-19  Alice Liu  <alice.liu@apple.com>

        Fix https://bugs.webkit.org/show_bug.cgi?id=26568 
        Repro crash animating GIF if previously used in a closed window's back/forward list
        Also filed as <rdar://problem/6978362>

        Reviewed by Maciej Stachowiak.

        Can't test this bug with an automated layout test since it requires b/f caching 
        * manual-tests/animated-gif-bfcache-crash.html: Added.
        * manual-tests/resources/containsAnimatedGif.html: Added.

        Adding checks for hostWindow() since there is no guarantee that the Page is alive
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        (WebCore::ScrollView::contentsToScreen):
        (WebCore::ScrollView::screenToContents):
        (WebCore::ScrollView::wheelEvent):

2009-06-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Barth.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=26554
        Shadowing of top and parent

        * page/DOMWindow.idl:

2009-06-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=15106>.
        Bug 15106: REGRESSION: Can't drag text as element when user-select is set to none

        We allow selections to begin within an element that has -webkit-user-select: none set,
        unless the element is draggable as dragging should take priority over starting a selection.

        Test: editing/selection/user-drag-element-and-user-select-none.html

        * dom/Node.cpp:
        (WebCore::Node::canStartSelection):

2009-06-20  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Bug 26528: REGRESSION (r44674): Assertion in TextIterator::pushFullyClippedState while counting matches for "a" on apple.com
        https://bugs.webkit.org/show_bug.cgi?id=26528
        rdar://problem/6985329

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleReplacedElement): When entering a text control,
        start at the top of the shadow tree (by calling shadowTreeRootNode). Also
        remove assumption that innerTextElement will never be 0 since RenderTextControl
        doesn't really guarantee this.

2009-06-20  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by NOBODY.

        Speculative Qt build fix - add HTMLDataGridColElement to the build script.

        * WebCore.pro:

2009-06-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=26561

        Remove a memcpy by retrieving the already existing copy of a string
        instead of making a new one.

        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::source):
        * bindings/js/StringSourceProvider.h:
        (WebCore::StringSourceProvider::source):

2009-06-19  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg.
        
        https://bugs.webkit.org/show_bug.cgi?id=26488
        No Support for Single Finger or Two Finger Panning in Windows 7
        
        The code in WebCore allows us to interpret a Pan gesture as
        a mousewheel event, and we are able to reuse the scrolling code.
        Another constructor was created in WheelEventWin which takes data
        better suited to the pan guesture than what was currently there. 
        
        Unable to add tests to simulate touch behavior/gestures.

        * platform/PlatformWheelEvent.h:
        * platform/win/WheelEventWin.cpp:

2009-06-19  Chris Marrin  <cmarrin@apple.com>

        Fixed a build error, which only shows up in the i386 compile

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::animateTransform):

2009-06-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6988385> REGRESSION: In full page video player, movie's
        video track becomes detached from its controller.
        
        When in the media document, the MediaPlayer should not report that it
        is capable of hardware acceleration, because it renders via a QTMovieView
        which is already accelerated.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::supportsAcceleratedRendering):

2009-06-19  Kevin Ollivier  <kevino@theolliviers.com>

        Adding XSSAuditor.cpp to the wx build.

        * WebCoreSources.bkl:

2009-06-19  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser  <simon.fraser@apple.com>.

        https://bugs.webkit.org/show_bug.cgi?id=26544

        If I am doing a Matrix hardware animation and any matrix is singular, I revert to software.
        This is not really testable, since we can't see what the hardware animation is doing.

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::animateTransform):

2009-06-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        An additional fix for Bug 26532: Native functions do not correctly unlink
        from optimised callsites when they're collected
        <https://bugs.webkit.org/show_bug.cgi?id=26532> | <rdar://problem/6625385>

        Use "NativeFunctionWrapper" instead of "PrototypeFunction" in cross-frame
        accessors, so the type of object you get to wrap a function is the same,
        regardless of whether the access to the function is cross-frame.
        
        This is faster and more idiomatic than what we had before. It also would
        have avoided Bug 26532 because it would have prevented a conflicting
        PrototypeFunction from being allocated to wrap postMessage, where a
        NativeFunctionWrapper had been allocated previously.
        
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):

2009-06-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by John Sullivan

        <rdar://problem/6953673> Crash in RenderLayerCompositor::setCompositingParent
        
        Fix a crash that could occur in complex content due to timing issues
        when doing a partial layer tree rebuild which is required when painting;
        setCompositingParent() could be called with a parent which has not been made
        compositing yet.

2009-06-19  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Build fix. Adding missing HTMLDataGrid* files to the build.

        * GNUmakefile.am:

2009-06-19  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26460 part three
        Make BMPImageReader a standalone class that is used by ICOImageDecoder
        and BMPImageDecoder to decode individual BMPs within a file.  These
        decoders now inherit directly from ImageDecoder.
        
        This also makes these decoders decode on-demand in isSizeAvailable() and
        frameBufferAtIndex(), like the other decoders, instead of when setData()
        is called, like before.  This should provide a speedup on pages
        containing BMPs that aren't immediately onscreen.

        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::BMPImageDecoder):
        (WebCore::BMPImageDecoder::setData):
        (WebCore::BMPImageDecoder::isSizeAvailable):
        (WebCore::BMPImageDecoder::frameBufferAtIndex):
        (WebCore::BMPImageDecoder::decodeWithCheckForDataEnded):
        (WebCore::BMPImageDecoder::decode):
        (WebCore::BMPImageDecoder::processFileHeader):
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        (WebCore::BMPImageDecoder::readUint32):
        * platform/image-decoders/bmp/BMPImageReader.cpp:
        (WebCore::BMPImageReader::BMPImageReader):
        (WebCore::BMPImageReader::decodeBMP):
        (WebCore::BMPImageReader::readInfoHeaderSize):
        (WebCore::BMPImageReader::processInfoHeader):
        (WebCore::BMPImageReader::readInfoHeader):
        (WebCore::BMPImageReader::processBitmasks):
        (WebCore::BMPImageReader::processColorTable):
        (WebCore::BMPImageReader::processRLEData):
        (WebCore::BMPImageReader::processNonRLEData):
        (WebCore::BMPImageReader::setFailed):
        * platform/image-decoders/bmp/BMPImageReader.h:
        (WebCore::BMPImageReader::readUint16):
        (WebCore::BMPImageReader::readUint32):
        (WebCore::BMPImageReader::setBuffer):
        (WebCore::BMPImageReader::setData):
        (WebCore::BMPImageReader::):
        (WebCore::BMPImageReader::pastEndOfImage):
        (WebCore::BMPImageReader::readCurrentPixel):
        (WebCore::BMPImageReader::setRGBA):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::ICOImageDecoder):
        (WebCore::ICOImageDecoder::setData):
        (WebCore::ICOImageDecoder::isSizeAvailable):
        (WebCore::ICOImageDecoder::size):
        (WebCore::ICOImageDecoder::frameBufferAtIndex):
        (WebCore::ICOImageDecoder::decodeWithCheckForDataEnded):
        (WebCore::ICOImageDecoder::decode):
        (WebCore::ICOImageDecoder::processDirectory):
        (WebCore::ICOImageDecoder::processDirectoryEntries):
        (WebCore::ICOImageDecoder::readDirectoryEntry):
        (WebCore::ICOImageDecoder::processImageType):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        (WebCore::ICOImageDecoder::readUint16):
        (WebCore::ICOImageDecoder::readUint32):

2009-06-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=26555

        Fix the Chromium canary bot.  Turns out ScriptSourceCode doesn't have
        the same API in V8 and JSC.

        * WebCore/bindings/js/ScriptController.cpp:
        * WebCore/bindings/js/ScriptSourceCode.h:
        * WebCore/bindings/v8/ScriptController.cpp:
        * WebCore/page/XSSAuditor.cpp:
        * WebCore/page/XSSAuditor.h:

2009-06-19  David Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=26547
        
        Implement the IDL interface for HTMLDataGridColElement.

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/HTMLAttributeNames.in:
        * html/HTMLDataGridColElement.cpp: Added.
        (WebCore::HTMLDataGridColElement::HTMLDataGridColElement):
        (WebCore::HTMLDataGridColElement::label):
        (WebCore::HTMLDataGridColElement::setLabel):
        (WebCore::HTMLDataGridColElement::type):
        (WebCore::HTMLDataGridColElement::setType):
        (WebCore::HTMLDataGridColElement::sortable):
        (WebCore::HTMLDataGridColElement::setSortable):
        (WebCore::HTMLDataGridColElement::sortDirection):
        (WebCore::HTMLDataGridColElement::setSortDirection):
        (WebCore::HTMLDataGridColElement::selected):
        (WebCore::HTMLDataGridColElement::setSelected):
        * html/HTMLDataGridColElement.h: Added.
        (WebCore::HTMLDataGridColElement::endTagRequirement):
        (WebCore::HTMLDataGridColElement::tagPriority):
        * html/HTMLDataGridColElement.idl: Added.
        * html/HTMLDataGridElement.h:
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLTagNames.in:
        * page/DOMWindow.idl:

2009-06-19  Chris Evans  <scarybeasts@gmail.com>

        Reviewed by Eric Seidel.

        There is no new test because this cannot be tested deterministically.
        I've not been able to cause a crash at all in the test framework, but
        I have verified that this is happening in the wild and that the patch
        fixes the likely cause in the debugger.

        * loader/TextResourceDecoder.cpp: careful not to iterate off the end
          of our input buffer looking for the end of the comment.

2009-06-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=26536

        Fix external-script-URL-location.html and
        write-external-script-open.html LayoutTests.

        implicitOpen is called from several places.  We need to setXSSAuditor
        each time, so I moved the call inside implicitOpen.

        * dom/Document.cpp:
        (WebCore::Document::open):
        (WebCore::Document::implicitOpen):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):

2009-06-19  Kent Tamura  <tkent@chromium.org>

        Reviewed by David Levin.

        Use WebCore::multipleFileUploadText() in Chromium to fix a problem
        that Chromium shows only the first filename even if a user selects
        multiple files for <input type=file multiple>.
        <https://bugs.webkit.org/show_bug.cgi?id=26502>

        * platform/chromium/FileChooserChromium.cpp:
        (WebCore::FileChooser::basenameForWidth):

2009-06-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6967596> Safari hung using 100% CPU when I tried
          to look up a word in Dictionary using command-control-d

        Test: editing/selection/move-by-line-005.html

        The root cause of this bug was searchAheadForBetterMatch() continuing
        past the first rendered text object after the given object. While we
        want to skip non-rendered text and empty containers, when we encounter
        rendered text object, we must return a text box for that object.

        * dom/Position.cpp:
        (WebCore::searchAheadForBetterMatch):

2009-06-19  Jungshik Shin  <jshin@chromium.org>

        Reviewed by David Levin

        https://bugs.webkit.org/show_bug.cgi?id=25657

        Chromium Linux port does not handle non-BMP characters properly.
        It's fixed with a 'UTF-16 iterator macro' to extract Unicode
        codepoints out of a UTF-16 input string.

        A manual test is added for non-BMP character rendering,
        which we can use until a small freely-distributable font
        covering non-BMP is added to the Webkit source tree.


        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        * manual-tests/non-bmp.html: Added.

2009-06-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Dimitri Glazkov.

        V8 Bindings: return proper state from the script stack.

        https://bugs.webkit.org/show_bug.cgi?id=26512

        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::ScriptCallStack):
        * bindings/v8/ScriptCallStack.h:
        (WebCore::ScriptCallStack::state):

2009-06-19  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Simon Fraser.

        Windows build fix.
        
        * platform/graphics/cg/PatternCG.cpp:
        (WebCore::Pattern::createPlatformPattern):

2009-06-19  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.
        Build fix after 44825.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::isSizeAvailable):
        * platform/graphics/qt/ImageDecoderQt.h:

2009-06-18  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Oliver Hunt.

        Bug 26426: Canvas: rotation of 'no-repeat' pattern is weird
        <https://bugs.webkit.org/show_bug.cgi?id=26426>

        Use 1<<23-1 as steps of no-repeat patterns instead of 100000000.0f.
        The original number cannot be represented by mantissa of float
        (23bit) so that it caused some error.

        Test: fast/canvas/image-object-in-canvas.html:

        * platform/graphics/cg/PatternCG.cpp:
        (WebCore::Pattern::createPlatformPattern):

2009-06-19  Adam Barth  <abarth@webkit.org>

        Unreviewed attempt to fix the Chromium build.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::evaluate):
        * bindings/v8/ScriptController.h:
        (WebCore::ScriptController::xssAuditor):
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):

2009-06-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=26199

        Added an experimental reflective XSS filter.  The filter is disabled by
        default.

        Test: http/tests/security/xssAuditor/script-tag.html

        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::evaluate):
        * bindings/js/ScriptController.h:
        (WebCore::ScriptController::xssAuditor):
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * dom/Tokenizer.h:
        (WebCore::Tokenizer::xssAuditor):
        (WebCore::Tokenizer::setXSSAuditor):
        (WebCore::Tokenizer::Tokenizer):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::requestObject):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setXSSAuditorEnabled):
        * page/Settings.h:
        (WebCore::Settings::xssAuditorEnabled):
        * page/XSSAuditor.cpp: Added.
        (WebCore::isControlCharacter):
        (WebCore::XSSAuditor::XSSAuditor):
        (WebCore::XSSAuditor::~XSSAuditor):
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canCreateInlineEventListener):
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc):
        (WebCore::XSSAuditor::canLoadObject):
        (WebCore::XSSAuditor::decodeURL):
        (WebCore::XSSAuditor::findInRequest):
        * page/XSSAuditor.h: Added.
        (WebCore::XSSAuditor::isEnabled):
        (WebCore::XSSAuditor::setXSSAuditorEnabled):

2009-06-18  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        feOffset and objectBoundingBox
        [https://bugs.webkit.org/show_bug.cgi?id=26441]

        If we use objectBoundingBox for primitiveUnits, the fractions given
        to dx or dy of feOffset must be multiplied with the referenced objects
        objectBoundingBox size.

        Test: svg/filters/feOffset.svg

        * svg/graphics/filters/SVGFEOffset.cpp:
        (WebCore::FEOffset::apply):

2009-06-18  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        feTile implementation missing
        [https://bugs.webkit.org/show_bug.cgi?id=26419]

        Implementation of feTile, a pattern effect for SVG filters. It was
        necessary to modify FilterEffect since source inputs need a secial
        logic and we have to identify if an effect is a source input.

        Tests: svg/batik/filters/feTile.svg
               svg/filters/feTile.svg

        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::isSourceInput):
        * platform/graphics/filters/SourceAlpha.h:
        (WebCore::SourceAlpha::isSourceInput):
        * platform/graphics/filters/SourceGraphic.h:
        (WebCore::SourceGraphic::isSourceInput):
        * svg/graphics/filters/SVGFETile.cpp:
        (WebCore::FETile::apply):

2009-06-18  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        feMerge implementation
        [https://bugs.webkit.org/show_bug.cgi?id=26480]

        Added feMerge to the SVG Filter system.

        Test: svg/filters/feMerge.svg

        * svg/graphics/filters/SVGFEMerge.cpp:
        (WebCore::FEMerge::uniteChildEffectSubregions):
        (WebCore::FEMerge::apply):
        * svg/graphics/filters/SVGFEMerge.h:

2009-06-18  Mark Rowe  <mrowe@apple.com>

        Speculative Windows build fix.

        * page/win/FrameCGWin.cpp: Add missing #include.

2009-06-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Dave Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26425
        Final refactorings, picking up a few places where BitmapInfo
        could be used.

        * page/win/FrameCGWin.cpp:
        (WebCore::imageFromRect):
        * platform/win/CursorWin.cpp:
        (WebCore::Cursor::Cursor):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint):

2009-06-18  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 26522: In DOM mode, VoiceOver reads some mouseover text on web sites strangely
        https://bugs.webkit.org/show_bug.cgi?id=26522

        Test: accessibility/non-data-table-cell-title-ui-element.html

        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::titleUIElement):

2009-06-18  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix after recent RenderTheme changes.

        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::~RenderThemeWx):
        (WebCore::RenderTheme::themeForPage):

2009-06-18  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26460 part two
        Attempt to minimize diff of following functional change by first landing
        non-functional change to:
        * Make readUintX() public and static (since they will need to be once
          BMPImageReader is included in *ImageDecoder via composition rather
          than inheritance).  Add wrappers in each class so callers can be
          simpler.  In the next patch, these wrappers will be beefed up slightly
          and the callers will get even simpler.
        * Change direct setting of m_failed to use setFailed(), since in the
          next patch much of this code won't even have direct access to m_failed
        * Add a helper function in ICOImageDecoder to determine the image type
          instead of simply doing it inline
        * Rewrap lines that used to be <=80 cols and slipped over it during the
          original landing of these decoders
        * Other misc. changes, e.g. adding constructor definitions, reordering
          functions, changing RGBA32Buffer& to RGBA32Buffer*, etc. that have no
          functional effect but minimize the subsequent diff for readability


        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::BMPImageDecoder):
        (WebCore::BMPImageDecoder::processFileHeader):
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        (WebCore::BMPImageDecoder::readUint32):
        * platform/image-decoders/bmp/BMPImageReader.cpp:
        (WebCore::BMPImageReader::decodeBMP):
        (WebCore::BMPImageReader::getInfoHeaderSize):
        (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::readUint16Helper):
        (WebCore::BMPImageReader::readUint32Helper):
        (WebCore::BMPImageReader::):
        (WebCore::BMPImageReader::readUint16):
        (WebCore::BMPImageReader::readUint32):
        (WebCore::BMPImageReader::readCurrentPixel):
        (WebCore::BMPImageReader::getComponent):
        (WebCore::BMPImageReader::setI):
        (WebCore::BMPImageReader::setRGBA):
        (WebCore::BMPImageReader::fillRGBA):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::ICOImageDecoder):
        (WebCore::ICOImageDecoder::isSizeAvailable):
        (WebCore::ICOImageDecoder::size):
        (WebCore::ICOImageDecoder::decodeImage):
        (WebCore::ICOImageDecoder::processDirectory):
        (WebCore::ICOImageDecoder::processDirectoryEntries):
        (WebCore::ICOImageDecoder::isBetterEntry):
        (WebCore::ICOImageDecoder::processImageType):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        (WebCore::ICOImageDecoder::readUint16):
        (WebCore::ICOImageDecoder::readUint32):

2009-06-18  Peter Kasting  <pkasting@google.com>

        Fix build bustage.

        * platform/image-decoders/gif/GIFImageDecoder.h:

2009-06-18  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6940880> REGRESSION: Breakpoints don't break in 64-bit

        Convert intptr_t to Strings so that we don't loose bits in the
        conversion to JS.  Previously they were being put into 32bit ints.

        * inspector/InspectorController.cpp: Convert the String back to an
        intptr_t.
        (WebCore::InspectorController::addBreakpoint):
        (WebCore::InspectorController::removeBreakpoint):
        * inspector/InspectorController.h:
        * inspector/InspectorController.idl: Use strings in JS to avoid 32bit
        truncation.
        * inspector/InspectorFrontend.cpp: Make the intptr_t into a String.
        (WebCore::InspectorFrontend::parsedScriptSource):
        * platform/text/PlatformString.h: Implemented the necessary conversion
        functions to be able to convert to and from an intptr_t.
        * platform/text/String.cpp: Ditto.
        (WebCore::String::toIntPtrStrict):
        (WebCore::String::toIntPtr):
        (WebCore::charactersToIntPtrStrict):
        (WebCore::charactersToIntPtr):
        * platform/text/StringImpl.cpp: Ditto.
        (WebCore::StringImpl::toIntPtrStrict):
        (WebCore::StringImpl::toIntPtr):
        * platform/text/StringImpl.h: Ditto.

2009-06-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Eric Seidel.

        Final cleanups in this refactoring:
        (1) Move WindowsBitmap implementation from CG-specific file to
            the platform-common GraphicsContextWin.cpp, since it is
            equally useful on both platforms.
        (2) Revise the TransformationMatrix logic as suggested by
            Adam Roben in his review comments to Part #2 of this
            refactoring.

        * platform/graphics/win/GraphicsContextCGWin.cpp:
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::WindowsBitmap::WindowsBitmap):
        (WebCore::GraphicsContext::WindowsBitmap::~WindowsBitmap):
        (WebCore::GraphicsContext::createWindowsBitmap):
        (WebCore::GraphicsContext::getWindowsContext):
        (WebCore::GraphicsContextPlatformPrivate::scale):
        (WebCore::GraphicsContextPlatformPrivate::rotate):
        (WebCore::GraphicsContextPlatformPrivate::translate):
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):

2009-06-18  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26460 part one
        Make isSizeAvailable non-const, since it's not logically const (it
        triggers lazy decoding), and simplify all the implementations (without
        changing behavior; just make less verbose).  Remove some other
        inappropriate consts, which enables the removal of all the mutable
        declarations in the decoders.

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::isSizeAvailable):
        (WebCore::ImageDecoder::setSize): Make public to avoid needing a friend declaration in the JPEG decoder, and because the ICO/BMP decoders will soon need this.
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::isSizeAvailable):
        (WebCore::GIFImageDecoder::repetitionCount):
        (WebCore::GIFImageDecoder::decode):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::isSizeAvailable):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::isSizeAvailable):
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::isSizeAvailable):
        (WebCore::PNGImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.h:
        * platform/image-decoders/xbm/XBMImageDecoder.cpp:
        (WebCore::XBMImageDecoder::isSizeAvailable):
        (WebCore::XBMImageDecoder::frameBufferAtIndex):
        (WebCore::XBMImageDecoder::decode):
        * platform/image-decoders/xbm/XBMImageDecoder.h: Rename decodeXBM() to decode() for consistency with the JPEG/PNG decoders, and in the future the ICO/BMP decoders.

2009-06-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Eric Seidel.

        Move some common functions out of platform files and into
        the common implementation.

        https://bugs.webkit.org/show_bug.cgi?id=26425.
        Add a new platform context method (flush) so that the
        getWindowsContext method can be consolidated into the common
        GraphicsContextWin.cpp file.
         
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        (WebCore::GraphicsContextPlatformPrivate::flush):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::flush):
        * platform/graphics/win/GraphicsContextCGWin.cpp: Remove
          getWindowContext method.
        * platform/graphics/win/GraphicsContextCairoWin.cpp: Remove
          getWindowContext method and fillWithClearColor methods.
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::fillWithClearColor): Moved from *CairoWin.cpp
        (WebCore::GraphicsContext::getWindowsContext): Moved
          from *CairoWin.cpp

2009-06-18  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Oliver Hunt.

        Remove code that I accidentally committed in r44811.

        * editing/markup.cpp:
        (WebCore::createMarkup):

2009-06-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6983207> Non-layer content is not re-rendered when transition
        starts sometimes (with hardware acceleration).
        
        When deciding which RenderLayers should be composited, when a layer goes into
        compositing mode we repaint the old location. However, we did that before
        we'd looked at all the factors that may force a layer to composite, so missed
        some cases. Fix by doing the repaint once we really know whether it's going
        to composite.

        Test: compositing/repaint/become-overlay-composited-layer.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2009-06-18  Simon Fraser  <simon.fraser@apple.com>

        Fix the Leopard build where USE(ACCELERATED_COMPOSITING) is not defined, and
        the Tiger build where QTMovieLayer does not exist.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovieLayer):
        (WebCore::MediaPlayerPrivate::destroyQTMovieLayer):
        (WebCore::MediaPlayerPrivate::currentRenderingMode):
        (WebCore::MediaPlayerPrivate::setUpVideoRendering):
        (WebCore::MediaPlayerPrivate::tearDownVideoRendering):
        (WebCore::MediaPlayerPrivate::hasSetUpVideoRendering):

2009-06-18  Simon Fraser  <simon.fraser@apple.com>

        Fix the Leopard build where USE(ACCELERATED_COMPOSITING) is not defined.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::currentRenderingMode):
        (WebCore::MediaPlayerPrivate::setUpVideoRendering):
        (WebCore::MediaPlayerPrivate::tearDownVideoRendering):

2009-06-17  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=15189
        Adds the HTML5 input event support for textarea.
        
        Also, moves the oninput attribute parse handling to HTMLElement so that
        it can be set on any HTML element so that bubbling events can be handled
        using HTML attribute handlers.

        Test: fast/forms/textarea-input-event.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::subtreeHasChanged):

2009-06-18  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        Share code between filterEffects
        [https://bugs.webkit.org/show_bug.cgi?id=26479]

        Share more code of filter effects. The imageBuffer creation can move to
        FilterEffect ant every effect asks for the GraphicsContext. Move the
        drawingRect calculation to FilterEffect.

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::calculateDrawingRect):
        (WebCore::FilterEffect::getEffectContext):
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::apply):
        * svg/graphics/filters/SVGFEFlood.cpp:
        (WebCore::FEFlood::apply):
        * svg/graphics/filters/SVGFEOffset.cpp:
        (WebCore::FEOffset::apply):

2009-06-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.
        
        https://bugs.webkit.org/show_bug.cgi?id=26499
        
        Support hardware-accelerationed rendering of video elements.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerSawUnsupportedTracks):
        (WebCore::HTMLMediaElement::mediaPlayerRepaint):
        Just move these methods to group the render-related methods together.
        
        (WebCore::HTMLMediaElement::mediaPlayerRenderingCanBeAccelerated):
        Call out method to ask the RenderLayerCompositor if presentation of this video
        can be acclerated. It might say no, if, for example, the video has a reflection.
        
        (WebCore::HTMLMediaElement::mediaPlayerGraphicsLayer):
        Fetch the GraphicsLayer from the RenderVideo that will host the movie layer.
        
        * html/HTMLMediaElement.h:
        Reordered the rendering-related methods, and added two methods related to video
        acceleration.
        
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::acceleratedRenderingStateChanged):
        Called by the rendering system when it determines that the video must go into, or
        fall off of the hardware-accelerated path.
        
        (WebCore::MediaPlayer::supportsAcceleratedRendering):
        Method to say whether the media engine supports accelerated rendering.
        
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerRepaint):
        (WebCore::MediaPlayerClient::mediaPlayerSizeChanged):
        Moved.
        
        (WebCore::MediaPlayerClient::mediaPlayerRenderingCanBeAccelerated):
        (WebCore::MediaPlayerClient::mediaPlayerGraphicsLayer):
        New methods to ask the client if the rendering system can support accelerated
        rendering, and to get a GraphicsLayer to plug the movie layer into.
        
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::supportsAcceleratedRendering):
        (WebCore::MediaPlayerPrivateInterface::acceleratedRenderingStateChanged):
        Forwarding methods from MediaPlayer.
        
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        Some new methods related to using a QTMovieLayer, and to simplify the rendering mode logic.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovieLayer):
        (WebCore::MediaPlayerPrivate::destroyQTMovieLayer):
        Methods to create and destroy the QTMovieLayer.
        
        (WebCore::MediaPlayerPrivate::currentRenderingMode):
        (WebCore::MediaPlayerPrivate::preferredRenderingMode):
        Methods to clarify the code that decides which of the 3 rendering modes to use.
        
        (WebCore::MediaPlayerPrivate::setUpVideoRendering):
        Changed to use the new rendering mode methods.
        
        (WebCore::MediaPlayerPrivate::tearDownVideoRendering):
        Destroy the layer if we have one.
        
        (WebCore::MediaPlayerPrivate::hasSetUpVideoRendering):
        Small utility method.
        
        (WebCore::MediaPlayerPrivate::updateStates):
        Move the call to setUpVideoRendering() to before we send out the state notifications,
        so that we will have created the rendering objects already.
        
        (WebCore::MediaPlayerPrivate::supportsAcceleratedRendering):
        Return true if we have QTMovieLayer.
        
        (WebCore::MediaPlayerPrivate::acceleratedRenderingStateChanged):
        We've been told that we went into or out of accelerated mode; maybe reset
        the renderer, and set the layer if we have to.
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::rendererContentChanged):
        We may need to udpate compositing layers if the video went into accelerated mode.
        
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::canUseDirectCompositing):
        Add smarts to deal with video, which allows us to avoid extra backing store.
        
        (WebCore::RenderLayerBacking::contentsBox):
        Use the videoBox to use the content layer for video layers.
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateLayerCompositingState):
        Poke the RenderVideo if the state changed.
        
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        Handle an edge case when the video element itself is a stacking context
        because of opacity or transform.
        
        (WebCore::RenderLayerCompositor::canAccelerateVideoRendering):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::requiresCompositingForVideo):
        Allow video to throw us into compositing mode if the media engine supports it.
        
        * rendering/RenderLayerCompositor.h:
        New methods related to video.
        
        * rendering/RenderVideo.h:
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updatePlayer):
        Call rendererContentChanged() to give the compositor a change to throw the video into
        compositing mode.
        
        (WebCore::RenderVideo::supportsAcceleratedRendering):
        (WebCore::RenderVideo::acceleratedRenderingStateChanged):
        (WebCore::RenderVideo::videoGraphicsLayer):
        Methods to allow the MediaPlayer to do rendering-related stuff via the media element.

2009-06-18  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Niko.

        https://bugs.webkit.org/show_bug.cgi?id=26385
        Root SVG element is not checked on requiredFeatures, requiredExtension like other elements

        Also do the isValid check for outer <svg>.

        Test: svg/custom/outer-svg-unknown-feature.svg

        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::childShouldCreateRenderer):
        * svg/SVGDocument.h:

2009-06-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6913221> REGRESSION (Safari 3-4): Search field on
          apple.com cuts entered text

        Test: fast/forms/search-vertical-alignment.html

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout): Vertically center the
            the search field's inner block.

2009-06-18  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        Fix compilation with Symbian WINSCW compiler, which produced
        multiple definitions of the CSSPrimitiveValue conversion operators.

        It turns out that they are defined inline but not declared inline.

        Adding the inline keyword to the declaration fixes the build.

        * css/CSSPrimitiveValue.h:

2009-06-18  Markus Goetz <Markus.Goetz@nokia.com>

        Reviewed by Simon Hausman.

        Clarify in docs how to compile with debug information.

        * WebCore.pro:

2009-06-18  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] When writing an URL to the clipboard, save the corresponding title
        in the mime data as well.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::writeURL):

2009-06-18  Jakub Wieczorek  <faw217@gmail.com>

        [Qt] Fix build. Add HTMLDataGridElement.

        * WebCore.pro:

2009-06-18  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix.

        Add HTMLDataGridElement header and IDL to the build script.

        * GNUmakefile.am:

2009-06-18  Chris Evans  <scarybeasts@gmail.com>

        Reviewed by Adam Barth.

        Fix 8-digit long hex entities. Fixes bug 26454
        https://bugs.webkit.org/show_bug.cgi?id=26454

        Test: fast/parser/eightdigithexentity.html

        * html/HTMLTokenizer.cpp: fix off-by-ones.

2009-06-18  David Levin  <levin@chromium.org>

        Fix chromium linux build.

        Fixes a mistake that happened during the complicated merge for
        landing r44775, r44776, r44777.

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::create):

2009-06-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.
        
        https://bugs.webkit.org/show_bug.cgi?id=26499
        
        First step to making video rendering be hardware-accelerated:
        make <video> elements get self-painting RenderLayers, and add
        an isVideo() virtual method to RenderObject.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::mediaPlayerDurationChanged):
        (WebCore::HTMLMediaElement::mediaPlayerSizeChanged):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldBeNormalFlowOnly):
        (WebCore::RenderLayer::isSelfPaintingLayer):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isVideo):
        * rendering/RenderVideo.h:
        (WebCore::RenderVideo::requiresLayer):
        (WebCore::RenderVideo::isVideo):

2009-06-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Refactor a few common routines in the various Windows ports
        and reduce some duplicated code.

        (1) Create TransformationMatrix XFORM casting operator, and
            switch various XFORM structure uses to utilize it.
        (2) Push concatCTM call to GraphicsContextWin now that the
            TransformationMatrix can directly create XFORM (rather
            than converting to CGAffineTransform/cairo_matrix_t first.)

        * WebCore.vcproj/WebCore.vcproj: Add new BitmapInfo structure.
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContextPlatformPrivate::scale):
        (WebCore::GraphicsContextPlatformPrivate::rotate):
        (WebCore::GraphicsContextPlatformPrivate::translate):
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/graphics/win/TransformationMatrixWin.cpp: Added.
        (WebCore::TransformationMatrix::operator XFORM): New operator

2009-06-17  Brent Fulgham  <bfulgham@webkit.org>

        Non-CG Windows build fix after @r44758.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderTheme::themeForPage):

2009-06-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Refactor a few common routines in the various Windows ports
        and reduce some duplicated code.
        https://bugs.webkit.org/show_bug.cgi?id=26425.

        Refactor use of BITMAPINFO for the new BitmapInfo structure.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/BitmapInfo.cpp: Added.
        (WebCore::bitmapInfoForSize):
        (WebCore::BitmapInfo::create):
        (WebCore::BitmapInfo::createBottomUp):
        * platform/win/BitmapInfo.h: Added.
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        * platform/graphics/win/TransformationMatrixWin.cpp: Added.
        (WebCore::TransformationMatrix::operator XFORM): New operator
        * platform/win/DragImageCGWin.cpp:
        (WebCore::allocImage):
        * platform/win/DragImageCairoWin.cpp:
        (WebCore::allocImage):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint):

2009-06-17  Adam Roben  <aroben@apple.com>

        Remove unnecessary 6th parameter from SOFT_LINK_OPTIONAL

        Reviewed by Mark Rowe.

        * platform/graphics/win/ColorSafari.cpp: Removed the 6th parameter and
        an unnecessary parameter name.
        * platform/win/SoftLinking.h: Removed the unused 6th parameter.

2009-06-17  Adam Roben  <aroben@apple.com>

        Make Settings::shouldPaintNativeControls default to true

        This matches the default up in WebKit (that was changed in r43318).

        Fixes Bug 26493: REGRESSION (r44758): First tab always uses Mac-style
        form controls
        <https://bugs.webkit.org/show_bug.cgi?id=26493>

        Reviewed by Darin Adler and Dave Hyatt.

        No test possible since DRT always uses Mac-style form controls.

        * page/Settings.cpp: Changed the initial value of
        gShouldPaintNativeControls to true.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderTheme::themeForPage): Added a FIXME about the design
        flaw here involving querying Settings before it's been initialized.

2009-06-17  David Levin  <levin@chromium.org>

        Fix chromium windows build.

        A mistake that happened during the complicated merge for
        landing r44775, r44776, r44777.

        * rendering/RenderThemeChromiumWin.h:
        (WebCore::RenderThemeChromiumWin::RenderThemeChromiumWin):
        (WebCore::RenderThemeChromiumWin::~RenderThemeChromiumWin):

2009-06-17  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/6981193> Crash in MediaControlInputElement::attachToParent

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaTextDisplayElement::attachToParent): NULL check element renderer or parent renderer.
        (WebCore::MediaControlInputElement::attachToParent): Ditto.

2009-06-17  David Hyatt  <hyatt@apple.com>

        Fix Windows build.  There's no HTMLDataGridElement.cpp file yet.

        * html/HTMLElementsAllInOne.cpp:

2009-06-17  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben and Anders Carlsson.

        Stub out the HTMLDataGridElement.

        * DerivedSources.make:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * editing/htmlediting.cpp:
        (WebCore::canHaveChildrenForEditing):
        * html/HTMLDataGridElement.h: Added.
        (WebCore::HTMLDataGridElement::HTMLDataGridElement):
        (WebCore::HTMLDataGridElement::tagPriority):
        * html/HTMLDataGridElement.idl: Added.
        * html/HTMLElement.cpp:
        (WebCore::inlineTagList):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::isAffectedByResidualStyle):
        * html/HTMLTagNames.in:

2009-06-17  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (chromium build fix).

        Fix typo in previous changes.

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::defaultGUIFont):

2009-06-17  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26148
        Remove common code from RenderThemeChromiumWin that is shared with
        RenderThemeChromiumSkia.

        Also move supportsControlTints to RenderThemeChromiumLinux since it
        is linux specific.

        There are no tests changed because this just removes functions with
        duplicate implementations between the base and derived classes.

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::supportsControlTints):
        * rendering/RenderThemeChromiumLinux.h:
        * rendering/RenderThemeChromiumSkia.cpp:
        * rendering/RenderThemeChromiumSkia.h:
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::):
        (WebCore::getNonClientMetrics):
        (WebCore::RenderThemeChromiumWin::RenderThemeChromiumWin):
        (WebCore::RenderThemeChromiumWin::~RenderThemeChromiumWin):
        (WebCore::RenderThemeChromiumWin::systemFont):
        (WebCore::RenderThemeChromiumWin::paintCheckbox):
        (WebCore::RenderThemeChromiumWin::paintRadio):
        (WebCore::RenderThemeChromiumWin::paintSliderThumb):
        (WebCore::RenderThemeChromiumWin::caretBlinkIntervalInternal):
        * rendering/RenderThemeChromiumWin.h:

2009-06-17  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26148
        Move RenderThemeChromiumSkia into its own file.  This is purely a code move.

        * rendering/RenderThemeChromiumLinux.cpp:
        * rendering/RenderThemeChromiumLinux.h:
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::):
        (WebCore::setSizeIfAuto):
        (WebCore::mediaElementParent):
        (WebCore::RenderThemeChromiumSkia::defaultGUIFont):
        (WebCore::RenderThemeChromiumSkia::RenderThemeChromiumSkia):
        (WebCore::RenderThemeChromiumSkia::~RenderThemeChromiumSkia):
        (WebCore::RenderThemeChromiumSkia::extraDefaultStyleSheet):
        (WebCore::RenderThemeChromiumSkia::extraQuirksStyleSheet):
        (WebCore::RenderThemeChromiumSkia::extraMediaControlsStyleSheet):
        (WebCore::RenderThemeChromiumSkia::supportsHover):
        (WebCore::RenderThemeChromiumSkia::supportsFocusRing):
        (WebCore::RenderThemeChromiumSkia::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumSkia::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumSkia::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeChromiumSkia::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeChromiumSkia::platformTextSearchHighlightColor):
        (WebCore::RenderThemeChromiumSkia::caretBlinkInterval):
        (WebCore::RenderThemeChromiumSkia::systemFont):
        (WebCore::RenderThemeChromiumSkia::minimumMenuListSize):
        (WebCore::RenderThemeChromiumSkia::paintCheckbox):
        (WebCore::RenderThemeChromiumSkia::setCheckboxSize):
        (WebCore::RenderThemeChromiumSkia::paintRadio):
        (WebCore::RenderThemeChromiumSkia::setRadioSize):
        (WebCore::brightenColor):
        (WebCore::paintButtonLike):
        (WebCore::RenderThemeChromiumSkia::paintButton):
        (WebCore::RenderThemeChromiumSkia::paintTextField):
        (WebCore::RenderThemeChromiumSkia::paintTextArea):
        (WebCore::RenderThemeChromiumSkia::paintSearchField):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldCancelButton):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsButton):
        (WebCore::RenderThemeChromiumSkia::paintMediaButtonInternal):
        (WebCore::RenderThemeChromiumSkia::paintMediaPlayButton):
        (WebCore::RenderThemeChromiumSkia::paintMediaMuteButton):
        (WebCore::RenderThemeChromiumSkia::adjustMenuListStyle):
        (WebCore::RenderThemeChromiumSkia::paintMenuList):
        (WebCore::RenderThemeChromiumSkia::adjustMenuListButtonStyle):
        (WebCore::RenderThemeChromiumSkia::paintMenuListButton):
        (WebCore::RenderThemeChromiumSkia::popupInternalPaddingLeft):
        (WebCore::RenderThemeChromiumSkia::popupInternalPaddingRight):
        (WebCore::RenderThemeChromiumSkia::popupInternalPaddingTop):
        (WebCore::RenderThemeChromiumSkia::popupInternalPaddingBottom):
        (WebCore::RenderThemeChromiumSkia::buttonInternalPaddingLeft):
        (WebCore::RenderThemeChromiumSkia::buttonInternalPaddingRight):
        (WebCore::RenderThemeChromiumSkia::buttonInternalPaddingTop):
        (WebCore::RenderThemeChromiumSkia::buttonInternalPaddingBottom):
        (WebCore::RenderThemeChromiumSkia::caretBlinkIntervalInternal):
        (WebCore::RenderThemeChromiumSkia::menuListInternalPadding):
        * rendering/RenderThemeChromiumSkia.h:
        (WebCore::RenderThemeChromiumSkia::supportsControlTints):

2009-06-17  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26148
        Extract RenderThemeChromiumSkia out of RenderThemeChromiumLinux.  This
        is mostly a code shuffle.  The non-suffle changes are:
           1) Creation of a caretBlinkIntervalInternal.
           2) Moving of some inline functions into the implementation files.
           3) Changing of defaultGUIFont into a static class constant from a
              static function.  Also the type is changed to String.
           4) Changing of defaultFontSize into a static class constant from a
              static variable in the file scope.
           5) The static supportsFocus function was collapsed into
              supportsFocusRing.
           6) Split the extraDefaultStyleSheet into Skia and Linux versions.

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumSkia::defaultGUIFont):
        (WebCore::RenderThemeChromiumSkia::RenderThemeChromiumSkia):
        (WebCore::RenderThemeChromiumSkia::~RenderThemeChromiumSkia):
        (WebCore::RenderThemeChromiumSkia::extraDefaultStyleSheet):
        (WebCore::RenderThemeChromiumSkia::extraQuirksStyleSheet):
        (WebCore::RenderThemeChromiumSkia::extraMediaControlsStyleSheet):
        (WebCore::RenderThemeChromiumSkia::supportsHover):
        (WebCore::RenderThemeChromiumSkia::supportsFocusRing):
        (WebCore::RenderThemeChromiumSkia::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumSkia::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumSkia::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeChromiumSkia::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeChromiumSkia::platformTextSearchHighlightColor):
        (WebCore::RenderThemeChromiumSkia::caretBlinkInterval):
        (WebCore::RenderThemeChromiumSkia::systemFont):
        (WebCore::RenderThemeChromiumSkia::minimumMenuListSize):
        (WebCore::RenderThemeChromiumSkia::paintCheckbox):
        (WebCore::RenderThemeChromiumSkia::setCheckboxSize):
        (WebCore::RenderThemeChromiumSkia::paintRadio):
        (WebCore::RenderThemeChromiumSkia::setRadioSize):
        (WebCore::RenderThemeChromiumSkia::paintButton):
        (WebCore::RenderThemeChromiumSkia::paintTextField):
        (WebCore::RenderThemeChromiumSkia::paintTextArea):
        (WebCore::RenderThemeChromiumSkia::paintSearchField):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldCancelButton):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsButton):
        (WebCore::RenderThemeChromiumSkia::paintMediaButtonInternal):
        (WebCore::RenderThemeChromiumSkia::paintMediaPlayButton):
        (WebCore::RenderThemeChromiumSkia::paintMediaMuteButton):
        (WebCore::RenderThemeChromiumSkia::adjustMenuListStyle):
        (WebCore::RenderThemeChromiumSkia::paintMenuList):
        (WebCore::RenderThemeChromiumSkia::adjustMenuListButtonStyle):
        (WebCore::RenderThemeChromiumSkia::paintMenuListButton):
        (WebCore::RenderThemeChromiumSkia::popupInternalPaddingLeft):
        (WebCore::RenderThemeChromiumSkia::popupInternalPaddingRight):
        (WebCore::RenderThemeChromiumSkia::popupInternalPaddingTop):
        (WebCore::RenderThemeChromiumSkia::popupInternalPaddingBottom):
        (WebCore::RenderThemeChromiumSkia::buttonInternalPaddingLeft):
        (WebCore::RenderThemeChromiumSkia::buttonInternalPaddingRight):
        (WebCore::RenderThemeChromiumSkia::buttonInternalPaddingTop):
        (WebCore::RenderThemeChromiumSkia::buttonInternalPaddingBottom):
        (WebCore::RenderThemeChromiumSkia::caretBlinkIntervalInternal):
        (WebCore::RenderThemeChromiumLinux::RenderThemeChromiumLinux):
        (WebCore::RenderThemeChromiumLinux::~RenderThemeChromiumLinux):
        (WebCore::RenderThemeChromiumLinux::systemColor):
        (WebCore::RenderThemeChromiumLinux::extraDefaultStyleSheet):
        (WebCore::RenderThemeChromiumSkia::menuListInternalPadding):
        * rendering/RenderThemeChromiumLinux.h:

2009-06-17  Adam Roben  <aroben@apple.com>

        Add a SOFT_LINK_OPTIONAL macro

        This macro is useful when soft-linking functions that are present in
        only some versions of a particular library (e.g., APIs added in
        Windows Vista that aren't available on Windows XP).

        Reviewed by Ada Chan.

        * platform/graphics/win/ColorSafari.cpp:
        (WebCore::focusRingColor):
        Use the SoftLinking.h macros instead of doing the soft-link ourselves.
        Also removed an unused call to focusRingColor.isValid().

        * platform/win/SoftLinking.h: Added SOFT_LINK_OPTIONAL.

2009-06-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Gustavo Noronha.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=26470.
        The use of zero-width or zero-height rectangles in generating
        gradients caused Windows Cairo to crash, and webkitgtk to
        produce invalid images.

        We now test for NaN in the phase argument, which is calculated
        using fmodf and can blow up when the width/height values passed
        are zero.

        Test: fast/gradients/border-image-gradient-sides-and-corners.html

        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):

2009-06-17  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Dimitri Glazkov.

        If loading a font fails because of the sandbox, we ask the browser process to
        try to load it by calling ensureFontLoaded. If it still fails after
        ensureFontLoaded, we hit a ASSERT_NOT_REACHED.

        This case happens once in a while during browser shutdown. The browser will
        queue a message to the renderer to shutdown, and will then stop answering sync
        messages from the renderer. If the renderer is still loading a page during this
        time, it might try to call the browser process to ask to load a font. The
        browser process will ignore the request, and the font will fail to load, even
        after the second try.

        This is unfortunate, but there is no real risk here, since the renderer will be
        going away as soon as it processes another message.
        
        This can't be layout tested as it depends on the sandbox.
        
        https://bugs.webkit.org/show_bug.cgi?id=26484

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::fontContainsCharacter):

2009-06-17  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=26482
        <rdar://problem/6978590> When setting playback rate to 0, the audio element stops 
        playing (doesn't resume later)

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::setRate): Always set the rate, even when "paused".

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::setRate): Ditto.

2009-06-17  Adam Roben  <aroben@apple.com>

        Add all the generated JS*.cpp files back to WebCore.vcproj

        They are not compiled by the vcproj directly. Instead they are
        compiled as part of DerivedSources.cpp. Having them listed in the
        vcproj makes them be included in Project Find, etc.

        Rubber-stamped in advance by Steve Falkenburg.

        * WebCore.vcproj/WebCore.vcproj:

2009-06-17  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Fisher.

        Don't fire redundant 'change' events for a file upload form.
        https://bugs.webkit.org/show_bug.cgi?id=26471

        * platform/FileChooser.cpp:
        (WebCore::FileChooser::chooseFiles): Suppress change event if the
        existing selected files and the incoming selected files are equal.
        (WebCore::FileChooser::chooseIcon): Returns 0 if there is no selected
        files.

2009-06-17  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=23155
        Move WIN_CE -> WINCE as previously discussed with Qt WINCE folks.

        * platform/KeyboardCodes.h:

2009-06-17  George Staikos  <george.staikos@torchmobile.com>

        Reviewed by Adam Treat.

        https://bugs.webkit.org/show_bug.cgi?id=23155
        Move WIN_CE -> WINCE as previously discussed with Qt WINCE folks.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::getWindowsContext):
        * platform/win/SystemTimeWin.cpp:
        (WebCore::userIdleTime):

2009-06-17  Adam Roben  <aroben@apple.com>

        Speculative Mac build fix

        * page/Page.h: Forward-declare RenderTheme instead of including
        RenderTheme.h so that we don't need to make RenderTheme.h a private
        header for WebKit's benefit.

        * editing/SelectionController.cpp:
        * rendering/InlineTextBox.cpp:
        * rendering/RenderObject.cpp:
        Added #includes of RenderTheme.h.

2009-06-17  Adam Roben  <aroben@apple.com>

        Speculative Mac build fix

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderTheme::create): Added.

2009-06-17  Adam Roben  <aroben@apple.com>

        Speculative Mac build fix

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderTheme::themeForPage): Remove the name of an unused
        parameter.

2009-06-17  Adam Roben  <aroben@apple.com>

        Speculative Mac build fix

        * page/Page.cpp:
        (WebCore::Page::Page): Change the initializer order to match the
        declaration order.

2009-06-16  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Follow up to bug https://bugs.webkit.org/show_bug.cgi?id=26278
        Patch that make WebCore have a RenderTheme per page

        Make the Qt implementation of RenderTheme create a theme per page,
        and use the QStyle associated with the view of each page, in order
        to make the QWidget setStyle() method work as advertised.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::RenderThemeQt):
        (WebCore::RenderThemeQt::qStyle):
        (WebCore::findFrameLineWidth):
        (WebCore::inflateButtonRect):
        (WebCore::RenderThemeQt::adjustRepaintRect):
        (WebCore::RenderThemeQt::isControlStyled):
        (WebCore::RenderThemeQt::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQt::setButtonPadding):
        (WebCore::RenderThemeQt::paintButton):
        (WebCore::RenderThemeQt::paintTextField):
        (WebCore::RenderThemeQt::setPopupPadding):
        * platform/qt/RenderThemeQt.h:

2009-06-16  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Dave Hyatt and Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=26278
        Patch that make WebCore have a RenderTheme per page


        Create a different RenderTheme per page, so that RenderTheme has
        access to page specific theming. This is needed for the Qt port, as Qt
        supports setting the theme (style) per widget.

        This change was suggested and discussed with Dave Hyatt.

        More detailed:

        1) Create a theme per page or one global one, depending on the needs
           of the platform.
        2) Add an accesser to the theme from RenderObject.
        3) Change all uses of the theming to access the theme through
           RenderObject, using the global default theme as fallback, when the
           document of RenderObject has no page.
           When we don't have access to a RenderObject, use the default theme.
        4) Modify all RenderTheme platform implementations to work with the
           above changes, still creating only one global theme.


        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::boundingBoxRect):
        * css/CSSStyleSelector.cpp:
        (WebCore::loadFullDefaultStyle):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        (WebCore::CSSStyleSelector::applyProperty):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::setActive):
        (WebCore::ContainerNode::setHovered):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::focusedOrActiveStateChanged):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::parseMappedAttribute):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::setIndeterminate):
        * page/Frame.cpp:
        (WebCore::Frame::selectionLayoutChanged):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateControlTints):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::theme):
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::paintRow):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::create):
        (WebCore::RenderTheme::themeForPage):
        (WebCore::RenderThemeGtk::RenderThemeGtk):
        (WebCore::RenderThemeGtk::~RenderThemeGtk):
        (WebCore::RenderThemeGtk::gtkEntry):
        (WebCore::RenderThemeGtk::gtkTreeView):
        * platform/gtk/RenderThemeGtk.h:
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::create):
        (WebCore::RenderTheme::themeForPage):
        * platform/qt/RenderThemeQt.h:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint):
        * rendering/RenderMediaControls.cpp:
        (WebCore::determineState):
        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::create):
        (WebCore::RenderTheme::themeForPage):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintTextMatchMarker):
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlInputElement::hitTest):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::theme):
        * rendering/RenderObject.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::defaultTheme):
        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::create):
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeChromiumLinux.h:
        (WebCore::RenderThemeChromiumLinux::~RenderThemeChromiumLinux):
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::create):
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::create):
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeChromiumWin.h:
        (WebCore::RenderThemeChromiumWin::RenderThemeChromiumWin):
        (WebCore::RenderThemeChromiumWin::~RenderThemeChromiumWin):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::create):
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::create):
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeWin.h:

2009-06-17  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6974175> ASSERT in JITStubs.cpp at appsaccess.apple.com

        JSDOMWindowCustom was using PropertySlot::putValue, however this interface
        appears to be fundaementally incorrect - PropertySlots are only used to get
        values, all puts use PutPropertySlot.  However PutPropertySlot cannot be
        used in the fashion desired here - it only reports the caching type of a
        write that has been performed.

        (This caused a bug where the put should have triggered a transition, and
        failed to do so.)

        Removing the faulty case from the optimization leads to a ~0.5% progression
        on in-browser SunSpider (presumably the very first case was not being hit
        often, and the simplification here is beneficial).

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):

2009-06-17  David Levin  <levin@chromium.org>

        Reviewed by NOBODY, layout tests fix.

        https://bugs.webkit.org/show_bug.cgi?id=26326
        This reverts commit r44751.

        Once that change was checked scrollbars/scrollbar-orientation.html started
        crashing on Windows.

        * dom/Document.cpp:
        (WebCore::Document::detach):
        * page/FrameView.cpp:
        * page/FrameView.h:
        * platform/Scrollbar.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy):
        * rendering/RenderScrollbar.h:

2009-06-16  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        In ImageSource::setData, delete the old m_encoder before replacing it with a new one.
        
        https://bugs.webkit.org/show_bug.cgi?id=26458

        * platform/graphics/wx/ImageSourceWx.cpp:
        (WebCore::ImageSource::setData):

2009-06-16  David Levin  <levin@chromium.org>

        Reviewed by David Hyatt.

        REGRESSION: When the main page (ScrollView) has a custom scrollbar, it crashes on destruction.
        https://bugs.webkit.org/show_bug.cgi?id=26326

        Test: scrollbars/scrollbar-crash-on-refresh.html

        * dom/Document.cpp:
        (WebCore::Document::detach):
        Gives the FrameView a change to do any necessary cleanup on
        Document::detach() which is where the renderArena gets detroyed.
        * page/FrameView.cpp:
        (WebCore::FrameView::detachCustomScrollbars):
        Gets rid of any custom scrollbars (if the docment supplied them).
        * page/FrameView.h:
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::isCustomScrollbar):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy):
        Removed the check for document()->frame().  If frame() is 0 in this code,
        then the call to animation() is also incorrect (since it does document()->frame()->animation()).
        * rendering/RenderScrollbar.h:
        (WebCore::RenderScrollbar::isCustomScrollbar):

2009-06-16  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adele Peterson.

        Fix of <rdar://6967547> Ctrl-C copies null value erasing text in clipboard in Safari.
        This patch kept the way events were firing as they were before, and Windows events are
        consistent with Mac.       

        * editing/Editor.cpp:
        (WebCore::Editor::tryDHTMLCopy): Added check for canCopy() before clearing PasteBoard
        (WebCore::Editor::tryDHTMLCut): Added check for canCut() before clearing PasteBoard

2009-06-16  Antti Koivisto  <antti@apple.com>

        Reviewed by Brady Eidson.

        <rdar://problem/6660037> CrashTracer: [USER] 46 crashes in Safari at com.apple.WebCore • WebCore::CachedCSSStyleSheet::addClient 53
        
        When revalidating a resource, calling addClient() on one client might cause another to get removed.
        
        - made CachedResource::addClient() non-virtual and added virtual didAddClient()
        - in CachedResource::switchClientsToRevalidatedResource() add all clients to the client set of the revalidated resource first
        - check if the client is still in the set before invoking didAddClient() for it
        
        No test case, I didn't manage to construct one. You need some combination of 304 revalidation, stylesheets that
        reference each other via @imports and reloading.

        * WebCore.base.exp:
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::didAddClient):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::didAddClient):
        * loader/CachedFont.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::didAddClient):
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::addClient):
        (WebCore::CachedResource::addClientToSet):
        (WebCore::CachedResource::switchClientsToRevalidatedResource):
        * loader/CachedResource.h:
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::didAddClient):
        * loader/CachedScript.h:
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::didAddClient):
        * loader/CachedXSLStyleSheet.h:

2009-06-16  Simon Fraser  <simon.fraser@apple.com>

        No Review

        Fix code inside an #ifdef that draws the video framerate.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::paint):

2009-06-16  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 26456: Hook up V8 bindings for Worker's importScripts functionality.
        https://bugs.webkit.org/show_bug.cgi?id=26456

        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerCustom.cpp: Fixed missing exception code
          handling in Worker constructor for V8 bindings.
        (WebCore::CALLBACK_FUNC_DECL):

2009-06-16  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Maciej Stachowiak.

        Update of https://bugs.webkit.org/show_bug.cgi?id=26353.
        Provide an assignment operator to avoid improper reference
        counts on the Cairo font objects.  This brings the Windows
        Cairo port in line with the GTKport.

        * platform/graphics/win/FontPlatformData.h:
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):

2009-06-16  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Fix for <rdar://problem/6890126> Theme code should fetch the MediaControlElementType from 
        the MediaControlInputElement, rather than computing it again

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::percentLoaded): New, utility function for controller implementation.
        * html/HTMLMediaElement.h:

        * rendering/MediaControlElements.h:
        (WebCore::MediaControlInputElement::displayType): New, return m_displayType.

        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart): Stop using MediaPlayer object, get button
        state from the button itself and get movie state from HTMLMediaElement.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMediaMuteButton): Get state from button instead of MediaPlayer.
        (WebCore::RenderThemeMac::paintMediaPlayButton): Ditto.

2009-06-16  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Bug 26450: Rename values of enum RedirectOriginCheck to make them
        clearer.
        https://bugs.webkit.org/show_bug.cgi?id=26450

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::create):
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::willSendRequest):
        * loader/DocumentThreadableLoader.h:
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::create):
        (WebCore::ThreadableLoader::loadResourceSynchronously):
        * loader/ThreadableLoader.h:
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::importScripts):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader):
        (WebCore::WorkerThreadableLoader::loadResourceSynchronously):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader):
        * loader/WorkerThreadableLoader.h:
        (WebCore::WorkerThreadableLoader::create):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        * workers/WorkerScriptLoader.h:
        (WebCore::WorkerContext::importScripts):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::loadRequestAsynchronously):

2009-06-16  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Fisher.

        Fix a UMR in WebCore::BitStack by initializing new memory to 0.
        https://bugs.webkit.org/show_bug.cgi?id=26449
        No new tests, covered by purify.

        * editing/TextIterator.cpp:
        (WebCore::BitStack::push):

2009-06-16  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Xan Lopez.

        Test: fast/multicol/columns-shorthand-parsing.html 

        Fixes https://bugs.webkit.org/show_bug.cgi?id=26453.
        Null Cairo contextwill crash Windows Cairo build.

        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContextPlatformPrivate::syncContext):
          Add a check for null context before attempting to
          retrieve the Cairo surface.

2009-06-16  Peter Kasting  <pkasting@google.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=26447
        Fix animated GIF breakage in Cairo/wx ports.

        * platform/image-decoders/cairo/ImageDecoderCairo.cpp:
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::operator=):
        * platform/image-decoders/wx/ImageDecoderWx.cpp:
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::operator=):

2009-06-16  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by John Sullivan
        
        <rdar://problem/6937882>
        
        Tweak "time remaining" and "time elapsed" fields in the overlay video controller.

        * css/mediaControlsQT.css:

2009-06-16  Jian Li  <jianli@chromium.org>

        Reviewed by Adam Barth and David Levin.

        Bug 26146: Change to use ThreadableLoader to load the worker script
        in order to check URL origin for redirection.
        https://bugs.webkit.org/show_bug.cgi?id=26146

        Test: http/tests/workers/worker-redirect.html

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        (WebCore::Worker::notifyFinished):
        * workers/Worker.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::importScripts):
        * workers/WorkerImportScriptsClient.cpp: Removed.
        * workers/WorkerImportScriptsClient.h: Removed.
        * workers/WorkerScriptLoader.cpp: Renamed from workers/WorkerImportScriptsClient.cpp.
          This to make it more generic so worker script loading could use it.
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        (WebCore::WorkerScriptLoader::didFinishLoading):
        (WebCore::WorkerScriptLoader::didFail):
        (WebCore::WorkerScriptLoader::didFailRedirectCheck):
        (WebCore::WorkerScriptLoader::didReceiveAuthenticationCancellation):
        (WebCore::WorkerScriptLoader::notifyFinished):
        * workers/WorkerScriptLoader.h: Renamed from workers/WorkerImportScriptsClient.h.
          This to make it more generic so worker script loading could use it.
        * workers/WorkerScriptLoaderClient.h: Added.

2009-06-16  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Darin Adler.

        Use consistent GUID comparison functions.
        https://bugs.webkit.org/show_bug.cgi?id=26427

        * platform/win/WCDataObject.cpp:
        (WebCore::WCDataObject::QueryInterface):

2009-06-16  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Fix compiler warning.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_class_init):

2009-08-07  Luke Kenneth Casson Leighton  <lkcl@lkcl.net>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=27424

        * WebKit/gtk/gdom/ConvertToGCharPrivate.h: Added.
        (copyAsGChar): added to help GObject bindings convert various types to glib's gchar* 

2009-06-16  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Remove dummy AtkStreamableContent implementation.

        It's completely empty, we'll add it back (and conditionally
        instead of unconditionally) when it does something.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (GetAtkInterfaceTypeFromWAIType):
        (getInterfaceMaskFromObject):

== Rolled over to ChangeLog-2009-06-16 ==
