2011-06-04  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        [Mac WebKit2] REGRESSION (r86692): Synchronous XMLHttpRequest hangs in credential shim (affects Netgear ReadyNAS admin page)
        https://bugs.webkit.org/show_bug.cgi?id=62094
        rdar://problem/9539204

        * WebCore.exp.in: Export ResourceHandle::synchronousLoadRunLoopMode.
        * platform/network/ResourceHandle.h: Add synchronousLoadRunLoopMode.
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::synchronousLoadRunLoopMode): Added.
        (WebCore::ResourceHandle::loadResourceSynchronously): Call synchronousLoadRunLoopMode.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::synchronousLoadRunLoopMode): Added.
        (WebCore::ResourceHandle::loadResourceSynchronously): Call synchronousLoadRunLoopMode.

2011-06-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add InlineWalker class to hold state for repeated calls to bidiNext
        https://bugs.webkit.org/show_bug.cgi?id=60724

        This is one more little step towards removing (naked) bidiNext usage.
        More refactoring is required before all callers of bidiNext can move
        onto using an InlineWalker instead of bidiNext directly.

        No change in behavior, thus no tests.

        * rendering/InlineIterator.h:
        (WebCore::InlineWalker::InlineWalker):
        (WebCore::InlineWalker::root):
        (WebCore::InlineWalker::current):
        (WebCore::InlineWalker::atEndOfInline):
        (WebCore::InlineWalker::atEnd):
        (WebCore::InlineWalker::advance):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedNormalFlowLayout):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2011-06-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 needs to know when a scroll is happening due to the ScrollAnimator
        https://bugs.webkit.org/show_bug.cgi?id=62093

        Add additional ChromeClient functions to indicate the beginning and end of
        the various ScrollAnimator animations. Change existing notification that a
        rubber-band has completed for the main frame to be triggered for all frames.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::didStartRubberBandForFrame):
        (WebCore::ChromeClient::didCompleteRubberBandForFrame):
        (WebCore::ChromeClient::didStartAnimatedScroll):
        (WebCore::ChromeClient::didCompleteAnimatedScroll):
        * page/FrameView.cpp:
        (WebCore::FrameView::didStartRubberBand):
        (WebCore::FrameView::didCompleteRubberBand):
        (WebCore::FrameView::didStartAnimatedScroll):
        (WebCore::FrameView::didCompleteAnimatedScroll):
        * page/FrameView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::didStartRubberBand):
        (WebCore::ScrollableArea::didStartAnimatedScroll):
        (WebCore::ScrollableArea::didCompleteAnimatedScroll):
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollAnimationHelperDelegate _immediateScrollToPoint:]):
        (WebCore::ScrollAnimatorMac::scroll):
        (WebCore::ScrollAnimatorMac::immediateScrollToPointForScrollAnimation):
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):

2011-06-04  Martin Robinson  <mrobinson@igalia.com>

        Touch a file to try to fix the GTK+ build on the 32-bit bot.

        * testing/Internals.idl: Touch this IDL file in an effort to fix the build.

2011-06-04  Martin Robinson  <mrobinson@igalia.com>

        Fix the GTK+ build.

        * bindings/gobject/GNUmakefile.am: Make the GObject build less noisy.

2011-06-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Convert file <input> to use the new shadow DOM model
        https://bugs.webkit.org/show_bug.cgi?id=59005

        Refactoring, covered by existing tests.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId): Removed FILE_UPLOAD_BUTTON pseudoId and all references to it.
        (WebCore::nameToPseudoTypeMap): Ditto.
        (WebCore::CSSSelector::extractPseudoType): Ditto.
        * css/CSSSelector.h: Ditto.
        * css/html.css:
        (input[type="button"], input[type="submit"], input[type="reset"]): Moved -webkit-file-upload-button to its own rule.
        (input[type="file"]::-webkit-file-upload-button): Added and moved all previously hard-coded properties there.
        * html/FileInputType.cpp:
        (WebCore::UploadButtonElement::create): Added.
        (WebCore::UploadButtonElement::UploadButtonElement): Added.
        (WebCore::UploadButtonElement::shadowPseudoId): Added.
        (WebCore::FileInputType::createShadowSubtree): Added.
        * html/FileInputType.h: Added createShadowSubtree decl.
        * page/DragController.cpp:
        (WebCore::asFileInput): Changed the logic to use new shadow DOM.
        * rendering/RenderFileUploadControl.cpp: Removed UploadButton class.
        (WebCore::RenderFileUploadControl::~RenderFileUploadControl): Removed initializer for m_button.
        (WebCore::RenderFileUploadControl::updateFromElement): Removed attachment logic that's no longer necessary.
        (WebCore::nodeWidth): Added a helper.
        (WebCore::RenderFileUploadControl::maxFilenameWidth): Changed to use uploadButton and nodeWidth.
        (WebCore::RenderFileUploadControl::paintObject): Ditto.
        (WebCore::RenderFileUploadControl::uploadButton): Added a helper to retrieve the button.
        (WebCore::RenderFileUploadControl::buttonValue): Changed to use uploadButton.
        * rendering/RenderFileUploadControl.h: Changed decls.
        * rendering/style/RenderStyleConstants.h: Removed FILE_UPLOAD_BUTTON decls.

2011-06-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        Input value sanitization for text fields is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=62061
        <rdar://problem/9553273>

        Newline characters should be removed according to HTML5, not replaced with spaces.
        This also matches Safari 5 behavior.

        * html/TextFieldInputType.cpp:
        (WebCore::isASCIILineBreak): A functor for removeCharacters().
        (WebCore::limitLength): Do one thing at once.
        (WebCore::TextFieldInputType::sanitizeValue): Sanitization removes newlines.
        (WebCore::TextFieldInputType::handleBeforeTextInsertedEvent): Moved (somewhat surprising)
        code that replaces newlines with spaces here.

2011-06-04  Jeffrey Pfau  <jpfau@apple.com>

        Reviewed by Beth Dakin.

        Crash in WebCore::RenderMathMLSubSup::baselinePosition()
        https://bugs.webkit.org/show_bug.cgi?id=57897

        Simple patch adding NULL checks in each function.
        Test: mathml/msubsup-remove-children.xhtml

        * rendering/mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::stretchToHeight):
        (WebCore::RenderMathMLSubSup::baselinePosition):

2011-06-04  Nico Weber  <thakis@chromium.org>

        Reviewed by James Robinson.

        Give IDBBackingStore::Transaction a virtual destructor
        https://bugs.webkit.org/show_bug.cgi?id=62063

        IDBLevelDBBackingStore::createTransaction() hands out a
        PassRefPtr<IDBBackingStore::Transaction>, which means the missing
        virtual destructor is a real bug.

        * storage/IDBBackingStore.h:
        (WebCore::IDBBackingStore::Transaction::~Transaction):

2011-06-04  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Convert RenderBox::overflowClipRect to IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=62032

        Covered by existing tests.

        * editing/Editor.cpp:
        (WebCore::Editor::insideVisibleArea):
        * platform/graphics/IntRect.h:
        (WebCore::IntRect::contract):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::pushContentsClip):
        (WebCore::RenderBox::overflowClipRect):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::repaintBlockSelectionGaps):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::clipBox):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::overflowClipRect):
        (WebCore::RenderTable::nodeAtPoint):
        * rendering/RenderTable.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paint):

2011-06-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        V8Proxy::disconnectFrame doesn't do anything
        https://bugs.webkit.org/show_bug.cgi?id=62051

        Dead code should die.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::~ScriptController):
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8Proxy.h:

2011-06-04  Nico Weber  <thakis@chromium.org>

        Reviewed by James Robinson.

        Make the destructors of DataTransferItem and DataTransferItems virtual
        https://bugs.webkit.org/show_bug.cgi?id=62052

        Clang has grown a new warning that warns on |delete ptr| if ptr's
        class is non-final, has virtual methods, but no virtual destructor.
        This warning finds real bugs, so we want to keep it enabled. However,
        it also warns about DataTransferItem[s]. Since these are subclassed,
        they can't be made final, so make their destructors virtual. (Maybe
        clang's warning even points out an actual bug here.)

        * dom/DataTransferItem.h:
        (WebCore::DataTransferItem::~DataTransferItem):
        * dom/DataTransferItems.h:
        (WebCore::DataTransferItems::~DataTransferItems):

2011-06-04  Nico Weber  <thakis@chromium.org>

        Reviewed by James Robinson.

        [chromium] Make LayerPainterChromium destructor virtual
        https://bugs.webkit.org/show_bug.cgi?id=62056

        LayerTextureUpdaterCanvas has an OwnPtr<LayerPainterChromium>, which
        means that without this patch, the destructor of classes implementing
        LayerPainterChromium wasn't called correctly in that case.

        * platform/graphics/chromium/LayerPainterChromium.h:
        (WebCore::LayerPainterChromium::~LayerPainterChromium):

2011-06-04  Emil A Eklund  <eae@chromium.org>

        Reviewed by Andreas Kling.

        Fix IntRect::expand(const IntSize& size)
        https://bugs.webkit.org/show_bug.cgi?id=62042

        No new tests.

        * platform/graphics/IntRect.h:
        (WebCore::IntRect::expand):
        Fix IntRect::expand to expand the size rather than move the location.
        Currently unused.

2011-06-03  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        ResourceHandleMac should always respond to an authentication challenge
        https://bugs.webkit.org/show_bug.cgi?id=61667

        I don't know if this can actually happen in practice, so no new tests.

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveAuthenticationChallenge:]):
        Cancel authentication challenge if we don't have a client. We must always respond to the
        challenge to release the connection, and there is nothing else to do in this state anyway.

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

        Try to fix the Apple LLVM Compiler build after r88087.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintMask):
        * rendering/RenderTableCell.h:

2011-06-03  Chris Rogers  <crogers@google.com>

        Unreviewed build fix.

        Fix clang build - take 2
        https://bugs.webkit.org/show_bug.cgi?id=62081

        * webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::valuesForTimeRangeImpl):

2011-06-03  Chris Rogers  <crogers@google.com>

        Unreviewed clang build fix.

        Fix clang build
        https://bugs.webkit.org/show_bug.cgi?id=62080

        * webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::valuesForTimeRangeImpl):

2011-06-03  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch paintMask and paintObject to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=62077

        Switching paintMask and paintObject to use IntPoint for their paint offset instead of
        a pair of ints. paintObject is still on tx/ty, but paintMask was converted to IntSize
        passed by value -- bringing it in-line with the agreed-upon convention of a const IntPoint&.

        No new tests since this is simple refactoring.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintMask):
        (WebCore::RenderBox::pushContentsClip):
        (WebCore::RenderBox::popContentsClip):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::paintObject):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintMask):
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintObject):
        * rendering/RenderListBox.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::paint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint):
        (WebCore::RenderTable::paintObject):
        (WebCore::RenderTable::paintMask):
        * rendering/RenderTable.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paint):
        (WebCore::RenderTableSection::paintObject):
        * rendering/RenderTableSection.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::paintPlaceholder):
        (WebCore::RenderTextControl::paintObject):
        * rendering/RenderTextControl.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paint):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):

2011-06-03  Cary Clark  <caryclark@google.com>

        Reviewed by Eric Seidel.

        Support FontCustomPlatformData on Skia-Mac-Chrome variant
        https://bugs.webkit.org/show_bug.cgi?id=62040

        Canvas text is only recognized by Skia if it is registered
        by creating a new SkTypeface. Skia uses CGFont to measure
        and render the glyphs, then takes care of managing the glyph
        cache.

        Skia on Mac Chrome is not yet enabled, so this change
        does not affect existing code, and requires no new tests.

        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::RemoteFontStream::RemoteFontStream):
        (WebCore::RemoteFontStream::~RemoteFontStream):
        (WebCore::RemoteFontStream::rewind):
        (WebCore::RemoteFontStream::read):
        Turn the buffer into a stream. This is identical to
        the implementation in skia/FontCustomPlatformData.cpp.
        While that file could be modified instead of this one,
        it was simpler to add SkTypeface streaming to this instead
        of adding all CGFont support to the skia platform file.

        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        Release the SkTypeface reference.

        (WebCore::createFontCustomPlatformData):
        Associate the buffer stream with a SkTypeface so Skia
        can find the custom font data.

        * platform/graphics/mac/FontCustomPlatformData.h:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        Add a slot to hold the SkTypeface.

2011-06-03  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Brian Weinstein.

        HistoryItem children persist across page loads
        https://bugs.webkit.org/show_bug.cgi?id=62071
        <rdar://problem/9552129>
        
        Not testable since there's no way to check for the presence/absence
        of children for a HistoryItem.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::reset): Call clearChildren when we're reusing a HistoryItem.

2011-06-03  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Allow existing AudioParams to use scheduled parameter changes
        https://bugs.webkit.org/show_bug.cgi?id=62046

        No new tests since audio API is not yet implemented.

        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::processWithGainFrom):
        (WebCore::AudioBus::copyWithSampleAccurateGainValuesFrom):
        * platform/audio/AudioBus.h:
        * webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
        * webaudio/AudioGainNode.cpp:
        (WebCore::AudioGainNode::AudioGainNode):
        (WebCore::AudioGainNode::process):
        * webaudio/AudioGainNode.h:
        * webaudio/HighPass2FilterNode.cpp:
        (WebCore::HighPass2FilterNode::HighPass2FilterNode):
        * webaudio/LowPass2FilterNode.cpp:
        (WebCore::LowPass2FilterNode::LowPass2FilterNode):

2011-06-03  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Biquad filter coefficient naming is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=62053

        No new tests since audio API is not yet implemented.

        * platform/audio/Biquad.cpp:
        (WebCore::Biquad::Biquad):
        (WebCore::Biquad::process):
        (WebCore::Biquad::processFast):
        (WebCore::Biquad::setLowpassParams):
        (WebCore::Biquad::setHighpassParams):
        (WebCore::Biquad::setLowShelfParams):
        (WebCore::Biquad::setZeroPolePairs):
        * platform/audio/Biquad.h:

2011-06-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        DOMWindow::setLocation doesn't understand that DOMWindow can be inactive
        https://bugs.webkit.org/show_bug.cgi?id=62057

        This code gets confused when dealing with inactive DOMWindows.  We
        should just block inactive DOMWindows because there's no compatibility
        reason to support them in this code path.

        Test: http/tests/security/xss-DENIED-contentWindow-eval.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::isInsecureScriptAccess):

2011-05-31  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Ryosuke Niwa.

        [GTK] Support smart replace for the pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=61734

        Add smart replace support to WebCore and add hooks for it in WebKit
        via DumpRenderTreeSupportGtk. When a platform supports smart replace,
        WebCore will remove extra spaces that appear when pasting text. Eventually
        WebKitGTK+ may want to expose this in the public API.

        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeSelection): Now pass whether or not to use smart replace
        when calling writeSelection.
        (WebCore::Pasteboard::canSmartReplace): Added an implementation that checks the clipboard
        for whether or not it supports smart paste.
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::initGdkAtoms): Added initialization for smart replace atom.
        (WebCore::PasteboardHelper::fillSelectionData): Added no-op handler for smart replace atom.
        (WebCore::PasteboardHelper::targetListForDataObject): Properly handle new smart replace parameter.
        (WebCore::PasteboardHelper::writeClipboardContents): Properly handle new smart replace parameter.
        (WebCore::PasteboardHelper::clipboardContentSupportsSmartReplace): Added helper for Pasteboard.
        * platform/gtk/PasteboardHelper.h: Add new method definition.

2011-06-03  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch paintCell to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=62033

        Switching paintCell to take an IntPoint representing the paint offset
        instead of a pair of ints.

        No new tests since this is simple refactoring.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paintCell):
        (WebCore::RenderTableSection::paintObject):
        * rendering/RenderTableSection.h:

2011-06-03  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Dimitri Glazkov.

        Teach Gtk build about window.internals
        https://bugs.webkit.org/show_bug.cgi?id=61071

        * GNUmakefile.am: Add new internals directories to the VPATH
        (for idl processing) and the include list.

2011-06-03  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch paintBackgroundsBehindCell to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=62031

        Switching paintBackgroundsBehindCell to take an IntPoint representing
        the paint offset instead of a pair of ints.

        No new tests as this is simple refactoring.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        (WebCore::RenderTableCell::paintBoxDecorations):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::paint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paintCell):

2011-06-03  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch paintCaret and paintDragCaret to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=62037

        Switching paintCaret and paintDragCaret to use an IntPoint representing
        the paint offset instead of a pair of ints.

        No new tests since this is simple refactoring.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::paintCaret):
        (WebCore::CaretBase::paintCaret):
        (WebCore::DragCaretController::paintDragCaret):
        * editing/FrameSelection.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::positionForPoint):
        (WebCore::RenderBlock::offsetForContents):
        * rendering/RenderBlock.h:

2011-06-03  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch paintItemForeground and paintItemForeground to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=62035

        Switching paintItemFore/Background to use IntPoint instead of a pair of ints.

        No new tests since this is simple refactoring.

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintObject):
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        * rendering/RenderListBox.h:

2011-06-03  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        To support building namespaced Qt, we require that forward-declarations
        of Qt classes be wrapped in QT_BEGIN_NAMESPACE and QT_END_NAMESPACE.

        * platform/network/qt/QtMIMETypeSniffer.h:

2011-06-03  Rob Buis  <rbuis@rim.com>

        Reviewed by Nikolas Zimmermann.

        Cleanup member variable usage in svg/animation classes
        https://bugs.webkit.org/show_bug.cgi?id=62029

        Cleanup member variables.

        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::SMILTimeContainer):
        (WebCore::SMILTimeContainer::sampleAnimationAtTime):
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SMILTimeContainer.h:
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::SVGSMILElement):
        * svg/animation/SVGSMILElement.h:

2011-06-03  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioParam parameter scheduling implementation
        https://bugs.webkit.org/show_bug.cgi?id=61830

        No new tests since audio API is not yet implemented.

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * webaudio/AudioParam.cpp:
        (WebCore::AudioParam::value):
        (WebCore::AudioParam::smoothedValue):
        (WebCore::AudioParam::smooth):
        (WebCore::AudioParam::calculateSampleAccurateValues):
        * webaudio/AudioParam.h:
        (WebCore::AudioParam::setContext):
        (WebCore::AudioParam::context):
        (WebCore::AudioParam::setValueAtTime):
        (WebCore::AudioParam::linearRampToValueAtTime):
        (WebCore::AudioParam::exponentialRampToValueAtTime):
        (WebCore::AudioParam::setTargetValueAtTime):
        (WebCore::AudioParam::setValueCurveAtTime):
        (WebCore::AudioParam::cancelScheduledValues):
        (WebCore::AudioParam::hasTimelineValues):
        * webaudio/AudioParam.idl:
        * webaudio/AudioParamTimeline.cpp: Added.
        (WebCore::AudioParamTimeline::setValueAtTime):
        (WebCore::AudioParamTimeline::linearRampToValueAtTime):
        (WebCore::AudioParamTimeline::exponentialRampToValueAtTime):
        (WebCore::AudioParamTimeline::setTargetValueAtTime):
        (WebCore::AudioParamTimeline::setValueCurveAtTime):
        (WebCore::isValidNumber):
        (WebCore::AudioParamTimeline::insertEvent):
        (WebCore::AudioParamTimeline::cancelScheduledValues):
        (WebCore::AudioParamTimeline::valueForContextTime):
        (WebCore::AudioParamTimeline::valuesForTimeRange):
        (WebCore::timeToSampleFrame):
        (WebCore::AudioParamTimeline::valuesForTimeRangeImpl):
        * webaudio/AudioParamTimeline.h: Added.
        (WebCore::AudioParamTimeline::AudioParamTimeline):
        (WebCore::AudioParamTimeline::hasValues):
        (WebCore::AudioParamTimeline::ParamEvent::ParamEvent):
        (WebCore::AudioParamTimeline::ParamEvent::type):
        (WebCore::AudioParamTimeline::ParamEvent::value):
        (WebCore::AudioParamTimeline::ParamEvent::time):
        (WebCore::AudioParamTimeline::ParamEvent::timeConstant):
        (WebCore::AudioParamTimeline::ParamEvent::duration):
        (WebCore::AudioParamTimeline::ParamEvent::curve):

2011-06-01  Jer Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        Flash of broken page when exiting full screen at jerryseinfeld.com
        https://bugs.webkit.org/show_bug.cgi?id=61897
        <rdar://problem/9522985>

        Test: fullscreen/full-screen-placeholder.html

        Entering full-screen mode is causing the page layout to change because the full-screen
        element is taken out of the normal flow.  To counteract this effect, insert a placeholder
        block as a parent of the full-screen renderer with the same size and style as the full-screen
        element pre-full-screen.

        Only create a placeholder for block-level elements; the technique required for inline elements
        would be vastly more complicated.

        * dom/Document.cpp:
        (WebCore::Document::webkitWillEnterFullScreenForElement): Create a placeholder
            based on the size and style of the full-screen element.
        (WebCore::Document::setFullScreenRenderer): Persist the placeholder size and 
            style across new renderers.
        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::RenderFullScreen): Added ivar.
        (RenderFullScreen::destroy): Make sure to safely destroy our placeholder.
        (RenderFullScreen::createPlaceholder): Added.
        * rendering/RenderFullScreen.h:
        (WebCore::RenderFullScreen::placeholder): Ivar accessor.

2011-06-03  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch paintBoxDecorations to IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=61968

        Switching paintBoxDecorations to take an IntPoint representing
        the paint offset instead of a pair of ints. Also cleaning up
        some duplicated code in InlineFlowBox related to constraining
        the paint rect to the linetop and linebottom.

        No new tests since this is just refactoring.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        (WebCore::InlineFlowBox::constrainToLineTopAndBottomIfNeeded): Added
        to remove duplicate code in paintBoxDecorations and paintMask.
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        * rendering/RenderBox.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderFieldset.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintObject):
        (WebCore::RenderTable::paintBoxDecorations):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBoxDecorations):
        * rendering/RenderTableCell.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paint):

2011-06-03  Doreen Jiang  <doreen.jiang@nokia.com>

        Reviewed by Benjamin Poulain.

        [Qt]The minimum size of the select menu list is incorrect for qtwebkit
        https://bugs.webkit.org/show_bug.cgi?id=56752

        The minimum width of the select-box is calculated to be as small as possible 
        instead of hardcoded value (width of 7 characters) in minimumMenuListSize() function
        This will avoid overapping the select lists in popular websites.

        Test: fast/forms/selectlist-minsize.html

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

2011-06-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Prevent event dispatch for events with related target when host is the target.
        https://bugs.webkit.org/show_bug.cgi?id=61979

        Turns out, even if we trim the ancestor chain to 0, the event is still dispatched during AT_TARGET.
        So might as well be explicit about what we are trying to do and add a flag to prevent dispatch in these cases.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::adjustToShadowBoundaries): Added preventing dispatch when the ancestor chain is trimmed to nothing.
        (WebCore::EventDispatcher::EventDispatcher): Added initializer.
        (WebCore::EventDispatcher::dispatchEvent): Added a check to prevent dispatch.
        * dom/EventDispatcher.h: Added a def.

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

        Mac build fix.

        * WebCore.xcodeproj/project.pbxproj:

2011-06-03  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Eric Seidel.

        [Chromium] Call setToolTipText() in WebPopupMenuImpl mouse move handler to show tool tip in select popup window.
        https://bugs.webkit.org/show_bug.cgi?id=61260
        http://code.google.com/p/chromium/issues/detail?id=12721

        Manual test: select-popup-tooltip-test.html

        * manual-tests/select-popup-tooltip-test.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::getSelectedItemToolTip): Get selected item tooltip string according to hovering mouse position.
        * platform/chromium/PopupMenuChromium.h: Add getSelectedItemToolTip() declaration.

2011-06-03  Rob Buis  <rbuis@rim.com>

        Reviewed by Nikolas Zimmermann.

        Creating <animateMotion> elements via javascript do not execute
        https://bugs.webkit.org/show_bug.cgi?id=34301

        Enable constructors for SVGMPathElement and SVGAnimateMotionElement.

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/DOMWindow.idl:

2011-06-03  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        IndexedDB: Clean-up use of INT64_MAX in LevelDB back-end
        https://bugs.webkit.org/show_bug.cgi?id=62009

        This constant should only be needed inside IDBLevelDBCoding.cpp.

        No new functionality, no new tests.

        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::getNewDatabaseId):
        (WebCore::IDBLevelDBBackingStore::getObjectStores):
        (WebCore::getNewObjectStoreId):
        (WebCore::IDBLevelDBBackingStore::deleteObjectStore):
        (WebCore::getNewIndexId):
        * storage/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::DatabaseFreeListKey::encodeMaxKey):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::encodeMaxKey):
        (WebCore::IDBLevelDBCoding::IndexMetaDataKey::encodeMaxKey):
        (WebCore::IDBLevelDBCoding::ObjectStoreFreeListKey::encodeMaxKey):
        (WebCore::IDBLevelDBCoding::IndexFreeListKey::encodeMaxKey):
        * storage/IDBLevelDBCoding.h:

2011-06-03  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Benjamin Poulain.

        [Qt] Build flag for experimental ICU library support
        https://bugs.webkit.org/show_bug.cgi?id=60786

        Adds a build-time flag (CONFIG+=use_system_icu) that enables experimental 
        ICU powered Unicode support. 

        No new tests as no new features added.

        * WebCore.pri: Removed text_breaking_with_icu CONFIG flag. 
        * WebCore.pro: Added TextCodecICU.cpp and qt/TextBreakIteratorInternalICUQt.cpp.
        * editing/qt/SmartReplaceQt.cpp:
        * features.pri: Support for use_system_icu CONFIG flag.
        * platform/text/TextCodecICU.cpp: Guard with USE(ICU_UNICODE). 
        * platform/text/qt/TextBreakIteratorInternalICUQt.cpp: Added.
        (WebCore::Q_GLOBAL_STATIC_WITH_INITIALIZER):
        (WebCore::currentSearchLocaleID):
        (WebCore::currentTextBreakLocaleID):
        * platform/text/qt/TextBreakIteratorQt.cpp: Moved out currentTextBreakLocaleID(). 
        (WebCore::isTextBreak):
        * platform/text/qt/TextCodecQt.cpp: Guard with USE(QT4_UNICODE). 
        (WebCore::TextCodecQt::registerEncodingNames):
        (WebCore::TextCodecQt::registerCodecs):

2011-06-03  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Frame flattening is broken with nested frames
        https://bugs.webkit.org/show_bug.cgi?id=61491

        Do not flatten offscreen iframes during frame flattening, as flattening might make them visible.

        Test: fast/frames/flattening/iframe-flattening-out-of-view.html
              fast/frames/flattening/iframe-flattening-out-of-view-and-scroll.html
              fast/frames/flattening/iframe-flattening-out-of-view-scroll-and-relayout.html

        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::flattenFrame):

2011-06-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Andreas Kling.

        Incorrect embedded document replaced size calculation for box-sizing: border-box
        https://bugs.webkit.org/show_bug.cgi?id=62007

        When using <object style="box-sizing: border-box" data="foo.svg"/> to embed foo.svg
        which has an intrinsic width/height, the embedded document intrinsic size is incorrect.

        RenderPart::computeEmbeddedDocumentReplacedWidth/Height has to ask the content renderer for the replaced width/height not ourselves.

        Tests: svg/as-image/img-preserveAspectRatio-support-2.html
               svg/as-object/object-box-sizing-no-width-height.html

        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::computeEmbeddedDocumentReplacedWidth):
        (WebCore::RenderPart::computeEmbeddedDocumentReplacedHeight):

2011-06-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r88004.
        http://trac.webkit.org/changeset/88004
        https://bugs.webkit.org/show_bug.cgi?id=62008

        This patch broke 4 tests in the GTK bots (Requested by
        msanchez on #webkit).

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::handleScrolledToAnchor):

2011-06-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Andreas Kling.

        Zooming <object style="width/height: auto" data="foo.svg"/> doesn't work as expected
        https://bugs.webkit.org/show_bug.cgi?id=62005

        Zooming an object with auto size, that references a svg with fixed size was broken. The svg size stayed the same.
        Get rid of the dependency between RenderSVGRoot and SVGSVGElement::currentScale(), always ask for the effective
        zoom in the RenderStyle instead of asking SVGSVGElement.

        The SVGSVGElement::currentScale()/setCurrentScale() methods are now only used when called from the bindings (eg. JS).
        They only take effect on the outermost <svg> element in standalone documents, otherwhise they are no-ops.

        Test: svg/zoom/page/zoom-svg-through-object-with-auto-size.html

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeIntrinsicWidth):
        (WebCore::RenderSVGRoot::computeIntrinsicHeight):
        (WebCore::RenderSVGRoot::localToBorderBoxTransform):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::currentScale):
        (WebCore::SVGSVGElement::setCurrentScale):
        * svg/SVGSVGElement.h:

2011-06-03  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        Focus and caret position should be updated when same-page links are followed
        https://bugs.webkit.org/show_bug.cgi?id=59737

        Update the caret position to the anchor's position after scrolling.

        This behavior is specific to the Gtk port and requested because of
        accessibility needs, that's why it's implemented in AXObjectCache.

        Test: platform/gtk/accessibility/caret-browsing-anchor-followed.html

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::handleScrolledToAnchor): Make sure the
        caret is updated to be in the anchor's position after scrolling.

2011-06-03  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Kent Tamura.

        Cloned keygen shadows should have -webkit-keygen-select pseudoclass.
        https://bugs.webkit.org/show_bug.cgi?id=61984

        When cloneNode's tag name-based cloning algorithm clones the
        KeygenSelectElements of a keygen shadow as select elements. These
        lack the -webkit-keygen-select pseudoclass.

        Test: fast/html/clone-keygen.html

        * html/HTMLKeygenElement.cpp:
        (WebCore::KeygenSelectElement::cloneElementWithoutAttributesAndChildren): Create a KeygenSelectElement when being cloned.

2011-06-02  MORITA Hajime  <morrita@google.com>
        
        Unreviewed ChangeLog fix.
        
2011-06-03  Peter Varga  <pvarga@webkit.org>

        Rubber-stamped by Csaba Osztrogonác.
        
        [Qt][V8] Buildfix after r87988.

        No new tests needed.

        * bindings/v8/ScheduledAction.cpp: Add missing guards.
        (WebCore::ScheduledAction::execute):
        * bindings/v8/V8EventListener.cpp: Ditto.
        (WebCore::V8EventListener::callListenerFunction):

2011-06-03  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Kent Tamura.

        Cloned range input sliders should be SliderThumbElements, not divs.
        https://bugs.webkit.org/show_bug.cgi?id=61982

        Test: fast/html/clone-range.html

        * html/shadow/SliderThumbElement.h:
        (WebCore::SliderThumbElement::cloneElementWithoutAttributesAndChildren): Create a SliderThumbElement when being cloned.

2011-06-02  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: add an option for automatically attaching to new workers
        https://bugs.webkit.org/show_bug.cgi?id=61930

        Worker list is extended with a checkbox that makes inspector attach to each
        new worker. Whenever a new worker context starts a new inspector window will
        be opened for it.

        Also worker agent and worker list will be updated when worker context is terminated.

        * inspector/Inspector.json:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::workerContextTerminatedImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::workerContextTerminated):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::~WorkerFrontendChannel):
        (WebCore::InspectorWorkerAgent::create):
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::clearFrontend):
        (WebCore::InspectorWorkerAgent::setAutoconnectToWorkers):
        (WebCore::InspectorWorkerAgent::didStartWorkerContext):
        (WebCore::InspectorWorkerAgent::workerContextTerminated):
        * inspector/InspectorWorkerAgent.h:
        * inspector/front-end/WorkerManager.js:
        (WebInspector.WorkerManager.prototype._workerCreated):
        (WebInspector.WorkerManager.prototype._workerTerminated):
        (WebInspector.WorkerManager.prototype.openWorkerInspector):
        (WebInspector.WorkerManager.prototype._openInspectorWindow):
        (WebInspector.WorkerManager.prototype.reset):
        (WebInspector.WorkerMessageForwarder.prototype.workerCreated):
        (WebInspector.WorkerMessageForwarder.prototype.workerTerminated):
        * inspector/front-end/WorkersSidebarPane.js:
        (WebInspector.WorkerListSidebarPane):
        (WebInspector.WorkerListSidebarPane.prototype._workerAdded):
        (WebInspector.WorkerListSidebarPane.prototype._workerRemoved):
        (WebInspector.WorkerListSidebarPane.prototype._workersCleared):
        (WebInspector.WorkerListSidebarPane.prototype._addWorker):
        (WebInspector.WorkerListSidebarPane.prototype._workerItemClicked):
        (WebInspector.WorkerListSidebarPane.prototype._autoattachToWorkersClicked):
        * inspector/front-end/inspector.js:
        (WebInspector.reset):

2011-06-02  Hayato Ito  <hayato@chromium.org>

        Reviewed by Ryosuke Niwa.

        Show a shadow root node itself in Node::traverseNextNodeAcrossFrame.
        https://bugs.webkit.org/show_bug.cgi?id=61992

        It's better to show a shadow root node itself for debugging.
        Skipping it didn't add any values.

        No new tests since the function is only available in debug builds.

        * dom/Node.cpp:
        (WebCore::traverseNextNodeAcrossFrame):

2011-06-02  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r87901.
        http://trac.webkit.org/changeset/87901
        https://bugs.webkit.org/show_bug.cgi?id=61894

        Might be responsible for performance regression on Chromium page cyclers, reverting to see...

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::didTellClientAboutLoad):
        (WebCore::DocumentLoader::haveToldClientAboutLoad):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):

2011-06-02  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch paintReplaced to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=61891

        Switching paintReplaced to use IntPoint to represent the paint offset instead
        of a pair of ints.

        Also renaming the IntPoint flavor of IntRect::move to moveBy to clear up the
        fact that the IntPoint is added as an offset as opposed to being relocated
        to that point.

        No tests because this is just a refactoring.

        * page/FrameView.cpp:
        (WebCore::FrameView::invalidateScrollbarRect):
        (WebCore::FrameView::convertFromRenderer):
        (WebCore::FrameView::convertToRenderer):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::invalidatePart):
        * platform/graphics/gpu/Texture.cpp
        (WebCore::Texture::updateSubRect)
        * platform/graphics/IntRect.h:
        (WebCore::IntRect::moveBy):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::paint):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::logicalRectToPhysicalRect):
        (WebCore::RenderBlock::selectionGaps):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::offsetFromContainer):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::localCaretRect):
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::paint):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintReplaced):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderImage.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::culledInlineVisualOverflowBoundingBox):
        * rendering/RenderLayer.cpp:
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::RenderLayer::paintScrollCorner):
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::paintChildLayerIntoColumns):
        (WebCore::RenderLayer::hitTestChildLayerColumns):
        (WebCore::RenderLayer::boundingBox):
        (WebCore::RenderLayer::setBackingNeedsRepaintInRect):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::paintScrollbar):
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        (WebCore::RenderLayerCompositor::layerWillBeRemoved):
        (WebCore::paintScrollbar):
        (WebCore::RenderLayerCompositor::paintContents):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::controlClipRect):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderReplaced.h:
        (WebCore::RenderReplaced::paintReplaced):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeRectForRepaint):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::controlClipRect):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::paintReplaced):
        * rendering/RenderVideo.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):

2011-06-02  James Robinson  <jamesr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium][V8] Add trace events for timer fires and event listener dispatches
        https://bugs.webkit.org/show_bug.cgi?id=61977

        Adds TRACE_EVENT macro around timer and event listener dispatches.  When tracing (a chromium feature) is
        enabled, this allows correlating these events with painting, compositing, and everything else in chromium that
        is traced.  When tracing is disabled, this macro does nothing useful.  Trace points are very cheap when tracing
        is disabled so this should have no performance impact for non-developers.

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/v8/V8EventListener.cpp:
        (WebCore::V8EventListener::callListenerFunction):

2011-06-02  John Bates  <jbates@google.com>

        Reviewed by James Robinson.

        DrawingBufferChromium cleanup:
        - Correct FIXME comment about synchronization.
        - Remove unnecessary DrawingBufferInternal indirection struct
          and its unused offscreenColorTexture member.
        https://bugs.webkit.org/show_bug.cgi?id=61953

        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::~DrawingBuffer):
        (WebCore::DrawingBuffer::publishToPlatformLayer):
        (WebCore::DrawingBuffer::didReset):
        (WebCore::DrawingBuffer::platformLayer):
        * platform/graphics/gpu/DrawingBuffer.h:

2011-06-02  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: ResourceCookiesView.resize() is missing
        https://bugs.webkit.org/show_bug.cgi?id=61868

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

2011-06-02  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION(r87014): Cloned text <input> doesn't work well.
        https://bugs.webkit.org/show_bug.cgi?id=61909

        The default implementation of Element::cloneNode() creates a clone
        node by Document::createElement(). So, if a customized class is used for
        shadow nodes, cloneNode() doesn't create a node of the correct class.
        Such custom classes need to override Element::
        cloneElementWithoutAttributesAndChildren().

        TextFieldInputType and SearchInputType had references to shadow nodes
        initialized in createShadowSubtree(). However createShadowSubtree() is
        not called if the host node is cloned. The accessors for shadow nodes
        should search a shadow tree.

        Test: fast/forms/textfield-clone.html

        * html/SearchInputType.cpp:
          Remove data members for shadow nodes, and the accessors search the
          shadow tree for the requested node by TreeScope::getElementById().
        (WebCore::SearchInputType::SearchInputType):
        (WebCore::innerBlockId):
        (WebCore::resultButtonId):
        (WebCore::cancelButtonId):
        (WebCore::SearchInputType::createShadowSubtree):
        (WebCore::SearchInputType::innerBlockElement):
        (WebCore::SearchInputType::resultsButtonElement):
        (WebCore::SearchInputType::cancelButtonElement):
        * html/SearchInputType.h:
        * html/TextFieldInputType.cpp: ditto.
        (WebCore::TextFieldInputType::TextFieldInputType):
        (WebCore::TextFieldInputType::innerTextId):
        (WebCore::spinButtonId):
        (WebCore::TextFieldInputType::speechButtonId):
        (WebCore::TextFieldInputType::appendChildAndSetId):
        (WebCore::TextFieldInputType::createShadowSubtree):
        (WebCore::TextFieldInputType::getShadowElementById):
        (WebCore::TextFieldInputType::innerTextElement):
        (WebCore::TextFieldInputType::innerSpinButtonElement):
        (WebCore::TextFieldInputType::speechButtonElement):
        * html/TextFieldInputType.h:
        * html/shadow/TextControlInnerElements.cpp:
          Overrides cloneElementWithoutAttributesAndChildren() in order that cloneNode()
          produces an instance of the correct class.
        (WebCore::TextControlInnerElement::cloneElementWithoutAttributesAndChildren):
        (WebCore::TextControlInnerTextElement::cloneElementWithoutAttributesAndChildren):
        (WebCore::SearchFieldResultsButtonElement::cloneElementWithoutAttributesAndChildren):
        (WebCore::SearchFieldCancelButtonElement::cloneElementWithoutAttributesAndChildren):
        (WebCore::SpinButtonElement::cloneElementWithoutAttributesAndChildren):
        (WebCore::InputFieldSpeechButtonElement::cloneElementWithoutAttributesAndChildren):
        * html/shadow/TextControlInnerElements.h:

2011-05-28  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Remove PasteboardHelperGtk
        https://bugs.webkit.org/show_bug.cgi?id=61690

        Remove the virtual methods from PasteboardHelper, so that PasteboardHelperGtk
        can be removed. Since the GtkClipboard IDs are verified to be the same between
        WebKit and WebCore we no longer need to communicate from WebCore to WebKit to
        get them.

        No new tests. This is just a code refactor.

        * platform/Pasteboard.h: Remove GTK+ specific methods. They are no longer needed.
        * platform/gtk/ClipboardGtk.cpp: Remove the m_helper member and access the
        PasteboardHelper singleton directly.
        * platform/gtk/ClipboardGtk.h: Ditto.
        * platform/gtk/PasteboardGtk.cpp: Ditto.
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::removeMarkupPrefix): Remove an extra line.
        (WebCore::PasteboardHelper::defaultPasteboardHelper): Added this static getter
        for the singleton.
        (WebCore::PasteboardHelper::PasteboardHelper): Moved the contents of initTargetList here.
        (WebCore::PasteboardHelper::getCurrentClipboard): Instead of talking with WebKit to determine
        whether or not to use the primary selection clipboard, just use our new member.
        (WebCore::PasteboardHelper::fillSelectionData): Use our local enum to get the ID.
        (WebCore::PasteboardHelper::targetListForDataObject): Ditto.
        (WebCore::PasteboardHelper::dropAtomsForContext): Ditto.
        (WebCore::getClipboardContentsCallback): Ditto.
        * platform/gtk/PasteboardHelper.h: PasteboardHelper now keeps track of whether or
        not to use the primary selection clipboard internally.
        (WebCore::PasteboardHelper::setUsePrimarySelectionClipboard): Added.
        (WebCore::PasteboardHelper::usePrimarySelectionClipboard): Added.

2011-06-02  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Teach InlineBox about FloatPoint
        https://bugs.webkit.org/show_bug.cgi?id=44412

        Original patch by Eric Seidel. Updated by me.

        This is another step towards more point/size
        usage throughout the rendering tree.

        Added left(), right(), top(), and bottom() methods
        to InlineBox. Removed m_x, and m_y and replaced them
        with a single m_topLeft member.

        No new tests since this is just a refactoring.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::selectionRect):
        (WebCore::EllipsisBox::paintSelection):
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/EllipsisBox.h:
        (WebCore::EllipsisBox::EllipsisBox):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::adjustPosition):
        (WebCore::InlineBox::canAccommodateEllipsis):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::setX):
        (WebCore::InlineBox::x):
        (WebCore::InlineBox::left):
        (WebCore::InlineBox::setY):
        (WebCore::InlineBox::y):
        (WebCore::InlineBox::top):
        (WebCore::InlineBox::topLeft):
        (WebCore::InlineBox::right):
        (WebCore::InlineBox::bottom):
        (WebCore::InlineBox::logicalLeft):
        (WebCore::InlineBox::setLogicalLeft):
        (WebCore::InlineBox::logicalTop):
        (WebCore::InlineBox::setLogicalTop):
        (WebCore::InlineBox::logicalFrameRect):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::frameRectIncludingLineHeight):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::placeEllipsisBox):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::firstRunX):
        (WebCore::RenderText::firstRunY):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeTextRun):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::placeEllipsis):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::positionForPoint):
        * rendering/svg/SVGInlineTextBox.h:
        (WebCore::SVGInlineTextBox::selectionTop):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::closestLeafChildForPosition):

2011-06-02  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Update the behavior of multiple reads for FileReader
        https://bugs.webkit.org/show_bug.cgi?id=61793

        Changed to throw an OperationNotAllowedException with the NOT_ALLOWED_ERR
        status code on any of the read methods that occur when readyState = LOADING.
        Otherwise, calling any of the read methods should work. 

        Test: fast/files/read-file-async.html

        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::setDOMException):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setDOMException):
        * dom/ExceptionCode.cpp:
        (WebCore::getExceptionCodeDescription):
        * dom/ExceptionCode.h:
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::FileReader):
        (WebCore::FileReader::hasPendingActivity):
        (WebCore::FileReader::readAsArrayBuffer):
        (WebCore::FileReader::readAsBinaryString):
        (WebCore::FileReader::readAsText):
        (WebCore::FileReader::readAsDataURL):
        (WebCore::FileReader::readInternal):
        (WebCore::FileReader::abort):
        (WebCore::FileReader::doAbort):
        (WebCore::FileReader::terminate):
        (WebCore::FileReader::start):
        (WebCore::FileReader::didStartLoading):
        (WebCore::FileReader::didFinishLoading):
        (WebCore::FileReader::didFail):
        * fileapi/FileReader.h:
        (WebCore::FileReader::readyState):
        * fileapi/FileReader.idl:
        * fileapi/OperationNotAllowedException.h: Added.
        (WebCore::OperationNotAllowedException::create):
        (WebCore::OperationNotAllowedException::OperationNotAllowedException):
        * fileapi/OperationNotAllowedException.idl: Added.

2011-06-02  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Compositor HUD should respect mapTexSubImage2D returning NULL
        https://bugs.webkit.org/show_bug.cgi?id=61954

        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::draw):

2011-06-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/9539920> and https://bugs.webkit.org/show_bug.cgi?id=61950
        Repro crash loading certain webarchives after r87566.

        Test: webarchive/loading/javascript-url-iframe-crash.html

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL): DocumentWriter::replaceDocument can
          cause the DocumentLoader to be destroyed, so protect it with a Ref here.

2011-06-02  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Adam Barth.

        Adding MHTML generation support to MHTMLArchive.
        https://bugs.webkit.org/show_bug.cgi?id=7169

        * loader/archive/mhtml/MHTMLArchive.cpp:
        (WebCore::generateRandomBoundary):
        (WebCore::replaceNonPrintableCharacters):
        (WebCore::MHTMLArchive::generateMHTMLData):
        * loader/archive/mhtml/MHTMLArchive.h:
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        (WebCore::PageSerializer::serializeCSSStyleSheet):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::append):
        * platform/SharedBuffer.h:

2011-06-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Andreas Kling.

        Share Path code that uses beziers to construct a rounded rect
        https://bugs.webkit.org/show_bug.cgi?id=61960

        Have two methods in Path that construct beziers for rounded
        rects to share the same code.
        
        Make gCircleControlPoint a little more precise, and add
        a comment describing its derivation.
        
        Make use of FloatRect::maxX() and maxY().

        * platform/graphics/Path.cpp:
        (WebCore::Path::addRoundedRect):
        (WebCore::Path::addBeziersForRoundedRect):
        * platform/graphics/Path.h:

2011-06-02  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Enrica Casucci.

        ApplyStyleCommand shouldn't call collapseTextDecorationProperties
        https://bugs.webkit.org/show_bug.cgi?id=61887

        Removed the call to collapseTextDecorationProperties in ApplyStyleCommand::applyInlineStyle.

        No new tests because this is a code refactoring.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyle): No loner calls collapseTextDecorationProperties.
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode): Updated comment.
        * editing/EditingStyle.cpp:
        (WebCore::HTMLElementEquivalent::propertyExistsInStyle): Added to check both text-decoration
        and -webkit-text-decorations-in-effect.
        (WebCore::HTMLTextDecorationEquivalent::HTMLTextDecorationEquivalent): Added a comment.
        (WebCore::HTMLTextDecorationEquivalent::propertyExistsInStyle): Checks both text-decoration
        and -webkit-text-decorations-in-effect.
        (WebCore::HTMLTextDecorationEquivalent::valueIsPresentInStyle): Checks if a text decoration
        is present in -webkit-text-decorations-in-effect or text-decoration preferring the former.
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement): Merged loops for when conflictingProperties
        is false and true. Added a support for -webkit-text-decorations-in-effect.

2011-06-02  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Make more functions static local in EventHandlers.cpp
        https://bugs.webkit.org/show_bug.cgi?id=58503

        Removed canHandleDragAndDropForTarget and made focusDirectionForKey local to EventHandler.cpp.

        * page/EventHandler.cpp:
        (WebCore::targetIsFrame): Extracted from canHandleDragAndDropForTarget.
        (WebCore::EventHandler::updateDragAndDrop): Calls contentFrameForTarget instead of canHandleDragAndDropForTarget.
        (WebCore::EventHandler::cancelDragAndDrop): Ditto.
        (WebCore::EventHandler::performDragAndDrop): Ditto.
        (WebCore::focusDirectionForKey): No longer a member function of EventHandler class.
        (WebCore::handleKeyboardSelectionMovement): No longer a member function of EventHandler class; also calls
        focusDirectionForKey instead of manually comparing.
        * page/EventHandler.h:

2011-06-02  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by James Robinson.

        [chromium] Things jump around when selecting anything on the page
        https://bugs.webkit.org/show_bug.cgi?id=61639

        WebCore::LayerTextureUpdaterSkPicture::updateTextureRect was not updating a tile sub-region properly.
        It did not consider dest-rect when selecting the clip and translation required to draw the content-rect into dest-rect.
        Also removed clearing of framebuffer because it used to clear the whole tile not just dest-rect.
        An appropriate viewport could be set to just clear the dest-rect, but it was debug only code and I did not want to mess
        with the viewport set by skia.

        No new tests. This case should be covered by most of the layout tests (pixel) targeting selection or hovering when chromium is run in compositing mode.
        Here is a non-exhaustive list of existing tests covering this case.
        Test: editing/selection/14971.html (existing)
              editing/selection/3690703-2.html (existing)
              editing/selection/4402375.html (existing)
              editing/selection/4818145.html (existing)

        * platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:
        (WebCore::LayerTextureUpdaterSkPicture::updateTextureRect):
        (WebCore::LayerTextureUpdaterSkPicture::createFrameBuffer):
        * platform/graphics/chromium/LayerTextureUpdaterCanvas.h:

2011-06-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Add build logistics and plumbing for window.internals object.
        https://bugs.webkit.org/show_bug.cgi?id=60313

        Test: fast/harness/internals-object.html

        * Configurations/WebCoreTestSupport.xcconfig: Added.
        * DerivedSources.make: Added support for generating from Internals.idl.
        * WebCore.gyp/WebCore.gyp: Added new webcore_test_support library.
        * WebCore.gypi: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Added WebCoreTestSupport library.
        * testing/Internals.cpp: Added.
        * testing/Internals.h: Added.
        * testing/Internals.idl: Added.
        * testing/js/WebCoreTestSupport.cpp: Added.
        * testing/js/WebCoreTestSupport.h: Added.
        * testing/v8/WebCoreTestSupport.cpp: Added.
        * testing/v8/WebCoreTestSupport.h: Added.

2011-06-01  Adrienne Walker  <enne@google.com>

        Reviewed by Eric Seidel.

        [chromium] LayerChromium should use a RefPtr for replica layer
        https://bugs.webkit.org/show_bug.cgi?id=61898

        Having this member variable be a raw pointer is brittle and assumes
        that the GraphicsLayer tree keeps this in sync.  There aren't any
        known bugs caused by this, but it seems like good sense to do this.

        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::replicaLayer):

2011-06-02  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION: inline style is lost when deleting line break between paragraphs with same style
        https://bugs.webkit.org/show_bug.cgi?id=61899

        The bug was caused by ReplaceSelectionCommand::doApply's calling handleStyleSpansBeforeInsertion
        before insertionPos is adjusted by positionAvoidingPrecedingNodes and positionOutsideTabSpan.

        Fixed the bug by calling handleStyleSpansBeforeInsertion after the calls to these two functions.

        Test: editing/deleting/delete-line-break-between-paragraphs-with-same-style.html

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

2011-06-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Simon Fraser.

        REGRESSION: Text selection broken for text with line-height applied
        https://bugs.webkit.org/show_bug.cgi?id=54929

        The bug was caused by RenderText::positionForPoint's not considering the case where a point is
        above selectionTop and below lineTop of the first root inline box. Fixed the bug by considering
        any point between selectionTop and lineTop to be inside a root inline box. This condition is
        consistent with the condition we use to determine the bottom of a line.

        Test: editing/selection/hit-test-on-text-with-line-height.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForPointWithInlineChildren): Fixed a condition to determine whether
        or not a point is above the first root line box. We need to check both selectionTop and logicalTop
        for the same reason explained above.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForPoint): See above.

2011-06-02  Andreas Kling  <kling@webkit.org>

        Reviewed by James Robinson.

        Canvas/V8: Fix setting strokeStyle or fillStyle to a CSS system color.
        https://bugs.webkit.org/show_bug.cgi?id=61944

        Call setFillColor/setStrokeColor (instead of setFillStyle/setStrokeStyle)
        for string styles. This ensures that system color resolution is performed,
        and matches what the JSC bindings do.

        Test: canvas/philip/tests/2d.fillStyle.parse.system.html

        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::toCanvasStyle):
        (WebCore::V8CanvasRenderingContext2D::strokeStyleAccessorSetter):
        (WebCore::V8CanvasRenderingContext2D::fillStyleAccessorSetter):

2011-06-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87920.
        http://trac.webkit.org/changeset/87920
        https://bugs.webkit.org/show_bug.cgi?id=61943

        This patch does not build in Win Builder (dbg)(shared)
        downstream (Requested by abarth|gardener on #webkit).

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::showPopup):
        (WebCore::PopupListBox::handleMouseReleaseEvent):
        (WebCore::PopupListBox::acceptIndex):

2011-06-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r87926.
        http://trac.webkit.org/changeset/87926
        https://bugs.webkit.org/show_bug.cgi?id=60313

        Fails to find WebCoreTestSupport.dylib on bots.

        * Configurations/WebCore.xcconfig:
        * Configurations/WebCoreTestSupport.xcconfig: Removed.
        * DerivedSources.make:
        * WebCore.exp.in:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWrapper.cpp:
        (WebCore::JSDOMWrapper::~JSDOMWrapper):
        * bindings/js/JSDOMWrapper.h:
        * testing/Internals.cpp: Removed.
        * testing/Internals.h: Removed.
        * testing/Internals.idl: Removed.
        * testing/js/WebCoreTestSupport.cpp: Removed.
        * testing/js/WebCoreTestSupport.h: Removed.
        * testing/v8/WebCoreTestSupport.cpp: Removed.
        * testing/v8/WebCoreTestSupport.h: Removed.

2011-06-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement popup menus in Webkit2
        https://bugs.webkit.org/show_bug.cgi?id=61854

        Move common code into a new class to be used by both WebKit1 and
        WebKit2.

        * GNUmakefile.list.am: Add new files to compilation.
        * platform/gtk/GtkPopupMenu.cpp: Copied from Source/WebCore/platform/gtk/PopupMenuGtk.cpp.
        (WebCore::GtkPopupMenu::GtkPopupMenu):
        (WebCore::GtkPopupMenu::~GtkPopupMenu):
        (WebCore::GtkPopupMenu::clear): Remove all menu items.
        (WebCore::GtkPopupMenu::appendSeparator): Add a new separator
        item to the menu.
        (WebCore::GtkPopupMenu::appendItem): Add a new item to the menu for
        the given action.
        (WebCore::GtkPopupMenu::popUp): Show the menu.
        (WebCore::GtkPopupMenu::popDown): Hide the menu.
        (WebCore::GtkPopupMenu::menuRemoveItem):
        (WebCore::GtkPopupMenu::menuPositionFunction):
        (WebCore::GtkPopupMenu::resetTypeAheadFindState):
        (WebCore::GtkPopupMenu::typeAheadFind):
        (WebCore::GtkPopupMenu::selectItemCallback):
        (WebCore::GtkPopupMenu::keyPressEventCallback):
        * platform/gtk/GtkPopupMenu.h: Copied from Source/WebCore/platform/gtk/PopupMenuGtk.h.
        (WebCore::GtkPopupMenu::create):
        (WebCore::GtkPopupMenu::platformMenu):
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenuGtk::PopupMenuGtk):
        (WebCore::PopupMenuGtk::~PopupMenuGtk):
        (WebCore::PopupMenuGtk::show): Use GtkPopupMenu.
        (WebCore::PopupMenuGtk::hide): Ditto.
        (WebCore::PopupMenuGtk::menuItemActivated):
        (WebCore::PopupMenuGtk::menuUnmapped):
        * platform/gtk/PopupMenuGtk.h:

2011-05-21  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Add build logistics and plumbing for window.internals object.
        https://bugs.webkit.org/show_bug.cgi?id=60313

        Test: fast/harness/internals-object.html

        * Configurations/WebCoreTestSupport.xcconfig: Added.
        * DerivedSources.make: Added support for generating from Internals.idl.
        * WebCore.gyp/WebCore.gyp: Added new webcore_test_support library.
        * WebCore.gypi: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Added WebCoreTestSupport library.
        * testing/Internals.cpp: Added.
        * testing/Internals.h: Added.
        * testing/Internals.idl: Added.
        * testing/js/WebCoreTestSupport.cpp: Added.
        * testing/js/WebCoreTestSupport.h: Added.
        * testing/v8/WebCoreTestSupport.cpp: Added.
        * testing/v8/WebCoreTestSupport.h: Added.

2011-06-02  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Dimitri Glazkov.

        [Chromium] Click event is not fired for a menulist <select>
        https://bugs.webkit.org/show_bug.cgi?id=60563

        Tests: SelectItemEventFire, SelectItemKeyEvent, SelectItemRemoveSelectOnChange and SelectItemRemoveSelectOnChange in webkit_unit_tests.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::showPopup): Set m_focusedNode from m_frameView.
        (WebCore::PopupListBox::handleMouseReleaseEvent): Call dispatchMouseEvent to forward the event only if select popup.
        (WebCore::PopupListBox::acceptIndex): Change to return accepted or not.

2011-06-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Stop event propagation for cases where relatedTarget is both ancestor of the target and at shadow boundary.
        https://bugs.webkit.org/show_bug.cgi?id=61892

        In the cases where the relatedTarget of an event is an ancestor of the target, and the relatedTarget is
        a shadow host, we should not allow events to escape out of the hosted shadow DOM subtree.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::adjustToShadowBoundaries): Added a check that is valid for both new and old shadow DOM.

2011-06-02  Hans Wennborg  <hans@chromium.org>

        Reviewed by Tony Gentilcore.

        Fix LevelDBTransaction::clearTree()
        https://bugs.webkit.org/show_bug.cgi?id=61917

        This was broken in the code I copied it from; we can't delete and walk
        the tree at the same time.

        No new functionality, no new tests.

        * platform/leveldb/LevelDBTransaction.cpp:
        (WebCore::LevelDBTransaction::clearTree):

2011-06-02  Andreas Kling  <kling@webkit.org>

        Rubber-stamped by Simon Hausmann.

        Remove Qt's precompiled header hack as it was broken, and was not even
        used unless building WebKit inside a Qt tree.

        * WebCore.pri:

2011-06-02  James Robinson  <jamesr@chromium.org>

        Reviewed by Brady Eidson.

        DocumentLoader keeps a reference to all URL strings ever loaded leading to lots of memory waste
        https://bugs.webkit.org/show_bug.cgi?id=61894

        DocumentLoader::m_resourcesClientKnowsAbout is a set of all the URLs that have passed through
        FrameLoader::dispatchWillSendRequest() and is used by FrameLoader::loadedResourceFromMemoryCached to decide
        whether to inform the FrameLoader's m_client about this load.  Unfortunately, this set holds a reference to the
        URL string for every resource loaded, so on pages that use data URLs to "load" large amounts of data this leaks
        lots of memory.

        This set only has an effect on the Mac port, as the only two ports that implement
        FrameLoaderClient::dispatchDidLoadResourceFromMemoryCache() are Chromium and Mac and the Chromium implementation
        can correctly handle receiving multiple callbacks.  This patch limits the set to only PLATFORM(MAC) so other
        ports do not have to pay this memory cost.  It's possible that a better fix exists specifically for the Mac port
        implementation, but that would have to determined by someone who works on that port specifically.

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::didTellClientAboutLoad):
        (WebCore::DocumentLoader::haveToldClientAboutLoad):

2011-06-02  Aparna Nandyal  <aparna.nand@wipro.com>

        Reviewed by Andreas Kling.

        [Qt] Multiple drop events when doing DnD of images.
        https://bugs.webkit.org/show_bug.cgi?id=61504

        Duplicate entries of the url were getting added into drag data
        which is removed. The duplicate entries were causing the same image
        url to be copied twice. The code changes now match other webkit ports.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::declareAndWriteDragImage):

2011-06-02  Naiem Shaik  <naiem.shaik@gmail.com>

        Reviewed by Kent Tamura.
        
        Fixing invalid value being returned for default checkbox and radio state
        https://bugs.webkit.org/show_bug.cgi?id=61674

        As per http://www.w3.org/TR/html5/number-state.html#checkbox-state and
        http://www.w3.org/TR/html5/number-state.html#radio-button-state:
        The value IDL attribute is in mode default/on: 
        If the element has a value attribute, it must return that attribute's 
        value; otherwise, it must return the string "on".  
        Currently default value is empty string;Default value of Radio button 
        and checkbox should be "on".Changed fallbackValue function to return the same
        This works as per spec in IE9,Firefox and Opera

        Tests: fast/forms/checkbox-default-value.html
               fast/forms/radio-default-value.html

        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::fallbackValue):

2011-06-02  Kent Tamura  <tkent@chromium.org>

        [Chromium/Mac] Fix a wrong merge for r87881
        https://bugs.webkit.org/show_bug.cgi?id=61845

        * platform/chromium/ThemeChromiumMac.mm:
        (WebCore::paintStepper):

2011-06-02  Ian Henderson  <ianh@apple.com>

        Reviewed by Simon Fraser.

        [CG] GraphicsContext::fillRoundedRect() ignores the gradient fill the CGContextFillEllipseInRect() code path
        https://bugs.webkit.org/show_bug.cgi?id=61882

        If we have a gradient or pattern fill set, take the slow path, which
        handles these cases properly.

        No new tests, since we never try to fill a rounded rect with a
        gradient or pattern.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):

2011-06-02  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Refactoring] Node::nextRenderer() and previousRenderer() should be part of NodeRenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=61912

        Inlined Node::nextRenderer() and previousRenderer() into NodeRenderingContext and
        removed original definitions.

        No test, no behavioral change.
        
        * dom/Node.cpp:
        * dom/Node.h:
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::nextRenderer):
        (WebCore::NodeRenderingContext::previousRenderer):

2011-06-02  Piroska András  <Piroska.Andras@stud.u-szeged.hu>

        Rubber-stamped by Gabor Loki.

        Trivial buildfix for the ParallelJobs part of FEConvolveMatrix.

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::apply): Rename variable i to job

2011-06-02  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        WebSocket: Call WebSocketChannel::fail() when WebSocketHandshake has failed
        https://bugs.webkit.org/show_bug.cgi?id=61841

        There is no change in behavior except that capitalization of a few error messages
        has been changed. No new tests are added.

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::processBuffer):
        Pass m_handshake.failureReason() to fail() if the handshake has failed.
        * websockets/WebSocketHandshake.cpp:
        Replace occurrences of m_handle->addMessage() with assignments to m_failureReason.
        Change capitalization of a few messages so that all messages start with a capital letter.
        (WebCore::WebSocketHandshake::readServerHandshake):
        (WebCore::WebSocketHandshake::failureReason):
        (WebCore::WebSocketHandshake::readStatusLine):
        (WebCore::WebSocketHandshake::readHTTPHeaders):
        (WebCore::WebSocketHandshake::checkResponseHeaders):
        * websockets/WebSocketHandshake.h:
        Add failureReason(), which returns a string that describes why WebSocket handshake
        has failed.

2011-06-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Incorrect UA style when printing a simple document
        https://bugs.webkit.org/show_bug.cgi?id=61900

        This is not testable in run-webkit-tests because unless the test is the first to run in an instance
        of DumpRenderTree, it is not guaranteed that the full default style sheet has not been initialized.

        * css/CSSStyleSelector.cpp:
        (WebCore::loadFullDefaultStyle): Replace the simple default print style, which is now equal to the
        simple default style, with a new RuleSet before adding the style rules from the full default sheet.
        (WebCore::loadSimpleDefaultStyle): Set defaultPrintStyle to point to the default style. They are
        equal in the simple case.

2011-06-01  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Remove outer-spin-button
        https://bugs.webkit.org/show_bug.cgi?id=61845

        Remove outer-spin-button, and render steppers as inner-spin-button.
        Outer-spin-button have never worked well with padding and border of
        <input>, and the layout code is very tricky and very hard to maintain it.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in:
        * css/html.css:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::innerSpinButtonElement):
        * html/HTMLInputElement.h:
        * html/InputType.h:
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::TextFieldInputType):
        (WebCore::TextFieldInputType::createShadowSubtree):
        (WebCore::TextFieldInputType::destroyShadowSubtree):
        * html/TextFieldInputType.h:
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SpinButtonElement::SpinButtonElement):
        (WebCore::SpinButtonElement::create):
        (WebCore::SpinButtonElement::shadowPseudoId):
        * html/shadow/TextControlInnerElements.h:
        * platform/ThemeTypes.h:
        * platform/chromium/ThemeChromiumMac.mm:
        (WebCore::paintStepper):
         Center the stepper drawing area because the specified area can be
         larger than the NSStepper sizes.
        (WebCore::ThemeChromiumMac::controlSize):
        (WebCore::ThemeChromiumMac::minimumControlSize):
        (WebCore::ThemeChromiumMac::inflateControlPaintRect):
        (WebCore::ThemeChromiumMac::paint):
        * platform/mac/ThemeMac.mm:
        (WebCore::paintStepper):
         Center the stepper drawing area because the specified area can be
         larger than the NSStepper sizes.
        (WebCore::ThemeMac::controlSize):
        (WebCore::ThemeMac::minimumControlSize):
        (WebCore::ThemeMac::inflateControlPaintRect):
        (WebCore::ThemeMac::paint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        * rendering/RenderBox.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        (WebCore::RenderTextControlSingleLine::nodeAtPoint):
        (WebCore::RenderTextControlSingleLine::textBlockWidth):
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::adjustInnerSpinButtonStyle):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustRepaintRect):

2011-06-01  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Switch RenderLayer::convertToLayerCoords to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=61818

        Covered by existing tests.

        * platform/graphics/FloatPoint.h:
        (WebCore::flooredIntSize):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::transparencyClipBox):
        (WebCore::RenderLayer::convertToLayerCoords):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintChildLayerIntoColumns):
        (WebCore::RenderLayer::createLocalTransformState):
        (WebCore::RenderLayer::hitTestChildLayerColumns):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::boundingBox):
        (WebCore::RenderLayer::setBackingNeedsRepaintInRect):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        (WebCore::RenderLayerCompositor::layerWillBeRemoved):
        (WebCore::RenderLayerCompositor::recursiveRepaintLayerRect):

2011-06-01  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Kent Tamura.

        Remove superfluous renderer() test
        https://bugs.webkit.org/show_bug.cgi?id=61907

        No new tests. (trivial)

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):

2011-06-01  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Hajime Morita.

        Add IntPoint + IntPoint operator
        https://bugs.webkit.org/show_bug.cgi?id=61876

        Adding an operator+ convenience method to IntPoint that sums two points
        and returns the result as an IntPoint. Changing doImageDrag to use it
        as a proof of concept.

        No new tests since there is no change in behavior.

        * page/DragController.cpp:
        (WebCore::DragController::doImageDrag):
        * platform/graphics/IntPoint.h:
        (WebCore::operator+):

2011-06-01  Jaehun Lim  <ljaehun.lim@samsung.com>

        Reviewed by Eric Seidel.

        [EFL] Add adjustMenuListButtonStyle and paintMenuListButton functions
        https://bugs.webkit.org/show_bug.cgi?id=61836

        Add functions for rendering drop-down list when style attributes are applied.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::adjustMenuListButtonStyle):
        (WebCore::RenderThemeEfl::paintMenuListButton):
        * platform/efl/RenderThemeEfl.h:

2011-06-01  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        WebSocket: WebSocketChannel::fail() should close the connection immediately
        https://bugs.webkit.org/show_bug.cgi?id=61851

        The effect of this change is almost unobservable. The difference between m_handle->close() and
        m_handle->disconnect() is that the former does not close the connection if the handle has
        unsent data while the latter immediately closes the connection regardless of unsent data.
        Usually a socket stream handle does not have unsent data, and even if it has any, it is hard
        for user scripts to observe the difference between close() and disconnect() (it should take some time
        for onclose() to be called if there are any unsent data, but there ought to be no other difference
        in user scripts' perspective).

        No new tests are added, because writing a test for this issue is not feasible due to the above reason.

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::fail): Use m_handle->disconnect() instead of m_handle->close().

2011-06-01  Abhishek Arya  <inferno@chromium.org>

        Unreviewed.

        Coding style nit. Move ec=0 initialization, change
        recommended by Alexey in bug.
        https://bugs.webkit.org/show_bug.cgi?id=60831

        * dom/Document.cpp:
        (WebCore::Document::setBody):

2011-06-01  Hayato Ito  <hayato@chromium.org>

        Reviewed by Kent Tamura.

        Move {Next,Previous}FocusableNode functions from Document to FocusController.
        https://bugs.webkit.org/show_bug.cgi?id=61839

        There are some member functions in Document which use 'this'
        pointer, but we should use TreeScope instead of Document in some
        places to handle focus issues nicely. We have to move these
        functions out of Document class so that we can give the TreeScope
        as a parameter.

        No new tests since no functionality was changed.

        * dom/Document.cpp:
        * dom/Document.h:
        * page/FocusController.cpp:
        (WebCore::FocusController::deepFocusableNode):
        (WebCore::FocusController::advanceFocusInDocumentOrder):
        (WebCore::nextNodeWithExactTabIndex):
        (WebCore::previousNodeWithExactTabIndex):
        (WebCore::nextNodeWithGreaterTabIndex):
        (WebCore::previousNodeWithLowerTabIndex):
        (WebCore::FocusController::nextFocusableNode):
        (WebCore::FocusController::previousFocusableNode):
        * page/FocusController.h:

2011-06-01  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Fix syncing of removed mask and replica layers
        https://bugs.webkit.org/show_bug.cgi?id=61895

        * platform/graphics/chromium/TreeSynchronizer.cpp:
        (WebCore::TreeSynchronizer::synchronizeTreeRecursive):

2011-06-01  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by Simon Fraser.

        CSSStyleSheet#insertRule doesn't work well with imported stylesheets
        https://bugs.webkit.org/show_bug.cgi?id=56981

        Test: fast/css/import-and-insert-rule-no-update.html

        The bug arises from the fact that <link> element did not know about a programmatically
        loading sheet (using insertRule and @import) and would thus never call removePendingSheet.
        This is needed to make sure our style selector contains an up-to-date list of stylesheets.

        The gist of the patch adds a way for style sheet owner element to know if we are
        programmatically loading a style sheet. This is needed as <link> keeps the information
        about that last loaded stylesheet.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent): Call startLoadingDynamicSheet
        on our parent style sheet instead of directly adding a pending style sheet.

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::startLoadingDynamicSheet): Call startLoadingDynamicSheet
        on our owner element if we have one.

        * css/CSSStyleSheet.h:
        * dom/Node.h:
        (WebCore::Node::startLoadingDynamicSheet): Added common implementation of
        startLoadingDynamicSheet, which should never be called.

        * dom/StyleElement.cpp:
        (WebCore::StyleElement::startLoadingDynamicSheet):
        * dom/StyleElement.h:
        Common implementation of startLoadingDynamicSheet for style elements.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::startLoadingDynamicSheet):
        * html/HTMLLinkElement.h:
        Use the HTMLLinkElement plumbing to make sure we call addRemovePendingSheet.

        * html/HTMLStyleElement.h:
        (WebCore::HTMLStyleElement::startLoadingDynamicSheet):
        * svg/SVGStyleElement.h:
        (WebCore::SVGStyleElement::startLoadingDynamicSheet):
        Forward the call to StyleElement.

2011-06-01  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch paintCustomHighlight to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=61562

        Switching paintCustomHighlight to use an IntPoint for
        its paint offset instead of a pair of ints.

        No new tests since this is refactoring.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintCustomHighlight):
        * rendering/InlineTextBox.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintCustomHighlight):
        * rendering/RenderBox.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paintCustomHighlight):
        (WebCore::RootInlineBox::paint):
        * rendering/RootInlineBox.h:

2011-06-01  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Switch MouseRelatedEvent to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=61574

        Covered by existing tests.

        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::MouseEvent):
        (WebCore::MouseEvent::initMouseEvent):
        (WebCore::SimulatedMouseEvent::SimulatedMouseEvent):
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        (WebCore::contentsScrollOffset):
        (WebCore::MouseRelatedEvent::initCoordinates):
        (WebCore::MouseRelatedEvent::computeRelativePosition):
        (WebCore::MouseRelatedEvent::layerX):
        (WebCore::MouseRelatedEvent::layerY):
        (WebCore::MouseRelatedEvent::offsetX):
        (WebCore::MouseRelatedEvent::offsetY):
        (WebCore::MouseRelatedEvent::pageX):
        (WebCore::MouseRelatedEvent::pageY):
        (WebCore::MouseRelatedEvent::pageLocation):
        (WebCore::MouseRelatedEvent::x):
        (WebCore::MouseRelatedEvent::y):
        * dom/MouseRelatedEvent.h:
        (WebCore::MouseRelatedEvent::screenX):
        (WebCore::MouseRelatedEvent::screenY):
        (WebCore::MouseRelatedEvent::screenLocation):
        (WebCore::MouseRelatedEvent::clientX):
        (WebCore::MouseRelatedEvent::clientY):
        (WebCore::MouseRelatedEvent::clientLocation):
        (WebCore::MouseRelatedEvent::absoluteLocation):
        * dom/TouchEvent.cpp:
        (WebCore::TouchEvent::TouchEvent):
        (WebCore::TouchEvent::initTouchEvent):
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):
        (WebCore::WheelEvent::initWheelEvent):
        (WebCore::WheelEventDispatchMediator::WheelEventDispatchMediator):
        * dom/WheelEvent.h:
        (WebCore::WheelEvent::create):
        (WebCore::WheelEvent::wheelDelta):
        (WebCore::WheelEvent::wheelDeltaX):
        (WebCore::WheelEvent::wheelDeltaY):
        (WebCore::WheelEvent::rawDeltaX):
        (WebCore::WheelEvent::rawDeltaY):
        (WebCore::WheelEvent::isHorizontal):
        * platform/graphics/IntPoint.h:
        (WebCore::IntPoint::scale):

2011-06-01  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch paintOverflowControls to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=61884

        Switching paintOverflowControls to use an IntPoint instead of a pair of ints.

        No new tests since this is simple refactoring.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):

2011-06-01  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix setting of document.body
        https://bugs.webkit.org/show_bug.cgi?id=60831

        1. Only allowing setting to an element if it has a body tag.
        2. If element is from another document, import it.

        Test: fast/dom/document-set-body.html

        * dom/Document.cpp:
        (WebCore::Document::setBody):

2011-06-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Safari always crashes on http://bbc.co.uk when VoiceOver enabled
        https://bugs.webkit.org/show_bug.cgi?id=61886

        This crash can happen on webpages that remove an element from the DOM when the element receives focus.
        When AppKit goes to post a notification to inform VoiceOver the focus has changed, it asks for the AXFocusedUIElement.
        However by posting that notification, a render tree update is performed. This causes the element to disappear, but
        AppKit still has a handle to it and continues to try to reference it. When the autorelease pool pops, the reference goes bad.

        To fix, the root element, the AccessibilityScrollView, needs to implement updateBackingStore(), otherwise this method 
        will not be called in time.

        No test could be created because to cause it depends on an internal AppKit mechanism
        that is only triggered remotely through the accessibility runtime.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::updateBackingStore):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/AccessibilityRenderObject.h:

2011-06-01  David Carson  <dacarson@apple.com>

        Reviewed by Antti Koivisto.

        https://bugs.webkit.org/show_bug.cgi?id=61831
        If width and height of an iframe is fixed and should not be visible, then
        it shouldn't be flattened.

        Test: fast/frames/flattening/iframe-flattening-fixed-width-and-height-zero-size.html

        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::flattenFrame): add a check for a zero width or height

2011-06-01  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Use correct file name for dragging out images.
        https://bugs.webkit.org/show_bug.cgi?id=24887

        We try to guess an appropriate filename when dragging out images. In order, we try to use:
        - The filename suggested in the HTTP header.
        - The last path component of the source URL.
        - The alt text.
        This matches the behavior of the other WebKit ports.

        Test: fast/events/drag-image-filename.html

        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::writeImageToDataObject):
        * platform/chromium/ClipboardChromiumMac.cpp:
        (WebCore::isInvalidFileCharacter):
        (WebCore::ClipboardChromium::validateFileName):

2011-06-01  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Text is scaled in a stair-step pattern
        https://bugs.webkit.org/show_bug.cgi?id=60317

        Stop scaling the specified font to the actual on-screen value when font-rendering: 
        geometricPrecision is specified, but instead scale the graphics context. This allows
        us to scale text up and down smoothly.

        Test: svg/text/scaling-font-with-geometric-precision.html

        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::computeNewScaledFontForStyle):

2011-06-01  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch paintResizer to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=61883

        Switch paintResizer to take an IntPoint instead of a pair of ints.

        No new tests as this is simple refactoring.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::paintResizer):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):

2011-06-01  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Page layout messed up after exiting full screen at Apple trailers page
        https://bugs.webkit.org/show_bug.cgi?id=61755
        <rdar://problem/9525277>

        Test: fullscreen/full-screen-zIndex-after.html

        Fix the incomplete implementation of r87660. Make parameters to
        setContainsFullScreenElementRecursively() in webkitWillExitFullScreenForElement() match those
        in webkitWillEnterFullScreenForElement(), so the ancestors' flags do not become
        inconsistent..

        * dom/Document.cpp:
        (WebCore::Document::webkitWillExitFullScreenForElement):

2011-06-01  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch paintScrollCorner to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=61874

        Changing paintScrollCorner to take an IntPoint representing the paint
        offset instead of a pair of ints.

        No new tests as this is simple refactoring.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::paintScrollCorner):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):

2011-06-01  Kenneth Russell  <kbr@google.com>

        Reviewed by Nate Chapin.

        [V8] Optimize fetches of indexed properties in custom bindings
        https://bugs.webkit.org/show_bug.cgi?id=61821

        Avoid allocating garbage in affected custom bindings. This speeds
        up one test case by at least a factor of two. No new tests;
        covered by existing layout tests (typed array and otherwise).

        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArray):
        (WebCore::setWebGLArrayHelper):
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        (WebCore::V8InspectorFrontendHost::showContextMenuCallback):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::getMessagePortArray):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::jsArrayToFloatArray):
        (WebCore::jsArrayToIntArray):

2011-06-01  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Fix the Phonon build when logging is disabled
        https://bugs.webkit.org/show_bug.cgi?id=61869

        No new tests needed.

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp: Add missing guards.
        (WebCore::MediaPlayerPrivatePhonon::networkState):
        (WebCore::MediaPlayerPrivatePhonon::readyState):
        (WebCore::MediaPlayerPrivatePhonon::updateStates):
        (WebCore::MediaPlayerPrivatePhonon::stateChanged):

2011-06-01  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Antti Koivisto.

        Do not use the pushed style selector if it is not equal to the
        parent document's style selector. It usually means that it is
        in a bad state, e.g. already cleared.
        https://bugs.webkit.org/show_bug.cgi?id=61737

        * dom/Element.cpp:
        (WebCore::StyleSelectorParentPusher::~StyleSelectorParentPusher):

2011-06-01  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch RenderLineBoxList intersection functions to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=61794

        Switching rangeIntersectsRect, anyLineIntersectsRect, and lineIntersectsDirtyRect
        to take IntPoint instead of a tx/ty to represent the offset to be applied match
        the rect and lines' coordinates.

        No new tests since this is merely refactoring.

        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::rangeIntersectsRect):
        (WebCore::RenderLineBoxList::anyLineIntersectsRect):
        (WebCore::RenderLineBoxList::lineIntersectsDirtyRect):
        (WebCore::RenderLineBoxList::paint):
        (WebCore::RenderLineBoxList::hitTest):
        * rendering/RenderLineBoxList.h:

2011-05-19  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Don't split long, narrow layers into multiple tiles.
        https://bugs.webkit.org/show_bug.cgi?id=60821

        This changes the heuristic for when we tile layers to be less bad
        about wasting texture space.  Long, narrow layers that are tiled with
        a large tile size waste texture space.  Now layers are only tiled if
        they are above 512px in one dimension and extend into a second tile in
        the other.  If they are not tiled, their layer texture will exactly
        fit their layer bounds.  In particular, this will help scrollbars.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateLayerSize):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::maxTextureSize):

2011-06-01  Cary Clark  <caryclark@google.com>

        Reviewed by Eric Seidel.

        Ready Chromium port for Skia on Mac
        https://bugs.webkit.org/show_bug.cgi?id=61800

        Skia on Mac is not enabled. The executing
        code is unchanged, so there are no new tests.

        * platform/chromium/DragImageRef.h:
        Use Skia for DragImageRef instead of CG.

        * platform/chromium/ScrollbarThemeChromiumMac.mm:
        (WebCore::ScrollbarThemeChromiumMac::paint):
        Get the total matrix from Skia for the scrollbar.
        Convert the SkCanvas into a CGContext to draw.

        * platform/chromium/ThemeChromiumMac.mm:
        (WebCore::paintStepper):
        Ditto.

2011-06-01  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: allow opening inspector for existing workers
        https://bugs.webkit.org/show_bug.cgi?id=61853

        Added sidebar pane with a list of all workers. Each worker has a check box
        that allows opening inspector for the worker.

        * inspector/Inspector.json:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didStartWorkerContextImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didStartWorkerContext):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::WorkerFrontendChannel):
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::~WorkerFrontendChannel):
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::connectToWorkerContext):
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::disconnectFromWorkerContext):
        (WebCore::InspectorWorkerAgent::clearFrontend):
        (WebCore::InspectorWorkerAgent::connectToWorker):
        (WebCore::InspectorWorkerAgent::disconnectFromWorker):
        (WebCore::InspectorWorkerAgent::didStartWorkerContext):
        * inspector/InspectorWorkerAgent.h:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        * inspector/front-end/Settings.js:
        * inspector/front-end/WorkerManager.js:
        (WebInspector.WorkerManager):
        (WebInspector.WorkerManager.prototype._workerCreated):
        (WebInspector.WorkerManager.prototype._sendMessageToWorkerInspector):
        (WebInspector.WorkerManager.prototype.openWorkerInspector):
        (WebInspector.WorkerManager.prototype.closeWorkerInspector):
        (WebInspector.WorkerManager.prototype._workerInspectorClosing):
        (WebInspector.WorkerMessageForwarder):
        (WebInspector.WorkerMessageForwarder.prototype.workerCreated):
        (WebInspector.WorkerMessageForwarder.prototype.dispatchMessageFromWorker):
        * inspector/front-end/WorkersSidebarPane.js:
        (WebInspector.WorkersSidebarPane):
        (WebInspector.WorkersSidebarPane.prototype.addWorker):
        (WebInspector.WorkerListSidebarPane):
        (WebInspector.WorkerListSidebarPane.prototype._workerAdded):
        (WebInspector.WorkerListSidebarPane.prototype._workerRemoved):
        (WebInspector.WorkerListSidebarPane.prototype._workerInspectorClosed):
        (WebInspector.WorkerListSidebarPane.prototype._addWorker):
        (WebInspector.WorkerListSidebarPane.prototype._createCheckbox):
        (WebInspector.WorkerListSidebarPane.prototype._workerItemClicked):
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):

2011-06-01  Shishir Agrawal  <shishir@chromium.org>

        Reviewed by Tony Gentilcore.

        Renaming the Page Visibility attributes as per the modified spec draft.
        https://bugs.webkit.org/show_bug.cgi?id=61825

        Spec draft:
        http://dvcs.w3.org/hg/webperf/raw-file/tip/specs/PageVisibility/Overview.html

        - Event needs to be webkitVisibilityChange from webkitVisibilityStateChange
        - The attribute webkitIsVisible needs to change to webkitHidden

        * dom/Document.cpp:
        (WebCore::Document::webkitHidden):
        (WebCore::Document::dispatchVisibilityStateChangeEvent):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/EventNames.h:

2011-06-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Rob Buis.

        Remove duplicated code in various computeReplacedLogical*() functions
        https://bugs.webkit.org/show_bug.cgi?id=61860

        Centralize this calculation in RenderBox::computeReplacedLogicalWidthRespectingMinMaxWidth:
        int minLogicalWidth = computeReplacedLogicalWidthUsing(style()->logicalMinWidth());
        int maxLogicalWidth = !includeMaxWidth || style()->logicalMaxWidth().isUndefined() ? logicalWidth : computeReplacedLogicalWidthUsing(style()->logicalMaxWidth());
        return max(minLogicalWidth, min(logicalWidth, maxLogicalWidth));

        Centralize this calculation in RenderBox::computeReplacedLogicalHeightRespectingMinMaxHeight:
        int minLogicalHeight = computeReplacedLogicalHeightUsing(style()->logicalMinHeight());
        int maxLogicalHeight = style()->logicalMaxHeight().isUndefined() ? logicalHeight : computeReplacedLogicalHeightUsing(style()->logicalMaxHeight());
        return max(minLogicalHeight, min(logicalHeight, maxLogicalHeight));

        Use the new helper methods where possible, deduplicating lots of code.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalWidth):
        (WebCore::RenderBox::computeReplacedLogicalWidthRespectingMinMaxWidth):
        (WebCore::RenderBox::computeReplacedLogicalHeight):
        (WebCore::RenderBox::computeReplacedLogicalHeightRespectingMinMaxHeight):
        * rendering/RenderBox.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::computeReplacedLogicalWidth):
        (WebCore::RenderImage::computeReplacedLogicalHeight):
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::computeEmbeddedDocumentReplacedWidth):
        (WebCore::RenderPart::computeEmbeddedDocumentReplacedHeight):
        (WebCore::RenderPart::computeReplacedLogicalWidth):
        (WebCore::RenderPart::computeReplacedLogicalHeight):
        * rendering/RenderPart.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        (WebCore::RenderReplaced::computeReplacedLogicalHeight):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth):
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight):

2011-06-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87788.
        http://trac.webkit.org/changeset/87788
        https://bugs.webkit.org/show_bug.cgi?id=61856

        breaks windows chromium canary (Requested by jknotten on
        #webkit).

        * loader/archive/mhtml/MHTMLArchive.cpp:
        * loader/archive/mhtml/MHTMLArchive.h:
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        (WebCore::PageSerializer::serializeCSSStyleSheet):
        * platform/SharedBuffer.cpp:
        * platform/SharedBuffer.h:

2011-06-01  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [JSC] JSLock ASSERTs Seen Under eventListenerHandlerBody
        https://bugs.webkit.org/show_bug.cgi?id=61835

        Add a JSLock call before possible allocations in jsFunction and toString.

        * bindings/js/ScriptEventListener.cpp:
        (WebCore::eventListenerHandlerBody):

2011-06-01  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Adam Barth.

        Adding MHTML generation support to MHTMLArchive.
        https://bugs.webkit.org/show_bug.cgi?id=7169

        * loader/archive/mhtml/MHTMLArchive.cpp:
        (WebCore::generateRandomBoundary):
        (WebCore::replaceNonPrintableCharacters):
        (WebCore::MHTMLArchive::generateMHTMLData):
        * loader/archive/mhtml/MHTMLArchive.h:
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        (WebCore::PageSerializer::serializeCSSStyleSheet):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::append):
        * platform/SharedBuffer.h:

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

        Reviewed by Kent Tamura.

        Remove ShadowElement and compact remaining used bits into RenderFileUploadControl.
        https://bugs.webkit.org/show_bug.cgi?id=61816

        This is a near-mechanical move-and-rename of ShadowElement, which is now only
        used by input[type=file]. Next step -- switch it over to new shadow DOM.

        Refactoring, no change in behavior.

        * CMakeLists.txt: Removed ShadowElement.cpp and ShadowElement.h.
        * GNUmakefile.list.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore/WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCore/rendering/RenderingAllInOne.cpp: Ditto.
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::UploadButton::create): Moved from ShadowElement, renamed as UploadButton.
        (WebCore::UploadButton::detach): Ditto.
        (WebCore::UploadButton::UploadButton): Ditto.
        (WebCore::RenderFileUploadControl::updateFromElement): Changed to use UploadButton.
        * rendering/RenderMeter.cpp: Removed ShadowElement.h include, which is no longer used.
        * rendering/RenderProgress.cpp: Ditto.
        * rendering/ShadowElement.cpp: Removed.
        * rendering/ShadowElement.h: Removed.

2011-06-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Rob Buis.

        SVG fails all 3 of Hixie's CSS intrinsic sizing tests
        https://bugs.webkit.org/show_bug.cgi?id=15473

        Hixies CSS intrinsic sizing tests cover percentage sizes specified on the target SVG document as width/height attributes
        and using width: auto / height: auto on the <object> that hosts the SVG document. Take percentage sizes of the outermost
        SVGs width/height attributes into account when determining the intrinsic size of the <object>.

        Added several other testcases demonstrating several scenarios. All tests work exactly the same in WebKit and Firefox now.
        The *on-target-svg-absolute.xhtml tests look equal to WebKit/FF but Opera fails them, likely a relict of the different
        interpretation of the intrinsic size of a SVG document in SVG Tiny 1.2.

        Tests: svg/custom/object-sizing-height-50p-on-target-svg-absolute.xhtml
               svg/custom/object-sizing-height-50p-on-target-svg.xhtml
               svg/custom/object-sizing-width-50p-height-50p-on-target-svg-absolute.xhtml
               svg/custom/object-sizing-width-50p-height-50p-on-target-svg.xhtml
               svg/custom/object-sizing-width-50p-height-75p-on-target-svg-absolute.xhtml
               svg/custom/object-sizing-width-50p-height-75p-on-target-svg.xhtml
               svg/custom/object-sizing-width-50p-on-target-svg-absolute.xhtml
               svg/custom/object-sizing-width-50p-on-target-svg.xhtml
               svg/custom/object-sizing-width-75p-height-50p-on-target-svg-absolute.xhtml
               svg/custom/object-sizing-width-75p-height-50p-on-target-svg.xhtml
               svg/hixie/intrinsic/001.html
               svg/hixie/intrinsic/002.html
               svg/hixie/intrinsic/003.html

        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::computeReplacedLogicalWidth):
        (WebCore::RenderPart::computeReplacedLogicalHeight):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeIntrinsicRatio):
        * rendering/svg/RenderSVGRoot.h:

2011-05-31  Tonis Tiigi  <tonistiigi@gmail.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Timeline panel improvements for managing current selection
        https://bugs.webkit.org/show_bug.cgi?id=61468

        Enables X-axis dragging of the selected area.
        Double click zoom-out.
        Fixes slightly wrong selection area position.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype._dragWindow):
        (WebInspector.TimelineOverviewPane.prototype._endWindowSelectorDragging):
        (WebInspector.TimelineOverviewPane.prototype._resizeWindowRight):
        (WebInspector.TimelineOverviewPane.prototype._resizeWindowMaximum):
        (WebInspector.TimelineOverviewPane.prototype.scrollWindow):
        (WebInspector.TimelineOverviewPane.prototype._createTimelineCategoryStatusBarCheckbox):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):

2011-05-31  Keishi Hattori  <keishi@webkit.org>

        Reviewed by Kent Tamura.

        Fix to enable page scroll of select element
        https://bugs.webkit.org/show_bug.cgi?id=53628

        Manual test: select-page-scroll.html

        * manual-tests/select-page-scroll.html: Added.
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::computeLogicalHeight): Fix min to max.

2011-05-31  Yong Li  <yoli@rim.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=54807
        We have been assuming plain bitfields (like "int a : 31") are always signed integers.
        However some compilers can treat them as unsigned. For example, RVCT 4.0 states plain
        bitfields (declared without either signed or unsigned qualifiers) are treats as unsigned.
        http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0348c/Babjddhe.html
        Although we can use "--signed-bitfields" flag to make RVCT 4.0 behave as most other compilers,
        always using "signed"/"unsigned" qualifier to declare integral type bitfields is still a good
        rule we should have in order to make our code independent from compilers and compiler flags.

        No new test added because this change is not known to fix any issue.

        * css/CSSPrimitiveValue.h:
        * css/CSSProperty.h:
        * rendering/InlineBox.h:
        * rendering/RenderBlock.h:

2011-05-31  Hironori Bono  <hbono@chromium.org>

        Reviewed by Eric Seidel.

        Send an input event when we change the text direction.
        https://bugs.webkit.org/show_bug.cgi?id=50952

        Both Safari and Chrome call Editor::setBaseWritingDirection() to change
        the text direction of an editable element with their UIs. This change
        calls dispatchInputEvent() to send an input event when the function
        actually changes the "dir" attribute so we can send an input event as
        written in the HTML5 spec.

        Test: fast/html/set-text-direction.html

        * editing/Editor.cpp:
        (WebCore::Editor::setBaseWritingDirection):

2011-05-31  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Flash of black at the end of full screen transition at apple.com product videos
        https://bugs.webkit.org/show_bug.cgi?id=61756

        Added two new entries to the WebCore exports list.

        * WebCore.exp.in:

2011-05-31  Rafael Brandao  <rafael.lobo@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] tst_QWebFrame::render() failing
        https://bugs.webkit.org/show_bug.cgi?id=60893

        Due a problem on QPicture (http://bugreports.qt.nokia.com/browse/QTBUG-19496),
        this test was calculating the final geometry incorrectly. As the order between
        a translate and a draw operation could be relevant for it, but not for the
        final rendered result, they were changed on ScrollbarThemeQt::paint.

        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarThemeQt::paint):

2011-05-27  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Fix crash from empty reflections with masks
        https://bugs.webkit.org/show_bug.cgi?id=61654

        Change the iteration for updateCompositorResources to match that being
        done in the paint and draw steps.  This mismatch of iteration style
        was causing layers with replica masks to correctly get skipped while
        painting but not get skipped during texture upload.

        Test: compositing/reflections/empty-reflection-with-mask.html

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateLayers):
        (WebCore::LayerRendererChromium::updateCompositorResources):
        * platform/graphics/chromium/LayerRendererChromium.h:

2011-05-31  B.J. Wever  <skylined@chromium.org>

        Reviewed by Adam Barth.

        requestFileSystem and resolveLocalFileSystemURI are not checking if
        errorCallback is NULL before scheduling a callback on error.
        https://bugs.webkit.org/show_bug.cgi?id=49539

        Test: fast/filesystem/filesystem-no-callback-null-ptr-crash.html

        * fileapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::scheduleCallback): Only call callback if
          one is supplied.

2011-05-31  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Another swipe at resolving <rdar://problem/9125145> and https://bugs.webkit.org/show_bug.cgi?id=61494
        
        Re-land http://trac.webkit.org/changeset/87566 with invalid ASSERTs removed.

        No new tests. No change in behavior.

        Instead of storing the DocumentLoader at construction and never changing it,
        always calculate it based on the FrameLoader's current DocumentLoader:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::suggestedMIMEType):
        (WebCore::Document::lastModified):
        (WebCore::Document::initSecurityContext):
        (WebCore::Document::updateURLForPushOrReplaceState):
        (WebCore::Document::loader):
        * dom/Document.h:

        Null-check or ASSERT that the DocumentLoader exists (or both) depending on the scenario:
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        * platform/mac/HTMLConverter.mm:
        (fileWrapperForElement):

        * WebCore.exp.in:

2011-05-31  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Simon Fraser.

        Change InlineBox::paint and its overloaded variants to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=61804

        Changing InlineBox::paint, its 7 overloaded variants, and RootInlineBox::paintEllipsisBox
        to use IntPoint for their paint offset instead of a pair of ints.

        No new tests since this is just a refactoring.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        * rendering/EllipsisBox.h:
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::paint):
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintEllipsisBoxes):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paintEllipsisBox):
        (WebCore::RootInlineBox::paint):
        * rendering/RootInlineBox.h:
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paint):
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paint):
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint):
        * rendering/svg/SVGRootInlineBox.h:

2011-05-31  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Clear out LayerChromium's m_ccLayerImpl ptr on CCLayerImpl destruction
        https://bugs.webkit.org/show_bug.cgi?id=61593

        Whenever a CCLayerImpl is being destroyed, clear out its owner's m_ccLayerImpl pointer.
        This is extremely defensive and not strictly necessary, but not harmful either.

        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::~CCLayerImpl):

2011-05-31  Stephen White  <senorblanco@chromium.org>

        Unreviewed; build fix.

        Silence some warnings on the Safari/Mac release build.

        * platform/graphics/gpu/TilingData.h:
        (WebCore::TilingData::assertTile):

2011-05-31  Justin Novosad  <junov@chromium.org>

        Reviewed by Stephen White.

        [Chromium] Build fails when ACCELERATED_2D_CANVAS is disabled
        https://bugs.webkit.org/show_bug.cgi?id=61790
        Changing the build guards in these two files that are required
        by the accelerated compositing feature.

        * platform/graphics/gpu/LoopBlinnMathUtils.cpp:
        * platform/graphics/gpu/TilingData.cpp:

2011-05-31  Justin Novosad  <junov@chromium.org>

        Reviewed by Stephen White.

        [Chromium] Build fails when ACCELERATED_2D_CANVAS is disabled
        https://bugs.webkit.org/show_bug.cgi?id=61790
        Changing the build guards in these two files that are required
        by the accelerated compositing feature.

        * platform/graphics/gpu/LoopBlinnMathUtils.cpp:
        * platform/graphics/gpu/TilingData.cpp:

2011-05-31  Rob Buis  <rbuis@rim.com>

        Reviewed by Dirk Schulze.

        https://bugs.webkit.org/show_bug.cgi?id=34301
        Creating <animateMotion> elements via javascript do not execute

        https://bugs.webkit.org/show_bug.cgi?id=17043
        SVG missing some .idl files

        Add missing idl files.

        Test: svg/animations/animate-mpath-insert.html

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAnimateMotionElement.idl: Added.
        * svg/SVGMPathElement.idl: Added.

2011-05-31  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        [wx] Implement printing support for wxWidgets 2.9.x and above.
        
        https://bugs.webkit.org/show_bug.cgi?id=61796

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/wx/FontWx.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::currentScale):
        * platform/wx/wxcode/win/non-kerned-drawing.cpp:
        (WebCore::drawTextWithSpacing):

2011-05-31  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Missing InspectorFrontendHost.saveSessionSetting function
        https://bugs.webkit.org/show_bug.cgi?id=61751

        Add missing stub function causing an error on load.

        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.saveSessionSetting):

2011-05-31  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dimitri Glazkov.

        Improve hasMediaControls logic to check that node has
        media controls. This can be false when cloning nodes.
        https://bugs.webkit.org/show_bug.cgi?id=61765

        Test: media/media-controls-clone-crash.html

        * dom/Node.h:
        (WebCore::Node::isMediaControls):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaControls):
        (WebCore::HTMLMediaElement::hasMediaControls):
        * html/shadow/MediaControls.h:
        (WebCore::MediaControls::isMediaControls):
        (WebCore::toMediaControls):

2011-05-31  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Provide custom DOM bindings methods to check if input/textareas have been edited
        https://bugs.webkit.org/show_bug.cgi?id=61791

        * bindings/gobject/GNUmakefile.am: add new files.
        * bindings/gobject/WebKitDOMCustom.cpp: Added.
        (webkit_dom_html_text_area_element_is_edited):
        (webkit_dom_html_input_element_is_edited):
        * bindings/gobject/WebKitDOMCustom.h: Added.

2011-05-31  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Unreviewed build fix for Symbian.
        Opt-out Symbian for TextureMapper.

        No new tests: build fix.

        * WebCore.pri:

2011-05-31  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch paintFocusRing to IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=61580

        Switching paintFocusRing to take an IntPoint representing the paint offset
        instead of a pair of ints.

        No new tests as this is just refactoring.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutline):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintFocusRing):
        (WebCore::RenderObject::paintOutline):
        * rendering/RenderObject.h:

2011-05-31  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dimitri Glazkov.

        Convert raw ptr to RefPtr for documentElement.
        https://bugs.webkit.org/show_bug.cgi?id=61688

        Test: fast/dom/xml-parser-error-message-crash.svg

        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::insertErrorMessageBlock):

2011-05-31  Andreas Kling  <kling@webkit.org>

        Reviewed by Antti Koivisto.

        Canvas/JSC: Auto-generate overloads for setShadow()
        https://bugs.webkit.org/show_bug.cgi?id=61786

        Move CanvasRenderingContext2D.setShadow() to auto-generated JSC bindings.

        There is a subtle difference to the previous behavior: invalid numbers of
        arguments now raise TypeError instead of SyntaxError. This is in accordance
        with Web IDL, and matches the existing V8 bindings.

        Test: fast/canvas/canvas-overloads-setShadow.html

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * html/canvas/CanvasRenderingContext2D.idl:

2011-05-31  Andreas Kling  <kling@webkit.org>

        Reviewed by Antti Koivisto.

        Canvas/JSC: Auto-generate overloads for drawImageFromRect()
        https://bugs.webkit.org/show_bug.cgi?id=61709

        Move CanvasRenderingContext2D.drawImageFromRect() to auto-generated JSC bindings.
        Make it [RequiresAllArguments=Raise] to match the old behavior.
        Side effect: calling drawImageFromRect() with zero arguments will now raise
        SyntaxError instead of TypeError.

        Test: fast/canvas/canvas-overloads-drawImageFromRect.html

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl:

2011-05-31  Andreas Kling  <kling@webkit.org>

        Reviewed by Antti Koivisto.

        Canvas/JSC: Auto-generate overloads for drawImage()
        https://bugs.webkit.org/show_bug.cgi?id=61703

        Move CanvasRenderingContext2D.drawImage() to auto-generated JSC bindings.

        There is a subtle difference to the previous behavior: invalid numbers of
        arguments now raise TypeError instead of SyntaxError. This is in accordance
        with Web IDL, and matches the existing V8 bindings.

        Test: fast/canvas/canvas-overloads-drawImage.html

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * html/canvas/CanvasRenderingContext2D.idl:

2011-05-31  Andreas Kling  <kling@webkit.org>

        Reviewed by Antti Koivisto.

        Canvas/JSC: Auto-generate overloads for strokeRect()
        https://bugs.webkit.org/show_bug.cgi?id=61641

        Move CanvasRenderingContext2D.setStrokeColor() to auto-generated JSC bindings.

        No behavioral change.

        Test: fast/canvas/canvas-overloads-strokeRect.html

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * html/canvas/CanvasRenderingContext2D.idl:

2011-05-31  Andreas Kling  <kling@webkit.org>

        Reviewed by Antti Koivisto.

        Canvas/JSC: Auto-generate overloads for setFillColor()
        https://bugs.webkit.org/show_bug.cgi?id=61635

        Move CanvasRenderingContext2D.setStrokeColor() to auto-generated JSC bindings.

        There is a subtle difference to the previous behavior: invalid numbers of
        arguments now raise TypeError instead of SyntaxError. This is in accordance
        with Web IDL, but doesn't matter much anyway since this method is WebKit-only.

        Test: fast/canvas/canvas-overloads-setFillColor.html

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * html/canvas/CanvasRenderingContext2D.idl:

2011-05-31  Andreas Kling  <kling@webkit.org>

        Reviewed by Antti Koivisto.

        Canvas/JSC: Auto-generate overloads for setStrokeColor()
        https://bugs.webkit.org/show_bug.cgi?id=61629

        Move CanvasRenderingContext2D.setStrokeColor() to auto-generated JSC bindings.

        There is a subtle difference to the previous behavior: invalid numbers of
        arguments now raise TypeError instead of SyntaxError. This is in accordance
        with Web IDL, but doesn't matter much anyway since this method is WebKit-only.

        Test: fast/canvas/canvas-overloads-setStrokeColor.html

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * html/canvas/CanvasRenderingContext2D.idl:

2011-05-31  Andreas Kling  <kling@webkit.org>

        Reviewed by Antti Koivisto.

        Canvas/JSC: Auto-generate overloads for strokeText()
        https://bugs.webkit.org/show_bug.cgi?id=61626

        Move CanvasRenderingContext2D.strokeText() to auto-generated JSC bindings.
        Make it [RequiresAllArguments=Raise] to match the old behavior.
        This has the side-effect of aligning the behaviors of JSC and V8.

        Test: fast/canvas/canvas-overloads-strokeText.html

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * html/canvas/CanvasRenderingContext2D.idl:

2011-05-31  Andreas Kling  <kling@webkit.org>

        Reviewed by Antti Koivisto.

        Canvas/JSC: Auto-generate overloads for fillText()
        https://bugs.webkit.org/show_bug.cgi?id=61623

        Move CanvasRenderingContext2D.fillText() to auto-generated JSC bindings.
        Make it [RequiresAllArguments=Raise] to match the old behavior.
        This has the side-effect of aligning the behaviors of JSC and V8.

        Test: fast/canvas/canvas-overloads-fillText.html

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * html/canvas/CanvasRenderingContext2D.idl:

2011-05-31  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Frame flattening is broken with nested frames
        https://bugs.webkit.org/show_bug.cgi?id=61491

        After r77988, when frame flattening is enabled, performPostLayoutTasks() is called on a timer for iframes.
        This causes layout of nested iframes to sometimes happen asynchronously, but WebCore expects layout to always finish synchronously.
        Added a call to updateWidgetPosition() for cases that performPostLayoutTasks() is now happening asynchronously.

        Test: fast/frames/flattening/iframe-flattening-nested.html

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

2011-05-31  Tommy Widenflycht  <tommyw@google.com>

        Reviewed by Tony Gentilcore.

        Fix getUserMedia callback bindings for JSC.
        https://bugs.webkit.org/show_bug.cgi?id=60174

        This patch initializes the exception code variable to 0.

        Test: fast/dom/MediaStream/argument-types.html

        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::webkitGetUserMedia):

2011-05-31  Oleg Romashin  <oleg.romashin@nokia.com>

        Reviewed by Benjamin Poulain.

        Fix compilation with debug enabled, m_lightSource.type is not valid anymore
        https://bugs.webkit.org/show_bug.cgi?id=61719

        * platform/graphics/filters/arm/FELightingNEON.h:
        (WebCore::FELighting::platformApplyNeon):

2011-05-31  Oliver Varga  <Varga.Oliver@stud.u-szeged.hu>

        Reviewed by Nikolas Zimmermann.

        Invalid color handling is broken for SVG
        https://bugs.webkit.org/show_bug.cgi?id=58531

        Fix invalid color fallback handling. If the fill/stroke attributes computed
        value leads to a an invalid color, inherit the desired color from the parent
        style instead. Matches Opera/FF and SVG 1.1 Second Edition (http://www.w3.org/TR/SVG/).

        Tests: svg/custom/invalid-stroke-hex.svg
               svg/custom/invalid-uri-stroke.svg

        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::inheritColorFromParentStyleIfNeeded):
        (WebCore::requestPaintingResource):

2011-05-31  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] Avoid double deletion of DrawingBuffer's color buffer
        texture.
        https://bugs.webkit.org/show_bug.cgi?id=61761

        Test: Verified that the DCHECK in GraphicsContext3D implementation
        doesn't trigger.

        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::~DrawingBuffer):

2011-05-30  Hayato Ito  <hayato@chromium.org>

        Reviewed by Ryosuke Niwa.

        Add a utility function for dumping a tree for the Node, including a document of a frame.
        https://bugs.webkit.org/show_bug.cgi?id=61727

        No new tests since added functions are only available in debug builds.

        * dom/Node.cpp:
        (WebCore::parentOrHostOrFrameOwner):
        (WebCore::traverseNextNodeAcrossFrame):
        (WebCore::Node::showTreeForThisAcrossFrame):
        * dom/Node.h:

2011-05-30  James Kozianski  <koz@chromium.org>

        Reviewed by Kent Tamura.

        [Chromium] Make isValidProtocol() accept protocols with '+'.
        https://bugs.webkit.org/show_bug.cgi?id=61759

        Also, detect syntax errors before security errors; some syntax errors
        will also trigger a security error, but it's more helpful to the
        programmer to know if they have a syntax error, which are well-defined
        in the spec, rather than a security error, which aren't.

        * page/Navigator.cpp:
        (WebCore::Navigator::registerProtocolHandler):
        Detect syntax errors before security errors.
        * platform/KURLGoogle.cpp:
        (WebCore::isSchemeChar):
        Include '+' in the list of valid characters.

2011-05-30  Andrey Petrov  <andrey.petrov@gmail.com>

        Reviewed by Hajime Morita.

        Using jQuery to show/hide IMG elements crashes WebKit
        https://bugs.webkit.org/show_bug.cgi?id=31721

        For platform code, do not assert nodes always have renderer at
        the time context menu action is invoked.
        Renderer can actually be empty for a given node if it was hidden
        or removed from domtree by some non-user generated event (e.g timeout) 
        after the popup menu had been created.

        Changing Chromium, Gtk, Mac, Qt, Win and WinCE.

        Test: editing/pasteboard/copy-standalone-image-crash.html

        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeImage):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/wince/PasteboardWinCE.cpp:
        (WebCore::Pasteboard::writeImage):

2011-05-30  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

        Rename XSSFilter to XSSAuditor
        https://bugs.webkit.org/show_bug.cgi?id=61718

        Currently we use the names XSSFilter and XSSAuditor throughout the project.
        Instead, we should choose one name for consistency.

        No functionality was changed. So, no new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/XSSAuditor.cpp: Copied from Source/WebCore/html/parser/XSSFilter.cpp.
        (WebCore::XSSAuditor::XSSAuditor):
        (WebCore::XSSAuditor::init):
        (WebCore::XSSAuditor::filterToken):
        (WebCore::XSSAuditor::filterTokenInitial):
        (WebCore::XSSAuditor::filterTokenAfterScriptStartTag):
        (WebCore::XSSAuditor::filterScriptToken):
        (WebCore::XSSAuditor::filterObjectToken):
        (WebCore::XSSAuditor::filterParamToken):
        (WebCore::XSSAuditor::filterEmbedToken):
        (WebCore::XSSAuditor::filterAppletToken):
        (WebCore::XSSAuditor::filterIframeToken):
        (WebCore::XSSAuditor::filterMetaToken):
        (WebCore::XSSAuditor::filterBaseToken):
        (WebCore::XSSAuditor::filterFormToken):
        (WebCore::XSSAuditor::eraseDangerousAttributesIfInjected):
        (WebCore::XSSAuditor::eraseAttributeIfInjected):
        (WebCore::XSSAuditor::snippetForRange):
        (WebCore::XSSAuditor::snippetForAttribute):
        (WebCore::XSSAuditor::isContainedInRequest):
        (WebCore::XSSAuditor::isSameOriginResource):
        * html/parser/XSSAuditor.h: Copied from Source/WebCore/html/parser/XSSFilter.h.
        * html/parser/XSSFilter.cpp: Removed.
        * html/parser/XSSFilter.h: Removed.

2011-05-30  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Hausmann.

        WebKit2: Enable serializing of data types needed for cross-process accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=61694

        Expose a public clearAll() function to reset WebCore::Animation.

        No new functionality, so no new tests.

        * platform/animation/Animation.h:
        (WebCore::Animation::clearAll):

2011-05-30  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Alexey Proskuryakov.

        Audio and video files saved to the Application Cache should preserve the original file extension
        https://bugs.webkit.org/show_bug.cgi?id=61750
        <rdar://9524922>

        No new tests, it isn't possible to check the name of the file in the cache from within
        DRT. Changes verified manually.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::store): Append the original file extension to the cache
            file name.
        (WebCore::ApplicationCacheStorage::writeDataToUniqueFileInDirectory): Add extension parameter.
        * loader/appcache/ApplicationCacheStorage.h:

2011-05-30  Jer Noble  <jer.noble@apple.com>

        Reviewed by Dan Bernstein.

        Play/Pause button in wrong state when entering full screen on Vimeo
        https://bugs.webkit.org/show_bug.cgi?id=61754

        Update the play/pause button inside reset().  This ensures the button is in
        the correct state when the controls are created after playback has already
        started.

        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::reset):

2011-05-30  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Hausmann.

        WebKit2: Enable serializing of data types needed for cross-process accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=61694

        Added a public TimingFunction::type() method.

        No new functionality, so no new tests.

        * platform/animation/TimingFunction.h:
        (WebCore::TimingFunction::type):

2011-05-30  Noam Rosenthal  <noam.rosenthal@nokia.com>

        BUILD FIX for r87697 on Windows/Symbian

        For now enabling TextureMapper for Mac/Linux only.

        * WebCore.pri:

2011-05-30  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX for r87692 with !ENABLE(FULLSCREEN_API)

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::determineDispatchBehavior): Mark
        shadowRoot as an unused parameter with !ENABLE(FULLSCREEN_API).

2011-05-30  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Andreas Kling.

        [Texmap][Qt] Enable TextureMapper by default
        https://bugs.webkit.org/show_bug.cgi?id=61740

        Make CONFIG+=texmap an opt-out instead of an opt-in.

        No new functionality so no new tests.

        * WebCore.pri:

2011-05-30  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] fast/css/font-face-zero-hash-key.html is crashing on the bots
        https://bugs.webkit.org/show_bug.cgi?id=61693

        Do not try to read the FT_Face from m_scaledFont if it m_scaledFont is
        null. A recent change fixing 0-pixel-size fonts means that m_scaledFont
        may now be null.

        No new tests. This change should cause fast/css/font-face-zero-hash-key.html
        to stop crashing.

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Do a null check before accessing
        m_scaledFont.

2011-05-30  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Disable accelerated plugins/media until they're working.
        https://bugs.webkit.org/show_bug.cgi?id=61687

        Until this works properly, we should indicate that our media implementation
        in texture mapper doesn't support accelerated compositing.

        This makes LayoutTests/compositing/video/* work again.

        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        (WebCore::MediaPlayerPrivateQt::supportsAcceleratedRendering):
        (WebCore::MediaPlayerPrivateQt::platformLayer):

2011-05-30  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Adam Barth.

        [Chromium] Fix regression after r87628.
        https://bugs.webkit.org/show_bug.cgi?id=61733

        Having r87628 in place, Chrome reliability bot crashes in
        WebCore::HTMLLinkElement::onloadTimerFired.

        This is because the change makes WebCore::CachedResource::setRequest to
        call checkNotify on request reset.  HTMLLinkElement registers itself as
        CachedResource client via m_cachedSheet, which can happen even if
        m_cachedLinkResource wasn't set.  As a result,
        WebCore::HTMLLinkElement::notifyFinished is got called with unset
        m_cachedLinkResource, which causes a crash in
        HTMLLinkElement::onloadTimerFired

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::notifyFinished):

2011-05-30  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler and Simon Fraser.

        REGRESSION (r87622): Scrubbing a Vimeo movie when in fullscreen stops playback; no way to make it start again
        https://bugs.webkit.org/show_bug.cgi?id=61717
        rdar://problem/9522272

        May be some good way to test this later. No immediate idea about the best way.

        When a media element is taken into full-screen mode, stop events from propagating
        outside the media element's shadow DOM, EventDispatcher::determineDispatchBehavior()
        has been changed to take a shadow root node. In our full screen media element check,
        we check to see if the passed shadow root is the shadow root of the full screen media
        element, and if so, specify events should StayInsideShadowDOM. The end result is that
        inside EventDispatcher::ensureEventAncestors, an ancestor chain is built up all the
        way from the SliderThumb to the video element's shadow root, but no further.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::determineDispatchBehavior): Restrict events to the
        shadow DOM when showing a full screen video.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Removed code to manage full screen controls.
        The events telling us about activity in the shadow DOM no longer bubble out so we need to
        handle this inside the shadow DOM on the root element.
        (WebCore::HTMLMediaElement::play): Ditto.
        (WebCore::HTMLMediaElement::playbackProgressTimerFired): Ditto.
        (WebCore::HTMLMediaElement::defaultEventHandler): Ditto.
        (WebCore::HTMLMediaElement::enterFullscreen): Ditto.
        (WebCore::HTMLMediaElement::exitFullscreen): Ditto.
        * html/HTMLMediaElement.h: Added isPlaying function, removed things moved to the root element.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlVolumeSliderContainerElement::defaultEventHandler): Rolled out
        changes that tried to make special rules for events using preDispatchEventHandler and such.
        This rolls out both r87622 and r87655.
        (WebCore::MediaControlMuteButtonElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlPanelMuteButtonElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlPlayButtonElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlSeekButtonElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlRewindButtonElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlReturnToRealtimeButtonElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlTimelineElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlVolumeSliderElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlFullscreenButtonElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::defaultEventHandler): Ditto.
        * html/shadow/MediaControlElements.h: Ditto.

        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::MediaControlRootElement): Initialize new data members.
        (WebCore::MediaControlRootElement::playbackStarted): Start the timer so we will consider
        hiding the controls later.
        (WebCore::MediaControlRootElement::playbackProgressed): Hide the controls if the mouse
        is no longer over the controls.
        (WebCore::MediaControlRootElement::playbackStopped): Stop the timer since we only hide
        automatically if we're playing.
        (WebCore::MediaControlRootElement::enteredFullscreen): Start the timer.
        (WebCore::MediaControlRootElement::exitedFullscreen): Stop the timer since we only care
        if we are full screen.
        (WebCore::MediaControlRootElement::containsRelatedTarget): Added. Helper for next function.
        (WebCore::MediaControlRootElement::defaultEventHandler): Do the hide/show and timer functions
        as the mouse is moved in and out.
        (WebCore::MediaControlRootElement::startHideFullscreenControlsTimer): Start the timer if
        needed.
        (WebCore::MediaControlRootElement::hideFullscreenControlsTimerFired): Hide if the conditions
        are met.
        (WebCore::MediaControlRootElement::stopHideFullscreenControlsTimer): Stop the timer.

        * html/shadow/MediaControlRootElement.h: Added new functions and data members.


2011-05-30  Gavin Peters  <gavinp@chromium.org>

        Reviewed by Adam Barth.

        prevent HTMLLinkElement from watching multiple CachedResources
        https://bugs.webkit.org/show_bug.cgi?id=61686

        If we modify an existing link element, stop listening to the previous
        cached resource, to prevent double notifications (which crash).

        Test: fast/dom/HTMLLinkElement/prefetch-too-many-clients.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):

2011-05-30  Peter Varga  <pvarga@webkit.org>

        Unreviewed build fix.

        [Qt][V8] Fix debug build.

        No new tests needed.

        * css/CSSStyleDeclaration.cpp: Add missing header.
        * dom/Text.cpp: Ditto.
        * rendering/InlineTextBox.cpp: Ditto.

2011-05-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87683.
        http://trac.webkit.org/changeset/87683
        https://bugs.webkit.org/show_bug.cgi?id=61729

        Breaks inspector tests on Chromium (Requested by apavlov on
        #webkit).

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update):

2011-05-25  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: node selection is slow in the Elements panel.
        https://bugs.webkit.org/show_bug.cgi?id=60813

        Schedule full style updates rather than request all node styles from the backend up front.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update.reloadAllStyles):
        (WebInspector.StylesSidebarPane.prototype.update):

2011-05-30  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: do not issue frontendReused for reload or navigation.
        https://bugs.webkit.org/show_bug.cgi?id=61192

       - only issue frontendReused when inspector is attached after main resource committed load
       - upon committing loading main resource, reset agents before sending FrameNavigated to page agent
       - Ensure main resource is set early so that abbreviations of URLs in resource tree are consistent after reload
       - do not enable agents explicitly in frontendReused (this is done by backend when resotring state from cookie)

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::restore):
        (WebCore::InspectorAgent::clearFrontend):
        (WebCore::InspectorAgent::didCommitLoad):
        * inspector/InspectorAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/front-end/NetworkManager.js:
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._processCachedResources):
        (WebInspector.ResourceTreeModel.prototype._frameNavigated):
        (WebInspector.ResourceTreeModel.prototype._cleanupFramesAfterNavigation):
        (WebInspector.ResourceTreeModel.prototype._addFramesRecursively):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype._resetResourcesTree):
        (WebInspector.DatabaseTreeElement.prototype.onpopulate):
        (WebInspector.SearchResultsTreeElementsTraverser.prototype._lastTreeElement):
        * inspector/front-end/inspector.js:
        (WebInspector.reset):
        (WebInspector.frontendReused):

2011-05-30  Ryan Sleevi  <rsleevi@chromium.org>

        Reviewed by Darin Adler.

        FEConvolveMatrix::getPixelValue() fails to properly check if y is within bounds, causing it to fail to correctly apply the kernel and edge mode to the first targetY pixels
        https://bugs.webkit.org/show_bug.cgi?id=61603

        Test: svg/filters/feConvolveFilter-y-bounds.svg

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::getPixelValue):

2011-05-30  Nate Chapin  <japhet@chromium.org>

        Reviewed by Antti Koivisto.

        Refactor the CachedResourceLoader -> CachedResource -> CachedResourceRequest
        flow so it's a little less circular.
        https://bugs.webkit.org/show_bug.cgi?id=61666

        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::beginLoadIfNeeded):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::setAutoLoadImages):
        (WebCore::CachedResourceLoader::loadStarted):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::load):

2011-05-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87618.
        http://trac.webkit.org/changeset/87618
        https://bugs.webkit.org/show_bug.cgi?id=61720

        Causes BrowserFocusTest.FocusOnReload to fail (Requested by
        abarth|gardener on #webkit).

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):

2011-05-29  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        WebSocket closing handshake
        https://bugs.webkit.org/show_bug.cgi?id=35721

        Implement WebSocket closing handshake based on Ian Hickson's
        WebSocket protocol draft 76.

        Tests: http/tests/websocket/tests/client-close.html
               http/tests/websocket/tests/server-close.html

        * platform/network/SocketStreamHandleBase.cpp:
        (WebCore::SocketStreamHandleBase::send):
        Do not send a message if we are in Closing state.
        (WebCore::SocketStreamHandleBase::close):
        Do not disconnect if we have pending data which have not been sent yet.
        In this case, the actual disconnection will happen in sendPendingData().
        (WebCore::SocketStreamHandleBase::disconnect):
        Renamed from close(). Disconnect the connection immediately.
        (WebCore::SocketStreamHandleBase::sendPendingData):
        * platform/network/SocketStreamHandleBase.h:
        * websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        Add didStartClosingHandshake(). Add a function argument (ClosingHandshakeCompletionStatus)
        to didClose().
        (WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshake):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshakeCallback):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didCloseCallback):
        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        Fail if close() is attempted before the connection is established.
        Otherwise, set the state to CLOSING and start the closing handshake.
        (WebCore::WebSocket::bufferedAmount):
        If the state is CLOSING, we need to consider buffered data in m_channel and sent after close().
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didReceiveMessage):
        We need to invoke message event in CLOSING state as well as OPEN state.
        (WebCore::WebSocket::didReceiveMessageError):
        (WebCore::WebSocket::didStartClosingHandshake):
        (WebCore::WebSocket::didClose):
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::close):
        Start the closing handshake.
        (WebCore::WebSocketChannel::disconnect):
        Disconnect the socket stream, instead of close.
        (WebCore::WebSocketChannel::didClose):
        (WebCore::WebSocketChannel::didReceiveData): Ditto.
        (WebCore::WebSocketChannel::didFail): Ditto.
        (WebCore::WebSocketChannel::processBuffer):
        Ditto.
        Handle 0xFF 0x00 byte sequence, and discard received data once the closing handshake has started.
        (WebCore::WebSocketChannel::startClosingHandshake):
        Send 0xFF 0x00 byte sequence.
        (WebCore::WebSocketChannel::closingTimerFired):
        Disconnect the socket stream if the closing handshake has timed out.
        * websockets/WebSocketChannel.h:
        m_closing is true if "the WebSocket closing handshake has started" (as stated in the protocol
        specification).
        * websockets/WebSocketChannelClient.h:
        (WebCore::WebSocketChannelClient::didStartClosingHandshake): Added.
        (WebCore::WebSocketChannelClient::didClose): Add closingHandshakeCompletion parameter.
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        Add closingHandshakeCompletion parameter to didClose(), and add didStartClosingHandshake().
        (WebCore::WorkerThreadableWebSocketChannel::Peer::close):
        (WebCore::workerContextDidStartClosingHandshake):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didStartClosingHandshake):
        (WebCore::workerContextDidClose):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didClose):
        * websockets/WorkerThreadableWebSocketChannel.h:

2011-05-29  Adam Barth  <abarth@webkit.org>

        Attempt to fix build by implementing pure virtual function.

        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::shouldHideControls):
        * html/shadow/MediaControlRootElementChromium.h:

2011-05-29  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.

        Controls never hide in full screen after user stops moving mouse
        https://bugs.webkit.org/show_bug.cgi?id=61715
        <rdar://problem/9522182>
        
        When we get a mouse move event in HTMLMediaElement::defaultEventHandler, and we are in full screen,
        show the media controls, and then start a timer.
        
        The timer fires 3 seconds after the user's last mouse movement (timer is restarted on every mouse
        move), and hides the controls.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize our new timer.
        (WebCore::HTMLMediaElement::play): If we are in full screen mode, start our timer to hide the full screen
            controls. We don't want the user to have to move the mouse to hide them when they use the spacebar
            to play.
        (WebCore::HTMLMediaElement::startHideFullscreenControlsTimer): Starts a oneshot timer 3 seconds in the future
            if we are in full screen.
        (WebCore::HTMLMediaElement::hideFullscreenControlsTimerFired): Make sure that we are currently playing, and
            we are in full screen, and hide the controls. We don't want to hide the controls if we are paused.
        (WebCore::HTMLMediaElement::stopHideFullscreenControlsTimer): Stops the timer.
        (WebCore::HTMLMediaElement::defaultEventHandler): If we get a mouse move event and are in full screen, show the
            controls and start a timer to hide them.
        (WebCore::HTMLMediaElement::enterFullscreen): Start a timer to hide the full screen controls. The user shouldn't
            have the move the mouse once they enter full screen to hide the controls.
        (WebCore::HTMLMediaElement::exitFullscreen): Stop the timer to hide the full screen controls.
        * html/HTMLMediaElement.h:
        * html/shadow/MediaControls.h: Added pure virtual shouldHideControls() method.
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::playbackStopped): Stop the timer to hide the full screen controls.
        (WebCore::MediaControlRootElement::shouldHideControls): Added, only report that
            the caller should hide the controls if the panel is not hovered.
        * html/shadow/MediaControlRootElement.h:

2011-05-29  Jer Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        Embedded Vimeo video, when taken fullscreen, is overlapped by content from the enclosing page
        https://bugs.webkit.org/show_bug.cgi?id=61712

        Tests: fullscreen/full-screen-iframe-zIndex.html

        Walk up the ancestor chain for the full-screen element, marking them as full-screen
        ancestors. Then, we apply a pseudo-class to those elements, which disable all their
        stacking-context-creating styles.  Set the z-index of all full-screen elements (and
        the iframes which contain them) to a large value, ensuring they appear above other
        sibling elements.

        This new behavior replaces the previous "-webkit-full-screen-media-document" behavior
        and pesudo-class, so remove it and replace it with the new pseudo-class.

        * css/CSSSelector.cpp:
        (WebCore::nameToPseudoTypeMap): Add -webkit-full-screen-ancestor and remove
            -webkit-full-screen-media-document.
        (WebCore::CSSSelector::pseudoId): Add PseudoFullScreenAncestor and remove
            PseudoFullScreenMediaDocument
        (WebCore::CSSSelector::extractPseudoType): Ditto.
        * css/CSSSelector.h: Ditto.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Remove the
            PseudoFullScreenMediaDocument implementation and replace it with
            PseudoFullScreenAncestor.
        * css/fullscreen.css:
        (:-webkit-full-screen): Add a z-index property.
        (:-webkit-full-screen-ancestor:not(iframe)): Added.  Reset the z-index to
            auto, and reset other stacking-context creating properties.
        * dom/Document.cpp:
        (WebCore::Document::setContainsFullScreenElementRecursively): Recurse up every element
            instead of just the iframe elements.
        (WebCore::Document::webkitWillEnterFullScreenForElement): Ditto.
        * dom/Element.cpp:
        (WebCore::Element::willRemove): Reset our parent's containsFullScreenElement property.
        (WebCore::Element::insertedIntoTree): Ditto.
        (WebCore::Element::containsFullScreenElement): Moved here from HTMLElementBase.
        (WebCore::Element::setContainsFullScreenElement): Ditto.
        * dom/Element.h:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData): Added ivar and initializer for 
            m_containsFullScreenElement.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::HTMLFrameElementBase): Removed ivar and initializer.
        (WebCore::HTMLFrameElementBase::setContainsFullScreenElement): Moved into Element.
        * html/HTMLFrameElementBase.h:
        * rendering/style/RenderStyleConstants.h:

2011-05-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9515650> 30 second rewind button obscured in fullscreen controller when video uses custom inline controls
        https://bugs.webkit.org/show_bug.cgi?id=61714

        * dom/Document.cpp:
        (WebCore::Document::webkitDidEnterFullScreenForElement): Call didBecomeFullscreenElement() on the
        new full screen element.
        (WebCore::Document::webkitWillExitFullScreenForElement): Call willStopBeingFullscreenElement() on
        the full screen element.
        * dom/Element.h:
        (WebCore::Element::didBecomeFullscreenElement): Added with a default implementation that does nothing.
        (WebCore::Element::willStopBeingFullscreenElement): Ditto.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::didBecomeFullscreenElement): Added this override, which calls
        MediaControls::enteredFullscreen().
        (WebCore::HTMLMediaElement::willStopBeingFullscreenElement): Added this override, which calls
        MediaControls::exitedFullscreen().
        * html/HTMLMediaElement.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlFullscreenButtonElement::preDispatchEventHandler): Removed calls to
        enteredFullscreen() and exitedFullscreen() from here, since they are now called in response to
        changes to the fullscreen-ness of the element.

2011-05-29  Darin Adler  <darin@apple.com>

        Reviewed by Kevin Decker.

        REGRESSION (r87622): In media documents, clicking the full screen button and the play button pauses the video
        https://bugs.webkit.org/show_bug.cgi?id=61713

        We need to come up with a way to regression-test these changes. Nothing at the moment.

        The bug is that we removed calls to preventDefault, but we still do need to prevent
        default handling of this event.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlElement::preDispatchEventHandler): Add back the preventDefault
        that was in here before r87622 as well as the stopPropagation that was added in r87622.
        (WebCore::MediaControlMuteButtonElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlPlayButtonElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlSeekButtonElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlRewindButtonElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlReturnToRealtimeButtonElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlFullscreenButtonElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::preDispatchEventHandler): Ditto.

2011-05-29  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Element: Micro-cleanup of scroll methods.
        https://bugs.webkit.org/show_bug.cgi?id=61705

        Do an early return without calculating element boundaries when asked
        to scroll an element without a renderer().

        * dom/Element.cpp:
        (WebCore::Element::scrollIntoView):
        (WebCore::Element::scrollIntoViewIfNeeded):
        (WebCore::Element::scrollByUnits):

2011-05-29  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Fix assertion seen when entering full screen mode for standalone video
        https://bugs.webkit.org/show_bug.cgi?id=61708

        We don't currently have a way to make a regression test for this.

        * dom/Document.cpp:
        (WebCore::Document::setAnimatingFullScreen): Call scheduleForcedStyleRecalc,
        because scheduleStyleRecalc is intended to only be called when the style
        system itself detects recalc is needed.

2011-05-27  Andreas Kling  <kling@webkit.org>

        Reviewed by James Robinson.

        [Qt] Add area check to ImageBufferData::getImageData()
        https://bugs.webkit.org/show_bug.cgi?id=61375

        No change in behavior, just a sanity check.

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::getImageData):

2011-05-29  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=61700
        Need WebKit2 API to get the size of the render tree
        -and corresponding-
        <rdar://problem/9512733>

        New member variable on RenderArena keeps track of the current amount of memory 
        allocated in the arena. The new client function sends this piece of data to 
        WebKit.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::setRenderTreeSize):
        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):
        * rendering/RenderArena.cpp:
        (WebCore::RenderArena::RenderArena):
        (WebCore::RenderArena::allocate):
        (WebCore::RenderArena::free):
        * rendering/RenderArena.h:
        (WebCore::RenderArena::totalRenderArenaSize):

2011-05-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87566.
        http://trac.webkit.org/changeset/87566
        https://bugs.webkit.org/show_bug.cgi?id=61702

        It made all tests assert on Qt in debug mode (Requested by
        Ossy_weekend on #webkit).

        * WebCore.exp.in:
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::suggestedMIMEType):
        (WebCore::Document::lastModified):
        (WebCore::Document::initSecurityContext):
        (WebCore::Document::updateURLForPushOrReplaceState):
        * dom/Document.h:
        (WebCore::Document::setDocumentLoader):
        (WebCore::Document::loader):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        * platform/mac/HTMLConverter.mm:
        (fileWrapperForElement):

2011-05-28  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Dan Bernstein.

        Don't add sub-frames to global history when navigating via back/forward
        https://bugs.webkit.org/show_bug.cgi?id=61701
        <rdar://problem/9521222>

        Instead of just checking whether the load is the first in the frame, we also need to
        check to make sure we're loading in the main frame.

        Not testable due to lack of global history infrastructure in DRT.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::transitionToCommitted):

2011-05-28  Alexey Proskuryakov  <ap@apple.com>

        Suggested by Simon Fraser.

        REGRESSION (r85375): Load event is sometimes lost when multiple image elements use the same URL
        https://bugs.webkit.org/show_bug.cgi?id=61692
        <rdar://problem/9488628>

        * loader/ImageLoader.cpp: (WebCore::ImageLoader::notifyFinished): There was no need to use
        ASSERT_UNUSED here.

2011-05-28  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoff Garen.

        REGRESSION (r85375): Load event is sometimes lost when multiple image elements use the same URL
        https://bugs.webkit.org/show_bug.cgi?id=61692
        <rdar://problem/9488628>

        Test: fast/dom/gc-image-element-2.html

        Manually verified that tests from bug 59604 and from bug 40926 still pass.

        The problem here was that HTMLImageElement::hasPendingActivity() could return false when
        a load (or error) event was still expected to fire.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::setRequest):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::wasCanceled):
        (WebCore::CachedResource::errorOccurred):
        Track whether the load was canceled. We want to always notify clients of load outcome,
        as that's the only way they could make intelligent decisions.

        * dom/ScriptElement.cpp: (WebCore::ScriptElement::execute): Cached resource clients now
        get a notifyFinished call on cancellation. Handle this case, where we don't need the
        execute the script, but also don't need to fire an error event.

        * html/HTMLImageElement.cpp: Moved hasPendingActivity() to header, since it's just a single
        function call now.

        * html/HTMLImageElement.h: (WebCore::HTMLImageElement::hasPendingActivity): There is a large
        window between when CachedResource::isLoading() becomes false and events are queued.
        ImageLoader::haveFiredLoadEvent() is a much better indication of whether we are expecting
        an event to fire.

        * html/HTMLLinkElement.cpp: (WebCore::HTMLLinkElement::onloadTimerFired): Again, don't do
        anything on cancellation.

        * loader/ImageLoader.cpp:
        (WebCore::ImageEventSender::hasPendingEvents): Made it debug-only again, and fixed to
        give an accurate result while looping over the list of events to dispatch.
        (WebCore::ImageLoader::notifyFinished): Don't do anything when cancelled. We don't want to
        switch to a broken image icon, or to dispatch events.
        (WebCore::ImageEventSender::dispatchPendingEvents): Clear the current loader from dispatching
        list, as the event is no longer pending when it's being dispatched.

        * loader/ImageLoader.h: Removed unnecessary hasPendingLoadEvent(). We don't care whether one
        is already pending, we only care if one is expected at some time in the future, and
        !haveFiredLoadEvent() is our best idea of that.

        * dom/XMLDocumentParser.cpp: (WebCore::XMLDocumentParser::notifyFinished): Another place to
        handle cancellation.

2011-05-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Audit all uses of KURL::prettyURL
        https://bugs.webkit.org/show_bug.cgi?id=61201

        As far as I can tell, all the callers of this API are confused.  There
        seems to be a cargo cult of using the "pretty" version of a URL, but in
        reality folks just want the URL itself.  The only case I'm unsure about
        is location.href, which could have some compatibility constraints.
        I've renamed prettyURL to deprecatedString to discourage folks from
        further cargo-culting.

        * WebCore.exp.in:
        * page/Location.cpp:
        (WebCore::Location::href):
        (WebCore::Location::toString):
        * platform/KURL.cpp:
        (WebCore::KURL::deprecatedString):
        * platform/KURL.h:
        * platform/KURLGoogle.cpp:
        (WebCore::KURL::deprecatedString):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::prepareForURL):
        * workers/WorkerLocation.cpp:
        (WebCore::WorkerLocation::href):
        (WebCore::WorkerLocation::toString):

2011-05-28  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Mouse clicks propagate outside full-screen media controls.
        https://bugs.webkit.org/show_bug.cgi?id=61689

        Mouse click events are propagating out of the media controls, so mouse click
        listeners registered on the video element are getting fired when the user
        clicks on media controller buttons.  By default, block propagation of click 
        events from MediaControlElements by overriding preDispatchEventHandler, and
        convert all instances of defaultEventHandler -> preDispatchEventHandler.  Change
        all calls of event->setDefaultHandled() to event->stopPropagation().

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlElement::preDispatchEventHandler): Added.  Block 
            propagation of all mouse click events.
        (WebCore::MediaControlVolumeSliderContainerElement::preDispatchEventHandler):
            Renamed from setDefaultHandled.
        (WebCore::MediaControlMuteButtonElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlPanelMuteButtonElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlPlayButtonElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlSeekButtonElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlRewindButtonElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlReturnToRealtimeButtonElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlTimelineElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlVolumeSliderElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlFullscreenButtonElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::preDispatchEventHandler): Ditto.
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::preDispatchEventHandler): Ditto.
        * html/shadow/MediaControlElements.h:

2011-05-28  Gavin Peters  <gavinp@chromium.org>

        Reviewed by Adam Barth.

        prevent HTMLLinkElement from watching multiple CachedResources
        https://bugs.webkit.org/show_bug.cgi?id=61686

        If we modify an existing link element, stop listening to the previous
        cached resource, to prevent double notifications (which crash).

        Test: fast/dom/HTMLLinkElement/prefetch-too-many-clients.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):

2011-05-28  Tonis Tiigi  <tonistiigi@gmail.com>

        Reviewed by Pavel Feldman.

        Web Inspector: there is a problem with computed style properties with wrong values
        https://bugs.webkit.org/show_bug.cgi?id=60535

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._markUsedProperties):
        (WebInspector.ComputedStylePropertiesSection.prototype.rebuildComputedTrace):

2011-05-26  Antonio Gomes  <agomes@rim.com>

        Reviewed by Andreas Kling.

        Logic error in WebCore/Page/SpatialNavigation.cpp::areRectsPartiallyAligned
        https://bugs.webkit.org/show_bug.cgi?id=61606

        Removed duplicated statement within if condition.

        No new tests. Obvious clean up patch.

        * page/SpatialNavigation.cpp:
        (WebCore::areRectsPartiallyAligned):

2011-05-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        CG BitmapImage needs to check for valid CGImage in a couple of places
        https://bugs.webkit.org/show_bug.cgi?id=61684
        <rdar://problem/9519348>

        BitmapImage::getCGImageArray() can throw an exception if frameAtIndex()
        returns null, which it may do if the image is corrupted or still
        loading. Protect against that here and in getFirstCGImageRefOfSize().

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::getFirstCGImageRefOfSize):
        (WebCore::BitmapImage::getCGImageArray):

2011-05-27  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Adam Barth.

        Add Frame parameter to all StorageArea methods. The chromium
        embedder uses the Frame as context to decide whether or not
        to allow usage of the storage API.
        https://bugs.webkit.org/show_bug.cgi?id=61581

        Test: platform/chromium/permissionclient/storage-permission.html

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

2011-05-27  Nate Chapin  <japhet@chromium.org>

        Reviewed by Jian Li.

        Keep a reference to BlobResourceHandle before calling doNotifyFinish()
        asynchronously to ensure it's still safe in the main thread.

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

        I triggered this crash in fast/files/file-reader-abort.html during a
        refactor that changed timings slightly.

        * platform/network/BlobResourceHandle.cpp:
        (WebCore::doNotifyFinish):
        (WebCore::BlobResourceHandle::notifyFinish):
        * platform/network/BlobResourceHandle.h:
        (WebCore::BlobResourceHandle::aborted):

2011-05-27  Stephanie Lewis  <slewis@apple.com>

        Unreviewed.

        Fix a typo in the order_file flag.

        * Configurations/Base.xcconfig:

2011-05-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Always use the default localization strategy
        https://bugs.webkit.org/show_bug.cgi?id=61670
        <rdar://problem/9516130>

        Always use the default localization strategy when there's no platform strategy.

        * platform/DefaultLocalizationStrategy.cpp:
        (WebCore::DefaultLocalizationStrategy::shared):
        * platform/DefaultLocalizationStrategy.h:
        * platform/LocalizedStrings.cpp:
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::searchableIndexIntroduction):
        (WebCore::submitButtonDefaultLabel):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::defaultDetailsSummaryText):
        (WebCore::copyImageUnknownFileLabel):
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagCopyImageUrlToClipboard):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagSelectAll):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchInSpotlight):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagShowFonts):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagStyles):
        (WebCore::contextMenuItemTagShowColors):
        (WebCore::contextMenuItemTagSpeechMenu):
        (WebCore::contextMenuItemTagStartSpeaking):
        (WebCore::contextMenuItemTagStopSpeaking):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagTextDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagRightToLeft):
        (WebCore::contextMenuItemTagCorrectSpellingAutomatically):
        (WebCore::contextMenuItemTagSubstitutionsMenu):
        (WebCore::contextMenuItemTagShowSubstitutions):
        (WebCore::contextMenuItemTagSmartCopyPaste):
        (WebCore::contextMenuItemTagSmartQuotes):
        (WebCore::contextMenuItemTagSmartDashes):
        (WebCore::contextMenuItemTagSmartLinks):
        (WebCore::contextMenuItemTagTextReplacement):
        (WebCore::contextMenuItemTagTransformationsMenu):
        (WebCore::contextMenuItemTagMakeUpperCase):
        (WebCore::contextMenuItemTagMakeLowerCase):
        (WebCore::contextMenuItemTagCapitalize):
        (WebCore::contextMenuItemTagChangeBack):
        (WebCore::contextMenuItemTagOpenVideoInNewWindow):
        (WebCore::contextMenuItemTagOpenAudioInNewWindow):
        (WebCore::contextMenuItemTagCopyVideoLinkToClipboard):
        (WebCore::contextMenuItemTagCopyAudioLinkToClipboard):
        (WebCore::contextMenuItemTagToggleMediaControls):
        (WebCore::contextMenuItemTagToggleMediaLoop):
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        (WebCore::contextMenuItemTagInspectElement):
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::AXWebAreaText):
        (WebCore::AXLinkText):
        (WebCore::AXListMarkerText):
        (WebCore::AXImageMapText):
        (WebCore::AXHeadingText):
        (WebCore::AXDefinitionListTermText):
        (WebCore::AXDefinitionListDefinitionText):
        (WebCore::AXARIAContentGroupText):
        (WebCore::AXButtonActionVerb):
        (WebCore::AXRadioButtonActionVerb):
        (WebCore::AXTextFieldActionVerb):
        (WebCore::AXCheckedCheckBoxActionVerb):
        (WebCore::AXUncheckedCheckBoxActionVerb):
        (WebCore::AXLinkActionVerb):
        (WebCore::AXMenuListPopupActionVerb):
        (WebCore::AXMenuListActionVerb):
        (WebCore::missingPluginText):
        (WebCore::crashedPluginText):
        (WebCore::multipleFileUploadText):
        (WebCore::unknownFileSizeText):
        (WebCore::uploadFileText):
        (WebCore::allFilesText):
        (WebCore::keygenMenuItem512):
        (WebCore::keygenMenuItem1024):
        (WebCore::keygenMenuItem2048):
        (WebCore::keygenKeychainItemName):
        (WebCore::imageTitle):
        (WebCore::mediaElementLoadingStateText):
        (WebCore::mediaElementLiveBroadcastStateText):
        (WebCore::localizedMediaControlElementString):
        (WebCore::localizedMediaControlElementHelpText):
        (WebCore::localizedMediaTimeDescription):
        (WebCore::validationMessageValueMissingText):
        (WebCore::validationMessageValueMissingForCheckboxText):
        (WebCore::validationMessageValueMissingForFileText):
        (WebCore::validationMessageValueMissingForMultipleFileText):
        (WebCore::validationMessageValueMissingForRadioText):
        (WebCore::validationMessageValueMissingForSelectText):
        (WebCore::validationMessageTypeMismatchText):
        (WebCore::validationMessageTypeMismatchForEmailText):
        (WebCore::validationMessageTypeMismatchForMultipleEmailText):
        (WebCore::validationMessageTypeMismatchForURLText):
        (WebCore::validationMessagePatternMismatchText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageStepMismatchText):

2011-05-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        First swipe at resolving <rdar://problem/9125145> and https://bugs.webkit.org/show_bug.cgi?id=61494
        
        Make the Document be intelligent about returning its DocumentLoader, including the possibility that
        the DocumentLoader will be null.

        No new tests. No change in behavior.

        Instead of storing the DocumentLoader at construction and never changing it,
        always calculate it based on the FrameLoader's current DocumentLoader:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::suggestedMIMEType):
        (WebCore::Document::lastModified):
        (WebCore::Document::initSecurityContext):
        (WebCore::Document::updateURLForPushOrReplaceState):
        (WebCore::Document::loader):
        * dom/Document.h:

        Null-check or ASSERT that the DocumentLoader exists (or both) depending on the scenario:
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        * platform/mac/HTMLConverter.mm:
        (fileWrapperForElement):

        * WebCore.exp.in:

2011-05-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        30 second rewind button obscured in fullscreen controller
        https://bugs.webkit.org/show_bug.cgi?id=61663

        If reset() is called while in full-screen mode, make sure to show and hide
        the correct controls for that mode.

        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::reset):

2011-05-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        GraphicsLayers for overflow controls on iframe without clipping layer left out of layer tree
        https://bugs.webkit.org/show_bug.cgi?id=61590

        Adds overflow control layers to the compositor tree for layers without clipping layers regardless of whether the
        backing is parented.  This ensures that the scroll corner layer for an iframe without a clipping layer ends up
        in the final layer tree.  We don't currently render resizers for iframes, but we will soon and this keeps the
        graphics layer tree consistent.

        Test: compositing/iframes/resizer.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):

2011-05-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTMLVideoElement::currentSrc() should return a KURL
        https://bugs.webkit.org/show_bug.cgi?id=61578

        I suspect we got into this mess because the author of this code didn't
        know about the URL attribute in WebKit IDL, which is super useful!

        Bad news: The line of code in question seems to have another bug, which
        I've documented in a FIXME.  Let the yak shaving continue!

        * html/HTMLMediaElement.cpp:
        (WebCore::urlForLogging):
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::isSafeToLoadURL):
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        (WebCore::HTMLMediaElement::getPluginProxyParams):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::currentSrc):
        (WebCore::HTMLMediaElement::currentURL):
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::checkOrigin):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteMediaURL):
            - This complete URL call was unnecessary because currentSrc is
              already absolute.

2011-05-27  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Add support for showing URL of DOMWindow in heap profiles.
        https://bugs.webkit.org/show_bug.cgi?id=61177

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get className):

2011-05-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        Rubber-stamped by Rob Buis.

        embedded SVG object doesn't scale right
        https://bugs.webkit.org/show_bug.cgi?id=10526

        Fixes crash in svg/custom/immutable-properties.html, seen on the bots.

        * svg/SVGLength.cpp:
        (WebCore::SVGLength::determineViewport): Oops forgot to merge-in a null check before landing.

2011-05-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Rob Buis.

        embedded SVG object doesn't scale right
        https://bugs.webkit.org/show_bug.cgi?id=10526

        <object> tags should treat width/height on a referenced SVG as intrinsic width/height
        https://bugs.webkit.org/show_bug.cgi?id=11976

        Incorrect handling of percentage values for width/height on embedded elements
        https://bugs.webkit.org/show_bug.cgi?id=14793

        WebKit fails some WICD 1.0 core test cases
        https://bugs.webkit.org/show_bug.cgi?id=15836 (partially fixed, all 'rightsizing' tests are fixed)

        CSS 2.1: Support replaced elements with relative intrinsic sizes
        https://bugs.webkit.org/show_bug.cgai?id=15849 (partially fixed)

        SVG embedded as <object> doesn't respect width/height attributes
        https://bugs.webkit.org/show_bug.cgi?id=34972

        Explicit size of object tag ignored
        https://bugs.webkit.org/show_bug.cgi?id=37086

        Add partial support of CSS 2.1 replaced elements with intrinsic size. The feature itself is complete but has only
        been implemented for RenderPart, to support SVG content document size negotiation. It serves as starting point for a generalization, in future.
        The changes in RenderPart are a 1:1 transliteration of the spec (http://www.w3.org/TR/CSS21/visudet.html#inline-replaced-width/height, see code).

        SVG 1.1 says:
        The 'width' attribute on the outermost svg element establishes the viewport's width, unless the following conditions are met:
        ...
        and there are CSS-compatible positioning properties ([CSS2], section 9.3) specified on the referencing element (e.g., the 'object' element)
        or on the containing document's outermost svg element that are sufficient to establish the width of the viewport. Under these conditions,
        the positioning properties establish the viewport's width.

        If an <object> carries width/height attributes, these specify the viewport size of the embedded SVG, instead of its own
        width/height or viewBox properties. If an <object> has no width/height information, its intrinsic size needs to be calculated depending
        on the intrinsic ratio (viewBox width divided by height ratio) and the width/height properties on the outermost referenced <svg> element.
        This requires a negotiation between the host document and the embedded document.
        (There are several more factors that need to be considered, the CSS spec covers this and the RenderPart::computeReplaced* code covers this.)

        Fixes dozens of long-standing bug reports. The number one integration issue when using SVG through <object> is resolved: "right sizing".

        Tests: http/tests/misc/object-embedding-svg-delayed-size-negotiation.xhtml
               svg/custom/object-no-size-attributes.xhtml (bug 11976, from Eric Seidel)
               svg/custom/object-sizing-explicit-height.xhtml (bug 10526, from Ryan Cannon)
               svg/custom/object-sizing-explicit-width-height.xhtml
               svg/custom/object-sizing-explicit-width.xhtml (bug 14793, from Oliver Hunt)
               svg/custom/object-sizing-no-width-height-change-content-box-size.xhtml
               svg/custom/object-sizing-no-width-height.xhtml
               svg/custom/object-sizing.xhtml (bug 37086, from Jeff Schiller)
               svg/wicd/rightsizing-grid.xhtml (bug 15836, WICD rightsizing test now works)
               svg/wicd/test-rightsizing-a.xhtml (ditto)
               svg/wicd/test-rightsizing-b.xhtml (ditto)
               svg/zoom/page/zoom-svg-through-object-with-absolute-size-2.xhtml
               svg/zoom/page/zoom-svg-through-object-with-absolute-size.xhtml
               svg/zoom/page/zoom-svg-through-object-with-huge-size.xhtml
               svg/zoom/page/zoom-svg-through-object-with-override-size.html (bug 34972, from Andreas Kling)
               svg/zoom/page/zoom-svg-through-object-with-percentage-size.xhtml
               svg/zoom/page/zoom-svg-through-object-with-text.xhtml

        * platform/Length.h:
        (WebCore::Length::isSpecified):
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::embeddedSVGContentRenderer):
        (WebCore::RenderPart::computeEmbeddedDocumentReplacedWidth):
        (WebCore::RenderPart::computeEmbeddedDocumentReplacedHeight):
        (WebCore::RenderPart::computeReplacedLogicalWidth):
        (WebCore::RenderPart::computeReplacedLogicalHeight):
        (WebCore::RenderPart::layout):
        * rendering/RenderPart.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        (WebCore::RenderReplaced::computeReplacedLogicalHeight):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::RenderSVGRoot):
        (WebCore::RenderSVGRoot::computeIntrinsicRatio):
        (WebCore::RenderSVGRoot::computeIntrinsicWidth):
        (WebCore::RenderSVGRoot::computeIntrinsicHeight):
        (WebCore::RenderSVGRoot::negotiateSizeWithHostDocumentIfNeeded):
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth):
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight):
        (WebCore::RenderSVGRoot::layout):
        * rendering/svg/RenderSVGRoot.h:
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::determineViewport):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentScale):
        (WebCore::SVGSVGElement::setCurrentScale):
        (WebCore::SVGSVGElement::currentViewBoxRect):
        (WebCore::SVGSVGElement::viewBoxToViewTransform):
        * svg/SVGSVGElement.h:

2011-05-27  Michael Saboff  <msaboff@apple.com>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=61646
        Duplicate Fonts Put in Font Cache on Mac Due to Duplicate CGFontRefs for Same Font

        Change the platformIsEqual to just compare the m_font members if
        either is not null.

        No tests added - functionality unchanged, fixing memory abandonment.

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::platformIsEqual):

2011-05-25  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Dirk Schulze.

        [GTK][Cairo] Twitter rendering breaks
        https://bugs.webkit.org/show_bug.cgi?id=60917

        When instantiating a cairo_scaled_font_t font would put the font in an error state,
        leave the m_scaledFont member of platform data as null. Rendering with scaled fonts
        in the error state can later lead to corrupted rendering.

        Due to this change, we must always null check cairo_scaled_font_t and the platform
        data now carries the cairo_font_face_t object with it, so that it can be accessed later
        if there is no cairo_scaled_font_t.

        Test: platform/gtk/fonts/zero-pixel-sized-fonts.html

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs): If the scaled font is null, do not render.
        * platform/graphics/freetype/FontPlatformData.h: Now include the cairo_font_face_t.
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Initialize the new member.
        (WebCore::FontPlatformData::operator=): Carry over the new member.
        (WebCore::FontPlatformData::operator==): Check equality with the new member.
        (WebCore::FontPlatformData::initializeWithFontFace): If the initialization of m_scaledFont
        put the font into an error state, then just free it and return.
        (WebCore::FontPlatformData::hasCompatibleCharmap): The font always has a compatible charmap
        when the scaled font is null, because rendering is always a no-op and the font data never
        needs to be read.
        * platform/graphics/freetype/GlyphPageTreeNodeFreeType.cpp:
        (WebCore::GlyphPage::fill): Don't read font data when the scaled font is null.
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::platformInit): Return early when there's no scaled font.
        (WebCore::SimpleFontData::scaledFontData): Use the new m_font member.
        (WebCore::SimpleFontData::containsCharacters): Return early when there's no scaled font.
        (WebCore::SimpleFontData::platformWidthForGlyph): Ditto.

2011-05-27  David Levin  <levin@chromium.org>

        Reviewed by Darin Fisher.

        Need a callback for when the preferred rendered size may have changed.
        https://bugs.webkit.org/show_bug.cgi?id=61309

        No new tests needed since no new functionality is exposed.

        * page/Chrome.cpp:
        (WebCore::Chrome::layoutUpdated): Plumbed through the call.
        * page/Chrome.h: Added the new method.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::layoutUpdated): Ditto.
        * page/FrameView.cpp:
        (WebCore::FrameView::layout): Added a callback for whem a layout has finished.

2011-05-27  Stephanie Lewis  <slewis@apple.com>

        Rubber Stamped by Adam Roben.

        Update Order Files.  Use -order_file flag since it can order more of the binary.

        * Configurations/Base.xcconfig:
        * WebCore.order:

2011-05-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87464.
        http://trac.webkit.org/changeset/87464
        https://bugs.webkit.org/show_bug.cgi?id=61643

        client-close/server-close tests are flaky on Chromium Mac and
        Windows (Requested by aklein on #webkit).

        * platform/network/SocketStreamHandleBase.cpp:
        (WebCore::SocketStreamHandleBase::send):
        (WebCore::SocketStreamHandleBase::close):
        (WebCore::SocketStreamHandleBase::sendPendingData):
        * platform/network/SocketStreamHandleBase.h:
        * websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didCloseCallback):
        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::bufferedAmount):
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didReceiveMessage):
        (WebCore::WebSocket::didReceiveMessageError):
        (WebCore::WebSocket::didClose):
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::close):
        (WebCore::WebSocketChannel::disconnect):
        (WebCore::WebSocketChannel::didClose):
        (WebCore::WebSocketChannel::didReceiveData):
        (WebCore::WebSocketChannel::didFail):
        (WebCore::WebSocketChannel::processBuffer):
        * websockets/WebSocketChannel.h:
        * websockets/WebSocketChannelClient.h:
        (WebCore::WebSocketChannelClient::didClose):
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Peer::close):
        (WebCore::workerContextDidClose):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didClose):
        * websockets/WorkerThreadableWebSocketChannel.h:

2011-05-27  Rob Buis  <rbuis@rim.com>

        Reviewed by Nikolas Zimmermann.

        https://bugs.webkit.org/show_bug.cgi?id=19995
        hixie.ch : anchor Link fails with fragment identifiers inside SVG fragments.

        Only allow links to animation elements within the document.

        Test: svg/hixie/links/003.xml

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):

2011-05-27  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        Update RGBA color serialization to match HTML5.
        https://bugs.webkit.org/show_bug.cgi?id=61449

        HTML5 now specifies that fully transparent colors should have their alpha value
        serialized to "0" rather than "0.0" (followed by any number of extra zeroes.)

        The number of decimals for alpha values between 0 and 1 is not specified,
        so match Gecko and Presto by returning the lowest number of decimals needed
        to represent the number. (No more trailing zeroes.)

        * platform/graphics/Color.cpp:
        (WebCore::Color::serialized):

2011-05-27  Hans Wennborg  <hans@chromium.org>

        Reviewed by Tony Gentilcore.

        IndexedDB: Support mutating cursors on top of LevelDB
        https://bugs.webkit.org/show_bug.cgi?id=61615

        We need to support the case where a new node is added to the tree in a
        transaction after the TreeIterator has covered the whole tree.

        Since this is done lazily, i.e. we set a flag that the tree might have
        changed, and act upon it later, some members need to be mutable,
        because we might need to re-seek the tree iterator in a const function.

        Test: storage/indexeddb/mutating-cursor.html
              storage/indexeddb/mozilla/cursor-mutation-objectstore-only.html (existing)

        * platform/leveldb/LevelDBTransaction.cpp:
        (WebCore::LevelDBTransaction::set):
        (WebCore::LevelDBTransaction::TreeIterator::reset):
        (WebCore::LevelDBTransaction::TreeIterator::~TreeIterator):
        (WebCore::LevelDBTransaction::TreeIterator::TreeIterator):
        (WebCore::LevelDBTransaction::TransactionIterator::TransactionIterator):
        (WebCore::LevelDBTransaction::TransactionIterator::~TransactionIterator):
        (WebCore::LevelDBTransaction::TransactionIterator::next):
        (WebCore::LevelDBTransaction::TransactionIterator::prev):
        (WebCore::LevelDBTransaction::TransactionIterator::key):
        (WebCore::LevelDBTransaction::TransactionIterator::value):
        (WebCore::LevelDBTransaction::TransactionIterator::treeChanged):
        (WebCore::LevelDBTransaction::TransactionIterator::refreshTreeIterator):
        (WebCore::LevelDBTransaction::registerIterator):
        (WebCore::LevelDBTransaction::unregisterIterator):
        (WebCore::LevelDBTransaction::notifyIteratorsOfTreeChange):
        * platform/leveldb/LevelDBTransaction.h:
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::open):

2011-05-27  Sujin Park  <sujjin.park@gmail.com>

        Unreviewed, buildfix if --no-javascript-debugger.

        Regression(R84125): Broke GTK build
        https://bugs.webkit.org/show_bug.cgi?id=60698

        No new tests since this doesn't change any behavior.

        * inspector/WorkerInspectorController.h:

2011-05-26  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Tony Chang.

        webkit should implement the dropzone attribute
        https://bugs.webkit.org/show_bug.cgi?id=58210

        Add support for dropzone attribute.
        http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-dropzone-attribute
        If a drag event was not canceled by JavaScript, look for an element with a dropzone attribute.
        If there is such an element, and it matches the drag data store, set the action defined by that
        element and continue processing the drag and drop operation.

        Tests: fast/events/dropzone-001.html
               fast/events/dropzone-002.html
               fast/events/dropzone-003.html
               fast/events/dropzone-004.html

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::hasFileOfType):
        (WebCore::Clipboard::hasStringOfType):
        (WebCore::convertDropZoneOperationToDragOperation):
        (WebCore::convertDragOperationToDropZoneOperation):
        (WebCore::Clipboard::processDropZoneKeyword):
        * dom/Clipboard.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.idl:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::findDropZone):
        (WebCore::EventHandler::updateDragAndDrop):
        * page/EventHandler.h:

2011-05-27  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r87467.

        * page/wince/FrameWinCE.cpp:

2011-05-26  Hans Wennborg  <hans@chromium.org>

        Reviewed by Tony Gentilcore.

        IndexedDB: Support NO_DUPLICATE cursors on LevelDB back-end
        https://bugs.webkit.org/show_bug.cgi?id=61517

        Support cursors where the direction is set to NEXT_NO_DUPLICATE,
        or PREV_NO_DUPLICATE, as specified here:
        http://www.w3.org/TR/IndexedDB/#widl-IDBCursor-NEXT_NO_DUPLICATE

        This is tested by storage/indexeddb/mozilla/indexes.html

        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::openObjectStoreCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexKeyCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexCursor):

2011-05-26  Hans Wennborg  <hans@chromium.org>

        Reviewed by Tony Gentilcore.

        LevelDB: turn on paranoid checks and verify checksums, log errors
        https://bugs.webkit.org/show_bug.cgi?id=61516

        This allows for detection of corrupted databases.
        Even if we can't recover from a corrupted database, discovering the
        problem is a step in the right direction.

        No new functionality, no new tests.

        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::open):
        (WebCore::LevelDBDatabase::put):
        (WebCore::LevelDBDatabase::remove):
        (WebCore::LevelDBDatabase::get):
        (WebCore::LevelDBDatabase::write):
        (WebCore::IteratorImpl::checkStatus):
        (WebCore::IteratorImpl::seekToLast):
        (WebCore::IteratorImpl::seek):
        (WebCore::IteratorImpl::next):
        (WebCore::IteratorImpl::prev):
        (WebCore::LevelDBDatabase::createIterator):

2011-05-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        CachedResourceLoader stores data: urls in validated URL set
        https://bugs.webkit.org/show_bug.cgi?id=61604

        CachedResourceLoader maintains a set of URLs that have been validated to avoid validating the same resource
        multiple times for loads within the same document.  This doesn't make sense for data: URLs and just wastes
        memory.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::revalidateResource):
        (WebCore::CachedResourceLoader::loadResource):

2011-05-23  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        [Refactoring] DocumentMarker should be carried around as a pointer, not value.
        https://bugs.webkit.org/show_bug.cgi?id=61262

        - Changed return value of markersInRange() from Vector<DocumentMarker> to Vector<DocumentMarker*>.
        - Introduced markersFor() that returns Vector<DocumentMarker*>
        - Removed DocumentMarkerController::setRenderedRectForMarker() which now can be replaced by
          RenderedDocumentMarker::setRenderedRect().
        - This change didn't remove markersForNode() beucase there is patches on review which depends
          markersForNode(). I'll remove its call after these patches are landed.
        
        No new tests. No behavior change.

        * WebCore.exp.in:
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addTextMatchMarker):
        (WebCore::DocumentMarkerController::markersFor):
        (WebCore::DocumentMarkerController::markersInRange):
        (WebCore::DocumentMarkerController::hasMarkers):
        * dom/DocumentMarkerController.h:
        * dom/RenderedDocumentMarker.h:
        (WebCore::toRenderedDocumentMarker):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::originalStringForAutocorrectionAtBeginningOfSelection):
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartHasMarkerFor):
        * editing/SpellingCorrectionController.cpp:
        (WebCore::markersHaveIdenticalDescription):
        (WebCore::SpellingCorrectionController::respondToChangedSelection):
        (WebCore::SpellingCorrectionController::recordSpellcheckerResponseForModifiedCorrection):
        (WebCore::SpellingCorrectionController::processMarkersOnTextToBeReplacedByResult):
        * editing/SpellingCorrectionController.h:
        (WebCore::SpellingCorrectionController::shouldStartTimerFor):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::paintDocumentMarkers):
        * rendering/InlineTextBox.h:
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer):

2011-05-26  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        WebCore::HTMLSummaryElement::isMainSummary ReadAV@NULL
        https://bugs.webkit.org/show_bug.cgi?id=61511

        Removed Unnecessary wrong cast to Elmement, which can be non-Element.

        Test: fast/html/details-summary-document-child.html

        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::detailsElement):

2011-05-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Ryosuke Niwa.

        FrameLoader cannot be null
        https://bugs.webkit.org/show_bug.cgi?id=61609

        This code has a bunch of cargo-cult null checking.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::createRenderer):
        (WebCore::HTMLMediaElement::attach):
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::getPluginProxyParams):
        (WebCore::HTMLMediaElement::createMediaPlayerProxy):
        (WebCore::HTMLMediaElement::updateWidget):

2011-05-26  Shane Stephens  <shanestephens@google.com>

        Reviewed by James Robinson.

        REGRESSION (r81992): layout triggered by position update fails to apply when transform is updated at same time
        https://bugs.webkit.org/show_bug.cgi?id=60689

        When a transform is modified in a style, we were upgrading our understanding
        of the difference from PositionedMovementOnly to SimplifiedLayout.  However,
        if the position of the style is independently changed at the same time, both
        PositionedMovement and SimplifiedLayout passes are required.

        Test: transforms/2d/set-transform-and-top.html

        * rendering/RenderObject.cpp:
        Added checks for SimplifiedLayoutAndPositionedMovement - when encountered,
        set both PositionedMovement and SimplifiedLayout update flasgs. 
        * rendering/style/RenderStyleConstants.h:
        Added a new StyleDifference enum value (SimplifiedLayoutAndPositionedMovement) for 
        cases when both PositionedMovement and SimplifiedLayout are required.

2011-05-26  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Implement webkit margin collapse CSS properties in CSSStyleApplyProperty
        https://bugs.webkit.org/show_bug.cgi?id=61589

        No new tests as no new functionality added.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Add handlers for:
          CSSPropertyWebkitMarginBeforeCollapse
          CSSPropertyWebkitMarginAfterCollapse
          CSSPropertyWebkitMarginTopCollapse
          CSSPropertyWebkitMarginBottomCollapse
          CSSPropertyWebkitMarginCollapse
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove cases that are no longer required.

2011-05-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Support cross-origin property for images
        https://bugs.webkit.org/show_bug.cgi?id=61015

        This patch add support for the crossorigin attribute of images and
        teaches 2D canvas to respect that flag and not taint a canvas if the
        image drawn on the canvas is allowed by CORS.

        While I was editing this code, I couldn't resist a couple touch-up
        changes.

        Tests: http/tests/security/canvas-remote-read-remote-image-allowed-with-credentials.html
               http/tests/security/canvas-remote-read-remote-image-allowed.html
               http/tests/security/canvas-remote-read-remote-image-blocked-no-crossorigin.html

        * html/HTMLAttributeNames.in:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::securityOrigin):
        * html/HTMLCanvasElement.h:
        * html/HTMLImageElement.idl:
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::checkOrigin):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createPattern):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::passesAccessControlCheck):
        * loader/cache/CachedResource.h:

2011-05-26  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Fix worldID and destinationDomain argument names
        https://bugs.webkit.org/show_bug.cgi?id=61571

        As part of working on r87423, I noticed a couple of inconsistencies in
        argument names:
        - We would use worldId in .h files but worldID in .cpp files.
          Standardize on the latter
        - SecurityOrigin::addOriginAccessWhitelistEntry would take a
          destinationDomains argument, even though the actual parameter was for
          a single domain (renamed to be singular).

        * bindings/v8/ScriptController.h:
        * bindings/v8/V8Proxy.h:
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::addOriginAccessWhitelistEntry):
        (WebCore::SecurityOrigin::removeOriginAccessWhitelistEntry):
        * page/SecurityOrigin.h:

2011-05-26  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Replace RenderLayer::x/y/width/height with location/size
        https://bugs.webkit.org/show_bug.cgi?id=61414

        Covered by existing tests.

        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::computeRelativePosition):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeRectForRepaint):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::maxLayoutOverflow):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        (WebCore::RenderInline::computeRectForRepaint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::convertToLayerCoords):
        (WebCore::RenderLayer::offsetFromResizeCorner):
        (WebCore::RenderLayer::calculateRects):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::location):
        (WebCore::RenderLayer::setSize):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::computeRectForRepaint):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        (WebCore::writeLayers):
        (WebCore::externalRepresentation):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::absoluteRects):
        (WebCore::RenderView::absoluteQuads):

2011-05-26  Annie Sullivan  <sullivan@chromium.org>

        Reviewed by Ryosuke Niwa.

        Delete table in contentEditable/designMode produces odd contents
        https://bugs.webkit.org/show_bug.cgi?id=57148

        Removes border-collapse, -webkit-border-horizontal-spacing, and
        -webkit-border-vertical-spacing from the list of properties which
        should be preserved during edit operations. Also renames this
        list to editingInheritableProperties to be more clear about what
        the list is for.

        Test: editing/deleting/delete-last-char-in-table.html

        * editing/EditingStyle.cpp: Removes border vertical/horizontal
        spacing from editingStyleProperties.
        * editing/EditingStyle.h: Renames OnlyInheritableProperties to
        OnlyEditingInheritableProperties.
        * editing/markup.cpp: Renames InheritablePropertiesAndBackgroundColorInEffect.

2011-05-26  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        WebSocket closing handshake
        https://bugs.webkit.org/show_bug.cgi?id=35721

        Implement WebSocket closing handshake based on Ian Hickson's
        WebSocket protocol draft 76.

        Tests: http/tests/websocket/tests/client-close.html
               http/tests/websocket/tests/server-close.html

        * platform/network/SocketStreamHandleBase.cpp:
        (WebCore::SocketStreamHandleBase::send):
        Do not send a message if we are in Closing state.
        (WebCore::SocketStreamHandleBase::close):
        Do not disconnect if we have pending data which have not been sent yet.
        In this case, the actual disconnection will happen in sendPendingData().
        (WebCore::SocketStreamHandleBase::disconnect):
        Renamed from close(). Disconnect the connection immediately.
        (WebCore::SocketStreamHandleBase::sendPendingData):
        * platform/network/SocketStreamHandleBase.h:
        * websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        Add didStartClosingHandshake(). Add a function argument (ClosingHandshakeCompletionStatus)
        to didClose().
        (WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshake):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshakeCallback):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didCloseCallback):
        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        Fail if close() is attempted before the connection is established.
        Otherwise, set the state to CLOSING and start the closing handshake.
        (WebCore::WebSocket::bufferedAmount):
        If the state is CLOSING, we need to consider buffered data in m_channel and sent after close().
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didReceiveMessage):
        We need to invoke message event in CLOSING state as well as OPEN state.
        (WebCore::WebSocket::didReceiveMessageError):
        (WebCore::WebSocket::didStartClosingHandshake):
        (WebCore::WebSocket::didClose):
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::close):
        Start the closing handshake.
        (WebCore::WebSocketChannel::disconnect):
        Disconnect the socket stream, instead of close.
        (WebCore::WebSocketChannel::didClose):
        (WebCore::WebSocketChannel::didReceiveData): Ditto.
        (WebCore::WebSocketChannel::didFail): Ditto.
        (WebCore::WebSocketChannel::processBuffer):
        Ditto.
        Handle 0xFF 0x00 byte sequence, and discard received data once the closing handshake has started.
        (WebCore::WebSocketChannel::startClosingHandshake):
        Send 0xFF 0x00 byte sequence.
        (WebCore::WebSocketChannel::closingTimerFired):
        Disconnect the socket stream if the closing handshake has timed out.
        * websockets/WebSocketChannel.h:
        m_closing is true if "the WebSocket closing handshake has started" (as stated in the protocol
        specification).
        * websockets/WebSocketChannelClient.h:
        (WebCore::WebSocketChannelClient::didStartClosingHandshake): Added.
        (WebCore::WebSocketChannelClient::didClose): Add closingHandshakeCompletion parameter.
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        Add closingHandshakeCompletion parameter to didClose(), and add didStartClosingHandshake().
        (WebCore::WorkerThreadableWebSocketChannel::Peer::close):
        (WebCore::workerContextDidStartClosingHandshake):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didStartClosingHandshake):
        (WebCore::workerContextDidClose):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didClose):
        * websockets/WorkerThreadableWebSocketChannel.h:

2011-05-26  David Levin  <levin@chromium.org>

        Reviewed by Dmitry Titov.

        WebKit's font notification has problems when the WebKit main thread != UI thread.
        https://bugs.webkit.org/show_bug.cgi?id=61391

        This doesn't happen in DumpRenderTree, so it needs a unit test which is taking me
        some time to write correctly. In the meantime, this issues happens to be causing
        some crashes in Chrome so here's the fix alone for the time being.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::invalidateFontCache): Ensure that FontCache::invalidate is only called on WebKit's main thread.
        (WebCore::fontCacheRegisteredFontsChangedNotificationCallback): Call common function for font cache invalidation.
         Note that the call to fontCache() is fine since the singleton is initialized well before calling this function. Theoretically,
         there could be a problem due to a lack of a memory barrier but that is highly unlikely and this is debug only code.
        (WebCore::fontCacheATSNotificationCallback): Ditto.

2011-05-26  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=61345
        part of <rdar://problem/8675177>
        Roll back in now that the Crashes are fixed.  ResourceResponseBase and ResourceResponse had two different definitions
        for m_isNull.  ResourceResponse treats m_isNull as meaning there isn't any platform ResourceResponse. 
        ResourceResponseBase treats m_isNull as meaning no fields have been initialized.  Consolidate calls into ResourceResponseBase meaning. 

        Don't initialize ResourceResponse.m_suggestedFilename until we want to use it.  Initializing it requires reading in and parsing a plist.  
        Add new initialization state CommonAndUncommonFields to ResourceResponse.  This will be for all the header fields.
        Move suggestedFilename initialization to AllFields so it is never initialized unless we ask for it. 
        Add "Content-Type" to common headers since it is looked for by every CSS sheet load.

        No new functionality so no new tests.

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::suggestedFilename):
        (WebCore::ResourceResponseBase::setSuggestedFilename):
        (WebCore::ResourceResponseBase::httpStatusText):
        (WebCore::ResourceResponseBase::setHTTPStatusText):
        (WebCore::ResourceResponseBase::httpHeaderField):
        (WebCore::ResourceResponseBase::setHTTPHeaderField):
        (WebCore::ResourceResponseBase::httpHeaderFields):
        (WebCore::ResourceResponseBase::isAttachment):
        (WebCore::ResourceResponseBase::setLastModifiedDate):
        (WebCore::ResourceResponseBase::lastModifiedDate):
        (WebCore::ResourceResponseBase::wasCached):
        (WebCore::ResourceResponseBase::connectionReused):
        (WebCore::ResourceResponseBase::setConnectionReused):
        (WebCore::ResourceResponseBase::connectionID):
        (WebCore::ResourceResponseBase::setConnectionID):
        (WebCore::ResourceResponseBase::resourceLoadTiming):
        (WebCore::ResourceResponseBase::setResourceLoadTiming):
        (WebCore::ResourceResponseBase::resourceLoadInfo):
        (WebCore::ResourceResponseBase::setResourceLoadInfo):
        * platform/network/ResourceResponseBase.h:
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::platformLazyInit):
        * platform/network/mac/ResourceResponseMac.mm:

2011-05-26  James Kozianski  <koz@chromium.org>

        Reviewed by Eric Seidel.

        Implement a whitelist for registerProtocolHandler
        https://bugs.webkit.org/show_bug.cgi?id=60322

        * page/Navigator.cpp:
        (WebCore::initProtocolHandlerWhitelist):
        (WebCore::isProtocolWhitelisted):
        (WebCore::verifyProtocolHandlerScheme):

2011-05-26  Annie Sullivan  <sullivan@chromium.org>

        Reviewed by Ryosuke Niwa.

        [debug feature] CSSStyleDeclaration should have a way to print cssText
        https://bugs.webkit.org/show_bug.cgi?id=61570

        Adds a method to print the cssText to stderr for debugging.

        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::showStyle): New method to print cssText to stderr
        * css/CSSStyleDeclaration.h: New method declaration

2011-05-26  Syed Idris Shah  <syed.idris-shah@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] fast/canvas/webgl/gl-uniform-arrays.html failing for Qt on Linux
        https://bugs.webkit.org/show_bug.cgi?id=60377 

        LayoutTests/fast/canvas/webgl/gl-uniform-arrays.html

        For an array of active uniform, we should be careful while truncating the name of the uniform. 
        Currently we are truncating the last three characters of an array with out checking for [0]. 
        As a result we are truncating the the actual name of the active uniforms i.e. color to co. 

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniform): Strip "[0]" from the name if it's an array and is part of the name.

2011-05-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87444.
        http://trac.webkit.org/changeset/87444
        https://bugs.webkit.org/show_bug.cgi?id=61582

        Layout test regressions in Chromium/WebKit: fast/css/first-
        letter-text-fragment-crash.html, fast/css/first-letter-
        visibility.html (Requested by aklein on #webkit).

        * page/Chrome.cpp:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::setContentsSize):
        * page/FrameView.h:

2011-05-26  David Levin  <levin@chromium.org>

        Reviewed by Darin Fisher.

        Need a callback for when the preferred rendered size changed.
        https://bugs.webkit.org/show_bug.cgi?id=61309

        No new tests needed since no new functionality is exposed.

        * page/Chrome.cpp:
        (WebCore::Chrome::contentsPreferredSizeChanged): Plumbed through the call.
        * page/Chrome.h: Added the new method.
        * page/ChromeClient.h: Ditto.
        * page/FrameView.cpp:
        (WebCore::FrameView::setContentsSize): Added calculations for the preferred size
        and the call to contentsPreferredSizeChanged.

2011-05-25  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch controlClipRect to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=60806

        Switching controlClipRect to take an IntPoint representing the
        offset to be added instead of a pair of ints.

        No new tests as this is just refactoring.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::pushContentsClip):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::controlClipRect):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::controlClipRect):
        * rendering/RenderButton.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemBackground):
        (WebCore::RenderListBox::controlClipRect):
        * rendering/RenderListBox.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::controlClipRect):
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::controlClipRect):
        * rendering/RenderTextControlSingleLine.h:

2011-05-25  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch controlClipRect to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=60806

        Switching controlClipRect to take an IntPoint representing the
        offset to be added instead of a pair of ints.

        No new tests as this is just refactoring.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::pushContentsClip):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::controlClipRect):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::controlClipRect):
        * rendering/RenderButton.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemBackground):
        (WebCore::RenderListBox::controlClipRect):
        * rendering/RenderListBox.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::controlClipRect):
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::controlClipRect):
        * rendering/RenderTextControlSingleLine.h:

2011-05-26  Jeff Miller  <jeffm@apple.com>

        Reviewed by Steve Falkenburg.

        Fullscreen content is sometimes obscured by taskbar (which even covers up the "exit fullscreen" button)
        https://bugs.webkit.org/show_bug.cgi?id=61569
        <rdar://problem/9454315>

        Normally, when the background fullscreen window is animated in, the Windows taskbar will be hidden, but this doesn't always work for some reason.
        Workaround this issue by setting the real fullscreen window to be a topmost window.

        * platform/graphics/win/FullScreenController.cpp:
        (FullScreenController::Private::fullscreenClientWndProc): Exit fullscreen when m_fullScreenWindow is deactivated.
        (FullScreenController::enterFullScreenRepaintCompleted): Make m_fullScreenWindow a topmost window before animating it in to ensure the taskbar is hidden.

2011-05-26  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        [skia] Add area check to ImageBufferData::getImageData
        https://bugs.webkit.org/show_bug.cgi?id=61375

        No change in behavior, just a sanity check.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):

2011-05-26  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch positionOverflowControls to IntSize
        https://bugs.webkit.org/show_bug.cgi?id=61493

        Switching positionOverflowControls to take a layerOffset IntSize
        as opposed to a pair of ints.

        No new tests since this is just refactoring.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::paintOverflowControls):
        * rendering/RenderLayer.h:

2011-05-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87368.
        http://trac.webkit.org/changeset/87368
        https://bugs.webkit.org/show_bug.cgi?id=61564

        Wrong approach, will do the wrong thing if the element needs
        simplified normal flow layout but is not positioned (Requested
        by jamesr on #webkit).

        * rendering/RenderObject.h:
        (WebCore::RenderObject::needsPositionedMovementLayout):

2011-05-02  Robert Hogan  <robert@webkit.org>

        Reviewed by Adam Roben.

        [Qt] Allow popup windows from plugins when initiated by a user gesture

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

        If the event is from a user gesture and the plugin doesn't support
        NPN_PushPopupsEnabledState() and NPN_PopPopupsEnabledState(), allow popups.

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

2011-05-26  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Dmitry Titov.

        [V8] Add missing compile guards for WebWorkers in WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=61535

        No new tests - refactoring only.

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):

2011-05-26  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Support cross-origin XMLHttpRequest in isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=59843

        Allows isolated worlds to be associated with a different SecurityOrigin
        (exposed as a setIsolatedWorldSecurityOrigin function in
        ScriptController).

        The XMLHttpRequest constructor can then check that it's being
        instantiated in an isolated world and use its security origin.
        XMLHttpRequest, ThreadableLoader and DocumentThreadableLoader had to be
        changed to use the copied SecurityOrigin instead of always grabbing the
        Document's.

        Test: http/tests/security/isolatedWorld/cross-origin-xhr.html

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::setIsolatedWorldSecurityOrigin):
        * bindings/v8/ScriptController.h:
        * bindings/v8/V8IsolatedContext.cpp:
        (WebCore::V8IsolatedContext::setSecurityOrigin):
        * bindings/v8/V8IsolatedContext.h:
        (WebCore::V8IsolatedContext::securityOrigin):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        (WebCore::V8Proxy::setIsolatedWorldSecurityOrigin):
        (WebCore::V8Proxy::resetIsolatedWorlds):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::V8XMLHttpRequest::constructorCallback):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequestWithPreflight):
        (WebCore::DocumentThreadableLoader::didReceiveResponse):
        (WebCore::DocumentThreadableLoader::preflightSuccess):
        (WebCore::DocumentThreadableLoader::isAllowedRedirect):
        (WebCore::DocumentThreadableLoader::securityOrigin):
        * loader/DocumentThreadableLoader.h:
        * loader/ThreadableLoader.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::create):
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::securityOrigin):
        (WebCore::XMLHttpRequest::responseXML):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::setRequestHeader):
        (WebCore::XMLHttpRequest::getAllResponseHeaders):
        (WebCore::XMLHttpRequest::getResponseHeader):
        * xml/XMLHttpRequest.h:

2011-05-26  Michael Nordman  <michaeln@google.com>

        Reviewed by Darin Fisher.

        [Chromium] Use SecurityOrigin produced databaseIdentifier strings, instead of
        SecurityOrigin RefPtrs, as the top level key into the DatabaseTracker's
        collection of open databases. Otherwise we can fail to lookup databases when
        trying to forceably close them via  WebDatabase::closeDatabaseImmediately.
        https://bugs.webkit.org/show_bug.cgi?id=61417

        New new functionality, no tests.

        * storage/DatabaseTracker.h:
        * storage/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::getOpenDatabases):
        (WebCore::DatabaseTracker::interruptAllDatabasesForContext):

2011-05-25  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Safari Web Content crashes while entering/exiting the full screen mode of the video content
        https://bugs.webkit.org/show_bug.cgi?id=61498

        No new tests, as DRT does not currently animate the full screen transition.

        To guard against m_fullScreenRenderer being called after it has been deleted, add
        code in RenderFullScreen which notifies the document when its full-screen renderer
        will be destroyed.

        Also, add some sanity checks when accessing the full-screen renderer's layer backing.

        * dom/Document.cpp:
        (WebCore::Document::webkitWillEnterFullScreenForElement): Guard against a missing
            full-screen renderer layer.
        (WebCore::Document::webkitWillExitFullScreenForElement): Ditto.
        (WebCore::Document::setFullScreenRenderer): Added ASSERT.
        (WebCore::Document::fullScreenRendererDestroyed): Added.
        (WebCore::Document::setAnimatingFullScreen): Guard against the full-screen
            element having been removed from the document.
        * dom/Document.h:
        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::destroy): Added.  Tell the Document that it's full-screen
            renderer is about to be destroyed.
        * rendering/RenderFullScreen.h:

2011-05-26  Andreas Kling  <kling@webkit.org>

        Reviewed by Geoffrey Garen.

        Overload resolution in generated JSC bindings could be more efficient.
        https://bugs.webkit.org/show_bug.cgi?id=61544

        Only fetch the arguments once, and not until they are needed (less work
        in the case of an early return.)

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestObj.cpp: Rebaselined.
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod):

2011-05-26  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Be robust to empty viewports in the compositor
        https://bugs.webkit.org/show_bug.cgi?id=61545

        It's possible for a frame to be requested to be drawn before it is
        non-empty.  The compositor should be robust to that possibility.  The
        changes in LayerTilerChromium are the only required changes to handle
        this, but having an early out in LayerRendererChromium seemed like a
        good sanity check.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        (WebCore::LayerRendererChromium::drawLayers):
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::prepareToUpdate):
        (WebCore::LayerTilerChromium::updateRect):
        (WebCore::LayerTilerChromium::draw):

2011-05-26  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Change RenderObject to use FloatPoint::scale and FloatQuad::scale
        https://bugs.webkit.org/show_bug.cgi?id=61497

        Covered by existing test.

        * platform/graphics/FloatQuad.h:
        (WebCore::FloatQuad::scale):
        * rendering/RenderObject.h:
        (WebCore::adjustFloatQuadForAbsoluteZoom):
        (WebCore::adjustFloatRectForAbsoluteZoom):
        (WebCore::adjustFloatQuadForPageScale):
        (WebCore::adjustFloatRectForPageScale):

2011-05-26  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed build fix for Qt and QuickTime backend.

        r87328 added a new system interface, we need to add it too.

        * platform/qt/WebCoreSystemInterface.h:
        * platform/qt/WebCoreSystemInterface.mm:

2011-05-26  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed follow-up to r87395, added checks to avoid accessing undefined member for certain timeline events.

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.FormattedRecord):

2011-05-25  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Enrica Casucci.

        WebKit duplicates styles from css rules on copy and paste
        https://bugs.webkit.org/show_bug.cgi?id=61466

        Fixed the bug by removing duplicate properties from inline style declarations in ReplaceSelectionCommand.
        Also moved the code to obtain style from rules from markup.cpp to EditingStyle.cpp to share code.

        Test: editing/pasteboard/style-from-rules.html

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::EditingStyle): Added a null check.
        (WebCore::EditingStyle::extractFontSizeDelta): Ditto.
        (WebCore::styleFromMatchedRulesForElement): Moved from markup.cpp.
        (WebCore::EditingStyle::mergeStyleFromRules): Extracted from StyledMarkupAccumulator::appendElement.
        (WebCore::EditingStyle::mergeStyleFromRulesForSerialization): Ditto.
        (WebCore::EditingStyle::removeStyleFromRules): Added.
        * editing/EditingStyle.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline): Renamed from
        negateStyleRulesThatAffectAppearance; Calls removeStyleFromRules.
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendElement): Calls mergeStyleFromRulesForSerialization.
        (WebCore::styleFromMatchedRulesAndInlineDecl): Calls mergeStyleFromRules; changed the return type
        from CSSMutableStyleDeclaration to EditingStyle.
        (WebCore::isElementPresentational): Calls styleFromMatchedRulesAndInlineDecl.
        (WebCore::shouldIncludeWrapperForFullySelectedRoot): Ditto.
        (WebCore::highestAncestorToWrapMarkup): Calls shouldIncludeWrapperForFullySelectedRoot.
        (WebCore::createMarkup): Calls styleFromMatchedRulesAndInlineDecl.

2011-05-26  Michael Schneider  <michschn@google.com>

        Reviewed by Pavel Feldman.

        WebInspector: Added API to access the timeline data in a inspector extension.
        https://bugs.webkit.org/show_bug.cgi?id=61098

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI.InspectorExtensionAPI):
        (WebInspector.injectedExtensionAPI):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer):
        (WebInspector.ExtensionServer.prototype._addRecordToTimeline):
        (WebInspector.ExtensionServer.prototype._onSubscribe):
        (WebInspector.ExtensionServer.prototype._onUnsubscribe):
        (WebInspector.ExtensionServer.prototype._registerHandler):
        (WebInspector.ExtensionServer.prototype._registerSubscriptionHandler):
        * inspector/front-end/TimelineManager.js: Added.
        (WebInspector.TimelineManager):
        (WebInspector.TimelineManager.prototype.start):
        (WebInspector.TimelineManager.prototype.stop):
        (WebInspector.TimelineDispatcher):
        (WebInspector.TimelineDispatcher.prototype.started):
        (WebInspector.TimelineDispatcher.prototype.stopped):
        (WebInspector.TimelineDispatcher.prototype.eventRecorded):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._toggleTimelineButtonClicked):
        (WebInspector.TimelinePanel.prototype._onTimelineEventRecorded):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-05-26  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: TimelinePanel should not modify input timeline data when processing timeline event
        https://bugs.webkit.org/show_bug.cgi?id=61529

        Do not modify input timeline data when processing timeline event.

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._addRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.FormattedRecord):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._refreshDetails):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):

2011-05-26  Rob Buis  <rbuis@rim.com>

        Reviewed by Dirk Schulze.

        Dynamically created <animate> elements do not animate upon document insertion as they should
        https://bugs.webkit.org/show_bug.cgi?id=20028

        Tests: svg/animations/animate-insert-begin.html
               svg/animations/animate-insert-no-begin.html

        Move animation initializing and rescheduling to insertedIntoDocument. This way animate elements
        dynamicaly inserted into the document using js start as well.

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::insertedIntoDocument):
        * svg/animation/SVGSMILElement.h:

2011-05-26  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        JSC DOM bindings: ExecState::argumentCount() is size_t, not int.
        https://bugs.webkit.org/show_bug.cgi?id=61530

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOptionsObject):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGestureASAD):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithOptional):

2011-05-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adam Roben.

        Some repeating linear gradients look wrong
        https://bugs.webkit.org/show_bug.cgi?id=61371

        Test: fast/gradients/css3-repeating-linear-gradients2.html
        
        Fix incorrect stop duplication code when filling forwards a repeating
        gradient. The "if (srcStopOrdinal < originalNumStops - 1)" test was wrong
        because srcStopOrdinal had been adjusted for stops added by start-filling,
        but originalNumStops had not. Fix by considering srcStopOrdinal as an index
        into the original stops, so comparing it with originalNumStops remains valid.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::addStops):

2011-05-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: In network panel, show transfer size in a first line of resource row.
        https://bugs.webkit.org/show_bug.cgi?id=61354

        * English.lproj/localizedStrings.js:
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._createTable):
        (WebInspector.NetworkDataGridNode.prototype._refreshSizeCell):

2011-05-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Always antialias borders, outlines and rules when scaling
        https://bugs.webkit.org/show_bug.cgi?id=61502
        
        r84273 changed the behavior of drawLineForBoxSide() to never antialias by default.
        This actually disabled antialiasing in some circumstances where it used to be enabled,
        for example collapsed table border drawing.
        
        Fix by allowing antialiasing for collapsed table borders, column rules and span
        outlines when the context is scaled.

        Test: fast/borders/border-antialiasing.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumnRules):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutline):
        (WebCore::RenderInline::paintOutlineForLine):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintCollapsedBorder):

2011-05-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Use different SourceFrame instances for ResourcesPanel and NetworkPanel
        https://bugs.webkit.org/show_bug.cgi?id=59193

        * inspector/front-end/NetworkItemView.js:
        (WebInspector.NetworkItemView):
        (WebInspector.NetworkItemView._contentViewForResource):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._refreshResource):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.get messages):
        (WebInspector.Resource.prototype.addMessage):
        (WebInspector.Resource.prototype.set errors):
        (WebInspector.Resource.prototype.set warnings):
        (WebInspector.Resource.prototype.clearErrorsAndWarnings):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._consoleMessageAdded):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.hasTextContent):
        (WebInspector.ResourceView.nonSourceViewForResource):
        (WebInspector.ResourceSourceFrame):
        (WebInspector.ResourceSourceFrame.mimeTypeForResource):
        (WebInspector.ResourceSourceFrame.prototype.requestContent):
        (WebInspector.ResourceSourceFrame.prototype.suggestedFileName):
        (WebInspector.EditableResourceSourceFrame):
        (WebInspector.EditableResourceSourceFrame.prototype.doubleClick):
        (WebInspector.EditableResourceSourceFrame.prototype.editContent):
        (WebInspector.EditableResourceSourceFrame.prototype.cancelEditing):
        (WebInspector.EditableResourceSourceFrame.prototype.afterTextChanged):
        (WebInspector.EditableResourceSourceFrame.prototype._clearIncrementalUpdateTimer):
        (WebInspector.ResourceRevisionSourceFrame):
        (WebInspector.ResourceRevisionSourceFrame.prototype.requestContent):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.showResource):
        (WebInspector.ResourcesPanel.prototype._showResourceView):
        (WebInspector.ResourcesPanel.prototype._resourceViewForResource):
        (WebInspector.ResourcesPanel.prototype._showRevisionView):
        (WebInspector.ResourcesPanel.prototype._sourceViewForRevision):
        (WebInspector.ResourcesPanel.prototype.searchCanceled):
        (WebInspector.ResourcesPanel.prototype._findTreeElementForRevision):
        (WebInspector.ResourcesPanel.prototype._findTreeElementForRevision.getParent):
        (WebInspector.FrameResourceTreeElement):
        (WebInspector.FrameResourceTreeElement.prototype.onattach):
        (WebInspector.FrameResourceTreeElement.prototype._updateErrorsAndWarningsBubbles):
        (WebInspector.FrameResourceTreeElement.prototype._errorsWarningsCleared):
        (WebInspector.FrameResourceTreeElement.prototype._errorsWarningsMessageAdded):
        (WebInspector.FrameResourceTreeElement.prototype._appendRevision):
        (WebInspector.FrameResourceTreeElement.prototype.sourceView):
        (WebInspector.FrameResourceTreeElement.prototype._createSourceView):
        (WebInspector.FrameResourceTreeElement.prototype._recreateSourceView):
        (WebInspector.ResourceRevisionTreeElement):
        (WebInspector.ResourceRevisionTreeElement.prototype._handleContextMenuEvent):
        (WebInspector.ResourceRevisionTreeElement.prototype.sourceView):

2011-05-26  Andreas Kling  <kling@webkit.org>

        Reviewed by Darin Adler.

        JSC DOM bindings: Use isUndefinedOrNull() instead of (isNull() || isUndefined()).
        https://bugs.webkit.org/show_bug.cgi?id=61472

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestObj.cpp: Rebaselined.
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod):

2011-05-26  Keishi Hattori  <keishi@webkit.org>

        Reviewed by Kent Tamura.

        Add <input type=color> appearance.
        https://bugs.webkit.org/show_bug.cgi?id=61275

        Test: fast/forms/color/input-appearance-color.html

        * css/html.css:
        (input[type="color"]): Adds square-button appearance.
        (input[type="color"]::-webkit-color-swatch-wrapper):
        (input[type="color"]::-webkit-color-swatch):
        (input[type="color"][list]): Adds menulist appearance.
        (input[type="color"][list]::-webkit-color-swatch-wrapper):
        (input[type="color"][list]::-webkit-color-swatch):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::createShadowSubtree): Creates -webkit-color-swatch inside -webkit-color-swatch-wrapper.
        (WebCore::ColorInputType::updateColorSwatch): Updates background color of shadowColorSwatch.
        (WebCore::ColorInputType::valueChanged): Calls updateColorSwatch.
        (WebCore::ColorInputType::shadowColorSwatch): Gets shadowColorSwatch element.
        * html/ColorInputType.h:
        (WebCore::ColorInputType::ColorInputType): Changed to inherit InputType.

2011-05-26  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix a bug that <input type="number"> dispatches two blurs when tabbing
        from an invalid number
        https://bugs.webkit.org/show_bug.cgi?id=59071

        NumberInputType::handleBlurEvent() dispatched an extra focus event
        and an extra blur event because
        SelectionController::textWillBeReplaced() called by
        RenderTextControlSingleLine::updateFromElement() focuses a node
        with the selection.

        In order to avoid this problem,
         - Introduce Node::willBlur()
           It is called before any state changes by a blur event.
         - Call RenderTextControlSingleLine::updateFromElement() in willBlur()
           It avoids extra focus/blur events because Document::m_focusedNode is
           still the number input during willBlur().

        Test: fast/forms/input-number-blur-twice.html

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode): Calls Node::beforeBlueEvent().
        * dom/Node.cpp:
        (WebCore::Node::willBlur):
          Default empty implementation of willBlur().
        * dom/Node.h: Declare willBlur().
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::willBlur):
          Added.  It just calls InputType::willBlur().
        (WebCore::HTMLInputElement::handleBlurEvent):
          Removed InputType::handleBlurEvent() call.
        * html/HTMLInputElement.h: Declare willBlur().
        * html/InputType.cpp:
        (WebCore::InputType::willBlur): Default empty implementation.
        (WebCore::InputType::handleBlurEvent): Removed.
        * html/InputType.h: Declare willBlur(), remove handleBlurEvent().
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::willBlur):
          Move the code in handleBlurEvent() here.
        * html/NumberInputType.h: Declare willBlur().

2011-05-25  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        IndexedDB: Support LevelDB transactions.
        https://bugs.webkit.org/show_bug.cgi?id=61270

        Introduce LevelDBTransaction, which implements in-memory transaction
        support on top of LevelDB, and hook this up for IndexedDB to use.

        This is all covered by existing tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::open):
        (WebCore::LevelDBDatabase::put):
        (WebCore::LevelDBDatabase::remove):
        (WebCore::LevelDBDatabase::write):
        (WebCore::IteratorImpl::IteratorImpl):
        (WebCore::IteratorImpl::isValid):
        (WebCore::IteratorImpl::seekToLast):
        (WebCore::IteratorImpl::seek):
        (WebCore::IteratorImpl::next):
        (WebCore::IteratorImpl::prev):
        (WebCore::IteratorImpl::key):
        (WebCore::IteratorImpl::value):
        (WebCore::LevelDBDatabase::createIterator):
        (WebCore::LevelDBDatabase::comparator):
        * platform/leveldb/LevelDBDatabase.h:
        * platform/leveldb/LevelDBIterator.h:
        (WebCore::LevelDBIterator::~LevelDBIterator):
        * platform/leveldb/LevelDBTransaction.cpp: Added.
        (WebCore::LevelDBTransaction::create):
        (WebCore::LevelDBTransaction::LevelDBTransaction):
        (WebCore::LevelDBTransaction::clearTree):
        (WebCore::LevelDBTransaction::~LevelDBTransaction):
        (WebCore::makeVector):
        (WebCore::LevelDBTransaction::set):
        (WebCore::LevelDBTransaction::put):
        (WebCore::LevelDBTransaction::remove):
        (WebCore::LevelDBTransaction::get):
        (WebCore::LevelDBTransaction::commit):
        (WebCore::LevelDBTransaction::rollback):
        (WebCore::LevelDBTransaction::createIterator):
        (WebCore::LevelDBTransaction::TreeIterator::create):
        (WebCore::LevelDBTransaction::TreeIterator::isValid):
        (WebCore::LevelDBTransaction::TreeIterator::seekToLast):
        (WebCore::LevelDBTransaction::TreeIterator::seek):
        (WebCore::LevelDBTransaction::TreeIterator::next):
        (WebCore::LevelDBTransaction::TreeIterator::prev):
        (WebCore::LevelDBTransaction::TreeIterator::key):
        (WebCore::LevelDBTransaction::TreeIterator::value):
        (WebCore::LevelDBTransaction::TreeIterator::isDeleted):
        (WebCore::LevelDBTransaction::TreeIterator::reset):
        (WebCore::LevelDBTransaction::TreeIterator::~TreeIterator):
        (WebCore::LevelDBTransaction::TreeIterator::TreeIterator):
        (WebCore::LevelDBTransaction::TransactionIterator::create):
        (WebCore::LevelDBTransaction::TransactionIterator::TransactionIterator):
        (WebCore::LevelDBTransaction::TransactionIterator::isValid):
        (WebCore::LevelDBTransaction::TransactionIterator::seekToLast):
        (WebCore::LevelDBTransaction::TransactionIterator::seek):
        (WebCore::LevelDBTransaction::TransactionIterator::next):
        (WebCore::LevelDBTransaction::TransactionIterator::prev):
        (WebCore::LevelDBTransaction::TransactionIterator::key):
        (WebCore::LevelDBTransaction::TransactionIterator::value):
        (WebCore::LevelDBTransaction::TransactionIterator::handleConflictsAndDeletes):
        (WebCore::LevelDBTransaction::TransactionIterator::setCurrentIteratorToSmallestKey):
        (WebCore::LevelDBTransaction::TransactionIterator::setCurrentIteratorToLargestKey):
        (WebCore::LevelDBTransaction::registerIterator):
        (WebCore::LevelDBTransaction::unregisterIterator):
        (WebCore::LevelDBTransaction::resetIterators):
        * platform/leveldb/LevelDBTransaction.h: Added.
        (WebCore::LevelDBTransaction::AVLTreeAbstractor::get_less):
        (WebCore::LevelDBTransaction::AVLTreeAbstractor::set_less):
        (WebCore::LevelDBTransaction::AVLTreeAbstractor::get_greater):
        (WebCore::LevelDBTransaction::AVLTreeAbstractor::set_greater):
        (WebCore::LevelDBTransaction::AVLTreeAbstractor::get_balance_factor):
        (WebCore::LevelDBTransaction::AVLTreeAbstractor::set_balance_factor):
        (WebCore::LevelDBTransaction::AVLTreeAbstractor::compare_key_key):
        (WebCore::LevelDBTransaction::AVLTreeAbstractor::compare_key_node):
        (WebCore::LevelDBTransaction::AVLTreeAbstractor::compare_node_node):
        (WebCore::LevelDBTransaction::AVLTreeAbstractor::null):
        (WebCore::LevelDBTransaction::TransactionIterator::~TransactionIterator):
        * platform/leveldb/LevelDBWriteBatch.cpp:
        (WebCore::LevelDBWriteBatch::create):
        (WebCore::LevelDBWriteBatch::LevelDBWriteBatch):
        (WebCore::LevelDBWriteBatch::~LevelDBWriteBatch):
        (WebCore::makeSlice):
        (WebCore::LevelDBWriteBatch::put):
        (WebCore::LevelDBWriteBatch::remove):
        (WebCore::LevelDBWriteBatch::clear):
        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::getInt):
        (WebCore::putInt):
        (WebCore::getString):
        (WebCore::putString):
        (WebCore::getNewObjectStoreId):
        (WebCore::IDBLevelDBBackingStore::createObjectStore):
        (WebCore::deleteRange):
        (WebCore::IDBLevelDBBackingStore::deleteObjectStore):
        (WebCore::IDBLevelDBBackingStore::getObjectStoreRecord):
        (WebCore::getNewVersionNumber):
        (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::clearObjectStore):
        (WebCore::IDBLevelDBBackingStore::deleteObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::nextAutoIncrementNumber):
        (WebCore::IDBLevelDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBLevelDBBackingStore::forEachObjectStoreRecord):
        (WebCore::getNewIndexId):
        (WebCore::IDBLevelDBBackingStore::createIndex):
        (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord):
        (WebCore::findGreatestKeyLessThan):
        (WebCore::versionExists):
        (WebCore::IDBLevelDBBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBLevelDBBackingStore::keyExistsInIndex):
        (WebCore::findLastIndexKeyEqualTo):
        (WebCore::IDBLevelDBBackingStore::openObjectStoreCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexKeyCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexCursor):
        (WebCore::IDBLevelDBBackingStore::createTransaction):
        (WebCore::IDBLevelDBBackingStore::Transaction::create):
        (WebCore::IDBLevelDBBackingStore::Transaction::Transaction):
        (WebCore::IDBLevelDBBackingStore::Transaction::begin):
        (WebCore::IDBLevelDBBackingStore::Transaction::commit):
        (WebCore::IDBLevelDBBackingStore::Transaction::rollback):
        * storage/IDBLevelDBBackingStore.h:
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::abort):

2011-05-26  Shane Stephens  <shanestephens@google.com>

        Reviewed by James Robinson.

        REGRESSION (r81992): layout triggered by position update fails to apply when transform is updated at same time
        https://bugs.webkit.org/show_bug.cgi?id=60689

        Test: transforms/2d/set-transform-and-top.html

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

2011-05-26  Igor Oliveira  <igor.oliveira@openbossa.org>

        Reviewed by Andreas Kling.

        drag-not-loaded-image.html test crashes when WebKit is built with debug option
        https://bugs.webkit.org/show_bug.cgi?id=61480

        Checks if image has content before starting to drag.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):

2011-05-26  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by James Robinson.

        [chromium] Cannot create stencil render-buffer for accelerated drawing on desktop GL
        https://bugs.webkit.org/show_bug.cgi?id=61444

        Used DEPTH24_STENCIL8 format for stencil buffer instead of STENCIL_INDEX8.
        Packed depth-stencil buffer is the most common format supported by graphics cards.
        It is not very robust to rely on just one format being supported,
        so long term the task of creating FBO should be delegated to SKIA,
        which has necessary code to iterate through all possible formats.

        * platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:
        (WebCore::LayerTextureUpdaterSkPicture::deleteFrameBuffer):
        (WebCore::LayerTextureUpdaterSkPicture::createFrameBuffer):

2011-05-25  Jer Noble  <jer.noble@apple.com>

        Reviewed by Dan Bernstein.

        30 second rewind button dysfunctional viewing trailers fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=61505

        Add support for painting MediaReturnToRealtimeButton, as well as hide and show
        the correct default video control buttons when entering full-screen mode.

        * css/fullscreenQuickTime.css:
        (video:-webkit-full-screen::-webkit-media-controls-return-to-realtime-button):
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::enteredFullscreen): Show the "Back 30s" and
            "Return to Realtime" buttons for Live Streams in full-screen mode.
        (WebCore::MediaControlRootElement::exitedFullscreen): Reset the styles of 
            all the buttons affected by enteredFullscreen().
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart): Add support for 
            MediaReturnToRealtimeButton.

2011-05-25  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement various CSS font properties in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=60603

        No new tests - refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyFont):
        Added templated class to handle font properties
        (WebCore::ApplyPropertyFontWeight):
        Added class to handle font weight calculation
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Instantiate ApplyPropertyFont/ApplyPropertyFontWeight for appropriate properties.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove properties that are now implemented in CSSStyleApplyProperty
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::fontDescription):
        Added getter for m_style->fontDescription()
        (WebCore::CSSStyleSelector::parentFontDescription):
        Added getter for m_parentStyle->fontDescription()
        (WebCore::CSSStyleSelector::setFontDescription):
        Added setter for m_style->setFontDescription() that automatically sets m_fontDirty

2011-05-25  James Simonsen  <simonjam@chromium.org>

        Reviewed by Adam Barth.

        Add site-specific hack for zipcar.com with old versions of requirejs.
        https://bugs.webkit.org/show_bug.cgi?id=61321

        Old versions of requirejs (< 0.15.0) try to load scripts in parallel but execute them in
        order. This used to work in webkit by setting a bogus script type (script/cache), then
        changing the type to a valid one when they wanted to execute it. This hack translates the
        behavior into the new API (by disabling forceAsync).

        * html/HTMLScriptElement.cpp:
        (WebCore::needsOldRequirejsQuirk): Added.
        (WebCore::HTMLScriptElement::insertedIntoDocument):
        If hack is needed, set a proper script type so script loads.
        If script isn't async, disable forceAsync so script executes in order.

2011-05-25  Andreas Kling  <kling@webkit.org>

        Reviewed by David Levin.

        Rebaseline run-bindings-tests.
        https://bugs.webkit.org/show_bug.cgi?id=61469

        * bindings/scripts/test/JS/:
        * bindings/scripts/test/V8/:

2011-05-25  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch itemBoundingBoxRect to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=60789

        Changing itemBoundingBoxRect to use an IntPoint representing the offset
        to be added tot he box rect instead of a pair of ints.

        No new tests since this is just refactoring.

        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::elementAccessibilityHitTest):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::elementRect):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::itemBoundingBoxRect):
        (WebCore::RenderListBox::addFocusRingRects):
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        (WebCore::RenderListBox::nodeAtPoint):
        * rendering/RenderListBox.h:

2011-05-24  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        RenderText with empty text is not created inside ShadowContentElement 
        https://bugs.webkit.org/show_bug.cgi?id=61111        

        - Changed Text::rendererIsNeeded() to be shadow-aware.
        - previousRenderer(), nextRenderer() and parentRenderer() on NodeRenderingContext is now
          safe even if it's used with an attached node, which was originally used only during attach().
          We need this change because these APIs are called inside CharacterData::updateRenderer() callstack.
        
        Tests: fast/html/details-replace-summary-child.html
               fast/html/details-replace-text.html

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        (WebCore::NodeRenderingContext::nextRenderer):
        (WebCore::NodeRenderingContext::previousRenderer):
        (WebCore::NodeRenderingContext::parentRenderer):
        (WebCore::NodeRenderingContext::shouldCreateRenderer):
        * dom/NodeRenderingContext.h:
        (WebCore::NodeRenderingContext::parentNodeForRenderingAndStyle):
        * dom/Text.cpp:
        (WebCore::Text::rendererIsNeeded):

2011-05-25  Sailesh Agrawal  <sail@chromium.org>

        Reviewed by Tony Chang.

        Rename ScrollbarOverlayUtilitiesMac to ScrollbarOverlayUtilitiesChromiumMac
        https://bugs.webkit.org/show_bug.cgi?id=61401

        ScrollbarOverlayUtilitiesMac.mm was being excluded from the WebCore project. Fix was to make sure the file name ended with ChromiumMac.

        * WebCore.gypi:
        * platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.h: Copied from Source/WebCore/platform/chromium/ScrollbarOverlayUtilitiesMac.h.
        * platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.mm: Copied from Source/WebCore/platform/chromium/ScrollbarOverlayUtilitiesMac.mm.
        * platform/chromium/ScrollbarOverlayUtilitiesMac.h: Removed.
        * platform/chromium/ScrollbarOverlayUtilitiesMac.mm: Removed.

2011-05-25  James Robinson  <jamesr@chromium.org>

        Reviewed by Geoffrey Garen

        CachedResource overhead size calculation ignores the actual size of the URL
        https://bugs.webkit.org/show_bug.cgi?id=61481

        CachedResource::overheadSize is used to determine the size of an entry in the memory cache to know when to evict
        it.  When the resource is a large data: URL, for example representing image or audio data, the URL size itself
        can be significant.

        This patch uses an estimate of actual number of bytes used by the URL that is valid for ASCII urls and close for
        other types of strings instead of a fixed number.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::overheadSize):

2011-05-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make RegExp GC allocated
        https://bugs.webkit.org/show_bug.cgi?id=61490

        RegExp is GC'd so we don't need the RefPtr shenanigans anymore.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readTerminal):

2011-05-25  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Dirk Schulze.

        [Cairo] Move the global alpha property from GraphicsContext to PlatformContextCairo
        https://bugs.webkit.org/show_bug.cgi?id=60185

        Remove Cairo #ifdefs from GraphicsContext.h by pushing the global alpha
        state into PlatformContextCairo. Since Cairo is the only platform that needs
        to store this, this is the proper place for it. Change the image mask stack into
        a more generic state stack that can keep track of the multiple bits of platform
        specific state and properly handle save/restore pairs.

        No new tests. This is just a code refactor.

        * platform/graphics/GraphicsContext.h: Remove Cairo #ifdefs.
        (WebCore::GraphicsContextState::GraphicsContextState): Ditto.
        * platform/graphics/cairo/ContextShadowCairo.cpp: Access global alpha from PlatformContextCairo now.
        (WebCore::ContextShadow::drawRectShadow):
        * platform/graphics/cairo/FontCairo.cpp: Ditto.
        (WebCore::Font::drawGlyphs):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::setPlatformFill): Ditto.
        (WebCore::setPlatformStroke): Ditto.
        (WebCore::GraphicsContext::setAlpha): Ditto.
        * platform/graphics/cairo/PlatformContextCairo.cpp: Moved ImageMaskInformation class from the
        header file, since it can be private now. Abstract the image mask state and the global alpha
        in a generic State class.
        (WebCore::ImageMaskInformation::update): 
        (WebCore::ImageMaskInformation::isValid):
        (WebCore::ImageMaskInformation::maskSurface):
        (WebCore::ImageMaskInformation::maskRect):
        (WebCore::PlatformContextCairo::State::State): Added.
        (WebCore::PlatformContextCairo::PlatformContextCairo): Intialize the state
        class when this class is constructed.
        (WebCore::PlatformContextCairo::restore): Now pop the last state off the state stack.
        (WebCore::PlatformContextCairo::~PlatformContextCairo): Added this so that we can forward
        declare the State class in the header.
        (WebCore::PlatformContextCairo::save): Push a new state onto the stack.
        (WebCore::PlatformContextCairo::pushImageMask): Operate on the state stack now.
        (WebCore::PlatformContextCairo::globalAlpha): Added.
        (WebCore::PlatformContextCairo::setGlobalAlpha): Added.
        (WebCore::PlatformContextCairo::drawSurfaceToContext: Call globalAlpha().
        * platform/graphics/cairo/PlatformContextCairo.h: Changed the image mask stack
        into a more generic state stack, much like PlatformContextChromium.

2011-05-25  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/9504058> Need some way to query user gesture state from injected bundle

        * WebCore.exp.in: Add an export that WebKit2 needs.

2011-05-25  Jer Noble  <jer.noble@apple.com>

        Ureviewed; Build fix for Leopard and Snow Leopard.

        Move _wkQTMovieResolvedURL outside of a #if check for Leopard and SL.

        * WebCore.exp.in:

2011-05-25  Michael Saboff  <msaboff@apple.com>

        Reviewed by Sam Weinig.

        Cleanup of commented items from https://bugs.webkit.org/show_bug.cgi?id=61222
        https://bugs.webkit.org/show_bug.cgi?id=61478

        Cleanup of further comments after patch was landed.  Changes include
        using /2 instead of >>1, adding a blank line after class include,
        making method names start with lower case and adding clarifying
        comments.

        No new tests as the changes are stylistic and not functional.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResourcesToPercentage):
        (WebCore::MemoryCache::pruneDeadResourcesToPercentage):
        * loader/cache/MemoryCache.h:
        (WebCore::MemoryCache::pruneToPercentage):
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):

2011-05-25  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=61407
        part of <rdar://problem/8675177>
        Move Quicklook quirk down into WebCore so it can be caculated when the user
        starts a reload.  Restructure the conditions so it only called when absolutely 
        necessary.
  
        No change in functionality so no new tests.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::subresourceCachePolicy):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        * platform/network/cf/ResourceRequest.h:
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::initQuickLookResourceCachingQuirks):
        (WebCore::ResourceRequest::useQuickLookResourceCachingQuirks):

2011-05-24  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Video fails to play on Vimeo
        https://bugs.webkit.org/show_bug.cgi?id=61403

        No new tests; Covered by media/video-canvas-source.html.

        Vimeo redirects their assets from player.vimeo.com to av.vimeo.com, which is rejected
        by AVFoundation and QTKit due to our setting a ForbidCrossSiteReference option when
        creating an AVAsset or QTMovie. Instead, we should just reject local->remote and
        remote->local and make our answer to hasSingleSecurityOrigin dynamic.

        When checking whether a given request has a single security origin, use a 
        SecurityOrigin to check the host, port, and scheme.

        * WebCore.exp.in:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::assetURL): Added.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Exchange ForbidCrossSiteReference
            for ForbidRemoteReferenceToLocal and ForbidLocalReferenceToRemote
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasSingleSecurityOrigin): Check to see that the
            requested and resolved URLs have the same host and port.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::commonMovieAttributes): Exchange NoCrossSiteAttribute for 
            NoRemoteToLocalSiteAttribute and NoLocalToRemoteSiteAttribute.
        (WebCore::MediaPlayerPrivateQTKit::hasSingleSecurityOrigin):     Check to see that the
                requested and resolved URLs have the same host and port.
        * platform/mac/WebCoreSystemInterface.h: Added wkAVAssetResolvedURL.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2011-05-25  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Carlson.

        Fix media element regression where ended event stopped firing after changing the src attribute.

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

        Test: media/media-ended.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::prepareForLoad):

2011-05-25  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: Fullscreen button on embedded Vimeo videos does nothing
        https://bugs.webkit.org/show_bug.cgi?id=61461

        Tests: fullscreen/full-screen-iframe-legacy.html

        Allow calls from the legacy full-screen API to bypass the iframe
        "webkitallowfullscreen" requirement by adding a parameter to 
        Document::webkitRequestFullScreenForElement specifying the strictness
        of that check.  Specify this new parameter everywhere that function is 
        called, including in the default controls' full-screen button handler.

        * dom/Document.cpp:
        (WebCore::Document::webkitRequestFullScreenForElement):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::requestFullScreen): Renamed from webkitRequestFullScreen.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enterFullscreen):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlFullscreenButtonElement::defaultEventHandler):

2011-05-25  Kulanthaivel Palanichamy  <kulanthaivel@codeaurora.org>

        Reviewed by David Hyatt.

        Selector matching doesn't update when DOM changes ("[data-a=x] #x")
        https://bugs.webkit.org/show_bug.cgi?id=60752

        Currently CSSStyleSelector maintains a HashSet of attributes (m_selectorAttrs)
        which are used in CSS attribute selectors to determine the need for style
        recalculation whenever element attributes are manipulated in DOM.
        In certain conditions (element with no style, element is styled and attribute
        is not a mapped attribute, attribute is of type 'type' or read-only)
        even when attribute selector matches for an element, the attribute is not
        added to m_selectorAttrs. This results in missing style recalculations
        when a DOM element attribute is changed and is not found in m_selectorAttrs.

        Removing the above said conditions in
        CSSStyleSelector::SelectorChecker::checkOneSelector() for registering
        attributes in m_selectorAttrs will solve this issue. But this particular
        function is called numerous times which triggers adding duplicate attributes
        again and again.

        This patch follows the approach taken for collecting ids in selectors, where
        all the attributes in selectors are added to a HashSet at the time of adding
        style rules to CSSStyleSelector from StyleSheets and when
        CSSStyleSelector::hasSelectorForAttribute() is called, the attribute is
        simply looked up in this pre-populated hash set.

        Test: fast/css/attribute-selector-dynamic-no-elementstyle.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector):
        (WebCore::CSSStyleSelector::checkSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        (WebCore::collectFeaturesFromSelector):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::hasSelectorForAttribute):
        * css/CSSStyleSelector.h:

2011-05-25  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by James Robinson.

        CSSStyleSelector should provide a way to obtain rules from non-author stylesheets
        https://bugs.webkit.org/show_bug.cgi?id=61454

        Replaced bool and enum arguments of styleRulesForElement and pseudoStyleRulesForElement
        by one enum, and provided a way to obtain rules from UA/user stylesheets.

        * css/CSSRule.h: Removed CSSRuleFilter.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleRulesForElement): See above.
        (WebCore::CSSStyleSelector::pseudoStyleRulesForElement): Ditto.
        * css/CSSStyleSelector.h: Moved CSSRuleFilter here.
        * editing/markup.cpp:
        (WebCore::styleFromMatchedRulesForElement): Calls styleRulesForElement.
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getStylesForNode): Ditto.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules): Ditto.

2011-05-25  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] JSC bridge: implement __qt_sender__ without using Scope Chain
        https://bugs.webkit.org/show_bug.cgi?id=61343

        Create a stack to keep track of the sender objects. This is simpler than
        the similar mechanism in QObject (C++ API), that keeps a stack per-object.

        Since we do not support multiple threads, one static stack will be enough for
        handling the behavior.

        This behavior is covered by the tst_QWebFrame::connectAndDisconnect() auto test.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::qtSenderStack):
        We have one static stack of QObject*. The top of the stack contains the
        last object that emitted signal that called a JavaScript function.

        * bridge/qt/qt_instance.h:
        (JSC::Bindings::QtInstance::QtSenderStack::top):
        (JSC::Bindings::QtInstance::QtSenderStack::push):
        (JSC::Bindings::QtInstance::QtSenderStack::pop):
        Minimal functionality to manipulate the sender stack.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtConnectionObject::execute):
        Remove the previous code that modified the scope chain. Push the sender object
        to the stack before calling the JavaScript function (the "slot" in Qt-speak) and
        pop it afterwards.

2011-05-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87257.
        http://trac.webkit.org/changeset/87257
        https://bugs.webkit.org/show_bug.cgi?id=61457

        This broke layout tests, see bug 61431. (Requested by
        hwennborg on #webkit).

        * storage/IDBBackingStore.h:
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::IDBFactoryBackendImpl):
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBFactoryBackendInterface.h:
        * storage/IDBLevelDBBackingStore.cpp:
        * storage/IDBLevelDBBackingStore.h:
        * storage/IDBSQLiteBackingStore.cpp:
        * storage/IDBSQLiteBackingStore.h:

2011-05-25  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Eric Carlson.

        [Qt] Enable usage of QuickTime mediaplayer for the Qt port on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=61279

        Enable the QuickTime backend for the Qt port on Mac. The patch adds the bits in WebCore
        to enable the QTKit backend of the Mac port. It can be enabled by passing DEFINES+=USE_QTKIT=1
        when calling build-webkit.

        * WebCore.pri:
        * WebCore.pro:
        * features.pri:
        * platform/KURL.h:
        * platform/SharedBuffer.h:
        * platform/cf/KURLCFNet.cpp:
        * platform/cf/SharedBufferCF.cpp:
        * platform/graphics/FloatSize.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/cg/FloatSizeCG.cpp:
        * platform/graphics/cg/IntRectCG.cpp:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::createQTMovieView):
        (WebCore::MediaPlayerPrivateQTKit::createQTVideoRenderer):
        (WebCore::MediaPlayerPrivateQTKit::createQTMovieLayer):
        (WebCore::MediaPlayerPrivateQTKit::preferredRenderingMode):
        (WebCore::MediaPlayerPrivateQTKit::paint):
        (-[WebCoreMovieObserver layerHostChanged:]):
        * platform/mac/KURLMac.mm:
        * platform/mac/SharedBufferMac.mm:
        (+[WebCoreSharedBufferData initialize]):
        * platform/mac/WebCoreObjCExtras.mm:
        * platform/qt/WebCoreSystemInterface.h: Added.
        * platform/qt/WebCoreSystemInterface.mm: Added.

2011-05-25  Rob Buis  <rbuis@rim.com>

        Reviewed by Eric Seidel.
        New test rubber-stamped by Dirk Schulze.

        WebKit does not handle missing filter elements correctly
        https://bugs.webkit.org/show_bug.cgi?id=12569

        Do not render elements that reference non-existant filters.

        Test: svg/W3C-SVG-1.1-SE/filters-felem-01-b.svg

        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::prepareToRenderSVGContent):

2011-05-25  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Put view-source documents in a unique origin and always allow them to run scripts. This ensures tools like
        XMLViewer work even when scripts are disabled, while still providing the protections expected when scripts are disabled.
        https://bugs.webkit.org/show_bug.cgi?id=59113

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::canExecuteScripts): Check whether the document is viewing source, and allow scripts in that case.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchUARules):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::setIsViewSource): Renamed from setUsesViewSourceStyles(), set's a unique security origin if we are viewing source.
        * dom/Document.h:
        (WebCore::Document::isViewSource): Renamed from usesViewSourceStyles().
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData):
        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):

2011-05-25  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by James Robinson.

        http://philip.html5.org/tests/canvas/suite/tests/2d.composite.uncovered.fill.source-in.html fails
        https://bugs.webkit.org/show_bug.cgi?id=39027

        And:

        - Fix LayoutTests/canvas/philip/tests/2d.composite.uncovered.fill.source-out.html
          https://bugs.webkit.org/show_bug.cgi?id=48295

        - Fix LayoutTests/canvas/philip/tests/2d.composite.uncovered.pattern.source-in.html
          https://bugs.webkit.org/show_bug.cgi?id=48304

        - Fix LayoutTests/canvas/philip/tests/2d.composite.uncovered.pattern.source-out.html
        https://bugs.webkit.org/show_bug.cgi?id=48305

        Those 4 tests have the same root cause for failing. Instead of splitting them in 2 fixes, I squashed
        them together as the fix is common.

        Based on an older work by Ariya Hidayat.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::fillRect): Added call displayTransparencyEverywhere for those 2
        cases if we have to.

        (WebCore::CanvasRenderingContext2D::shouldDisplayTransparencyEverywhere): This method returns true if
        the spec says to display transparency everywhere. We only do so for source-in and source-out for now.
        (WebCore::CanvasRenderingContext2D::displayTransparencyEverywhere): This method implements the spec
        (which matches other browsers' behavior) and "display transparency elsewhere".

        * html/canvas/CanvasRenderingContext2D.h: Added the two previous methods.

2011-05-25  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Add IntPoint versions of IntRect::move and IntPoint::move
        https://bugs.webkit.org/show_bug.cgi?id=61390

        Adding move methods to IntRect and IntPoint that take an IntPoint
        that's acting as an offset. Since we also apply negative offsets,
        also adding a single parameter operator- for IntPoint.

        No new tests since this is refactoring.

        * page/FrameView.cpp:
        (WebCore::FrameView::invalidateScrollbarRect):
        (WebCore::FrameView::convertFromRenderer):
        (WebCore::FrameView::convertToRenderer):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        (WebCore::ScrollView::convertChildToSelf):
        (WebCore::ScrollView::convertSelfToChild):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::invalidatePart):
        * platform/graphics/IntPoint.h:
        (WebCore::IntPoint::move):
        (WebCore::operator-):
        * platform/graphics/IntRect.h:
        (WebCore::IntRect::move):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::requestedRegionOfInputImageData):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::updateSubRect):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::logicalRectToPhysicalRect):
        (WebCore::RenderBlock::selectionGaps):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::offsetFromContainer):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::localCaretRect):
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::paint):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::culledInlineVisualOverflowBoundingBox):
        * rendering/RenderInputSpeech.cpp:
        (WebCore::RenderInputSpeech::paintInputFieldSpeechButton):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::paintScrollbar):
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::paintScrollbar):
        (WebCore::RenderLayerCompositor::paintContents):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeRectForRepaint):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::nodeAtPoint):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):

2011-05-25  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch addFocusRingRects to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=60783

        Switching addFocusRingRects to use an IntPoint representing the offset being
        applied instead of a pair of ints.

        No new tests as this is only refactoring.

        * platform/graphics/FloatSize.h:
        (WebCore::flooredIntPoint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::addFocusRingRects):
        * rendering/RenderBox.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addFocusRingRects):
        * rendering/RenderInline.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::addFocusRingRects):
        * rendering/RenderListBox.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintFocusRing):
        (WebCore::RenderObject::absoluteFocusRingQuads):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::addFocusRingRects):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::addFocusRingRects):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::addFocusRingRects):
        * rendering/RenderTextControlSingleLine.h:
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::addFocusRingRects):
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::addFocusRingRects):
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::addFocusRingRects):
        * rendering/svg/RenderSVGPath.h:

2011-05-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87229.
        http://trac.webkit.org/changeset/87229
        https://bugs.webkit.org/show_bug.cgi?id=61445

        Lots of tests crashing in
        CFNetwork!URLResponse::createFilenameFromResponseHeaders on
        Windows XP (Requested by aroben on #webkit).

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::suggestedFilename):
        (WebCore::ResourceResponseBase::setSuggestedFilename):
        (WebCore::ResourceResponseBase::httpStatusText):
        (WebCore::ResourceResponseBase::setHTTPStatusText):
        (WebCore::ResourceResponseBase::httpHeaderField):
        (WebCore::ResourceResponseBase::setHTTPHeaderField):
        (WebCore::ResourceResponseBase::httpHeaderFields):
        (WebCore::ResourceResponseBase::isAttachment):
        (WebCore::ResourceResponseBase::setLastModifiedDate):
        (WebCore::ResourceResponseBase::lastModifiedDate):
        (WebCore::ResourceResponseBase::wasCached):
        (WebCore::ResourceResponseBase::connectionReused):
        (WebCore::ResourceResponseBase::setConnectionReused):
        (WebCore::ResourceResponseBase::connectionID):
        (WebCore::ResourceResponseBase::setConnectionID):
        (WebCore::ResourceResponseBase::resourceLoadTiming):
        (WebCore::ResourceResponseBase::setResourceLoadTiming):
        (WebCore::ResourceResponseBase::resourceLoadInfo):
        (WebCore::ResourceResponseBase::setResourceLoadInfo):
        * platform/network/ResourceResponseBase.h:
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::platformLazyInit):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit):

2011-05-25  Igor Oliveira  <igor.oliveira@openbossa.org>

        Reviewed by Antonio Gomes.

        [Qt] QtWebKit crashes when dragging not loaded images
        https://bugs.webkit.org/show_bug.cgi?id=61314

        Checks if nativeImageForCurrentFrame is a valid pointer.

        Test: http/tests/misc/drag-not-loaded-image.html

        * platform/qt/DragImageQt.cpp:
        (WebCore::createDragImageFromImage):

2011-05-25  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Xan Lopez.

        [GTK] combobox and scrollbar are rendered small size at gtk+2.22.0
        https://bugs.webkit.org/show_bug.cgi?id=61436

        Fix arguments of gdk_drawable_get_size.

        No new tests, no behavior change.

        * platform/gtk/GtkVersioning.c:
        (getGdkDrawableSize):

2011-05-23  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: extreme lagging when searching for "img[src*="
        https://bugs.webkit.org/show_bug.cgi?id=61282

        No new tests, as this is a refactoring: ElementsTreeElement DOM is manipulated directly
        when built and search-highlighted, rather than through innerHTML.

        * inspector/front-end/DOMSyntaxHighlighter.js:
        (WebInspector.DOMSyntaxHighlighter):
        (WebInspector.DOMSyntaxHighlighter.prototype.createSpan):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._hideSearchHighlights):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.highlightSearchResults):
        (WebInspector.ElementsTreeElement.prototype.hideSearchHighlights):
        (WebInspector.ElementsTreeElement.prototype._updateSearchHighlight.updateEntryShow):
        (WebInspector.ElementsTreeElement.prototype._updateSearchHighlight.updateEntryHide):
        (WebInspector.ElementsTreeElement.prototype._updateSearchHighlight):
        (WebInspector.ElementsTreeElement.prototype._addNewAttribute):
        (WebInspector.ElementsTreeElement.prototype.updateTitle):
        (WebInspector.ElementsTreeElement.prototype._buildAttributeDOM):
        ():
        * inspector/front-end/utilities.js:
        ():

2011-05-25  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Tony Gentilcore.

        Introduce HTML5 track list objects.
        https://bugs.webkit.org/show_bug.cgi?id=60184

        Introduce the TrackList, MultipleTrackList and ExclusiveTrackList objects
        for their use in the MediaStream API and the HTML Media Element.
        Current spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#tracklist

        The Media Stream API will test this feature in the bug 56587.
        More tests related to the HTML Media Element may be added later.

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * dom/DOMAllInOne.cpp:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toTrackList):
        (WebCore::EventTarget::toMultipleTrackList):
        (WebCore::EventTarget::toExclusiveTrackList):
        * dom/EventTarget.h:
        * dom/ExclusiveTrackList.cpp: Added.
        (WebCore::ExclusiveTrackList::create):
        (WebCore::ExclusiveTrackList::ExclusiveTrackList):
        (WebCore::ExclusiveTrackList::~ExclusiveTrackList):
        (WebCore::ExclusiveTrackList::clear):
        (WebCore::ExclusiveTrackList::select):
        (WebCore::ExclusiveTrackList::toExclusiveTrackList):
        * dom/ExclusiveTrackList.h: Added.
        (WebCore::ExclusiveTrackList::selectedIndex):
        * dom/ExclusiveTrackList.idl: Added.
        * dom/MultipleTrackList.cpp: Added.
        (WebCore::MultipleTrackList::create):
        (WebCore::MultipleTrackList::MultipleTrackList):
        (WebCore::MultipleTrackList::~MultipleTrackList):
        (WebCore::MultipleTrackList::clear):
        (WebCore::MultipleTrackList::isEnabled):
        (WebCore::MultipleTrackList::enable):
        (WebCore::MultipleTrackList::disable):
        (WebCore::MultipleTrackList::toMultipleTrackList):
        * dom/MultipleTrackList.h: Added.
        * dom/MultipleTrackList.idl: Added.
        * dom/TrackList.cpp: Added.
        (WebCore::Track::create):
        (WebCore::Track::Track):
        (WebCore::TrackList::create):
        (WebCore::TrackList::TrackList):
        (WebCore::TrackList::~TrackList):
        (WebCore::TrackList::length):
        (WebCore::TrackList::checkIndex):
        (WebCore::TrackList::getID):
        (WebCore::TrackList::getKind):
        (WebCore::TrackList::getLabel):
        (WebCore::TrackList::getLanguage):
        (WebCore::TrackList::clear):
        (WebCore::TrackList::postChangeEvent):
        (WebCore::TrackList::dispatchChangeEvent):
        (WebCore::TrackList::toTrackList):
        (WebCore::TrackList::scriptExecutionContext):
        (WebCore::TrackList::eventTargetData):
        (WebCore::TrackList::ensureEventTargetData):
        * dom/TrackList.h: Added.
        (WebCore::Track::id):
        (WebCore::Track::kind):
        (WebCore::Track::label):
        (WebCore::Track::language):
        (WebCore::TrackList::DispatchTask::create):
        (WebCore::TrackList::DispatchTask::performTask):
        (WebCore::TrackList::DispatchTask::DispatchTask):
        (WebCore::TrackList::refEventTarget):
        (WebCore::TrackList::derefEventTarget):
        * dom/TrackList.idl: Added.

2011-05-25  Keishi Hattori  <keishi@webkit.org>

        Reviewed by Kent Tamura.

        Move ElementWithPseudoId to separate file
        https://bugs.webkit.org/show_bug.cgi?id=61430

        No new tests because no behavior changes.

        * CMakeLists.txt: Added ElementWithPseudoId.cpp
        * GNUmakefile.list.am: Added ElementWithPseudoId.{h,cpp}
        * WebCore.gypi: Added ElementWithPseudoId.{h,cpp}
        * WebCore.pro: Added ElementWithPseudoId.{h,cpp}
        * WebCore.vcproj/WebCore.vcproj: Added ElementWithPseudoId.{h,cpp}
        * WebCore.xcodeproj/project.pbxproj: Added ElementWithPseudoId.{h,cpp}
        * html/ValidationMessage.cpp: Removed ElementWithPseudoId definition.
        * html/shadow/ElementWithPseudoId.cpp: Added.
        (WebCore::ElementWithPseudoId::shadowPseudoId):
        * html/shadow/ElementWithPseudoId.h: Added.
        (WebCore::ElementWithPseudoId::create):
        (WebCore::ElementWithPseudoId::ElementWithPseudoId):

2011-05-25  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Antonio Gomes.

        [Qt] When QWebView has a different style set on it then the scrollbars are not rendered correctly
        https://bugs.webkit.org/show_bug.cgi?id=34635

        Make sure the scrollbar is properly rendered on Mac with another style than the Mac style. The code had
        two paths, one for Mac and one for any other styles. The problem is that on Mac you can still run the
        application with -style plastique for example, therefore the code used for other styles should also be
        used whenever the current style is not the Mac style.

        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarThemeQt::paint):

2011-05-25  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        WebSocket: Use fail() when WebSocketChannel has failed
        https://bugs.webkit.org/show_bug.cgi?id=61353

        An existing error message has been modified, but it is impossible
        to test this message in LayoutTests because it is only shown when
        memory allocation has failed, which is hard to reproduce reliably.

        One new message has been added. It is covered by an existing test
        http/tests/websocket/tests/frame-length-overflow.html.

        There is no other change in behavior. No new tests are added.

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::fail):
        Do not close if we know the socket stream is already closed. This does not
        change the behavior, because SocketStreamBase does nothing if it is already
        closed.
        (WebCore::WebSocketChannel::didOpen):
        (WebCore::WebSocketChannel::didReceiveData):
        We need to set m_shouldDiscardReceivedData to true before calling fail(),
        so I moved the error message from appendToBuffer() to here.
        The error message was rephrased in order to improve readability.
        (WebCore::WebSocketChannel::appendToBuffer):
        Unnested the code.
        (WebCore::WebSocketChannel::processBuffer):

2011-05-16  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by David Levin.

        CSSParser: m_implicitShorthand should probably be RAII
        https://bugs.webkit.org/show_bug.cgi?id=51586

        It was impossible to entirely eliminate the m_implicitShorthand manual changes
        due to the parseFill*() method stateful call chains.

        No new tests, as this is a refactoring.

        * css/CSSParser.cpp:
        (ImplicitScope::ImplicitScope):
        (ImplicitScope::~ImplicitScope):
        (WebCore::CSSParser::parseShorthand):
        (WebCore::CSSParser::parse4Values):
        (WebCore::CSSParser::parseBorderRadius):

2011-05-24  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: inspected page crashes when call stack is empty after live edit.
        https://bugs.webkit.org/show_bug.cgi?id=61364

        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::currentCallFrame):

2011-05-23  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Adam Barth.

        Chromium DevTools: Tab crashes with "Aw, snap!" on entering "(new Image())." in console
        https://bugs.webkit.org/show_bug.cgi?id=61194

        Test: inspector/console/console-eval-syntax-error.html

        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::evaluateCallback): return immediately in case of syntax error

2011-05-25  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Kent Tamura.

        Fix for Bug 61352 - Refactor RenderView::{enable,disable}LayoutState call sites to use RIIA
        https://bugs.webkit.org/show_bug.cgi?id=61352

        No new tests because no behavior changes.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::RenderMediaVolumeSliderContainer::layout):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::repaintOverhangingFloats):
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::layout):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::updateMarkerLocation):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::layout):
        * rendering/RenderView.h:
        (WebCore::RenderView::disableLayoutState):
        (WebCore::RenderView::enableLayoutState):
        (WebCore::LayoutStateDisabler::LayoutStateDisabler):
        (WebCore::LayoutStateDisabler::~LayoutStateDisabler):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):

2011-05-24  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed typo fix after r87228.

        * WebCore.pro:

2011-05-24  Keishi Hattori  <keishi@webkit.org>

        Reviewed by Kent Tamura.

        Disable textfield implementation of <input type=color>. Add INPUT_COLOR feature flag. Add input color sanitizer.
        https://bugs.webkit.org/show_bug.cgi?id=61273

        Test: fast/forms/color/input-value-sanitization-color.html

        * Configurations/FeatureDefines.xcconfig: Added COLOR_INPUT feature flag.
        * GNUmakefile.am: Added COLOR_INPUT feature flag.
        * features.pri: Added COLOR_INPUT feature flag.
        * html/ColorInputType.cpp: Wrapped with COLOR_INPUT feature flag.
        (WebCore::ColorInputType::isColorControl): Added.
        (WebCore::ColorInputType::fallbackValue): Added. Fallback value defined in spec.
        (WebCore::ColorInputType::sanitizeValue): Added. Sanitize value string as defined in spec.
        * html/ColorInputType.h: Wrapped with COLOR_INPUT feature flag.
        (WebCore::ColorInputType::ColorInputType): Changed to inherit BaseButtonInputType.
        * html/InputType.cpp:
        (WebCore::InputType::isColorControl): Added.
        * html/InputType.h:

2011-05-24  Steve Lacey  <sjl@chromium.org>

        Reviewed by Eric Carlson.

        Move chromium media controls timeline back to flexible rather than absolute
        layout.

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

        * css/mediaControlsChromium.css:
        (audio::-webkit-media-controls-current-time-display, video::-webkit-media-controls-current-time-display):
        (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):

2011-05-24  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed. Fix clang error.

        error: initialization of pointer of type 'WebCore::MHTMLArchive *' to
        NULL from a constant boolean expression [-Werror,-Wbool-conversio

        * loader/archive/mhtml/MHTMLArchive.cpp:
        (WebCore::MHTMLArchive::create):

2011-05-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add FIXME comments about removing FrameLoader::isProcessingUserGesture
        https://bugs.webkit.org/show_bug.cgi?id=61395

        All the callers of the API are wrong.  They should call the more modern
        static member function of ScriptController instead.  I'll remove the
        FrameLoader function in a future patch.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::processingUserGesture):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::click):

2011-05-24  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed. Fix style error.

        * platform/efl/WidgetEfl.cpp:
        (WebCore::WidgetPrivate::WidgetPrivate):

2011-05-24  Greg Simon  <gregsimon@chromium.org>

        Reviewed by Dimitri Glazkov.

        Control Indexeddb backends from LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=61000

        Test: storage/indexeddb/migrate-basics.html

        * storage/IDBBackingStore.h:
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::IDBFactoryBackendImpl):
        (WebCore::IDBFactoryBackendImpl::open):
        (WebCore::IDBFactoryBackendImpl::setEnableMigration):
        (WebCore::IDBFactoryBackendImpl::migrate):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBFactoryBackendInterface.h:
        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::backingStoreExists):
        * storage/IDBLevelDBBackingStore.h:
        (WebCore::IDBLevelDBBackingStore::backingStoreType):
        * storage/IDBSQLiteBackingStore.cpp:
        (WebCore::IDBSQLiteBackingStore::backingStoreExists):
        * storage/IDBSQLiteBackingStore.h:
        (WebCore::IDBSQLiteBackingStore::backingStoreType):

2011-05-24  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Ryosuke Niwa.

        [SVG] Assertion failure by dragging text between input fields inside <foreignObject>s
        https://bugs.webkit.org/show_bug.cgi?id=60692

        Add NULL check of 'holder' in WebCore::ReplacementFragment::ReplacementFragment()
        before call VisibleSelection::selectionFromContentsOfNode() to prevent crashing.

        Test: editing/pasteboard/drag-drop-input-in-svg.svg

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):

2011-05-24  Andy Estes  <aestes@apple.com>

        Reviewed by Geoffrey Garen.

        REGRESSION (r70748): WebKit cannot play QuickTime movies on Mac OS X Wiki Server pages
        https://bugs.webkit.org/show_bug.cgi?id=61229

        This site-specific hack maintains compatibility with Mac OS X Wiki Server,
        which embeds QuickTime movies using an object tag containing QuickTime's
        ActiveX classid. Treat this classid as valid only if OS X Server's unique
        'generator' meta tag is present. Only apply this quirk if there is no
        fallback content, which ensures the quirk will disable itself if Wiki
        Server is updated to generate an alternate embed tag as fallback content.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::shouldAllowQuickTimeClassIdQuirk): Return
        true if site-specific quirks are enabled, the object element has no
        fallback content, the classid attribute matches QuickTime's classid and
        the document has a 'generator' meta tag matching Mac OS X Web Services
        Server's unique generator string.
        (WebCore::HTMLObjectElement::hasValidClassId): Call
        shouldAllowQuickTimeClassIdQuirk()
        * html/HTMLObjectElement.h:

2011-05-24  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Change CachedResources to take a ResourceRequest instead of
        a url in their constructors and provide a very minimal set of
        cases for avoiding reusing a CachedResource. The ResourceRequest
        part of this change requires pushing responsibility
        for calling Document::completeURL() to the caller, instead of
        CachedResourceLoader, since ResourceRequest ASSERTs if it
        is constructed with an invalid url.

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

        Refactor, no new tests.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage):
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestScript):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        (WebCore::CachedCSSStyleSheet::didAddClient):
        (WebCore::CachedCSSStyleSheet::checkNotify):
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::CachedFont):
        * loader/cache/CachedFont.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        (WebCore::CachedImage::checkShouldPaintBrokenImage):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::reuseRequest):
        (WebCore::CachedResource::allowReuseOfRequest):
        (WebCore::CachedResource::removeClient):
        (WebCore::CachedResource::canUseCacheValidator):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::resourceRequest):
        (WebCore::CachedResource::url):
        * loader/cache/CachedResourceLoader.cpp:
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::load):
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::CachedScript):
        * loader/cache/CachedScript.h:
        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::CachedXSLStyleSheet):
        (WebCore::CachedXSLStyleSheet::didAddClient):
        (WebCore::CachedXSLStyleSheet::checkNotify):
        * loader/cache/CachedXSLStyleSheet.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::requestImageResource):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::loadFont):
        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::loadSheet):

2011-05-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Use Element::shadowPseudoId() for text field decoration elements
        https://bugs.webkit.org/show_bug.cgi?id=61351

        No new tests. Covered by existing tests.

        * css/CSSSelector.cpp: Remove support for the following static pseudo selectors:
          - -webkit-inner-spin-button
          - -webkit-input-speech-button
          - -webkit-outer-spin-button
          - -webkit-search-cancel-button
          - -webkit-search-decoration
          - -webkit-search-results-button
          - -webkit-search-results-decoration
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h: ditto.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchRules):
          Store shadowPseudoId() result in a local variable because
          SearchFieldResultsButtonElement::shadowPseudoId() is a little expensive.
        * html/shadow/TextControlInnerElements.cpp:
         Override Element::shadowPseudoId() instead of Element::styleForRenderer().
        (WebCore::SearchFieldResultsButtonElement::shadowPseudoId):
        (WebCore::SearchFieldCancelButtonElement::shadowPseudoId):
        (WebCore::SpinButtonElement::shadowPseudoId):
        (WebCore::InputFieldSpeechButtonElement::shadowPseudoId):
        * html/shadow/TextControlInnerElements.h: Update declarations.
        * rendering/RenderTextControlSingleLine.cpp: Remove createFooStyle() functions.
        * rendering/RenderTextControlSingleLine.h: ditto.
        * rendering/style/RenderStyleConstants.h: Remove unused pseudo IDs.

2011-05-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Sorted WebCore.xcodeproj again.

        * WebCore.xcodeproj/project.pbxproj: Ran sort-XCode-project-file.

2011-05-24  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=61345
        part of <rdar://problem/8675177>
        Don't initialize ResourceResponse.m_suggestedFilename until we want to use it.  Initializing it requires reading in and parsing a plist.  
        Add new initialization state CommonAndUncommonFields to ResourceResponse.  This will be for all the header fields.
        Move suggestedFilename initialization to AllFields so it is never initialized unless we ask for it. 
        Add "Content-Type" to common headers since it is looked for by every CSS sheet load.

        No new tests because functionality has not changed.

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::suggestedFilename):
        (WebCore::ResourceResponseBase::setSuggestedFilename):
        (WebCore::ResourceResponseBase::httpStatusText):
        (WebCore::ResourceResponseBase::setHTTPStatusText):
        (WebCore::ResourceResponseBase::httpHeaderField):
        (WebCore::ResourceResponseBase::setHTTPHeaderField):
        (WebCore::ResourceResponseBase::httpHeaderFields):
        (WebCore::ResourceResponseBase::isAttachment):
        (WebCore::ResourceResponseBase::setLastModifiedDate):
        (WebCore::ResourceResponseBase::lastModifiedDate):
        (WebCore::ResourceResponseBase::wasCached):
        (WebCore::ResourceResponseBase::connectionReused):
        (WebCore::ResourceResponseBase::setConnectionReused):
        (WebCore::ResourceResponseBase::connectionID):
        (WebCore::ResourceResponseBase::setConnectionID):
        (WebCore::ResourceResponseBase::resourceLoadTiming):
        (WebCore::ResourceResponseBase::setResourceLoadTiming):
        (WebCore::ResourceResponseBase::resourceLoadInfo):
        (WebCore::ResourceResponseBase::setResourceLoadInfo):
        * platform/network/ResourceResponseBase.h:
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::platformLazyInit):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit):

2011-05-24  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        Improve handling in WebCore of low memory situations
        https://bugs.webkit.org/show_bug.cgi?id=61222

        Added new class, MemoryPressureHandler, to platform to respond to low
        system memory events. Added Mac specific implementation that reduces the
        page cache, NSURL cache, WebCore cache by half their current usage
        and then garbage collects.  This can allow Safari to continue operating
        in a low memory situation with minimal paging.
        Split up prune operations in MemoryCache to allow for pruning to a
        specific actual size to support this change.

        No tests added as the functionality of WebKit wasn't changed.

        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResources):
        (WebCore::MemoryCache::forcePruneLiveResources):
        (WebCore::MemoryCache::pruneLiveResourcesToTarget):
        (WebCore::MemoryCache::pruneDeadResources):
        (WebCore::MemoryCache::forcePruneDeadResources):
        (WebCore::MemoryCache::pruneDeadResourcesToTarget):
        * loader/cache/MemoryCache.h:
        (WebCore::MemoryCache::forcePrune):
        * platform/MemoryPressureHandler.cpp: Added.
        (WebCore::memoryPressureHandler):
        (WebCore::MemoryPressureHandler::MemoryPressureHandler):
        (WebCore::MemoryPressureHandler::install):
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):
        * platform/MemoryPressureHandler.h: Added.
        * platform/mac/MemoryPressureHandler.mm: Added.
        (WebCore::MemoryPressureHandler::install):
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):

2011-05-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Node::shadowAncestorNode() and shadowTreeRootNode() should be const.
        https://bugs.webkit.org/show_bug.cgi?id=61398

        shadowAncestorNode() and shadowTreeRootNode() should be const
        though they can return 'this' pointer.

        No new tests. This doesn't change any visible behavior.

        * dom/Node.cpp:
        (WebCore::Node::shadowAncestorNode): Make this const.
        (WebCore::Node::shadowTreeRootNode): ditto.
        * dom/Node.h: Update declarations.
        * html/shadow/TextControlInnerElements.h:
        (WebCore::SpinButtonElement::isEnabledFormControl): Need no const_cast<>.
        (WebCore::SpinButtonElement::isReadOnlyFormControl): ditto.

2011-05-24  James Simonsen  <simonjam@chromium.org>

        Reviewed by Eric Seidel.

        ASSERT_NOT_REACHED reached with broken ideograph and system fallback
        https://bugs.webkit.org/show_bug.cgi?id=53528

        Test: fast/text/justify-ideograph-vertical.html (on chromium linux)

        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataForCharacter): Identify and handle broken ideographs as any other variant.
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::variantFontData): Added BrokenIdeographVariant.

2011-05-24  Syed Idris Shah  <syed.idris-shah@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] fast/canvas/webgl/gl-uniform-arrays.html failing for Qt on Linux
        https://bugs.webkit.org/show_bug.cgi?id=60377 

        LayoutTests/fast/canvas/webgl/gl-uniform-arrays.html

        We do not need assert for the useProgram as program can be null.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::useProgram): Program can be null. Removing assert.

2011-05-24  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Undo gets broken in contenteditable area when a text field's value is set by script
        https://bugs.webkit.org/show_bug.cgi?id=61340

        The bug was caused by RenderTextControl::setInnerTextValue's clearing undo stack by
        calling clearUndoRedoOperations whenever script sets new value to input or textarea.

        Fixed the bug by removing the offending call to clearUndoRedoOperations. While this call
        was added by r15565 to fix a crash, SimpleEditCommands have since become much more robust
        and the test added by r15565 (fast/forms/text-field-setvalue-crash.html) still passes.

        Test: editing/undo/undo-after-setting-value.html

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

2011-05-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        Move code to discover if a CTFont has vertical glyphs out of SimpleFontData::platformInit()
        https://bugs.webkit.org/show_bug.cgi?id=61392

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::fontHasVerticalGlyphs): Moved code here...
        (WebCore::SimpleFontData::platformInit): ...from here.

2011-05-24  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Implement Float64Array
        https://bugs.webkit.org/show_bug.cgi?id=39144

        Implemented Float64Array based on the existing Float32Array sources.
        Built and tested in Chromium on Linux and Mac OS X and Safari on Mac OS X.

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::float64Array):
        * bindings/js/JSFloat64ArrayCustom.cpp: Added.
        (WebCore::JSFloat64Array::indexSetter):
        (WebCore::toJS):
        (WebCore::JSFloat64Array::set):
        (WebCore::JSFloat64ArrayConstructor::constructJSFloat64Array):
        * bindings/v8/custom/V8Float64ArrayCustom.cpp: Added.
        (WebCore::V8Float64Array::constructorCallback):
        (WebCore::V8Float64Array::setCallback):
        (WebCore::toV8):
        * html/canvas/ArrayBufferView.h:
        (WebCore::ArrayBufferView::isDoubleArray):
        * html/canvas/Float64Array.cpp: Added.
        (WebCore::Float64Array::create):
        (WebCore::Float64Array::Float64Array):
        (WebCore::Float64Array::subarray):
        * html/canvas/Float64Array.h: Added.
        (WebCore::Float64Array::set):
        (WebCore::Float64Array::item):
        (WebCore::Float64Array::isDoubleArray):
        * html/canvas/Float64Array.idl: Added.
        * page/DOMWindow.idl:
        * workers/WorkerContext.idl:

2011-05-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Chris Marrin.

        Add ability to set compositing layer bounds origin
        https://bugs.webkit.org/show_bug.cgi?id=61381

        On Core Animation layers, the origin of the bounds
        rectangle affects where layer content is rendered, as well
        as the offset of sublayers. Currently we always set the
        bounds offset to a zero point, but may need to make use
        of the bounds offset in future, so expose it via GraphicsLayer.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::boundsOrigin):
        (WebCore::GraphicsLayer::setBoundsOrigin):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setSize):
        (WebCore::GraphicsLayerCA::setBoundsOrigin):
        (WebCore::GraphicsLayerCA::setAllowTiledLayer):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateBounds):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        * platform/graphics/ca/GraphicsLayerCA.h:

2011-05-24  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Build fix.

        * CMakeLists.txt: Also build platform/network/ContentTypeParser.cpp,
        added by r86289.

2011-05-24  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Build fix.

        * bridge/runtime_root.cpp: Include <heap/Weak.h> instead of
        <JavaScriptCore/Weak.h>.

2011-05-24  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Adam Barth.

        Adding MHTML reading support. That required some basic MIME header parsing.
        Modified DocumentLoader to keep a reference to the currently Archive loaded,
        so we can have different policies for loading subresources depending on the
        archive type.
        https://bugs.webkit.org/show_bug.cgi?id=7168

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * features.pri:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitLoad):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        (WebCore::DocumentLoader::popArchiveForSubframe):
        (WebCore::DocumentLoader::scheduleArchiveLoad):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::loadArchive):
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::finishedLoadingDocument):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::archive):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::start):
        * loader/archive/Archive.cpp: Added.
        * loader/archive/Archive.h:
        (WebCore::Archive::mainResource):
        * loader/archive/ArchiveFactory.cpp:
        (WebCore::archiveFactoryCreate):
        (WebCore::archiveMIMETypes):
        (WebCore::ArchiveFactory::create):
        (WebCore::ArchiveFactory::registerKnownArchiveMIMETypes):
        * loader/archive/ArchiveFactory.h:
        * loader/archive/ArchiveResourceCollection.cpp:
        (WebCore::ArchiveResourceCollection::addAllResources):
        (WebCore::ArchiveResourceCollection::popSubframeArchive):
        * loader/archive/ArchiveResourceCollection.h:
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        (WebCore::LegacyWebArchive::type):
        * loader/archive/cf/LegacyWebArchive.h:
        * loader/archive/mhtml/MHTMLArchive.cpp: Added.
        * loader/archive/mhtml/MHTMLArchive.h: Added.
        * loader/archive/mhtml/MHTMLParser.cpp: Added.
        * loader/archive/mhtml/MHTMLParser.h: Added.
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedNonImageMimeTypes):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::documentFragment):
        * platform/network/MIMEHeader.cpp: Added.
        * platform/network/MIMEHeader.h: Added.

2011-05-24  Geoffrey Garen  <ggaren@apple.com>

        Try to fix some builds: #include Weak.h for Weak<T>.

        * bridge/runtime_root.h:

2011-05-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Can't scroll scaled page that has overflow:hidden on its root
        <rdar://problem/9029189>
        https://bugs.webkit.org/show_bug.cgi?id=61339

        Test: fast/events/scroll-in-scaled-page-with-overflow-hidden.html

        * page/FrameView.cpp:
        (WebCore::FrameView::applyOverflowToViewport):
        Scrollbars should be enabled for the viewport when scaled, even if overflow:hidden
        is specified.

2011-05-24  Adam Roben  <aroben@apple.com>

        Leopard build fix

        * bridge/runtime_root.cpp: Added a missing #include.

2011-05-24  Jian Li  <jianli@chromium.org>

        Reviewed by Kenneth Russell.

        Make start parameter of Blob.slice optional.
        https://bugs.webkit.org/show_bug.cgi?id=59628

        The start parameter should be optional per the latest FILE API
        spec: http://dev.w3.org/2006/webapi/FileAPI/#dfn-Blob.

        * fileapi/Blob.h:
        * fileapi/Blob.idl: Make start parameter optional.

2011-05-24  Adam Roben  <aroben@apple.com>

        Invalidate RuntimeObjects when they are finalized

        This will cause the underlying NPObject to be released at finalization time, rather than at
        destruction time (which is unpredictable and could occur after the plugin has been
        unloaded).

        Test: plugins/npobject-js-wrapper-destroyed-after-plugin-unload.html

        Fixes <http://webkit.org/b/61317> <rdar://problem/9489829> Crash in _NPN_DeallocateObject
        when reloading yahoo.com webarchive in WebKit1

        Reviewed by Oliver Hunt.

        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::~RuntimeObject): Assert that we've already been invalidated.

        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        (JSC::Bindings::RootObject::addRuntimeObject):
        Updated for m_runtimeObjects type change.

        (JSC::Bindings::RootObject::finalize): Added. Invalidates the RuntimeObject and removes it
        from the map.

        * bridge/runtime_root.h: Now inherits from WeakHandleOwner.
        Changed m_runtimeObjects from a WeakGCMap to a HashMap of JSC::Weak objects so that we will
        be notified when the RuntimeObjects are finalized.

2011-05-24  Mike Reed  <reed@google.com>

        Reviewed by Kenneth Russell.

        skia: fix stroking of zero-height rectangles
        https://bugs.webkit.org/show_bug.cgi?id=61284

        Tests: canvas/philip/tests/2d.line.miter.lineedge.html
               canvas/philip/tests/2d.strokeRect.zero.4.html

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

2011-05-24  Zan Dobersek  <zandobersek@gmail.com> and Philippe Normand  <pnormand@igalia.com>

        Reviewed by Kenneth Russell.

        Enable FloatArray usage outside WebGL guards
        https://bugs.webkit.org/show_bug.cgi?id=61356

        * webaudio/AudioBuffer.cpp:
        * webaudio/AudioBuffer.idl:
        * webaudio/RealtimeAnalyser.cpp:
        * webaudio/RealtimeAnalyser.h:
        * webaudio/RealtimeAnalyserNode.h:
        * webaudio/RealtimeAnalyserNode.idl:

2011-05-24  Adam Klein  <adamk@chromium.org>

        Unreviewed, rolling out r87145.
        http://trac.webkit.org/changeset/87145
        https://bugs.webkit.org/show_bug.cgi?id=61194

        Regression in LayoutTests/inspector/debugger/scripts-panel.html on Chromium Win & Linux.

        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::evaluateCallback):

2011-05-24  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Clamp coordinates to integers for canvas create/getImageData routines
        https://bugs.webkit.org/show_bug.cgi?id=61135

        Test: fast/canvas/canvas-getImageData-largeNonintegralDimensions.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::convertLogicalToDevice): clamp to ints
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createImageData):
        (WebCore::CanvasRenderingContext2D::getImageData):
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData):

2011-05-24  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        [wx] Make sure x and y adjustments are applied to all operations, and fix the calculations
        for the height and width checks to take into account x and y offsets.
        
        https://bugs.webkit.org/show_bug.cgi?id=61367

        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::Image::drawPattern):

2011-05-24  Tony Chang  <tony@chromium.org>

        Reviewed by James Robinson.

        fix render overflow computation for input type=range
        https://bugs.webkit.org/show_bug.cgi?id=61132

        Test: fast/forms/slider-hit-testing.html

        We need to clear m_overflow otherwise we use the first
        size of the slider for hit testing (i.e., changes to the size
        cause problems).  This only shows up if the thumb isn't contained
        in the bounds of the slider.  Making the range have a smaller height
        than the thumb shows the bug.

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::layout): Clear the overflow during layout
            so we re-compute the overflow based on the current size of the
            slider.

2011-05-24  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by James Robinson.

        Enable skia gpu rendering for content layers
        https://bugs.webkit.org/show_bug.cgi?id=56749

        This patch adds gpu accelerated rendering for content and root layers.
        Layer textures are updated in two stages:
        1. Paint: The non-accelerated path paints the layer contents into a bitmap.
                  The accelerated path paints into an SkPicture, which is essentially a display list.
        2. Upload: The non-accelerated path uploads the pixels obtained in the first stage to a texture.
                   The accelerated path renders the picture directly into the texture.

        The accelerated path can be enabled by --enable-accelerated-drawing command-line flag in chromium.
        Note that this patch does not accelerate the CG path on mac. We have two options here - use skia or accelrate CG path.
        Any bugs should be caught by layout tests.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::createTextureUpdater):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::skiaContext):
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        (WebCore::LayerRendererChromium::createRootLayerTextureUpdater):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::acceleratedDrawing):
        * platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:
        (WebCore::LayerTextureUpdaterSkPicture::LayerTextureUpdaterSkPicture):
        (WebCore::LayerTextureUpdaterSkPicture::~LayerTextureUpdaterSkPicture):
        (WebCore::LayerTextureUpdaterSkPicture::prepareToUpdate):
        (WebCore::LayerTextureUpdaterSkPicture::updateTextureRect):
        (WebCore::LayerTextureUpdaterSkPicture::deleteFrameBuffer):
        (WebCore::LayerTextureUpdaterSkPicture::createFrameBuffer):
        (WebCore::LayerTextureUpdaterSkPicture::clearFrameBuffer):
        * platform/graphics/chromium/LayerTextureUpdaterCanvas.h:
        (WebCore::LayerTextureUpdaterSkPicture::orientation):
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::updateRect):
        (WebCore::LayerTilerChromium::draw):

2011-05-24  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: display keyboard shortcuts in scripts panel sidebar buttons tooltip text.
        https://bugs.webkit.org/show_bug.cgi?id=61358

        * English.lproj/localizedStrings.js:
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype._selectedPlacardByIndex):
        (WebInspector.CallStackSidebarPane.prototype.registerShortcuts):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.registerShortcut):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._createSidebarButtons):
        (WebInspector.ScriptsPanel.prototype._createSidebarButtonAndRegisterShortcuts):

2011-05-24  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Andres Kling.

        JSAudioContextCustom doesn't encode errors
        https://bugs.webkit.org/show_bug.cgi?id=61357

        Fix AudioContext return values

        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContextConstructor::constructJSAudioContext):

2011-05-24  Rob Buis  <rbuis@rim.com>

        Rubber-stamped by Dirk Schulze.

        Remove requiresLayer inlines, already provided by RenderSVGModelObject.

        * rendering/svg/RenderSVGHiddenContainer.h:
        (WebCore::RenderSVGHiddenContainer::isSVGHiddenContainer):
        * rendering/svg/RenderSVGImage.h:

2011-05-24  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed, build fix.

        Remove platform layering violation: TextRun stores RenderObjects for SVG Fonts support
        https://bugs.webkit.org/show_bug.cgi?id=60254

        Forgot to rename the destructor.

        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::AdditionalFontData::~AdditionalFontData):

2011-05-24  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed, build fix.

        Remove platform layering violation: TextRun stores RenderObjects for SVG Fonts support
        https://bugs.webkit.org/show_bug.cgi?id=60254

        Rename SimpleFontData::FontData subclass to AdditionalFontData, to avoid clashes with the WebCore::FontData class, which breaks the win build.

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::fontData):
        * svg/SVGFontData.h:

2011-05-24  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Antti Koivisto.

        Remove platform layering violation: TextRun stores RenderObjects for SVG Fonts support
        https://bugs.webkit.org/show_bug.cgi?id=60254

        First part:
        Remove a long-standing layering violation in TextRun: it stores RenderObject/RenderSVGResource pointers for SVG Fonts support.
        Replace the two Render* pointers with a single RefPtr<AbstractRenderingContext>. AbstractRenderingContext is a helper class,
        that can be derived from in order to associate additional data with a TextRun. This effectively reduces the memory consumption of TextRun.

        Introduce rendering/TextRunRenderingContext.h, which inherits from TextRun::AbstractRenderingContext and holds additional data.
        If the primary font in use is a SVG Font then allocate a TextRunRenderingContext object and store it in the RefPtr<AbstractRenderingContext>
        in TextRun. If the primary font is not a SVG Font, don't even allocate the TextRunRenderingContext structure, as we won't need the context data.
        SVG Fonts glyph matching only works within a context, so we need access to the RenderObject that's drawing the text.

        This is the main preparation patch for the SVG Fonts rewrite, that will allow us to share the simple text code path for SVG Fonts as well,
        making all CSS text properties work for HTML text using SVG Fonts, and allows proper integration within the GlyphPage concept. Soon
        we can intermix WOFF/SVG & native fonts, within segment font declarations.

        Second part:
        Remove a long-standing layering violation in SimpleFontData: it stores SVGFontData objects, that are living in svg/.
        Use the same concept as above, introduce SimpleFontData::AbstractFontData, and let SVGFontData inherit from AbstractFontData and extent it.
        If SVG Fonts are used, CSSFontFaceSource will create a SVGFontData object and pass it as PassOwnPtr<AbstractFontData> to SimpleFontData.

        All layering violations are gone now, SVG Fonts are cleanly integrated now.
        Doesn't affect any tests yet, refactoring only.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText):
        (WebCore::Font::width):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::offsetForPosition):
        * platform/graphics/Font.h:
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        (WebCore::SimpleFontData::~SimpleFontData):
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::FontData::~FontData):
        (WebCore::SimpleFontData::fontMetrics):
        (WebCore::SimpleFontData::setMaxCharWidth):
        (WebCore::SimpleFontData::setAvgCharWidth):
        (WebCore::SimpleFontData::setSpaceWidth):
        (WebCore::SimpleFontData::setSpaceGlyph):
        (WebCore::SimpleFontData::setZeroWidthSpaceGlyph):
        (WebCore::SimpleFontData::fontData):
        (WebCore::SimpleFontData::isSVGFont):
        (WebCore::SimpleFontData::setMissingGlyphData):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::setAllowTabs):
        (WebCore::TextRun::setXPos):
        (WebCore::TextRun::RenderingContext::~RenderingContext):
        (WebCore::TextRun::renderingContext):
        (WebCore::TextRun::setRenderingContext):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::selectionRect):
        (WebCore::EllipsisBox::paintSelection):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        (WebCore::InlineTextBox::constructTextRun):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::stripTrailingSpace):
        (WebCore::RenderBlock::constructTextRun):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):
        (WebCore::textWidth):
        (WebCore::tryHyphenating):
        (WebCore::RenderBlock::LineBreaker::nextLineBreak):
        (WebCore::RenderBlock::checkLinesForTextOverflow):
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::combineText):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        (WebCore::RenderFileUploadControl::computePreferredLogicalWidths):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::applyLineClamp):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::setImageSizeForAltText):
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::computePreferredLogicalWidths):
        (WebCore::RenderListMarker::getRelativeMarkerRect):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::trimmedPrefWidths):
        (WebCore::RenderText::computePreferredLogicalWidths):
        (WebCore::RenderText::width):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::getAvgCharWidth):
        * rendering/svg/RenderSVGAllInOne.cpp:
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::offsetForPositionInFragment):
        (WebCore::SVGInlineTextBox::prepareGraphicsContextForTextPainting):
        (WebCore::SVGInlineTextBox::restoreGraphicsContextAfterTextPainting):
        (WebCore::SVGInlineTextBox::constructTextRun):
        (WebCore::SVGInlineTextBox::paintText):
        * rendering/svg/SVGTextLayoutEngineSpacing.cpp:
        (WebCore::SVGTextLayoutEngineSpacing::calculateSVGKerning):
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::constructTextRun):
        (WebCore::SVGTextMetrics::measureCharacterRange):
        * rendering/svg/SVGTextRunRenderingContext.cpp: Copied from svg/SVGFont.cpp.
        (WebCore::svgFontAndFontFaceElementForFontData):
        (WebCore::firstParentRendererForNonTextNode):
        (WebCore::referencingRenderObjectFromRun):
        (WebCore::activePaintingResourceFromRun):
        (WebCore::SVGTextRunWalker::walk):
        (WebCore::floatWidthMissingGlyphCallback):
        (WebCore::floatWidthOfSubStringUsingSVGFont):
        (WebCore::SVGTextRunRenderingContext::floatWidthUsingSVGFont):
        (WebCore::SVGTextRunRenderingContext::drawTextUsingSVGFont):
        (WebCore::SVGTextRunRenderingContext::selectionRectForTextUsingSVGFont):
        (WebCore::SVGTextRunRenderingContext::offsetForPositionForTextUsingSVGFont):
        * rendering/svg/SVGTextRunRenderingContext.h: Added.
        (WebCore::SVGTextRunRenderingContext::create):
        (WebCore::SVGTextRunRenderingContext::context):
        (WebCore::SVGTextRunRenderingContext::activePaintingResource):
        (WebCore::SVGTextRunRenderingContext::setActivePaintingResource):
        (WebCore::SVGTextRunRenderingContext::SVGTextRunRenderingContext):
        (WebCore::textRunNeedsRenderingContext):
        * svg/SVGAllInOne.cpp:
        * svg/SVGFont.cpp: Removed.
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::initializeFontData):
        * svg/SVGFontData.h:
        (WebCore::SVGFontData::create):
        (WebCore::SVGFontData::isSVGFontData):
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::SVGGlyphElement):
        (WebCore::SVGGlyphElement::buildGenericGlyphIdentifier):
        (WebCore::SVGGlyphElement::buildGlyphIdentifier):
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::SVGHKernElement):
        (WebCore::SVGHKernElement::buildHorizontalKerningPair):
        * svg/SVGVKernElement.cpp:
        (WebCore::SVGVKernElement::SVGVKernElement):
        (WebCore::SVGVKernElement::buildVerticalKerningPair):
        * svg/SVGVKernElement.h:

2011-05-24  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Andreas Kling.

        [GTK] Implement GraphicsContextCairo::imageInterpolationQuality().
        https://bugs.webkit.org/show_bug.cgi?id=60827

        Implement getter/setter of imageInterpolationQuality and logic to change
        interpolation algorithm when drawing image.
        Mac and Qt already implemented it.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::imageInterpolationQuality):
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::drawSurfaceToContext):
        * platform/graphics/cairo/PlatformContextCairo.h:
        (WebCore::PlatformContextCairo::setImageInterpolationQuality): Added.
        (WebCore::PlatformContextCairo::imageInterpolationQuality): Added.

2011-05-24  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Tony Gentilcore.

        Media Stream API: adding Stream and GeneratedStream classes.
        https://bugs.webkit.org/show_bug.cgi?id=56666

        Add the code for the Stream and GeneratedStream classes and integrate it
        with the existing stream generation requests.

        Tests for the Media Stream API will be provided by the bug 56587.

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * dom/DOMAllInOne.cpp:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toStream):
        (WebCore::EventTarget::toGeneratedStream):
        * dom/EventTarget.h:
        * dom/GeneratedStream.cpp: Added.
        (WebCore::GeneratedStream::DispatchUpdateTask::create):
        (WebCore::GeneratedStream::DispatchUpdateTask::performTask):
        (WebCore::GeneratedStream::DispatchUpdateTask::DispatchUpdateTask):
        (WebCore::GeneratedStream::create):
        (WebCore::GeneratedStream::GeneratedStream):
        (WebCore::GeneratedStream::~GeneratedStream):
        (WebCore::GeneratedStream::toGeneratedStream):
        (WebCore::GeneratedStream::detachEmbedder):
        (WebCore::GeneratedStream::stop):
        (WebCore::GeneratedStream::onStop):
        * dom/GeneratedStream.h: Added.
        * dom/GeneratedStream.idl: Added.
        * dom/Stream.cpp: Added.
        (WebCore::Stream::create):
        (WebCore::Stream::Stream):
        (WebCore::Stream::~Stream):
        (WebCore::Stream::toStream):
        (WebCore::Stream::streamEnded):
        (WebCore::Stream::scriptExecutionContext):
        (WebCore::Stream::eventTargetData):
        (WebCore::Stream::ensureEventTargetData):
        * dom/Stream.h: Added.
        (WebCore::Stream::readyState):
        (WebCore::Stream::label):
        (WebCore::Stream::refEventTarget):
        (WebCore::Stream::derefEventTarget):
        * dom/Stream.idl: Added.
        * page/CallbackTask.h:
        (WebCore::CallbackTask1::Scheduler::~Scheduler):
        * page/MediaStreamClient.h:
        * page/MediaStreamController.cpp:
        (WebCore::MediaStreamController::stopGeneratedStream):
        (WebCore::MediaStreamController::streamFailed):
        * page/MediaStreamController.h:
        * page/MediaStreamFrameController.cpp:
        (WebCore::MediaStreamFrameController::Request::Request):
        (WebCore::MediaStreamFrameController::GenerateStreamRequest::create):
        (WebCore::MediaStreamFrameController::GenerateStreamRequest::abort):
        (WebCore::MediaStreamFrameController::GenerateStreamRequest::GenerateStreamRequest):
        (WebCore::MediaStreamFrameController::unregister):
        (WebCore::MediaStreamFrameController::getStreamFromLabel):
        (WebCore::MediaStreamFrameController::generateStream):
        (WebCore::MediaStreamFrameController::stopGeneratedStream):
        (WebCore::MediaStreamFrameController::streamGenerated):
        (WebCore::MediaStreamFrameController::streamGenerationFailed):
        (WebCore::MediaStreamFrameController::streamFailed):
        * page/MediaStreamFrameController.h:
        (WebCore::MediaStreamFrameController::StreamClient::StreamClient):
        (WebCore::MediaStreamFrameController::StreamClient::isGeneratedStream):
        * page/NavigatorUserMediaError.h:
        (WebCore::NavigatorUserMediaError::create):
        (WebCore::NavigatorUserMediaError::NavigatorUserMediaError):
        * page/NavigatorUserMediaSuccessCallback.h:
        * page/NavigatorUserMediaSuccessCallback.idl:

2011-05-23  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver Hunt.
    
        REGRESSION (r45620): Node list caches never deleted
        https://bugs.webkit.org/show_bug.cgi?id=61268
        <rdar://problem/9467379>
        
        NodeListsNodeData::isEmpty() tests if RefCounted objects have refcount of zero which is impossible.
        As a results NodeList caches are never deleted, causing bad performance in DOM mutating operations as
        they repeatedly invalidate caches.

        * dom/Node.cpp:
        (WebCore::Node::childNodes):
            Construct m_childNodeListCaches lazily.

        (WebCore::Node::unregisterDynamicNodeList):
        (WebCore::Node::notifyLocalNodeListsAttributeChanged):
        (WebCore::Node::notifyLocalNodeListsChildrenChanged):
        (WebCore::Node::removeNodeListCacheIfPossible): 
            Add a helper.

        (WebCore::NodeListsNodeData::invalidateCaches):
            Invalidate m_childNodeListCaches by clearing it if there are no additional clients

        (WebCore::NodeListsNodeData::isEmpty):
            Test emptiness of various NodeListCaches simply by testing hash emptiness instead of testing for non-zero ref count of items.
            m_childNodeListCaches is empty if it is null.

        * dom/Node.h: 
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::NodeListsNodeData):
            Construct m_childNodeListCaches lazily.

2011-05-24  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Reorganize InspectorBackendDispatch code to eliminate duplication
        https://bugs.webkit.org/show_bug.cgi?id=61300

        * inspector/CodeGeneratorInspector.pm:

2011-05-23  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Adam Barth.

        Chromium DevTools: Tab crashes with "Aw, snap!" on entering "(new Image())." in console
        https://bugs.webkit.org/show_bug.cgi?id=61194

        Test: inspector/console/console-eval-syntax-error.html

        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::evaluateCallback): return immediately in case of syntax error

2011-04-13  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        Geolocation callbacks should make use of new callback generation mechanism
        https://bugs.webkit.org/show_bug.cgi?id=40065

        No new tests, refactoring only.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSCustomPositionCallback.cpp: Removed.
        * bindings/js/JSCustomPositionCallback.h: Removed.
        * bindings/js/JSCustomPositionErrorCallback.cpp: Removed.
        * bindings/js/JSCustomPositionErrorCallback.h: Removed.
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::JSGeolocation::getCurrentPosition):
        (WebCore::JSGeolocation::watchPosition):
        * bindings/v8/custom/V8CustomPositionCallback.cpp: Removed.
        * bindings/v8/custom/V8CustomPositionCallback.h: Removed.
        * bindings/v8/custom/V8CustomPositionErrorCallback.cpp: Removed.
        * bindings/v8/custom/V8CustomPositionErrorCallback.h: Removed.
        * bindings/v8/custom/V8GeolocationCustom.cpp:
        (WebCore::V8Geolocation::getCurrentPositionCallback):
        (WebCore::V8Geolocation::watchPositionCallback):
        * page/PositionCallback.h:
        * page/PositionCallback.idl: Added.
        * page/PositionErrorCallback.h:
        * page/PositionErrorCallback.idl: Added.

2011-05-23  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: watched expressions buttons do not match inspector styles.
        https://bugs.webkit.org/show_bug.cgi?id=30554

        * WebCore.gypi:
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.XHRBreakpointsSidebarPane):
        * inspector/front-end/Images/deleteIcon.png: Added.
        * inspector/front-end/Images/paneRefreshButtons.png: Added.
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSidebarPane.prototype.reset):
        (WebInspector.WatchExpressionsSidebarPane.prototype._addButtonClicked):
        (WebInspector.WatchExpressionsSidebarPane.prototype._refreshButtonClicked):
        (WebInspector.WatchExpressionsSidebarPane.prototype.refreshExpressions):
        (WebInspector.WatchExpressionsSection):
        (WebInspector.WatchExpressionsSection.prototype.update.appendResult):
        (WebInspector.WatchExpressionsSection.prototype.update):
        (WebInspector.WatchExpressionsSection.prototype.saveExpressions):
        (WebInspector.WatchExpressionsSection.prototype._mouseMove):
        (WebInspector.WatchExpressionsSection.prototype._mouseOut):
        (WebInspector.WatchExpressionsSection.prototype._updateHoveredElement):
        (WebInspector.WatchExpressionsSection.CompareProperties):
        (WebInspector.WatchExpressionTreeElement.prototype.update):
        (WebInspector.WatchExpressionTreeElement.prototype.editingCancelled):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.properties-tree.watch-expressions):
        (.properties-tree.watch-expressions li):
        (.section .properties .delete-button):
        (.section .properties li.hovered .delete-button):
        (.pane > .title > .pane-title-button):
        (.pane > .title > .pane-title-button:hover):
        (.pane > .title > .pane-title-button:active):
        (.pane > .title > .pane-title-button.add):
        (.pane > .title > .pane-title-button.refresh):

2011-05-24  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        WebSocket: Add fail() to WebSocketChannel and its family
        https://bugs.webkit.org/show_bug.cgi?id=61277

        This is the first part of refactoring effort described in bug 61115.
        Existing error reports will be modified to use fail() in a later patch.

        No change in behavior, thus no new tests.

        * websockets/ThreadableWebSocketChannel.h:
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::fail):
        * websockets/WebSocketChannel.h:
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::fail):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::fail):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadFail):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::fail):
        * websockets/WorkerThreadableWebSocketChannel.h:

2011-05-24  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][V8] REGRESSION (r87063): Fix the build.
        https://bugs.webkit.org/show_bug.cgi?id=61290

        No new tests needed.

        * bindings/scripts/CodeGeneratorV8.pm: disable the unsupported call
        tracked in: https://bugs.webkit.org/show_bug.cgi?id=61291

2011-05-24  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Kent Tamura.

        [Chromium]Add clipping for listBox in popup window to fix wrong location display when the autofill item is really long.
        https://bugs.webkit.org/show_bug.cgi?id=61252
        http://code.google.com/p/chromium/issues/detail?id=83539

        Manual test: manual-tests/autofill-popup-location.html.

        * manual-tests/autofill-popup-location.html: With long long text, test the shown location is correct.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::setBaseWidth): Clip width with m_maxWindowWidth.
        (WebCore::PopupListBox::PopupListBox): Add m_maxWindowWidth initialization.
        (WebCore::PopupContainer::layoutAndCalculateWidgetRect): Call setMaxWidthAndLayout() when the width is clipped with screen size.
        (WebCore::PopupListBox::setMaxWidthAndLayout): Set m_maxWindowWidth and call layout().
        (WebCore::PopupListBox::layout): Compare renewed windowWidth and m_maxWindowWidth, and clip the it.

2011-05-24  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Properly handle huge initial dimensions for 2d canvas when accelerated 2d canvas is enabled
        https://bugs.webkit.org/show_bug.cgi?id=60077

        Return NULL from DrawingBuffer::create() if the initial dimensions are larger than we can support in hardware so
        that we properly use the software canvas path and not enable the compositor for the canvas.

        compositing/tiling/huge-layer-img.html triggers this case by trying to create a 20000 pixel high canvas.  The
        failure was previously masked by other bugs fixed by r85661.

        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
            Return NULL from DrawingBuffer::create() if resize() fails.

2011-05-24  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Adam Barth.

        close before open WebSocket doesn't fire close event.
        https://bugs.webkit.org/show_bug.cgi?id=57301

        In platformClose(), m_readStream may be 0 until proxy is resolved.
        It should callback didClose() in such case.
        
        Test: http/tests/websocket/tests/close-before-open.html

        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::platformClose):

2011-05-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87118.
        http://trac.webkit.org/changeset/87118
        https://bugs.webkit.org/show_bug.cgi?id=61347

        patch breaks layout tests
        (https://bugs.webkit.org/show_bug.cgi?id=61342), and chromium
        tests (browser_test MacTestCmdUp and ui_test Scrollbar)
        (Requested by ukai_ on #webkit).

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/ScrollAnimator.cpp:
        * platform/chromium/ScrollAnimatorChromiumMac.h: Removed.
        * platform/chromium/ScrollAnimatorChromiumMac.mm: Removed.
        * platform/graphics/IntPoint.h:

2011-05-23  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by Adam Barth.

        Remove Node::deprecatedParserAddChild
        https://bugs.webkit.org/show_bug.cgi?id=60818

        No new tests as this is just a removal.

        * dom/ContainerNode.cpp:
        * dom/ContainerNode.h:
        * dom/Node.cpp:
        * dom/Node.h:
        Removed the method now that the last instance got removed as part of the <input>
        shadow DOM refactoring.

2011-05-23  Dirk Schulze  <krit@webkit.org>

        Reviewed by Darin Adler.

        SVGTextPositioning attributes are marked as NumberList instead of LengthList
        https://bugs.webkit.org/show_bug.cgi?id=61301

        SVGTextPositioningElement attributes x, y, dx and dy were marked as AnimatedNumberList
        instead of AnimatedLengthList.
        See specification http://www.w3.org/TR/SVG/text.html#InterfaceSVGTextPositioningElement

        This does not affect the behavior, since we do not respect SVG units in SMIL animation yet.
        No new tests added.

        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::fillPassedAttributeToPropertyTypeMap):

2011-05-19  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        [Refactoring] Pass NodeRenderingContext to Node::rendererIsNeeded()
        https://bugs.webkit.org/show_bug.cgi?id=61114

        - Extracted NodeRenderingContext from NodeRendererFactory, giving separate files to it.
        - Changed signature rendererIsNeeded(RenderStyle*) 
          to rendererIsNeeded(const NodeRenderingContext&).
          The style object is retrieved from NodeRendererFactory::style()
          This will allow rendererIsNeeded() to access contextual
          information like attaching phase and rendering-parent.
        
        No new tests. No behaviour change.
        
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::updateRenderer): Pass unresolved NodeRenderingContext& to rendererIsNeeded()
        (WebCore::CharacterData::rendererIsNeeded):
        * dom/CharacterData.h:
        * dom/DOMAllInOne.cpp:
        * dom/EditingText.cpp:
        (WebCore::EditingText::rendererIsNeeded):
        * dom/EditingText.h:
        * dom/Node.cpp:
        (WebCore::Node::parentNodeForRenderingAndStyle):
        (WebCore::Node::rendererIsNeeded):
        * dom/Node.h:
        * dom/NodeRenderingContext.cpp: Added.
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        (WebCore::NodeRenderingContext::~NodeRenderingContext):
        (WebCore::NodeRenderingContext::setStyle):
        (WebCore::NodeRenderingContext::releaseStyle):
        (WebCore::NodeRenderingContext::nextRenderer):
        (WebCore::NodeRenderingContext::parentRenderer):
        (WebCore::NodeRenderingContext::hostChildrenChanged):
        (WebCore::NodeRenderingContext::shouldCreateRenderer):
        (WebCore::NodeRendererFactory::NodeRendererFactory):
        (WebCore::NodeRendererFactory::createRendererAndStyle):
        (WebCore::wrapWithRenderFullScreen):
        (WebCore::NodeRendererFactory::createRendererIfNeeded):
        * dom/NodeRenderingContext.h: Added.
        (WebCore::NodeRenderingContext::node):
        (WebCore::NodeRenderingContext::parentNodeForRenderingAndStyle):
        (WebCore::NodeRenderingContext::style):
        (WebCore::NodeRendererFactory::context):
        * dom/ShadowContentElement.h:
        * dom/Text.cpp:
        * dom/Text.h:
        * html/HTMLAppletElement.cpp:
        * html/HTMLAppletElement.h:
        * html/HTMLElement.cpp:
        * html/HTMLElement.h:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLEmbedElement.h:
        * html/HTMLFormElement.cpp:
        * html/HTMLFormElement.h:
        * html/HTMLFrameElement.cpp:
        * html/HTMLFrameElement.h:
        * html/HTMLFrameSetElement.cpp:
        * html/HTMLFrameSetElement.h:
        * html/HTMLIFrameElement.cpp:
        * html/HTMLIFrameElement.h:
        * html/HTMLInputElement.cpp:
        * html/HTMLInputElement.h:
        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        * html/HTMLNoScriptElement.h:
        * html/HTMLObjectElement.cpp:
        * html/HTMLObjectElement.h:
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.h:
        * html/HTMLVideoElement.cpp:
        * html/HTMLVideoElement.h:
        * html/shadow/DetailsMarkerControl.cpp:
        * html/shadow/DetailsMarkerControl.h:
        * html/shadow/MeterShadowElement.cpp:
        * html/shadow/MeterShadowElement.h:
        * html/shadow/ProgressShadowElement.cpp:
        * html/shadow/ProgressShadowElement.h:
        * svg/SVGDescElement.h:
        * svg/SVGElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFontElement.h:
        * svg/SVGGElement.cpp:
        * svg/SVGGElement.h:
        * svg/SVGGlyphElement.h:
        * svg/SVGHKernElement.h:
        * svg/SVGMarkerElement.h:
        * svg/SVGMissingGlyphElement.h:
        * svg/SVGSVGElement.h:
        * svg/SVGStyledElement.cpp:
        * svg/SVGStyledElement.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.cpp:
        * svg/SVGTRefElement.h:
        * svg/SVGTSpanElement.cpp:
        * svg/SVGTSpanElement.h:
        * svg/SVGTextPathElement.cpp:
        * svg/SVGTextPathElement.h:
        * svg/SVGTitleElement.h:
        * svg/SVGVKernElement.h:
        * svg/SVGViewElement.h:

2011-05-20  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.
        
        [Refactoring] attach() following detach() should be replaced with Node::reattach()
        https://bugs.webkit.org/show_bug.cgi?id=61011

        - Renamed forceReattach() to reattach()
        - Introduced reattachIfAttached() as a variant.
        
        No new tests. No behavior change.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::updateRenderer):
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        * dom/Node.h:
        (WebCore::Node::reattach):
        (WebCore::Node::reattachIfAttached):
        * dom/Text.cpp:
        (WebCore::Text::recalcStyle):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::refreshMainSummary):
        (WebCore::HTMLDetailsElement::parseMappedAttribute):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderFallbackContent):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::recalcStyle):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute):

2011-05-23  Mark Rowe  <mrowe@apple.com>

        Build fix after r87117.

        When moving #defines out in to separate files I find that code is more likely to compile
        when the new header file is actually #included.

        * editing/SpellingCorrectionController.h:

2011-05-23  Mike Lawther  <mikelawther@chromium.org>

        Reviewed by James Robinson.

        implement image-rendering: optimize-contrast (with a vendor prefix) as defined in CSS3 image values
        https://bugs.webkit.org/show_bug.cgi?id=56627

        Tests: css3/images/optimize-contrast-canvas.html
               css3/images/optimize-contrast-image.html

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EImageRendering):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):
        * css/SVGCSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * css/SVGCSSValueKeywords.in:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        * html/HTMLCanvasElement.h:
        * platform/graphics/ImageRenderingMode.h: Added.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::ImageQualityController::shouldPaintAtLowQuality):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::imageRendering):
        (WebCore::InheritedFlags::setImageRendering):
        (WebCore::InheritedFlags::initialImageRendering):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::InheritedFlags::operator==):
        (WebCore::SVGRenderStyle::setBitDefaults):
        * rendering/style/SVGRenderStyleDefs.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):

2011-05-23  Sailesh Agrawal  <sail@chromium.org>

        Reviewed by James Robinson.

        Chromium Mac: Use ScrollAnimatorMac.mm for overlay scrollbar support
        https://bugs.webkit.org/show_bug.cgi?id=59753

        No new tests. Just forking ScrollAnimatorMac to ScrollAnimatorChromiumMac.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/ScrollAnimator.cpp:
        * platform/chromium/ScrollAnimatorChromiumMac.h: Added.
        (WebCore::ScrollAnimatorChromiumMac::setIsDrawingIntoLayer):
        (WebCore::ScrollAnimatorChromiumMac::isDrawingIntoLayer):
        (WebCore::ScrollAnimatorChromiumMac::haveScrolledSincePageLoad):
        * platform/chromium/ScrollAnimatorChromiumMac.mm: Added. Forked from ScrollAnimatorMac and replaced all instances of ScrollAnimatorMac with ScrollAnimatorChromiumMac and ScrollbarThemeMac with ScrollbarThemeChromiumMac. Removed the ENABLE(SMOOTH_SCROLLING) around the file.
        (abs):
        (-[ScrollAnimationHelperDelegate initWithScrollAnimator:WebCore::]):
        (-[ScrollAnimationHelperDelegate scrollAnimatorDestroyed]):
        (-[ScrollAnimationHelperDelegate bounds]):
        (-[ScrollAnimationHelperDelegate _immediateScrollToPoint:]):
        (-[ScrollAnimationHelperDelegate _pixelAlignProposedScrollPosition:]):
        (-[ScrollAnimationHelperDelegate convertSizeToBase:]):
        (-[ScrollAnimationHelperDelegate convertSizeFromBase:]):
        (-[ScrollAnimationHelperDelegate convertSizeToBacking:]):
        (-[ScrollAnimationHelperDelegate convertSizeFromBacking:]):
        (-[ScrollAnimationHelperDelegate superview]):
        (-[ScrollAnimationHelperDelegate documentView]):
        (-[ScrollAnimationHelperDelegate window]):
        (-[ScrollAnimationHelperDelegate _recursiveRecomputeToolTips]):
        (-[ScrollbarPainterControllerDelegate initWithScrollAnimator:WebCore::]):
        (-[ScrollbarPainterControllerDelegate scrollAnimatorDestroyed]):
        (-[ScrollbarPainterControllerDelegate contentAreaRectForScrollerImpPair:]):
        (-[ScrollbarPainterControllerDelegate inLiveResizeForScrollerImpPair:]):
        (-[ScrollbarPainterControllerDelegate mouseLocationInContentAreaForScrollerImpPair:]):
        (-[ScrollbarPainterControllerDelegate scrollerImpPair:convertContentPoint:toScrollerImp:]):
        (-[ScrollbarPainterControllerDelegate scrollerImpPair:setContentAreaNeedsDisplayInRect:]):
        (-[ScrollbarPainterControllerDelegate scrollerImpPair:updateScrollerStyleForNewRecommendedScrollerStyle:]):
        (-[ScrollbarPartAnimation initWithScrollbarPainter:part:WebCore::scrollAnimator:WebCore::animateAlphaTo:duration:]):
        (-[ScrollbarPartAnimation setCurrentProgress:]):
        (-[ScrollbarPartAnimation scrollAnimatorDestroyed]):
        (-[ScrollbarPainterDelegate initWithScrollAnimator:WebCore::]):
        (-[ScrollbarPainterDelegate cancelAnimations]):
        (-[ScrollbarPainterDelegate convertRectToBacking:]):
        (-[ScrollbarPainterDelegate convertRectFromBacking:]):
        (-[ScrollbarPainterDelegate layer]):
        (-[ScrollbarPainterDelegate setUpAnimation:scrollerPainter:part:WebCore::animateAlphaTo:duration:]):
        (-[ScrollbarPainterDelegate scrollerImp:animateKnobAlphaTo:duration:]):
        (-[ScrollbarPainterDelegate scrollerImp:animateTrackAlphaTo:duration:]):
        (-[ScrollbarPainterDelegate scrollerImp:overlayScrollerStateChangedTo:]):
        (-[ScrollbarPainterDelegate scrollAnimatorDestroyed]):
        (WebCore::ScrollAnimator::create):
        (WebCore::ScrollAnimatorChromiumMac::ScrollAnimatorChromiumMac):
        (WebCore::ScrollAnimatorChromiumMac::~ScrollAnimatorChromiumMac):
        (WebCore::ScrollAnimatorChromiumMac::scroll):
        (WebCore::ScrollAnimatorChromiumMac::scrollToOffsetWithoutAnimation):
        (WebCore::ScrollAnimatorChromiumMac::adjustScrollXPositionIfNecessary):
        (WebCore::ScrollAnimatorChromiumMac::adjustScrollYPositionIfNecessary):
        (WebCore::ScrollAnimatorChromiumMac::adjustScrollPositionIfNecessary):
        (WebCore::ScrollAnimatorChromiumMac::immediateScrollToPoint):
        (WebCore::ScrollAnimatorChromiumMac::immediateScrollByDeltaX):
        (WebCore::ScrollAnimatorChromiumMac::immediateScrollByDeltaY):
        (WebCore::ScrollAnimatorChromiumMac::notityPositionChanged):
        (WebCore::ScrollAnimatorChromiumMac::contentAreaWillPaint):
        (WebCore::ScrollAnimatorChromiumMac::mouseEnteredContentArea):
        (WebCore::ScrollAnimatorChromiumMac::mouseExitedContentArea):
        (WebCore::ScrollAnimatorChromiumMac::mouseMovedInContentArea):
        (WebCore::ScrollAnimatorChromiumMac::willStartLiveResize):
        (WebCore::ScrollAnimatorChromiumMac::contentsResized):
        (WebCore::ScrollAnimatorChromiumMac::willEndLiveResize):
        (WebCore::ScrollAnimatorChromiumMac::contentAreaDidShow):
        (WebCore::ScrollAnimatorChromiumMac::contentAreaDidHide):
        (WebCore::ScrollAnimatorChromiumMac::didBeginScrollGesture):
        (WebCore::ScrollAnimatorChromiumMac::didEndScrollGesture):
        (WebCore::ScrollAnimatorChromiumMac::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorChromiumMac::willRemoveVerticalScrollbar):
        (WebCore::ScrollAnimatorChromiumMac::didAddHorizontalScrollbar):
        (WebCore::ScrollAnimatorChromiumMac::willRemoveHorizontalScrollbar):
        (WebCore::ScrollAnimatorChromiumMac::cancelAnimations):
        (WebCore::elasticDeltaForTimeDelta):
        (WebCore::reboundDeltaForElasticDelta):
        (WebCore::elasticDeltaForReboundDelta):
        (WebCore::scrollWheelMultiplier):
        (WebCore::ScrollAnimatorChromiumMac::handleWheelEvent):
        (WebCore::ScrollAnimatorChromiumMac::handleGestureEvent):
        (WebCore::ScrollAnimatorChromiumMac::pinnedInDirection):
        (WebCore::ScrollAnimatorChromiumMac::allowsVerticalStretching):
        (WebCore::ScrollAnimatorChromiumMac::allowsHorizontalStretching):
        (WebCore::ScrollAnimatorChromiumMac::smoothScrollWithEvent):
        (WebCore::ScrollAnimatorChromiumMac::beginScrollGesture):
        (WebCore::ScrollAnimatorChromiumMac::endScrollGesture):
        (WebCore::ScrollAnimatorChromiumMac::snapRubberBand):
        (WebCore::roundTowardZero):
        (WebCore::roundToDevicePixelTowardZero):
        (WebCore::ScrollAnimatorChromiumMac::snapRubberBandTimerFired):
        (WebCore::ScrollAnimatorChromiumMac::startScrollbarPaintTimer):
        (WebCore::ScrollAnimatorChromiumMac::scrollbarPaintTimerIsActive):
        (WebCore::ScrollAnimatorChromiumMac::stopScrollbarPaintTimer):
        (WebCore::ScrollAnimatorChromiumMac::initialScrollbarPaintTimerFired):
        (WebCore::ScrollAnimatorChromiumMac::setVisibleScrollerThumbRect):
        * platform/graphics/IntPoint.h:

2011-05-22  MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.

        SUPPORT_AUTOCORRECTION_PANEL should be USE(AUTOCORRECTION_PANEL)
        https://bugs.webkit.org/show_bug.cgi?id=61181

        - Removed SUPPORT_AUTOCORRECTION_PANEL and REMOVE_MARKERS_UPON_EDITING from SpellingCorrectionController.h
        - Define WTF_USE_UNIFIED_TEXT_CHECKING and WTF_USE_AUTOMATIC_TEXT_REPLACEMENT at TextChecking.h

        No new tests. Just renaming a compilation conditional.

        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::doApply):
        * editing/SpellingCorrectionController.cpp:
        * editing/SpellingCorrectionController.h:
        (WebCore::SpellingCorrectionController::shouldRemoveMarkersUponEditing):
        * loader/EmptyClients.h:
        * page/EditorClient.h:
        * platform/text/TextChecking.h:

2011-05-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87007.
        http://trac.webkit.org/changeset/87007
        https://bugs.webkit.org/show_bug.cgi?id=61329

        patch unnecessarily breaks HTML5 compatibility (Requested by
        estes on #webkit).

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::hasValidClassId):

2011-05-23  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by Darin Adler.

        Crash from null pointer dereference below WebCore::StorageAreaImpl::setItem()
        https://bugs.webkit.org/show_bug.cgi?id=57140

        Test: fast/storage/storage-detached-iframe.html

        Access of localStorage on a detached iframe was causing a crash because a detached 
        iframe has a null m_page, and WebCore::privateBrowsingEnabled() wasn't testing for such.

        * storage/StorageAreaImpl.cpp:
        (WebCore::privateBrowsingEnabled): check that child->page() is non-null before
        accessing it.

2011-05-23  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        VO doesn't work with HTML5 range (slider) input @step attribute
        https://bugs.webkit.org/show_bug.cgi?id=61298

        Test: platform/mac/accessibility/range-alter-by-step.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::stepValueForRange):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::alterSliderValue):
        (WebCore::AccessibilityRenderObject::increment):
        (WebCore::AccessibilityRenderObject::decrement):
        (WebCore::AccessibilityRenderObject::stepValueForRange):
        (WebCore::AccessibilityRenderObject::changeValueByStep):
        * accessibility/AccessibilityRenderObject.h:

2011-05-23  Gavin Peters  <gavinp@chromium.org>

        Reviewed by Adam Barth.

        fix rel=prerender target types
        https://bugs.webkit.org/show_bug.cgi?id=61297

        The original fix in https://bugs.webkit.org/show_bug.cgi?id=61079
        didn't properly map the target type, and didn't carry the target
        types through to chromium properly.  Fixed.

        No new tests; it's very hard to catch these with a layout test, however
        all of the chromium Prerender browser tests will test this functionality
        when I land an upcoming chromium CL.

        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::cachedResourceTypeToTargetType):

2011-05-23  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Remove safeFloatToInt() in FloatRect.cpp and replace with working version of clampToInteger()
        https://bugs.webkit.org/show_bug.cgi?id=58216

        No new tests. The SVG tests mask-excessive-malloc.svg and pattern-excessive-malloc.svg exercise this code path.

        * platform/graphics/FloatRect.cpp:
        (WebCore::enclosingIntRect):

2011-05-20  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Video looks squished when animating to full screen.
        https://bugs.webkit.org/show_bug.cgi?id=61220

        No new tests, because DumpRenderTree does not currently "animate" the full-screen transition.

        There are three issues animating video content to full screen which this patch is meant to
        address:
        1) The animation scales between the client sizes of the element before and after full-screen.
        Because these sizes have different aspect ratios, the video appears "squished" for part of
        the animation. Instead, we will animate between the content box sizes before and after full
        screen which, in the case of video now and object-fit content in the future, will have the
        same aspect ratio before and after full screen.
        2) Now that we are animating the full-screen video element's content box, the black letterbox
        bars appear above and below the video (depending on the video's aspect ratio) as soon as the
        animation begins. This is extremely jarring, so set the background color to clear. The
        full-screen renderer's background color will serve the same purpose (providing the letterbox
        background) once the animation completes.
        3) Now that the letterbox color is gone, the full screen controls can appear to float in thin
        air beneath the video (again, depending on aspect ratio) during the animation, so to avoid
        that effect and to make the animation consistent with the old webkitenterfullscreen()
        animation, we will hide the controls during the animation by adding a new CSS pseudo class
        -webkit-animating-full-screen-transition.

        Added a new css pseudo-class: -webkit-animating-full-screen.  During the transition animation, this
        pseudo-class will be applied to the current full-screen element.  Styles have been added to 
        fullscreenQuickTime.css to hide the video element's built-in controller during the full-screen
        animation.

        To accomplish this, the ivar tracking whether the full-screen animation is taking place has been moved
        from the RenderFullScreen renderer, to the current full-screen Document.  Because changing 
        isAnimatingFullScreen causes style changes, make sure to call recalcStyle on the full-screen element
        after changing.

        This extra transition caused assertions in HTMLFormControlElement::updateFromElementCallback. A
        full-screen media control's renderer is disabled during the style recalculation when exiting full
        screen. This assertion was exposed by the extra recalcStyle() issued during the exit transition, and
        has been removed.

        * WebCore.exp.in:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId): Add support for new pseudo class -webkit-animate-full-screen-transition.
        (WebCore::nameToPseudoTypeMap): Ditto.
        (WebCore::CSSSelector::extractPseudoType): Ditto.
        * css/CSSSelector.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Ditto.
        * css/fullscreen.css: 
        (video:-webkit-full-screen): Set full screen video background color to clear.
        * css/fullscreenQuickTime.css: 
        (video:-webkit-full-screen::-webkit-media-controls-panel): Set a default opacity transition.
        (video:-webkit-animating-full-screen::-webkit-media-controls-panel): Set the opacity to 0 and 
            disable the transition.
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::webkitWillEnterFullScreenForElement): Call our new setAnimatingFullScreen function.
        (WebCore::Document::webkitDidEnterFullScreenForElement): Ditto.
        (WebCore::Document::webkitWillExitFullScreenForElement): Ditto.
        (WebCore::Document::webkitDidExitFullScreenForElement): Ditto.
        (WebCore::Document::isAnimatingFullScreen): Moved here from RenderFullScreen.
        (WebCore::Document::setAnimatingFullScreen): Ditto.
        * dom/Document.h:
        * html/HTMLFormControlElement.cpp: 
        (WebCore::updateFromElementCallback): Use the Document's isAnimatingFullScreen function.
        * page/FrameView.cpp:
        (WebCore::isDocumentRunningFullScreenAnimation): Ditto.
        * rendering/RenderFullScreen.cpp:
        * rendering/RenderFullScreen.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): Ditto.
        (WebCore::RenderLayerCompositor::requiresCompositingForFullScreen): Ditto.
        * rendering/style/RenderStyleConstants.h:

2011-05-23  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Change RenderBlock hit testing to use IntPoint instead x,y pair
        https://bugs.webkit.org/show_bug.cgi?id=61146

        Covered by existing tests.

        * platform/graphics/IntPoint.h:
        (WebCore::toSize):
        Add toSize function for converting from point to size.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isPointInOverflowControl):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestFloats):
        (WebCore::RenderBlock::hitTestColumns):
        (WebCore::RenderBlock::hitTestContents):
        * rendering/RenderBlock.h:
        Change hit testing code in RenderBlock to use IntPoint.

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::isPointInOverflowControl):
        * rendering/RenderListBox.h:
        Change overridden method to use IntPoint.

2011-05-23  Mike Reed  <reed@google.com>

        Reviewed by James Robinson.

        Skia: Need to implement GraphicsContext::clipConvexPolygon()
        https://bugs.webkit.org/show_bug.cgi?id=41311

        No new tests. 

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::setPathFromConvexPoints):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::clipConvexPolygon):

2011-05-23  James Simonsen  <simonjam@chromium.org>

        Reviewed by Adam Barth.

        Convert raw pointer to RefPtr.
        https://bugs.webkit.org/show_bug.cgi?id=61196

        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::endElementNs):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parseEndElement):

2011-05-23  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Alexey Proskuryakov.

        selectstart is fired for every mouse move
        https://bugs.webkit.org/show_bug.cgi?id=19489

        Fixed the bug by dispatching selectstart event immediately before modifying selection in
        handleMousePressEventSingleClick and updateSelectionForMouseDrag.

        Also replaced a boolean EventHandler::m_beganSelectingText by an enum-valued m_selectionInitiationState
        to retain 3 states:
        1. HaveNotStartedSelection - Selection has not been set by a mouse drag or a mouse click
        2. PlacedCaret - A caret was placed by a mouse click, double click, or triple click, and is about
        to replace selection if a mouse drag never occurs.
        3. ExtendedSelection - A range selection was set by a mouse click, a double click, a triple click,
        or a mouse drag; otherwise a caret selection was set by a mouse drag.

        State 1 corresponds to m_beganSelectingText being false and state 3 corresponds to m_beganSelectingText
        being true. State 2 is used in updateSelectionForMouseDrag to avoid dispatching selectstart twice.

        States 1 and 2 are set by updateSelectionForMouseDownDispatchingSelectStart and state 3 is set by
        updateSelectionForMouseDrag.

        Test: fast/events/selectstart-by-double-triple-clicks.html
              fast/events/selectstart-by-drag.html
              fast/events/selectstart-by-single-click-with-shift.html

        * page/EventHandler.cpp: Removed canMouseDragExtendSelect.
        (WebCore::EventHandler::EventHandler): Initializes m_selectionInitiationState.
        (WebCore::dispatchSelectStart): Returns true only if selectstart was successfully fired
        and default action was not prevented.
        (WebCore::EventHandler::updateSelectionForMouseDownDispatchingSelectStart): Updates m_selectionInitiationState
        and modifies the selection if dispatchSelectStart returns true.
        (WebCore::EventHandler::selectClosestWordFromMouseEvent): Calls updateSelectionForMouseDownDispatchingSelectStart.
        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent): Ditto.
        (WebCore::EventHandler::handleMousePressEventDoubleClick):
        (WebCore::EventHandler::handleMousePressEventTripleClick): Ditto.
        (WebCore::EventHandler::handleMousePressEventSingleClick): Ditto.
        (WebCore::canMouseDownStartSelect): No longer dispatches startselect; also renamed from
        EventHandler::canMouseDownStartSelect.
        (WebCore::EventHandler::handleMousePressEvent): No longer calls canMouseDragExtendSelect.
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::EventHandler::updateSelectionForMouseDrag): Exit early if m_selectionInitiationState is
        HaveNotStartedSelection and dispatchSelectStart returns false. Since setSelectionIfPossible dispatches
        selectstart event before assigning PlacedCaret or ExtendedSelection to m_selectionInitiationState,
        there is no need to dispatch event for those two cases.
        (WebCore::EventHandler::handleMouseReleaseEvent):
        * page/EventHandler.h: Removed canMouseDownStartSelect and canMouseDragExtendSelect from EventHandler
        and added setSelectionIfPossible.

2011-05-23  Adam Klein  <adamk@chromium.org>

        Reviewed by Jian Li.

        [fileapi] Add a File::createWithName method to avoid obfuscated filename leakage from FileEntry.file() method
        https://bugs.webkit.org/show_bug.cgi?id=61155

        Covered by existing tests: fast/filesystem/file-from-file-entry.html
                                   fast/filesystem/workers/file-from-file-entry.html
                                   fast/filesystem/workers/file-from-file-entry-sync.html

        * fileapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::createFile): Updated to call createWithName().
        * fileapi/DOMFileSystemSync.cpp:
        (WebCore::DOMFileSystemSync::createFile): Updated to call createWithName().
        * fileapi/File.cpp:
        (WebCore::createBlobDataForFile): Added an optional name argument to fix MIME type lookup.
        (WebCore::File::createWithRelativePath): Renamed from create() for consistency with new method.
        (WebCore::File::File):
        * fileapi/File.h:
        (WebCore::File::createWithName):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::setFileList): Updated the single caller of File::createWithRelativePath().

2011-05-23  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Fix division by zero in TilingData for boundary case texture sizes
        https://bugs.webkit.org/show_bug.cgi?id=61164

        * platform/graphics/gpu/TilingData.cpp:
        (WebCore::TilingData::tileXIndexFromSrcCoord):
        (WebCore::TilingData::tileYIndexFromSrcCoord):

2011-05-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Update ImageDecoder::create to match sniffing spec
        https://bugs.webkit.org/show_bug.cgi?id=47683

        This change is difficult to test.  We're making this change to comply
        with standards even if the change is difficult to observe.  (This patch
        also causes us to match Firefox.)

        Test: fast/images/busted-oval-does-not-render.html

        * platform/image-decoders/ImageDecoder.cpp:

2011-05-23  Ruben  <chromium@hybridsource.org>

        Reviewed by Tony Chang.

        Chromium gyp patch to use new POSIX defines toolkit_uses_gtk and os_posix
        https://bugs.webkit.org/show_bug.cgi?id=61219

        No new tests, just changing gyp defines.

        * WebCore.gyp/WebCore.gyp:

2011-05-23  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Simon Fraser.

        Terminate css color parsing on integers which are not followed
        by a terminator.
        https://bugs.webkit.org/show_bug.cgi?id=61293

        Test: fast/css/parse-color-int-or-percent-crash.html

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

2011-05-20  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Enrica Casucci.

        REGRESSION(r84311): WebKit copies too much styles when copying
        https://bugs.webkit.org/show_bug.cgi?id=60914

        The bug was caused by WebKit's cloning node hierarchy up until the node that has background color.
        Fixed the bug by not cloning background color and adding the effective background color to the wrapping
        style span.

        Tests: editing/pasteboard/do-no-clone-unnecessary-styles-2.html
               editing/pasteboard/do-no-clone-unnecessary-styles.html

        * editing/EditingStyle.cpp:
        (WebCore::cssValueToRGBA): Extracted from getRGBAFontColor.
        (WebCore::getRGBAFontColor): Moved.
        (WebCore::rgbaBackgroundColorInEffect): Added.
        (WebCore::EditingStyle::init): Added support for InheritablePropertiesAndBackgroundColorInEffect.
        (WebCore::EditingStyle::prepareToApplyAt): Include the effective background color at the given position.
        Also remove the background color property when the effective background color is equal to the background
        color property (in terms of RGBA value) of the editing style.
        (WebCore::hasTransparentBackgroundColor): Moved from Editor class.
        (WebCore::backgroundColorInEffect): Extracted from Editor::selectionStartCSSPropertyValue.
        * editing/EditingStyle.h: Added prototypes for hasTransparentBackgroundColor and backgroundColorInEffect.
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartCSSPropertyValue): Calls backgroundColorInEffect.
        * editing/Editor.h: Removed hasTransparentBackgroundColor.
        * editing/markup.cpp:
        (WebCore::isElementPresentational): Reverted r85090 and r84311.
        (WebCore::createMarkup): Include the background color in effect when computing the editing style.

2011-05-23  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Update node list cache count on the containing TreeScope rather than the Document
        https://bugs.webkit.org/show_bug.cgi?id=59983

        Change code to call add/removeNodeListCache() and hasNodeListCaches() on the proper tree scope.
        Move updating of the node list cache count from setDocument() to setTreeScopeRecursively().
        Make setDocument() and setDocumentRecursively() private.

        No new tests. (refactoring)

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::childrenChanged):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::setDocument):
        (WebCore::Node::setTreeScopeRecursively):
        (WebCore::Node::childNodes):
        (WebCore::Node::registerDynamicNodeList):
        (WebCore::Node::unregisterDynamicNodeList):
        (WebCore::Node::notifyLocalNodeListsAttributeChanged):
        (WebCore::Node::notifyLocalNodeListsChildrenChanged):
        (WebCore::Node::getElementsByTagName):
        (WebCore::Node::getElementsByTagNameNS):
        (WebCore::Node::getElementsByName):
        (WebCore::Node::getElementsByClassName):
        * dom/Node.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::labels):

2011-05-23  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [Chromium] Web Inspector: provide initial implementation of worker inspector transport
        https://bugs.webkit.org/show_bug.cgi?id=60267

        All methods of WorkerContextInspectorProxy are inlined in WorkerContextProxy and
        the class itself is removed. Messages from worker inspector to page inspector
        are sent by means of WorkerReportingProxy.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::WorkerFrontendChannel):
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::proxy):
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::dispatchMessageFromWorker):
        (WebCore::InspectorWorkerAgent::sendMessageToWorker):
        (WebCore::InspectorWorkerAgent::didStartWorkerContext):
        * inspector/InspectorWorkerAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        * inspector/WorkerInspectorController.h:
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::postMessageToPageInspector):
        * workers/WorkerContextInspectorProxy.h: Removed.
        * workers/WorkerContextProxy.h:
        (WebCore::WorkerContextProxy::PageInspector::~PageInspector):
        (WebCore::WorkerContextProxy::connectToInspector):
        (WebCore::WorkerContextProxy::disconnectFromInspector):
        (WebCore::WorkerContextProxy::sendMessageToInspector):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postMessageToPageInspector):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerReportingProxy.h:

2011-05-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87070.
        http://trac.webkit.org/changeset/87070
        https://bugs.webkit.org/show_bug.cgi?id=61285

        broke resource-parameters.html on win, weird failures on wk2
        (Requested by caseq on #webkit).

        * inspector/front-end/HAREntry.js:
        (WebInspector.HAREntry.prototype.build):
        (WebInspector.HAREntry.prototype._buildRequest):
        (WebInspector.HAREntry.prototype._buildResponse):
        (WebInspector.HAREntry.prototype._buildContent):
        (WebInspector.HAREntry.prototype._buildCookie):
        (WebInspector.HAREntry.prototype._interval):
        (WebInspector.HARLog.prototype.build):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.set requestHeaders):
        (WebInspector.Resource.prototype.get requestHeadersText):
        (WebInspector.Resource.prototype.set requestHeadersText):
        (WebInspector.Resource.prototype.get requestHeadersSize):
        (WebInspector.Resource.prototype.set responseHeaders):
        (WebInspector.Resource.prototype.get responseHeadersText):
        (WebInspector.Resource.prototype.set responseHeadersText):
        (WebInspector.Resource.prototype.get responseHeadersSize):
        (WebInspector.Resource.prototype._headersSize):

2011-05-18  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: source mapping for pretty-printed scripts is sometimes inaccurate after indented comments.
        https://bugs.webkit.org/show_bug.cgi?id=61037

        * inspector/front-end/JavaScriptFormatter.js:
        (FormattedContentBuilder.prototype.addToken):
        (FormattedContentBuilder.prototype._addComment):
        (FormattedContentBuilder.prototype._addText):
        (FormattedContentBuilder.prototype._addMappingIfNeeded):

2011-05-23  Mike West  <mkwst@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Missing fields in HAR
        https://bugs.webkit.org/show_bug.cgi?id=58127
        
        Specifically, this patch adds:
        - entry.request.httpVersion
        - entry.request.headersSize
        - entry.request.bodySize
        - entry.response.httpVersion
        - entry.response.headersSize
        - entry.response.bodySize
        - entry.response.content.compression
        
        Tests: http/tests/inspector/resource-har-conversion.html
               http/tests/inspector/resource-har-headers.html
               http/tests/inspector/resource-parameters.html
               http/tests/inspector/network/network-size.html

        * inspector/front-end/HAREntry.js:
        (WebInspector.HAREntry.prototype.build):
        (WebInspector.HAREntry.prototype._buildRequest):
        (WebInspector.HAREntry.prototype._buildResponse):
        (WebInspector.HAREntry.prototype._buildContent):
        (WebInspector.HAREntry.prototype._buildCookie):
        (WebInspector.HAREntry.prototype._interval):
        (WebInspector.HAREntry.prototype.get requestBodySize):
        (WebInspector.HAREntry.prototype.get responseBodySize):
        (WebInspector.HAREntry.prototype.get responseCompression):
        (WebInspector.HARLog.prototype.build):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.set requestHeaders):
        (WebInspector.Resource.prototype.get requestHeadersText):
        (WebInspector.Resource.prototype.set requestHeadersText):
        (WebInspector.Resource.prototype.get requestHeadersSize):
        (WebInspector.Resource.prototype.get requestHttpVersion):
        (WebInspector.Resource.prototype.set responseHeaders):
        (WebInspector.Resource.prototype.get responseHeadersText):
        (WebInspector.Resource.prototype.set responseHeadersText):
        (WebInspector.Resource.prototype.get responseHeadersSize):
        (WebInspector.Resource.prototype.get responseHttpVersion):

2011-05-23  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: keyboard shortcut panel is 1px too short
        https://bugs.webkit.org/show_bug.cgi?id=61242

        Fixed bottom margin of attached helpscreen so it's glued to status bar.

        * inspector/front-end/helpScreen.css:
        (body.attached .help-window-outer):

2011-05-23  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Change text-based <input> types to the new shadow DOM model
        https://bugs.webkit.org/show_bug.cgi?id=54179

        By this change, text field inputs and textareas have one extra
        shadow node at the root of shadow trees.
        e.g. Before the change:
          <textarea> --(shadow-connection)-- <div> -- ...
        After the change:
          <textarea> --(shadow-connection)-- {#shadow-root} -- <div> -- ...

        The goals of this change are
        - Change to the new shadow DOM model, and
        - Minimize the patch size.

        We should use shadowPseudoId() in the new shadow DOM model, but the
        shadow elements in this patch don't use it in order to reduce the patch
        size.

        Note: This is a re-landing for r87014 with a small fix of
        Element::removeShadowRoot().
        
        * css/html.css:
        (input::-webkit-inner-spin-button):
         Add vertical-align in order to avoid the button affect the baseline.
        (input::-webkit-outer-spin-button): ditto.
        (input::-webkit-input-speech-button): ditto.
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle): Calls styleForRenderer() so that a
         subclass of Element can override it.
        (WebCore::Element::remvoeShadowRoot):
         Fix a wrong parameter for willRemoveDOMNode().
        (WebCore::Element::isSpellCheckingEnabled):
         Handle ShadowRoot, which is not an Element.
        * dom/Node.cpp:
          Add utility functions for editing code.
        (WebCore::Node::nonBoundaryShadowTreeRootNode):
        (WebCore::Node::nonShadowBoundaryParentNode):
        * dom/Node.h: Declare them.
        * dom/Position.cpp:
         - Add some assertions about ShadowRoot
         - Replace parentNode() with nonShadowBoundaryParentNode()
        Because input/textarea shadow structures are changed.
        (WebCore::Position::Position):
        (WebCore::Position::containerNode):
        (WebCore::Position::parentAnchoredEquivalent):
        (WebCore::Position::previous):
        (WebCore::Position::next):
        (WebCore::Position::parentEditingBoundary):
        (WebCore::Position::atStartOfTree):
        (WebCore::Position::atEndOfTree):
        * dom/Position.h: ditto.
        (WebCore::positionInParentBeforeNode):
        (WebCore::positionInParentAfterNode):
        * editing/CompositeEditCommand.cpp: ditto.
        (WebCore::CompositeEditCommand::insertNodeAfter):
        (WebCore::CompositeEditCommand::removeNode):
        * editing/Editor.cpp:
        (WebCore::Editor::findString): ditto.
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectAll): Inline shadowTreeRootNode() calls.
        * editing/FrameSelection.h:
          Remove shadowTreeRootNode(). It is used only by FrameSelection::selectAll().
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Use nonShadowBoundaryParentNode()
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::removeNode): ditto.
        (WebCore::ReplacementFragment::insertNodeBefore): ditto.
        * editing/VisibleSelection.cpp:
          Rename shadowTreeRootNode() to nonBoundaryShadowTreeRootNode(), and it reutrns
          a child node of ShadowRoot.
        (WebCore::VisibleSelection::isAll):
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingShadowBoundaries):
        (WebCore::VisibleSelection::nonBoundaryShadowTreeRootNode):
        * editing/VisibleSelection.h: ditto.
        * editing/htmlediting.cpp: Add assertions.
        (WebCore::visiblePositionBeforeNode):
        (WebCore::visiblePositionAfterNode):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::create): Calls createShadowSubtree().
        (WebCore::HTMLInputElement::createShadowSubtree):
          Calls InputType::createShadowSubTree().
        (WebCore::HTMLInputElement::innerTextElement):
          Accessor of a shadow node. This is used by RenderTextControlSingleLine.
        (WebCore::HTMLInputElement::innerBlockElement): ditto.
        (WebCore::HTMLInputElement::innerSpinButtonElement): ditto.
        (WebCore::HTMLInputElement::outerSpinButtonElement): ditto.
        (WebCore::HTMLInputElement::resultsButtonElement): ditto.
        (WebCore::HTMLInputElement::cancelButtonElement): ditto.
        (WebCore::HTMLInputElement::speechButtonElement): ditto.
        (WebCore::HTMLInputElement::parseMappedAttribute):
          Rebuild shadow trees because x-webkit-speech attribute affects it.
        * html/HTMLInputElement.h: Add declarations.
        * html/HTMLIsIndexElement.cpp:
        (WebCore::HTMLIsIndexElement::create): Calls createShadowSubtree().
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::create): Calls createShadowSubtree().
        (WebCore::HTMLTextAreaElement::createShadowSubtree): Added.
        * html/HTMLTextAreaElement.h: Declare createShadowSubtree().
        * html/InputType.h: Add default implementations of accessors.
        (WebCore::InputType::innerBlockElement):
        (WebCore::InputType::innerTextElement):
        (WebCore::InputType::innerSpinButtonElement):
        (WebCore::InputType::outerSpinButtonElement):
        (WebCore::InputType::resultsButtonElement):
        (WebCore::InputType::cancelButtonElement):
        (WebCore::InputType::speechButtonElement):
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::SearchInputType): Initializes new data members.
        (WebCore::SearchInputType::createShadowSubtree):
          Moved from RenderTextControlSingleLine.
        (WebCore::SearchInputType::destroyShadowSubtree): Clear element references.
        * html/SearchInputType.h: Add declarations.
        (WebCore::SearchInputType::innerBlockElement):
        (WebCore::SearchInputType::resultsButtonElement):
        (WebCore::SearchInputType::cancelButtonElement):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::TextFieldInputType):
          Initializes new data members.
        (WebCore::TextFieldInputType::createShadowSubtree):
          Moved from RenderTextControlSingleLine.
        (WebCore::TextFieldInputType::destroyShadowSubtree): Clear element references.
        * html/TextFieldInputType.h: Add declarations.
        (WebCore::TextFieldInputType::innerTextElement):
        (WebCore::TextFieldInputType::innerSpinButtonElement):
        (WebCore::TextFieldInputType::outerSpinButtonElement):
        (WebCore::TextFieldInputType::speechButtonElement):
        (WebCore::TextFieldInputType::setInnerTextElement):
        (WebCore::TextFieldInputType::setSpeechButtonElement):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::TextControlInnerElement):
          Remove shadowParent parameter. It is unnecessary because we switch to
          new shadow model.
        (WebCore::TextControlInnerElement::create):
          Change the parameter type to Document.
        (WebCore::TextControlInnerElement::styleForRenderer):
          Override this in order to set style by
          RenderTextControlSingleLine::createInnerBlockStyle().
        (WebCore::TextControlInnerTextElement::TextControlInnerTextElement):
          Remove shadowParent parameter.
          Inherit HTMLDivElement, not TextControlInnerElement.
        (WebCore::TextControlInnerTextElement::create): Remove shadowParent parameter.
        (WebCore::TextControlInnerTextElement::styleForRenderer):
          Override this in order to set style by
          RenderTextControlSingleLine::createInnerTextStyle().
        (WebCore::SearchFieldResultsButtonElement::SearchFieldResultsButtonElement):
          Inherit HTMLDivElement, not TextControlInnerElement.
        (WebCore::SearchFieldResultsButtonElement::styleForRenderer):
          Override this in order to set style by
          RenderTextControlSingleLine::createResultButtonStyle().
        (WebCore::SearchFieldCancelButtonElement::SearchFieldCancelButtonElement):
          Inherit HTMLDivElement, not TextControlInnerElement.
        (WebCore::SearchFieldCancelButtonElement::styleForRenderer):
          Override this in order to set style by
          RenderTextControlSingleLine::createCancelButtonStyle().
        (WebCore::SearchFieldCancelButtonElement::detach):
          Update for the parent class change.
        (WebCore::SpinButtonElement::SpinButtonElement):
          - Change the parameter type: shadowParent -> Document
          - Add the inner flag
          - Inherit HTMLDivElement, not TextControlInnerElement.
        (WebCore::SpinButtonElement::createInner): Introduce a new factory
          method to hide a bool parameter of the constructor.
        (WebCore::SpinButtonElement::createOuter): ditto.
        (WebCore::SpinButtonElement::styleForRenderer):
          Override this in order to set style by
          RenderTextControlSingleLine::createInnerSpinButtonStyle() or
          createOuterSpinButtonStyle().
        (WebCore::SpinButtonElement::detach): Update for the parent class change.
        (WebCore::SpinButtonElement::setHovered): ditto.
        (WebCore::InputFieldSpeechButtonElement::InputFieldSpeechButtonElement):
          - Change the parameter type: shadowParent -> Document
          - Inherit HTMLDivElement, not TextControlInnerElement.
          - Do not register this as a speech input listener here.
        (WebCore::InputFieldSpeechButtonElement::create):
          Update for the parameter change.
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
          Do not handle click event if listener registration is not done.
        (WebCore::InputFieldSpeechButtonElement::attach):
          Register this as a speech input listener.
        (WebCore::InputFieldSpeechButtonElement::detach):
          Update for the parent class change.
        (WebCore::InputFieldSpeechButtonElement::styleForRenderer):
          Override this in order to set style by
          RenderTextControlSingleLine::createSpeechButtonStyle().
        * html/shadow/TextControlInnerElements.h:
        (WebCore::TextControlInnerTextElement::isMouseFocusable):
          Add this because the class is not a subclass of TextControllInnerElement.
        (WebCore::SearchFieldResultsButtonElement::isMouseFocusable): ditto.
        (WebCore::SearchFieldCancelButtonElement::isMouseFocusable): ditto.
        (WebCore::SpinButtonElement::isMouseFocusable): ditto.
        (WebCore::InputFieldSpeechButtonElement::isMouseFocusable): ditto.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::~RenderTextControl): Remove unnecessary code.
        (WebCore::RenderTextControl::styleDidChange):
          innerTextElement can have no renderer.
          Explicitly call setNeedsStyleRecals() for innerTextElement. It is
          needed for LayoutTests/editing/selection/select-across-readonly-input-*.html.
        (WebCore::RenderTextControl::textBlockWidth): Member data -> function
        (WebCore::RenderTextControl::updateFromElement): ditto.
        (WebCore::RenderTextControl::setInnerTextValue): ditto.
        (WebCore::RenderTextControl::hasVisibleTextArea): ditto.
        (WebCore::RenderTextControl::isSelectableElement): ditto.
        (WebCore::RenderTextControl::selection): ditto.
        (WebCore::RenderTextControl::visiblePositionForIndex): ditto.
        (WebCore::RenderTextControl::indexForVisiblePosition): ditto.
        (WebCore::RenderTextControl::text): ditto.
        (WebCore::RenderTextControl::textWithHardLineBreaks): ditto.
        (WebCore::RenderTextControl::computeLogicalHeight): ditto.
        (WebCore::RenderTextControl::hitInnerTextElement): ditto.
        (WebCore::RenderTextControl::forwardEvent): ditto.
        (WebCore::RenderTextControl::computePreferredLogicalWidths): ditto.
        * rendering/RenderTextControl.h:
          - Make m_innerText virtual function.
          - Make createInnerTextStyle() public in order that
            TextControlInnerElements can call it.
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::innerTextElement): Added.
        (WebCore::RenderTextControlMultiLine::updateFromElement):
          Remove unnecessary createSubtreeIfNeeded() call.
        * rendering/RenderTextControlMultiLine.h: Add a declaration.
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::~RenderTextControlSingleLine):
          Remove unnecessary code.
        (WebCore::RenderTextControlSingleLine::innerTextElement): Added.
        (WebCore::RenderTextControlSingleLine::innerBlockElement): Added.
        (WebCore::RenderTextControlSingleLine::innerSpinButtonElement): Added.
        (WebCore::RenderTextControlSingleLine::outerSpinButtonElement): Added.
        (WebCore::RenderTextControlSingleLine::resultsButtonElement): Added.
        (WebCore::RenderTextControlSingleLine::cancelButtonElement): Added.
        (WebCore::RenderTextControlSingleLine::speechButtonElement): Added.
        (WebCore::RenderTextControlSingleLine::textBaseStyle): Data member -> function
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged): ditto.
        (WebCore::RenderTextControlSingleLine::layout): ditto.
        (WebCore::RenderTextControlSingleLine::nodeAtPoint): ditto.
        (WebCore::RenderTextControlSingleLine::forwardEvent): ditto.
        (WebCore::RenderTextControlSingleLine::styleDidChange): ditto.
        (WebCore::RenderTextControlSingleLine::hasControlClip): ditto.
        (WebCore::RenderTextControlSingleLine::controlClipRect): ditto.
        (WebCore::RenderTextControlSingleLine::textBlockWidth): ditto.
        (WebCore::RenderTextControlSingleLine::decorationWidthRight): ditto.
        (WebCore::RenderTextControlSingleLine::preferredContentWidth): ditto.
        (WebCore::RenderTextControlSingleLine::preferredDecorationWidthRight): ditto.
        (WebCore::RenderTextControlSingleLine::adjustControlHeightBasedOnLineHeight): ditto.
        (WebCore::RenderTextControlSingleLine::updateFromElement):
          ditto, and remove unnecessary createSubtreeIfNeeded() call.
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):
          Data member -> function
        (WebCore::RenderTextControlSingleLine::updateCancelButtonVisibility): ditto.
        (WebCore::RenderTextControlSingleLine::clientPaddingLeft): ditto.
        (WebCore::RenderTextControlSingleLine::clientPaddingRight): ditto.
        (WebCore::RenderTextControlSingleLine::textBlockInsetTop): ditto.
        * rendering/RenderTextControlSingleLine.h:
          Add declarations, and remove unnecessary data members.

2011-05-19  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Adam Barth.

        [V8] Explicitly mark objects with complex GC rules.
        https://bugs.webkit.org/show_bug.cgi?id=61131

        From the GC point view there are two kinds of objects: the ones
        that may participate in object grouping (i.e. their lifetime
        depends on other objects) and the ones that never participate in
        grouping (independent). V8 added support for marking persistent
        handles as independent so that the GC can process the objects they
        hold faster. The motivating use case here is typed arrays.

        This patch adds V8-specific inherited IDL attribute
        V8DependentLifetime to types used in V8GCController, which is
        exactly the set of types with object lifetimes depending on other
        objects. The handles for the types that are not marked with the
        new attribute can be marked as independent and GC-ed faster.

        * bindings/scripts/CodeGeneratorV8.pm: Added proccessing of the new attribute.

        Updated test output:
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestInterface.h:
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::wrapSlow):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::wrapSlow):
        * bindings/scripts/test/V8/V8TestObj.h:
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:

        Added the new attribute:
        * css/CSSRule.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSValue.idl:
        * css/StyleSheet.idl:
        * css/StyleSheetList.idl:
        * dom/DOMImplementation.idl:
        * dom/Node.idl:

2011-05-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r87014, r87016, and r87017.
        http://trac.webkit.org/changeset/87014
        http://trac.webkit.org/changeset/87016
        http://trac.webkit.org/changeset/87017
        https://bugs.webkit.org/show_bug.cgi?id=61266

        It made more tests assert (Requested by Ossy on #webkit).

        * css/html.css:
        (input::-webkit-inner-spin-button):
        (input::-webkit-outer-spin-button):
        (input::-webkit-input-speech-button):
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        (WebCore::Element::isSpellCheckingEnabled):
        * dom/Node.cpp:
        * dom/Node.h:
        * dom/Position.cpp:
        (WebCore::Position::Position):
        (WebCore::Position::containerNode):
        (WebCore::Position::parentAnchoredEquivalent):
        (WebCore::Position::previous):
        (WebCore::Position::next):
        (WebCore::Position::parentEditingBoundary):
        (WebCore::Position::atStartOfTree):
        (WebCore::Position::atEndOfTree):
        * dom/Position.h:
        (WebCore::positionInParentBeforeNode):
        (WebCore::positionInParentAfterNode):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeAfter):
        (WebCore::CompositeEditCommand::removeNode):
        * editing/Editor.cpp:
        (WebCore::Editor::findString):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectAll):
        * editing/FrameSelection.h:
        (WebCore::FrameSelection::shadowTreeRootNode):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::removeNode):
        (WebCore::ReplacementFragment::insertNodeBefore):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::isAll):
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingShadowBoundaries):
        (WebCore::VisibleSelection::shadowTreeRootNode):
        * editing/VisibleSelection.h:
        * editing/htmlediting.cpp:
        (WebCore::visiblePositionBeforeNode):
        (WebCore::visiblePositionAfterNode):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::create):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        * html/HTMLInputElement.h:
        * html/HTMLIsIndexElement.cpp:
        (WebCore::HTMLIsIndexElement::create):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::create):
        * html/HTMLTextAreaElement.h:
        * html/InputType.h:
        * html/SearchInputType.cpp:
        * html/SearchInputType.h:
        (WebCore::SearchInputType::SearchInputType):
        * html/TextFieldInputType.cpp:
        * html/TextFieldInputType.h:
        (WebCore::TextFieldInputType::TextFieldInputType):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::TextControlInnerElement):
        (WebCore::TextControlInnerElement::create):
        (WebCore::TextControlInnerElement::attachInnerElement):
        (WebCore::TextControlInnerElement::detach):
        (WebCore::TextControlInnerTextElement::TextControlInnerTextElement):
        (WebCore::TextControlInnerTextElement::create):
        (WebCore::SearchFieldResultsButtonElement::SearchFieldResultsButtonElement):
        (WebCore::SearchFieldCancelButtonElement::SearchFieldCancelButtonElement):
        (WebCore::SearchFieldCancelButtonElement::detach):
        (WebCore::SpinButtonElement::SpinButtonElement):
        (WebCore::SpinButtonElement::create):
        (WebCore::SpinButtonElement::detach):
        (WebCore::SpinButtonElement::setHovered):
        (WebCore::InputFieldSpeechButtonElement::InputFieldSpeechButtonElement):
        (WebCore::InputFieldSpeechButtonElement::create):
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::detach):
        * html/shadow/TextControlInnerElements.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::~RenderTextControl):
        (WebCore::RenderTextControl::styleDidChange):
        (WebCore::RenderTextControl::setInnerTextStyle):
        (WebCore::RenderTextControl::createSubtreeIfNeeded):
        (WebCore::RenderTextControl::textBlockWidth):
        (WebCore::RenderTextControl::updateFromElement):
        (WebCore::RenderTextControl::setInnerTextValue):
        (WebCore::RenderTextControl::hasVisibleTextArea):
        (WebCore::RenderTextControl::isSelectableElement):
        (WebCore::RenderTextControl::selection):
        (WebCore::RenderTextControl::visiblePositionForIndex):
        (WebCore::RenderTextControl::indexForVisiblePosition):
        (WebCore::RenderTextControl::text):
        (WebCore::RenderTextControl::textWithHardLineBreaks):
        (WebCore::RenderTextControl::computeLogicalHeight):
        (WebCore::RenderTextControl::hitInnerTextElement):
        (WebCore::RenderTextControl::forwardEvent):
        (WebCore::RenderTextControl::computePreferredLogicalWidths):
        (WebCore::RenderTextControl::innerTextElement):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::updateFromElement):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::~RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::textBaseStyle):
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged):
        (WebCore::RenderTextControlSingleLine::layout):
        (WebCore::RenderTextControlSingleLine::nodeAtPoint):
        (WebCore::RenderTextControlSingleLine::forwardEvent):
        (WebCore::RenderTextControlSingleLine::styleDidChange):
        (WebCore::RenderTextControlSingleLine::hasControlClip):
        (WebCore::RenderTextControlSingleLine::controlClipRect):
        (WebCore::RenderTextControlSingleLine::textBlockWidth):
        (WebCore::RenderTextControlSingleLine::decorationWidthRight):
        (WebCore::RenderTextControlSingleLine::preferredContentWidth):
        (WebCore::RenderTextControlSingleLine::preferredDecorationWidthRight):
        (WebCore::RenderTextControlSingleLine::adjustControlHeightBasedOnLineHeight):
        (WebCore::RenderTextControlSingleLine::createSubtreeIfNeeded):
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):
        (WebCore::RenderTextControlSingleLine::updateCancelButtonVisibility):
        (WebCore::RenderTextControlSingleLine::clientPaddingLeft):
        (WebCore::RenderTextControlSingleLine::clientPaddingRight):
        (WebCore::RenderTextControlSingleLine::textBlockInsetTop):
        * rendering/RenderTextControlSingleLine.h:

2011-05-23  Syed Idris Shah  <syed.idris-shah@nokia.com>

        Reviewed by Andreas Kling.

        GraphicsContext3DInternal object should be called for getAttachedShaders.
        [Qt] fast/canvas/webgl/gl-object-get-calls.html crash for Qt based webkit
        https://bugs.webkit.org/show_bug.cgi?id=61202 

        LayoutTests/fast/canvas/webgl/gl-object-get-calls.html

        getAttachedShaders should be called on GraphicsContext3DInternal instance.
        It was left out by mistake.

        * platform/graphics/qt/GraphicsContext3DQt.cpp: 
        (WebCore::GraphicsContext3D::getAttachedShaders): GraphicsContext3DInternal instance should be called.

2011-05-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Strict PassOwnPtr build fix.

        * platform/text/gtk/TextCodecGtk.cpp:
        (WebCore::newTextCodecGtk):

2011-05-23  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Chromium] Show "Please wait" message during initial
        heap snapshot processing.
        https://bugs.webkit.org/show_bug.cgi?id=61040

        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.sortingChanged.sort):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.sortingChanged):
        (WebInspector.DetailedHeapshotView.profileCallback):
        (WebInspector.DetailedHeapshotView.setDataSource):
        (WebInspector.DetailedHeapshotView):
        (WebInspector.DetailedHeapshotView.prototype._changeBase.baseProfileLoaded):
        (WebInspector.DetailedHeapshotView.prototype._changeBase.setDataSource):
        (WebInspector.DetailedHeapshotView.prototype._changeBase):
        (WebInspector.DetailedHeapshotView.prototype._changeView.setDataSource):
        (WebInspector.DetailedHeapshotView.prototype._changeView):
        * inspector/front-end/PleaseWaitMessage.js:
        (WebInspector.PleaseWaitMessage.prototype.showAndWaitFor):

2011-05-23  Adam Barth  <abarth@webkit.org>

        Strict PassOwnPtr build fixes.

        * platform/gtk/GeolocationServiceGtk.cpp:
        (WebCore::GeolocationServiceGtk::create):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::adjustSliderTrackStyle):
        (WebCore::RenderThemeGtk::adjustSliderThumbStyle):
        (WebCore::RenderThemeGtk::adjustProgressBarStyle):

2011-05-22  Adam Barth  <abarth@webkit.org>

        Strict PassOwnPtr build fix.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::adjustProgressBarStyle):

2011-05-22  Andrew Wason  <rectalogic@rectalogic.com>

        Reviewed by Benjamin Poulain.

        [Qt] Implement toImageData() in QtWebKit Bridge
        https://bugs.webkit.org/show_bug.cgi?id=60897

        Tests are in WebKit/qt/tests/hybridPixmap

        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapToImageDataMethod::name):
        (JSC::Bindings::QtPixmapToImageDataMethod::invoke):
        (JSC::Bindings::QtPixmapToImageDataMethod::copyPixels):
        (JSC::Bindings::QtPixmapClass::methodsNamed):
        (JSC::Bindings::QtPixmapInstance::getPropertyNames):
         Add toImageData() to Qt Bridge, alternative to
         assignToHTMLImageElement().

2011-05-22  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        When removing a shadow root, also remove it from the render tree.
        https://bugs.webkit.org/show_bug.cgi?id=61245

        Test: existing fast/dom/shadow/layout-tests-can-access-shadow.html

        * dom/Element.cpp:
        (WebCore::Element::removeShadowRoot): Call detach if attached.

2011-05-22  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Don't do manually style resolution for SVGElements with renderer
        https://bugs.webkit.org/show_bug.cgi?id=59176

        General clean-up.

        Don't resolve style manually, instead ask the RenderObject for its style.

        Cleanup svgattrs.in, some SVG element names were accidently listed there as attributes.

        No new tests needed. No change of behavior.

        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::build):
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::build):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/svgattrs.in:

2011-05-21  Dirk Schulze  <krit@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION(r66731): pointer-events are broken in some cases
        https://bugs.webkit.org/show_bug.cgi?id=45467

        The SVGSVGElement shouldn't be the target of a mouse event, if its pointer-events attribute is set
        to 'none'. This matches the behavior on Firefox where an embedded SVG element is the target of an event,
        if none of its childs caught the event. This is the case for all pointer-events other than 'none'.

        Tests: svg/custom/pointer-events-on-svg-with-pointer.xhtml
               svg/custom/pointer-events-on-svg-without-pointer.xhtml

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::nodeAtPoint):

2011-05-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9479926> REGRESSION (r82144): Icon overlaps text in Twitter message dialog
        https://bugs.webkit.org/show_bug.cgi?id=61241

        Test: fast/block/positioning/start-ignoring-before.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes): Added a boolean parameter saying
        whether to merge the first trailing space with the line break.
        (WebCore::RenderBlock::LineBreaker::nextLineBreak): When adding a midpoint behind the current
        character, account for trailing positioned objects that occurred after the midpoint by calling
        updateMidpointsForTrailingBoxes(), which adds midpoints for them.

2011-05-21  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        WebKit2: fix failing fullscreen/full-screen-remove* tests.
        https://bugs.webkit.org/show_bug.cgi?id=61027

        * dom/Document.cpp:
        (WebCore::Document::fullScreenChangeDelayTimerFired): dispatchEvent can be
            synchronous, so make sure to check whether the current element is
            in the DOM before dispatching.

2011-05-21  Gavin Peters  <gavinp@chromium.org>

        Reviewed by Adam Barth.

        Add rel type prerender to distinguish prerender from prefetch
        https://bugs.webkit.org/show_bug.cgi?id=61079

        Chrome right now uses <link rel=prefetch ...> for one of two things,
        to warm the cache in the same way as firefox, or to launch a speculative
        rendering of a web page, for faster "loading" when the user navigates to it.

        This new rel type will let us distinguish the two cases; the rel type prerender
        isn't used on the web today, but the Google Web Search example prerendering application
        is ready to experiment with it.

        Test: fast/dom/HTMLLinkElement/prerender.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::tokenizeRelAttribute):
        (WebCore::HTMLLinkElement::process):
        * html/HTMLLinkElement.h:
        (WebCore::HTMLLinkElement::RelAttribute::RelAttribute):
        * loader/cache/CachedResource.cpp:
        (WebCore::defaultPriorityForResourceType):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::isLinkResource):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestLinkResource):
        (WebCore::CachedResourceLoader::canRequest):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::cachedResourceTypeToTargetType):
        (WebCore::CachedResourceRequest::load):
        * platform/network/ResourceRequestBase.h:

2011-05-21  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Change RenderLineBoxList::hitTest to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=61156

        Change the RenderLineBoxList hit testing to use IntPoint and clean up the rect calculation.

        Covered by existing tests.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::hitTestContents):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::nodeAtPoint):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::hitTest):
        * rendering/RenderLineBoxList.h:

2011-05-21  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Change HitTestResult to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=61230

        Covered by existing tests.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::addNodeToRectBasedTestResult):
        * rendering/HitTestResult.h:
        (WebCore::HitTestResult::isRectBasedTest):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::nodeAtPoint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestColumns):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::nodeAtPoint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::nodeAtPoint):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::nodeAtPoint):

2011-05-21  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] add extraData field to resource requests
        https://bugs.webkit.org/show_bug.cgi?id=61033

        * platform/network/chromium/ResourceRequest.h:
        (WebCore::ResourceRequest::ExtraData::~ExtraData):
        (WebCore::ResourceRequest::extraData):
        (WebCore::ResourceRequest::setExtraData):

2011-05-21  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Change text-based <input> types to the new shadow DOM model
        https://bugs.webkit.org/show_bug.cgi?id=54179

        By this change, text field inputs and textareas have one extra
        shadow node at the root of shadow trees.
        e.g. Before the change:
          <textarea> --(shadow-connection)-- <div> -- ...
        After the change:
          <textarea> --(shadow-connection)-- {#shadow-root} -- <div> -- ...

        The goals of this change are
        - Change to the new shadow DOM model, and
        - Minimize the patch size.

        We should use shadowPseudoId() in the new shadow DOM model, but the
        shadow elements in this patch don't use it in order to reduce the patch
        size.

        * css/html.css:
        (input::-webkit-inner-spin-button):
         Add vertical-align in order to avoid the button affect the baseline.
        (input::-webkit-outer-spin-button): ditto.
        (input::-webkit-input-speech-button): ditto.
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle): Calls styleForRenderer() so that a
         subclass of Element can override it.
        (WebCore::Element::isSpellCheckingEnabled):
        Handle ShadowRoot, which is not an Element.
        * dom/Node.cpp:
          Add utility functions for editing code.
        (WebCore::Node::nonBoundaryShadowTreeRootNode):
        (WebCore::Node::nonShadowBoundaryParentNode):
        * dom/Node.h: Declare them.
        * dom/Position.cpp:
         - Add some assertions about ShadowRoot
         - Replace parentNode() with nonShadowBoundaryParentNode()
        Because input/textarea shadow structures are changed.
        (WebCore::Position::Position):
        (WebCore::Position::containerNode):
        (WebCore::Position::parentAnchoredEquivalent):
        (WebCore::Position::previous):
        (WebCore::Position::next):
        (WebCore::Position::parentEditingBoundary):
        (WebCore::Position::atStartOfTree):
        (WebCore::Position::atEndOfTree):
        * dom/Position.h: ditto.
        (WebCore::positionInParentBeforeNode):
        (WebCore::positionInParentAfterNode):
        * editing/CompositeEditCommand.cpp: ditto.
        (WebCore::CompositeEditCommand::insertNodeAfter):
        (WebCore::CompositeEditCommand::removeNode):
        * editing/Editor.cpp:
        (WebCore::Editor::findString): ditto.
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectAll): Inline shadowTreeRootNode() calls.
        * editing/FrameSelection.h:
          Remove shadowTreeRootNode(). It is used only by FrameSelection::selectAll().
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Use nonShadowBoundaryParentNode()
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::removeNode): ditto.
        (WebCore::ReplacementFragment::insertNodeBefore): ditto.
        * editing/VisibleSelection.cpp:
          Rename shadowTreeRootNode() to nonBoundaryShadowTreeRootNode(), and it reutrns
          a child node of ShadowRoot.
        (WebCore::VisibleSelection::isAll):
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingShadowBoundaries):
        (WebCore::VisibleSelection::nonBoundaryShadowTreeRootNode):
        * editing/VisibleSelection.h: ditto.
        * editing/htmlediting.cpp: Add assertions.
        (WebCore::visiblePositionBeforeNode):
        (WebCore::visiblePositionAfterNode):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::create): Calls createShadowSubtree().
        (WebCore::HTMLInputElement::createShadowSubtree):
          Calls InputType::createShadowSubTree().
        (WebCore::HTMLInputElement::innerTextElement):
          Accessor of a shadow node. This is used by RenderTextControlSingleLine.
        (WebCore::HTMLInputElement::innerBlockElement): ditto.
        (WebCore::HTMLInputElement::innerSpinButtonElement): ditto.
        (WebCore::HTMLInputElement::outerSpinButtonElement): ditto.
        (WebCore::HTMLInputElement::resultsButtonElement): ditto.
        (WebCore::HTMLInputElement::cancelButtonElement): ditto.
        (WebCore::HTMLInputElement::speechButtonElement): ditto.
        (WebCore::HTMLInputElement::parseMappedAttribute):
          Rebuild shadow trees because x-webkit-speech attribute affects it.
        * html/HTMLInputElement.h: Add declarations.
        * html/HTMLIsIndexElement.cpp:
        (WebCore::HTMLIsIndexElement::create): Calls createShadowSubtree().
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::create): Calls createShadowSubtree().
        (WebCore::HTMLTextAreaElement::createShadowSubtree): Added.
        * html/HTMLTextAreaElement.h: Declare createShadowSubtree().
        * html/InputType.h: Add default implementations of accessors.
        (WebCore::InputType::innerBlockElement):
        (WebCore::InputType::innerTextElement):
        (WebCore::InputType::innerSpinButtonElement):
        (WebCore::InputType::outerSpinButtonElement):
        (WebCore::InputType::resultsButtonElement):
        (WebCore::InputType::cancelButtonElement):
        (WebCore::InputType::speechButtonElement):
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::SearchInputType): Initializes new data members.
        (WebCore::SearchInputType::createShadowSubtree):
          Moved from RenderTextControlSingleLine.
        (WebCore::SearchInputType::destroyShadowSubtree): Clear element references.
        * html/SearchInputType.h: Add declarations.
        (WebCore::SearchInputType::innerBlockElement):
        (WebCore::SearchInputType::resultsButtonElement):
        (WebCore::SearchInputType::cancelButtonElement):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::TextFieldInputType):
          Initializes new data members.
        (WebCore::TextFieldInputType::createShadowSubtree):
          Moved from RenderTextControlSingleLine.
        (WebCore::TextFieldInputType::destroyShadowSubtree): Clear element references.
        * html/TextFieldInputType.h: Add declarations.
        (WebCore::TextFieldInputType::innerTextElement):
        (WebCore::TextFieldInputType::innerSpinButtonElement):
        (WebCore::TextFieldInputType::outerSpinButtonElement):
        (WebCore::TextFieldInputType::speechButtonElement):
        (WebCore::TextFieldInputType::setInnerTextElement):
        (WebCore::TextFieldInputType::setSpeechButtonElement):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::TextControlInnerElement):
          Remove shadowParent parameter. It is unnecessary because we switch to
          new shadow model.
        (WebCore::TextControlInnerElement::create):
          Change the parameter type to Document.
        (WebCore::TextControlInnerElement::styleForRenderer):
          Override this in order to set style by
          RenderTextControlSingleLine::createInnerBlockStyle().
        (WebCore::TextControlInnerTextElement::TextControlInnerTextElement):
          Remove shadowParent parameter.
          Inherit HTMLDivElement, not TextControlInnerElement.
        (WebCore::TextControlInnerTextElement::create): Remove shadowParent parameter.
        (WebCore::TextControlInnerTextElement::styleForRenderer):
          Override this in order to set style by
          RenderTextControlSingleLine::createInnerTextStyle().
        (WebCore::SearchFieldResultsButtonElement::SearchFieldResultsButtonElement):
          Inherit HTMLDivElement, not TextControlInnerElement.
        (WebCore::SearchFieldResultsButtonElement::styleForRenderer):
          Override this in order to set style by
          RenderTextControlSingleLine::createResultButtonStyle().
        (WebCore::SearchFieldCancelButtonElement::SearchFieldCancelButtonElement):
          Inherit HTMLDivElement, not TextControlInnerElement.
        (WebCore::SearchFieldCancelButtonElement::styleForRenderer):
          Override this in order to set style by
          RenderTextControlSingleLine::createCancelButtonStyle().
        (WebCore::SearchFieldCancelButtonElement::detach):
          Update for the parent class change.
        (WebCore::SpinButtonElement::SpinButtonElement):
          - Change the parameter type: shadowParent -> Document
          - Add the inner flag
          - Inherit HTMLDivElement, not TextControlInnerElement.
        (WebCore::SpinButtonElement::createInner): Introduce a new factory
          method to hide a bool parameter of the constructor.
        (WebCore::SpinButtonElement::createOuter): ditto.
        (WebCore::SpinButtonElement::styleForRenderer):
          Override this in order to set style by
          RenderTextControlSingleLine::createInnerSpinButtonStyle() or
          createOuterSpinButtonStyle().
        (WebCore::SpinButtonElement::detach): Update for the parent class change.
        (WebCore::SpinButtonElement::setHovered): ditto.
        (WebCore::InputFieldSpeechButtonElement::InputFieldSpeechButtonElement):
          - Change the parameter type: shadowParent -> Document
          - Inherit HTMLDivElement, not TextControlInnerElement.
          - Do not register this as a speech input listener here.
        (WebCore::InputFieldSpeechButtonElement::create):
          Update for the parameter change.
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
          Do not handle click event if listener registration is not done.
        (WebCore::InputFieldSpeechButtonElement::attach):
          Register this as a speech input listener.
        (WebCore::InputFieldSpeechButtonElement::detach):
          Update for the parent class change.
        (WebCore::InputFieldSpeechButtonElement::styleForRenderer):
          Override this in order to set style by
          RenderTextControlSingleLine::createSpeechButtonStyle().
        * html/shadow/TextControlInnerElements.h:
        (WebCore::TextControlInnerTextElement::isMouseFocusable):
          Add this because the class is not a subclass of TextControllInnerElement.
        (WebCore::SearchFieldResultsButtonElement::isMouseFocusable): ditto.
        (WebCore::SearchFieldCancelButtonElement::isMouseFocusable): ditto.
        (WebCore::SpinButtonElement::isMouseFocusable): ditto.
        (WebCore::InputFieldSpeechButtonElement::isMouseFocusable): ditto.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::~RenderTextControl): Remove unnecessary code.
        (WebCore::RenderTextControl::styleDidChange):
          innerTextElement can have no renderer.
          Explicitly call setNeedsStyleRecals() for innerTextElement. It is
          needed for LayoutTests/editing/selection/select-across-readonly-input-*.html.
        (WebCore::RenderTextControl::textBlockWidth): Member data -> function
        (WebCore::RenderTextControl::updateFromElement): ditto.
        (WebCore::RenderTextControl::setInnerTextValue): ditto.
        (WebCore::RenderTextControl::hasVisibleTextArea): ditto.
        (WebCore::RenderTextControl::isSelectableElement): ditto.
        (WebCore::RenderTextControl::selection): ditto.
        (WebCore::RenderTextControl::visiblePositionForIndex): ditto.
        (WebCore::RenderTextControl::indexForVisiblePosition): ditto.
        (WebCore::RenderTextControl::text): ditto.
        (WebCore::RenderTextControl::textWithHardLineBreaks): ditto.
        (WebCore::RenderTextControl::computeLogicalHeight): ditto.
        (WebCore::RenderTextControl::hitInnerTextElement): ditto.
        (WebCore::RenderTextControl::forwardEvent): ditto.
        (WebCore::RenderTextControl::computePreferredLogicalWidths): ditto.
        * rendering/RenderTextControl.h:
          - Make m_innerText virtual function.
          - Make createInnerTextStyle() public in order that
            TextControlInnerElements can call it.
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::innerTextElement): Added.
        (WebCore::RenderTextControlMultiLine::updateFromElement):
          Remove unnecessary createSubtreeIfNeeded() call.
        * rendering/RenderTextControlMultiLine.h: Add a declaration.
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::~RenderTextControlSingleLine):
          Remove unnecessary code.
        (WebCore::RenderTextControlSingleLine::innerTextElement): Added.
        (WebCore::RenderTextControlSingleLine::innerBlockElement): Added.
        (WebCore::RenderTextControlSingleLine::innerSpinButtonElement): Added.
        (WebCore::RenderTextControlSingleLine::outerSpinButtonElement): Added.
        (WebCore::RenderTextControlSingleLine::resultsButtonElement): Added.
        (WebCore::RenderTextControlSingleLine::cancelButtonElement): Added.
        (WebCore::RenderTextControlSingleLine::speechButtonElement): Added.
        (WebCore::RenderTextControlSingleLine::textBaseStyle): Data member -> function
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged): ditto.
        (WebCore::RenderTextControlSingleLine::layout): ditto.
        (WebCore::RenderTextControlSingleLine::nodeAtPoint): ditto.
        (WebCore::RenderTextControlSingleLine::forwardEvent): ditto.
        (WebCore::RenderTextControlSingleLine::styleDidChange): ditto.
        (WebCore::RenderTextControlSingleLine::hasControlClip): ditto.
        (WebCore::RenderTextControlSingleLine::controlClipRect): ditto.
        (WebCore::RenderTextControlSingleLine::textBlockWidth): ditto.
        (WebCore::RenderTextControlSingleLine::decorationWidthRight): ditto.
        (WebCore::RenderTextControlSingleLine::preferredContentWidth): ditto.
        (WebCore::RenderTextControlSingleLine::preferredDecorationWidthRight): ditto.
        (WebCore::RenderTextControlSingleLine::adjustControlHeightBasedOnLineHeight): ditto.
        (WebCore::RenderTextControlSingleLine::updateFromElement):
          ditto, and remove unnecessary createSubtreeIfNeeded() call.
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):
          Data member -> function
        (WebCore::RenderTextControlSingleLine::updateCancelButtonVisibility): ditto.
        (WebCore::RenderTextControlSingleLine::clientPaddingLeft): ditto.
        (WebCore::RenderTextControlSingleLine::clientPaddingRight): ditto.
        (WebCore::RenderTextControlSingleLine::textBlockInsetTop): ditto.
        * rendering/RenderTextControlSingleLine.h:
          Add declarations, and remove unnecessary data members.

2011-05-21  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        AudioBufferSourceNode noteOff() method must respect scheduling time
        https://bugs.webkit.org/show_bug.cgi?id=61226

        No new tests since audio API is not yet implemented.

        * webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
        (WebCore::AudioBufferSourceNode::process):
        (WebCore::AudioBufferSourceNode::provideInput):
        (WebCore::AudioBufferSourceNode::finish):
        (WebCore::AudioBufferSourceNode::noteGrainOn):
        (WebCore::AudioBufferSourceNode::noteOff):
        * webaudio/AudioBufferSourceNode.h:

2011-05-20  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Share more code in PathTraversalState
        https://bugs.webkit.org/show_bug.cgi?id=61238

        Share more code between SVGPathTraversalStateBuilder and Path in PathTraversalState.

        No change in functionality, so no new tests.

        * platform/graphics/Path.cpp:
        (WebCore::pathLengthApplierFunction):
        * platform/graphics/PathTraversalState.cpp:
        (WebCore::PathTraversalState::processSegment):
        * platform/graphics/PathTraversalState.h:
        * svg/SVGPathTraversalStateBuilder.cpp:
        (WebCore::SVGPathTraversalStateBuilder::continueConsuming):

2011-05-21  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Rob Buis.

        SVG svgAttributeChanged/synchronizeProperty/parseMappedAttribute should be optimized
        https://bugs.webkit.org/show_bug.cgi?id=61183

        Example: rect.x.baseVal.value = 100;
        What happens: SVGRectElement::svgAttributeChanged(const QualifiedName& attrName) is invoked with "SVGNames::rectAttr" as parameter.

        void SVGRectElement::svgAttributeChanged(const QualifiedName& attrName)
        {
            SVGStyledTransformableElement::svgAttributeChanged(attrName);
            // Handle my own attribute changes...
        }

        Currently we always traverse the base class hierarchy, when invoking svgAttributeChanged. Every svgAttributeChanged call from a class
        like SVGRectElement has to reach the base class SVGStyledElement::svgAttributeChanged, as it handles invalidation of the instances of
        an element. Say that a <rect> is referenced by a <use> and we change the 'x' attribute of the <rect>, then SVGStyledElement::svgAttributeChanged,
        calls SVGElementInstance::invalidateAllInstancesOfElement(this), so that the <use> can rebuild its shadow tree...
        That's the only reason all svgAttributeChanged implementations call the base class immediately, so SVGStyledElement is always reached.

        Switch to a more efficient pattern, by providing a "bool isSupportedAttribute(const QualifiedName&);" function for all SVG*Elements.
        It contains all attributes the particular SVG*Element class handles (but not its parent classes attributes). For example SVGRectElement
        contains x/y/width/height/rx/ry attributes, and the ones from SVGTests/SVGLangSpace/SVGExternalResourcesRequired (xml:space/lang, etc.),
        but not eg. transform as that's handled by the parent class SVGStyledTransformableElement.

        void SVGRectElement::svgAttributeChanged(const QualifiedName& attrName)
        {
            if (!isSupportedAttribute.contains(attrName)) {
                SVGStyledTransformableElement::svgAttributeChanged(attrName);
                return;
            }

            // When we get here, we know for sure it's one of our attributes that has changed.
            // Note for eg. SVGNames::transformAttr, the call from SVGRectElement::svgAttributeChanged, would be immediately forwarded to the base class, which handles transformAttr changes)

            if (attrName == SVGNames::xAttr) { do_work(); return; }
            if (attrName == SVGNames::yAttr) { do_work(); return; }
            ...
            // Assure that we handled all properties we claim support for in "isSupportedAttribute()".
            ASSERT_NOT_REACHED();
        }

        Exactly the same pattern can be applied to synchronizeProperty and parseMappedAttribute to speed them up as well.

        Add "SVGElementInstance::InvalidationGuard guard(this)" statements in all svgAttributeChanged implementations, that calls invalidateAllInstancesOfElement(this)
        upon destruction, after we've reacted to the svg attribute change. This assures we never forget to call the invalidation method anywhere, and don't
        need to rely on the base class svgAttributeChanged() call to do it.
       
        It's a slight overal performance progression.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::isSupportedAttribute):
        (WebCore::SVGAElement::parseMappedAttribute):
        (WebCore::SVGAElement::svgAttributeChanged):
        (WebCore::SVGAElement::synchronizeProperty):
        * svg/SVGAElement.h:
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::isSupportedAttribute):
        (WebCore::SVGAnimateMotionElement::parseMappedAttribute):
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::isSupportedAttribute):
        (WebCore::SVGAnimateTransformElement::parseMappedAttribute):
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::isSupportedAttribute):
        (WebCore::SVGAnimationElement::parseMappedAttribute):
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::isSupportedAttribute):
        (WebCore::SVGCircleElement::parseMappedAttribute):
        (WebCore::SVGCircleElement::svgAttributeChanged):
        (WebCore::SVGCircleElement::synchronizeProperty):
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::isSupportedAttribute):
        (WebCore::SVGClipPathElement::parseMappedAttribute):
        (WebCore::SVGClipPathElement::svgAttributeChanged):
        (WebCore::SVGClipPathElement::synchronizeProperty):
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::isSupportedAttribute):
        (WebCore::SVGComponentTransferFunctionElement::parseMappedAttribute):
        (WebCore::SVGComponentTransferFunctionElement::synchronizeProperty):
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::isSupportedAttribute):
        (WebCore::SVGCursorElement::parseMappedAttribute):
        (WebCore::SVGCursorElement::svgAttributeChanged):
        (WebCore::SVGCursorElement::synchronizeProperty):
        * svg/SVGCursorElement.h:
        * svg/SVGElementInstance.h:
        (WebCore::SVGElementInstance::InvalidationGuard::InvalidationGuard):
        (WebCore::SVGElementInstance::InvalidationGuard::~InvalidationGuard):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::isSupportedAttribute):
        (WebCore::SVGEllipseElement::parseMappedAttribute):
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        (WebCore::SVGEllipseElement::synchronizeProperty):
        * svg/SVGEllipseElement.h:
        * svg/SVGExternalResourcesRequired.cpp:
        (WebCore::SVGExternalResourcesRequired::addSupportedAttributes):
        * svg/SVGExternalResourcesRequired.h:
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::isSupportedAttribute):
        (WebCore::SVGFEBlendElement::parseMappedAttribute):
        (WebCore::SVGFEBlendElement::svgAttributeChanged):
        (WebCore::SVGFEBlendElement::synchronizeProperty):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::isSupportedAttribute):
        (WebCore::SVGFEColorMatrixElement::parseMappedAttribute):
        (WebCore::SVGFEColorMatrixElement::svgAttributeChanged):
        (WebCore::SVGFEColorMatrixElement::synchronizeProperty):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::isSupportedAttribute):
        (WebCore::SVGFEComponentTransferElement::parseMappedAttribute):
        (WebCore::SVGFEComponentTransferElement::synchronizeProperty):
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::isSupportedAttribute):
        (WebCore::SVGFECompositeElement::parseMappedAttribute):
        (WebCore::SVGFECompositeElement::svgAttributeChanged):
        (WebCore::SVGFECompositeElement::synchronizeProperty):
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::isSupportedAttribute):
        (WebCore::SVGFEConvolveMatrixElement::parseMappedAttribute):
        (WebCore::SVGFEConvolveMatrixElement::svgAttributeChanged):
        (WebCore::SVGFEConvolveMatrixElement::synchronizeProperty):
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::isSupportedAttribute):
        (WebCore::SVGFEDiffuseLightingElement::parseMappedAttribute):
        (WebCore::SVGFEDiffuseLightingElement::svgAttributeChanged):
        (WebCore::SVGFEDiffuseLightingElement::synchronizeProperty):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::isSupportedAttribute):
        (WebCore::SVGFEDisplacementMapElement::parseMappedAttribute):
        (WebCore::SVGFEDisplacementMapElement::svgAttributeChanged):
        (WebCore::SVGFEDisplacementMapElement::synchronizeProperty):
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::isSupportedAttribute):
        (WebCore::SVGFEDropShadowElement::parseMappedAttribute):
        (WebCore::SVGFEDropShadowElement::svgAttributeChanged):
        (WebCore::SVGFEDropShadowElement::synchronizeProperty):
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::isSupportedAttribute):
        (WebCore::SVGFEGaussianBlurElement::parseMappedAttribute):
        (WebCore::SVGFEGaussianBlurElement::svgAttributeChanged):
        (WebCore::SVGFEGaussianBlurElement::synchronizeProperty):
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::isSupportedAttribute):
        (WebCore::SVGFEImageElement::parseMappedAttribute):
        (WebCore::SVGFEImageElement::svgAttributeChanged):
        (WebCore::SVGFEImageElement::synchronizeProperty):
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::isSupportedAttribute):
        (WebCore::SVGFELightElement::parseMappedAttribute):
        (WebCore::SVGFELightElement::svgAttributeChanged):
        (WebCore::SVGFELightElement::synchronizeProperty):
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::isSupportedAttribute):
        (WebCore::SVGFEMergeNodeElement::parseMappedAttribute):
        (WebCore::SVGFEMergeNodeElement::svgAttributeChanged):
        (WebCore::SVGFEMergeNodeElement::synchronizeProperty):
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::isSupportedAttribute):
        (WebCore::SVGFEMorphologyElement::parseMappedAttribute):
        (WebCore::SVGFEMorphologyElement::svgAttributeChanged):
        (WebCore::SVGFEMorphologyElement::synchronizeProperty):
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::isSupportedAttribute):
        (WebCore::SVGFEOffsetElement::parseMappedAttribute):
        (WebCore::SVGFEOffsetElement::svgAttributeChanged):
        (WebCore::SVGFEOffsetElement::synchronizeProperty):
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::isSupportedAttribute):
        (WebCore::SVGFESpecularLightingElement::parseMappedAttribute):
        (WebCore::SVGFESpecularLightingElement::svgAttributeChanged):
        (WebCore::SVGFESpecularLightingElement::synchronizeProperty):
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::isSupportedAttribute):
        (WebCore::SVGFETileElement::parseMappedAttribute):
        (WebCore::SVGFETileElement::svgAttributeChanged):
        (WebCore::SVGFETileElement::synchronizeProperty):
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::isSupportedAttribute):
        (WebCore::SVGFETurbulenceElement::parseMappedAttribute):
        (WebCore::SVGFETurbulenceElement::svgAttributeChanged):
        (WebCore::SVGFETurbulenceElement::synchronizeProperty):
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::isSupportedAttribute):
        (WebCore::SVGFilterElement::parseMappedAttribute):
        (WebCore::SVGFilterElement::svgAttributeChanged):
        (WebCore::SVGFilterElement::synchronizeProperty):
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::isSupportedAttribute):
        (WebCore::SVGFilterPrimitiveStandardAttributes::parseMappedAttribute):
        (WebCore::SVGFilterPrimitiveStandardAttributes::svgAttributeChanged):
        (WebCore::SVGFilterPrimitiveStandardAttributes::synchronizeProperty):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseMappedAttribute):
        (WebCore::SVGFitToViewBox::synchronizeProperties):
        (WebCore::SVGFitToViewBox::addSupportedAttributes):
        * svg/SVGFitToViewBox.h:
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::isSupportedAttribute):
        (WebCore::SVGForeignObjectElement::parseMappedAttribute):
        (WebCore::SVGForeignObjectElement::svgAttributeChanged):
        (WebCore::SVGForeignObjectElement::synchronizeProperty):
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::isSupportedAttribute):
        (WebCore::SVGGElement::parseMappedAttribute):
        (WebCore::SVGGElement::svgAttributeChanged):
        (WebCore::SVGGElement::synchronizeProperty):
        * svg/SVGGElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::isSupportedAttribute):
        (WebCore::SVGGradientElement::parseMappedAttribute):
        (WebCore::SVGGradientElement::svgAttributeChanged):
        (WebCore::SVGGradientElement::synchronizeProperty):
        * svg/SVGGradientElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::isSupportedAttribute):
        (WebCore::SVGImageElement::parseMappedAttribute):
        (WebCore::SVGImageElement::svgAttributeChanged):
        (WebCore::SVGImageElement::synchronizeProperty):
        * svg/SVGImageElement.h:
        * svg/SVGLangSpace.cpp:
        (WebCore::SVGLangSpace::addSupportedAttributes):
        * svg/SVGLangSpace.h:
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::isSupportedAttribute):
        (WebCore::SVGLineElement::parseMappedAttribute):
        (WebCore::SVGLineElement::svgAttributeChanged):
        (WebCore::SVGLineElement::synchronizeProperty):
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::isSupportedAttribute):
        (WebCore::SVGLinearGradientElement::parseMappedAttribute):
        (WebCore::SVGLinearGradientElement::svgAttributeChanged):
        (WebCore::SVGLinearGradientElement::synchronizeProperty):
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::isSupportedAttribute):
        (WebCore::SVGMPathElement::parseMappedAttribute):
        (WebCore::SVGMPathElement::synchronizeProperty):
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::isSupportedAttribute):
        (WebCore::SVGMarkerElement::parseMappedAttribute):
        (WebCore::SVGMarkerElement::svgAttributeChanged):
        (WebCore::SVGMarkerElement::synchronizeProperty):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::isSupportedAttribute):
        (WebCore::SVGMaskElement::parseMappedAttribute):
        (WebCore::SVGMaskElement::svgAttributeChanged):
        (WebCore::SVGMaskElement::synchronizeProperty):
        * svg/SVGMaskElement.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::isSupportedAttribute):
        (WebCore::SVGPathElement::parseMappedAttribute):
        (WebCore::SVGPathElement::svgAttributeChanged):
        (WebCore::SVGPathElement::synchronizeProperty):
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::isSupportedAttribute):
        (WebCore::SVGPatternElement::parseMappedAttribute):
        (WebCore::SVGPatternElement::svgAttributeChanged):
        (WebCore::SVGPatternElement::synchronizeProperty):
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::isSupportedAttribute):
        (WebCore::SVGPolyElement::parseMappedAttribute):
        (WebCore::SVGPolyElement::svgAttributeChanged):
        * svg/SVGPolyElement.h:
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::isSupportedAttribute):
        (WebCore::SVGRadialGradientElement::parseMappedAttribute):
        (WebCore::SVGRadialGradientElement::svgAttributeChanged):
        (WebCore::SVGRadialGradientElement::synchronizeProperty):
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::isSupportedAttribute):
        (WebCore::SVGRectElement::parseMappedAttribute):
        (WebCore::SVGRectElement::svgAttributeChanged):
        (WebCore::SVGRectElement::synchronizeProperty):
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged):
        (WebCore::SVGSVGElement::synchronizeProperty):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::isSupportedAttribute):
        (WebCore::SVGScriptElement::parseMappedAttribute):
        (WebCore::SVGScriptElement::svgAttributeChanged):
        (WebCore::SVGScriptElement::synchronizeProperty):
        * svg/SVGScriptElement.h:
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::isSupportedAttribute):
        (WebCore::SVGStopElement::parseMappedAttribute):
        (WebCore::SVGStopElement::svgAttributeChanged):
        (WebCore::SVGStopElement::synchronizeProperty):
        * svg/SVGStopElement.h:
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::isSupportedAttribute):
        (WebCore::SVGStyleElement::parseMappedAttribute):
        * svg/SVGStyleElement.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::parseMappedAttribute):
        (WebCore::SVGStyledElement::svgAttributeChanged):
        (WebCore::SVGStyledElement::synchronizeProperty):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::isSupportedAttribute):
        (WebCore::SVGStyledTransformableElement::parseMappedAttribute):
        (WebCore::SVGStyledTransformableElement::svgAttributeChanged):
        (WebCore::SVGStyledTransformableElement::synchronizeProperty):
        * svg/SVGStyledTransformableElement.h:
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::isSupportedAttribute):
        (WebCore::SVGSymbolElement::parseMappedAttribute):
        (WebCore::SVGSymbolElement::svgAttributeChanged):
        (WebCore::SVGSymbolElement::synchronizeProperty):
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::isSupportedAttribute):
        (WebCore::SVGTRefElement::parseMappedAttribute):
        (WebCore::SVGTRefElement::svgAttributeChanged):
        (WebCore::SVGTRefElement::synchronizeProperty):
        * svg/SVGTRefElement.h:
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::addSupportedAttributes):
        * svg/SVGTests.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::isSupportedAttribute):
        (WebCore::SVGTextContentElement::parseMappedAttribute):
        (WebCore::SVGTextContentElement::synchronizeProperty):
        (WebCore::SVGTextContentElement::svgAttributeChanged):
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::isSupportedAttribute):
        (WebCore::SVGTextElement::parseMappedAttribute):
        (WebCore::SVGTextElement::svgAttributeChanged):
        (WebCore::SVGTextElement::synchronizeProperty):
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::isSupportedAttribute):
        (WebCore::SVGTextPathElement::parseMappedAttribute):
        (WebCore::SVGTextPathElement::svgAttributeChanged):
        (WebCore::SVGTextPathElement::synchronizeProperty):
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::isSupportedAttribute):
        (WebCore::SVGTextPositioningElement::parseMappedAttribute):
        (WebCore::SVGTextPositioningElement::svgAttributeChanged):
        (WebCore::SVGTextPositioningElement::synchronizeProperty):
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTransformable.cpp:
        * svg/SVGTransformable.h:
        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::addSupportedAttributes):
        * svg/SVGURIReference.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::isSupportedAttribute):
        (WebCore::SVGUseElement::parseMappedAttribute):
        (WebCore::SVGUseElement::svgAttributeChanged):
        (WebCore::SVGUseElement::synchronizeProperty):
        * svg/SVGUseElement.h:
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::isSupportedAttribute):
        (WebCore::SVGViewElement::parseMappedAttribute):
        (WebCore::SVGViewElement::synchronizeProperty):
        * svg/SVGViewElement.h:
        * svg/SVGZoomAndPan.cpp:
        (WebCore::SVGZoomAndPan::addSupportedAttributes):
        * svg/SVGZoomAndPan.h:

2011-05-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Allow ShadowBlur to do tiling when the context is scaled
        https://bugs.webkit.org/show_bug.cgi?id=61232

        If the GraphicsContext is scaled or rotated by a multiple of 90deg, have ShadowBlur
        use the tiling code path, to avoid blurring large areas on pages like cracked.com
        when the context is scaled.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::drawRectShadow): Call preservesAxisAlignment()
        to decide when to not use tiling.
        (WebCore::ShadowBlur::drawInsetShadow): Ditto.
        (WebCore::ShadowBlur::drawLayerPieces): Round to device pixels when drawing tiles
        to avoid pixel cracks in scaled contexts.
        * platform/graphics/transforms/AffineTransform.h:
        (WebCore::AffineTransform::preservesAxisAlignment): Return true if there is the matrix
        contains a transform that results in axis alignment (no rotation or skew, or rotations
        which are multiples of 90deg).

2011-05-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Kent Tamura.

        Special characters can be inserted in text field having reached maxlength
        https://bugs.webkit.org/show_bug.cgi?id=19479
        <rdar://problem/7828739>

        Test: platform/mac/editing/input/maxlength.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertTextIntoNode):
        (WebCore::CompositeEditCommand::replaceTextInNode):
        Avoid hitting an assertion below, now that we can get here with empty text.

        * editing/TypingCommand.cpp: (WebCore::TypingCommand::insertText): There is still work to do
        even if beforetextinput removed all text from the event. At the very least, we should delete
        the current selection.

2011-05-20  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r70748): WebKit cannot play videos created by Podcast Producer.
        https://bugs.webkit.org/show_bug.cgi?id=61229
        
        Podcast Producer uses an object tag with a classid attribute to embed
        QuickTime Player into a page. In r70748, we changed our behavior to
        render the object's fallback content when a non-empty classid is
        encountered, per HTML5. Since Podcast Producer videos have no fallback
        content, this change in behavior causes the video to fail to load.
        
        Since the object tag has a valid type attribute, we would be able to
        load it if weren't for the non-empty classid. This patch changes our
        policy to allow objects with non-empty classids if there is no fallback
        content. We still continue to prefer fallback content if it exists,
        however.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::hasValidClassId): Treat a non-empty
        classid as valid if the object has no fallback content.

2011-05-20  Kulanthaivel Palanichamy  <kulanthaivel@codeaurora.org>

        Reviewed by Simon Fraser.

        If both border-radius and box-shadow applied, shadow is not fully visible
        https://bugs.webkit.org/show_bug.cgi?id=59577

        The current implementation of RoundedIntRect::inflateWithRadii() inflates
        its rect size and corner radii out of sync. This leads to validation failure in
        Path::addRoundedRect() and results in ignoring radii in the path.
        When this invalid path is used to clip out the rounded corner box before painting
        the box shadow, the entire rectangle is clipped out without the corner radii.

        This patch implements RoundedIntRect::inflateWithRadii() properly to inflate
        rounded rect radii based on inflate ratios of rect size.

        Test: fast/css/box-shadow-and-border-radius.html

        * platform/graphics/RoundedIntRect.cpp:
        (WebCore::RoundedIntRect::inflateWithRadii):
        * platform/graphics/RoundedIntRect.h:

2011-05-20  Michael Nordman  <michaeln@google.com>

        Reviewed by Darin Fisher.

        [Chromium] Support the new webkit apis so the WebDatabase system participates
        in the unified quota management system.
        https://bugs.webkit.org/show_bug.cgi?id=60985

        No change in functionality, no new tests.

        * platform/chromium/PlatformBridge.h:
        * storage/chromium/QuotaTracker.cpp:
        (WebCore::QuotaTracker::getDatabaseSizeAndSpaceAvailableToOrigin):
        (WebCore::QuotaTracker::updateDatabaseSize):
        (WebCore::QuotaTracker::updateSpaceAvailableToOrigin):
        (WebCore::QuotaTracker::resetSpaceAvailableToOrigin):
        * storage/chromium/QuotaTracker.h:

2011-05-20  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        WebView loses firstResponder status when entering full-screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=61153

        No test possible via DRT. Add a manual test instead.

        * manual-tests/full-screen-keypress.html: Added.

2011-05-20  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Exit full screen mode if the WebProcess crashes.
        https://bugs.webkit.org/show_bug.cgi?id=61151

        * platform/graphics/win/FullScreenController.h:
        * platform/graphics/win/FullScreenController.cpp:
        (FullScreenController::close): Added.  Close the full-screen window without animation
            if called.

2011-05-20  Enrica Casucci  <enrica@apple.com>

        Reviewed by David Kilzer.

        Add delegate methods about focus and blur to all elements.
        https://bugs.webkit.org/show_bug.cgi?id=61218

        We want to have delegates for these events for all the elements, not only the form elements.
        The patch moves the call to the delegate in the Node class and changes the name
        of the methods not to be form element specific.

        * dom/Node.cpp:
        (WebCore::Node::dispatchFocusEvent): Added call to delegate with the new name.
        (WebCore::Node::dispatchBlurEvent): Added call to delegate with the new name.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::dispatchBlurEvent): Removed code that calls the delegate since
        it has been moved into Node.
        * html/HTMLFormControlElement.h: Removed dispatchFocusEvent, since we are using the default inplementation in Node.
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::elementDidFocus): Name changed.
        (WebCore::EmptyChromeClient::elementDidBlur): Name changed.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::elementDidFocus): Name changed.
        (WebCore::ChromeClient::elementDidBlur): Name changed.

2011-05-20  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Enrica Casucci.

        Wrap copied contents by one style span instead of two
        https://bugs.webkit.org/show_bug.cgi?id=60988

        Replaced sourceDocumentStyleSpan and copiedRangeStyleSpan by one wrapping style span. Instead
        of wrapping the copied contents by user-applied style and document default style in serialization,
        take the difference with the document default's style in paste code.

        This will dramatically simplify our copy and paste code and pave a way to fix the bug 60914.

        No new tests because copy & paste is tested by existing layout tests.

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::prepareToApplyAt): Remove the color property if RGBA values of color
        matches that of the computed style at the specified position.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::handleStyleSpans): Replaced sourceDocumentStyleSpan and
        copiedRangeStyleSpan by wrappingStyleSpan. When pasting as a quotation, compare style against
        the document's default style to avoid keeping the document default style (tested by
        editing/pasteboard/4930986-3.html).
        * editing/ReplaceSelectionCommand.h:
        * editing/markup.cpp:
        (WebCore::createMarkup): Only use one style span to wrap the serialized contents.

2011-05-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        numberOfActiveAnimations() can include animations from documents in the page cache
        https://bugs.webkit.org/show_bug.cgi?id=53641
        
        Some transition tests using layoutTestController.numberOfActiveAnimations() failed
        in WebKit2 because numberOfActiveAnimations() could include those from other documents
        in the page cache.
        
        Fix by passing in the document for which we wish to count animations.

        * WebCore.exp.in:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::numberOfActiveAnimations):
        (WebCore::AnimationController::numberOfActiveAnimations):
        * page/animation/AnimationController.h:
        * page/animation/AnimationControllerPrivate.h:

2011-05-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Factor CORS request preparation out of DocumentThreadableLoader
        https://bugs.webkit.org/show_bug.cgi?id=61209

        DocumentThreadableLoader has two jobs:

        1) Proxy loads between threads.
        2) Run the CORS state machine.

        This patch begins the work of separating those concerns, allowing CORS
        to be used elsewhere in the loading pipeline.  In particular, this
        patch moves knowledge of how to prepare CORS requests out of
        DocumentThreadableLoder.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::isOnAccessControlSimpleRequestHeaderWhitelist):
        (WebCore::updateRequestForAccessControl):
        (WebCore::createAccessControlPreflightRequest):
        * loader/CrossOriginAccessControl.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest):
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequestWithPreflight):

2011-05-20  Rob Buis  <rbuis@rim.com>

        Reviewed by Dirk Schulze.

        Use test from ietestcenter fails
        https://bugs.webkit.org/show_bug.cgi?id=60844

        When an id changes on an in-document element, we need to check whether the id
        is part of the pending elements. Since this is the same thing as happens in
        insertedIntoDocument, split out the common code into buildPendingResourcesIfNeeded.

        Test: svg/W3C-SVG-1.1-SE/struct-use-14-f.svg

        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::svgAttributeChanged):
        (WebCore::SVGStyledElement::insertedIntoDocument):
        (WebCore::SVGStyledElement::buildPendingResourcesIfNeeded):
        * svg/SVGStyledElement.h:

2011-05-20  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Kent Tamura.

        Make auto-focus a post attach callback in
        HTMLFormControlElement::attach().
        https://bugs.webkit.org/show_bug.cgi?id=32882

        Original patch by Darin Adler. This one uses a part of it.
        
        Test: fast/forms/input-element-attach-crash.html

        * 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.
        * html/HTMLFormControlElement.cpp:
        (WebCore::shouldAutofocus): Helper function that expresses
        the rule for which form control elements should auto-focus.
        (WebCore::focusPostAttach): 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

2011-05-20  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by James Robinson.

        [chromium] Remove LayerRendererChromium::useShader
        https://bugs.webkit.org/show_bug.cgi?id=61143

        GPU compositor tests should be sufficient.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::draw):
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::drawSurface):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp:
        (WebCore::CCCanvasLayerImpl::draw):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::draw):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::drawDebugBorder):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp:
        (WebCore::CCPluginLayerImpl::draw):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::drawYUV):
        (WebCore::CCVideoLayerImpl::drawRGBA):

2011-05-20  Dirk Schulze  <krit@webkit.org>

        Reviewed by Darin Adler.

        SVGPathSegList needs better getTotalLength, getSegmentAtLength path traversal code
        https://bugs.webkit.org/show_bug.cgi?id=12047

        Right now SVGPathElement::getTotalLength and SVGPathElement::getPointAtLength use toPathData()
        to transform a SVGPathByteStream to a Path. This Path gets traversed to find the searched value.
        With this patch both functions use the SVGPathByteStream directly together with the existing
        traversing code in SVG. This avoids the intermediate transforming to a platform path and gives
        platform independent results.
        The traversal code in SVG needed to be extended to support all PathTraversalActions.

        No new tests added. The existing tests cover the changes.

        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::getTotalLength):
        (WebCore::SVGPathElement::getPointAtLength):
        * svg/SVGPathParserFactory.cpp:
        (WebCore::SVGPathParserFactory::getTotalLengthOfSVGPathByteStream):
        (WebCore::SVGPathParserFactory::getPointAtLengthOfSVGPathByteStream):
        * svg/SVGPathParserFactory.h:
        * svg/SVGPathTraversalStateBuilder.cpp:
        (WebCore::SVGPathTraversalStateBuilder::continueConsuming):
        (WebCore::SVGPathTraversalStateBuilder::totalLength):
        (WebCore::SVGPathTraversalStateBuilder::currentPoint):
        * svg/SVGPathTraversalStateBuilder.h:

2011-05-20  Mark Pilgrim  <pilgrim@chromium.org>

        Reviewed by Tony Chang.

        IndexedDB createObjectStore should throw if name is null
        https://bugs.webkit.org/show_bug.cgi?id=58465

        Test: storage/indexeddb/mozilla/create-objectstore-null-name.html

        * storage/IDBDatabase.idl:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):

2011-05-20  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Ryosuke Niwa.

        ctrl-arrow does not work on words separated by multiple spaces.
        https://bugs.webkit.org/show_bug.cgi?id=57543.

        Add the leftmost boundary of a box in RTL block or the rightmost boundary of a box in LTR
        block as word break if its inlineBox is the current box and it is a word break.

        * editing/visible_units.cpp:
        (WebCore::previousWordBreakInBoxInsideBlockWithSameDirectionality): Add the rightmost
        boundary of a box in LTR block or leftmost boundary of a box in RTL block as visually
        first word break.
        (WebCore::nextWordBreakInBoxInsideBlockWithDifferentDirectionality):
        (WebCore::collectWordBreaksInBoxInsideBlockWithDifferntDirectionality):
        (WebCore::leftWordBoundary): Fix bug change "box" to "adjacentBox".
        (WebCore::rightWordBoundary): Fix bug change "box" to "adjacentBox".

2011-05-19  Evan Martin  <evan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] remove <(library) variable
        https://bugs.webkit.org/show_bug.cgi?id=61158

        This was for a build experiment; we can just use the correct value now.

        * WebCore.gyp/WebCore.gyp:

2011-05-20  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: breakpoints disappear from ui after navigation.
        https://bugs.webkit.org/show_bug.cgi?id=61133

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._debuggerWasEnabled):
        (WebInspector.DebuggerPresentationModel.prototype._saveBreakpoints):

2011-05-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86958.
        http://trac.webkit.org/changeset/86958
        https://bugs.webkit.org/show_bug.cgi?id=61195

        broke breakpoints persisting (Requested by podivilov on
        #webkit).

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._debuggerWasEnabled):
        (WebInspector.DebuggerPresentationModel.prototype._saveBreakpoints):

2011-05-19  Sergey Vorobyev  <sergeyvorobyev@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Background network events collection - add GUI to Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=58652

        Now in WebInspector Network panel avalaible new checkbox item in context menu:
        "Background events collection". It allows to save all network events when inspector
        frontend closed. Events that occur before collection enabling are not preserved after
        frontend reopening. Property unique for each page. Disabled by default.


        Tests: http/tests/inspector/network/network-clear-after-disabled.html
               http/tests/inspector/network/network-close-load-open.html
               http/tests/inspector/network/network-open-load-reopen.html

        * inspector/EventsCollector.cpp:
        (WebCore::EventsCollector::clear):
        * inspector/EventsCollector.h:
        * inspector/Inspector.json:
        * inspector/InspectorFrontendProxy.cpp:
        (WebCore::InspectorFrontendProxy::inspectorFrontendChannel):
        * inspector/InspectorFrontendProxy.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::setFrontend):
        (WebCore::InspectorResourceAgent::clearFrontend):
        (WebCore::InspectorResourceAgent::isBackgroundEventsCollectionEnabled):
        (WebCore::InspectorResourceAgent::setBackgroundEventsCollectionEnabled):
        (WebCore::InspectorResourceAgent::initializeBackgroundCollection):
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype._contextMenu):
        (WebInspector.NetworkPanel.prototype._toggleBackgroundEventsCollection):

2011-05-20  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: breakpoints disappear from ui after navigation.
        https://bugs.webkit.org/show_bug.cgi?id=61133

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._debuggerWasEnabled):
        (WebInspector.DebuggerPresentationModel.prototype._saveBreakpoints):

2011-05-20  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Win: non-full-screen content is briefly seen when entering full-screen mode (and vice versa)
        https://bugs.webkit.org/show_bug.cgi?id=61108

        Instead of repainting the full- and non-full-screen windows in WebCore, delegate that
        responsibility to the FullScreenControllerClient.  Because the repaint operation may 
        be asynchronous, add a new method for clients to use to indicate repainting has completed.

        * platform/graphics/win/FullScreenController.cpp:
        (FullScreenController::Private::Private): Added new ivars.
        (FullScreenController::enterFullScreen): Split into two functions (pre-and post repaint)
        (FullScreenController::enterFullScreenRepaintCompleted): Ditto.
        (FullScreenController::exitFullScreen): Ditto.
        (FullScreenController::exitFullScreenRepaintCompleted): Ditto.
        (FullScreenController::repaintCompleted): Call the appropriated repaint completed function.
        * platform/graphics/win/FullScreenController.h:
        * platform/graphics/win/FullScreenControllerClient.h:

2011-05-20  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: use RefPtr instead of OwnPtr to store InspectorBackendDispatcher
        https://bugs.webkit.org/show_bug.cgi?id=61188

        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        * inspector/WorkerInspectorController.h:

2011-05-20  Tonis Tiigi  <tonistiigi@gmail.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Network panel should only show pointer cursor over valid resources
        https://bugs.webkit.org/show_bug.cgi?id=55240

        Cursor style removed from filler area.

        * inspector/front-end/networkPanel.css:
        (.network-sidebar .data-grid tr:not(.filler) td.name-column):

2011-05-20  Peter Varga  <pvarga@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt][V8] Use qtscript-staging's shipped version of V8 when building with --v8
        https://bugs.webkit.org/show_bug.cgi?id=56649

        Use the provided V8 and functionality of
        http://qt.gitorious.org/+qt-developers/qt/qtscript-staging to build QtWebKit+V8.
        Based on the original patch of Andras Becsi <abecsi@webkit.org>.

        No new tests needed.

        * CodeGenerators.pri: Add generating of DebuggerScriptSource.h
        * WebCore.pri: Fix the options for V8 build.
        * WebCore.pro: Ditto.
        * bindings/v8/NPV8Object.cpp:
        (WebCore::npObjectTypeInfo): Add missing initializer.
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::disableEval): Temporarily disable
        unsupported feature on Qt.
        * bindings/v8/ScriptControllerQt.cpp:
        (WebCore::ScriptController::qtScriptEngine): use the QtScriptEngine
        constructor of qtscript-staging.
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp: Add missing
        initializer.
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp: Ditto.
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp: Ditto.
        * loader/appcache/ApplicationCacheGroup.cpp: Add missing header.
        * loader/cache/CachedResourceRequest.cpp: Ditto.
        * page/PageSerializer.cpp: Ditto.
        * page/qt/FrameQt.cpp: Ditto.
        * storage/StorageEventDispatcher.cpp: Ditto.

2011-05-20  Tonis Tiigi  <tonistiigi@gmail.com>

        Reviewed by Pavel Feldman.

        Web Inspector: console.log(XMLDocument) should be case preserving
        https://bugs.webkit.org/show_bug.cgi?id=60765

        Changes the XML document checking from base documents MIME type
        to xmlVersion parameter.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.set rootDOMNode):

2011-05-20  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Chromium] Use bottom-up CPU profile tree built in VM,
        instead of building it on Inspector's side.
        https://bugs.webkit.org/show_bug.cgi?id=61185

        * bindings/js/ScriptProfile.cpp:
        (WebCore::ScriptProfile::bottomUpHead):
        (WebCore::ScriptProfile::buildInspectorObjectForBottomUpHead):
        * bindings/js/ScriptProfile.h:
        * bindings/v8/ScriptProfile.cpp:
        (WebCore::ScriptProfile::bottomUpHead):
        (WebCore::ScriptProfile::buildInspectorObjectForBottomUpHead):
        * bindings/v8/ScriptProfile.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getProfile):
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileView.prototype.get bottomUpProfileDataGridTree):

2011-05-20  Adam Roben  <aroben@apple.com>

        Mac build fix after r86936

        * WebCore.xcodeproj/project.pbxproj: Added preprocessor.pm like the
        other .pm files.

2011-05-20  Kent Tamura  <tkent@chromium.org>

        Try to fix Windows CE build.
        Touch html.css to kick UA style sheet generation.

        * css/html.css:

2011-05-20  Kent Tamura  <tkent@chromium.org>

        Try to fix Windows CE build. 

        * CMakeLists.txt: Add --preprocessor flag.

2011-05-20  Kent Tamura  <tkent@chromium.org>

        Reviewed by Hajime Morita.

        Apply feature flags to user-agent style sheets
        https://bugs.webkit.org/show_bug.cgi?id=52612

        A user-agent style sheet should not have style definitions for disabled
        features because such definitions makes feature detection harder and
        causes incorrect behavior (See Bug 52214).

        We have handled such feature-dependent style definitions by providing
        separated CSS files and selecting them in build files. Adding such style
        definition was hard because we need to update each of build files. This
        change simplifies the process to add such style definitions by applying
        preprocessor to the CSS files.

        Implementation:
        make-css-file-arrays.pl invokes a preprocessor if it has --defines
        option. Otherwise, it just remove lines beginning with #.
        In this change, we pass --defines on Mac, Windows, Chromium, GTK, and
        CMake platforms. Qt and Android have no behavior change.

        * CMakeLists.txt:
          - IDL handling depends on preprocessor.pm.
          - Pass --defines option to make-css-file-arrays.pl
          - Add WebCore/bindings/scripts to @INC for make-css-file-arrays.pl
        * CodeGenerators.pri: IDL handling depends on preprocessor.pm.
        * DerivedSources.make: ditto.
        * GNUmakefile.am: ditto.
        * WebCore.gyp/WebCore.gyp: ditto.
        * WebCore.gyp/scripts/action_useragentstylesheets.py:
          Change parameter order to support perl modules and options.
          Many code is taken from rule_bindings.py.
        * WebCore.vcproj/MigrateScripts: Handles preprocessor.pm.
        * bindings/scripts/IDLParser.pm:
          Move the preprocessor code to preprocessor.pm.
        * bindings/scripts/preprocessor.pm:
          Added. The code was moved from IDLParser.pm
        * css/html.css: Enclose some style definitions with #if-#endif.
        * css/make-css-file-arrays.pl:
          - Add --defines and --preprocessor options.
          - Invoke a preprocessor if --defines is specified.

2011-05-20  Dirk Schulze  <krit@webkit.org>

        Rubber-stamped by Nikolas Zimmermann.

        Remove unnecessary class Path inlcude from PathTraversalState.

        * platform/graphics/PathTraversalState.h:

2011-05-19  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: ctrl+s should not switch source frame to read only mode.
        https://bugs.webkit.org/show_bug.cgi?id=61125

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.commitEditing.didEditContent):
        (WebInspector.SourceFrame.prototype.commitEditing):
        * inspector/front-end/inspector.js:
        (WebInspector.documentKeyDown):

2011-05-20  Piroska András  <Piroska.Andras@stud.u-szeged.hu>

        Reviewed by Nikolas Zimmermann.

        Apply the ParallelJobs support to FEConvolveMatrix
        https://bugs.webkit.org/show_bug.cgi?id=61171

        The FEConvolveMatrix filter of SVG can consume lots of resources if it is
        applied to a large area. The computation can be distributed to multiple
        cores if the architecture supports.
        The average performance progression is 20-30% on dual-core machines.

        Developed in cooperation with Gabor Loki.

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::fastSetInteriorPixels):
        (WebCore::FEConvolveMatrix::setInteriorPixels):
        (WebCore::FEConvolveMatrix::setInteriorPixelsWorker):
        (WebCore::FEConvolveMatrix::apply):
        * platform/graphics/filters/FEConvolveMatrix.h:

2011-05-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86920.
        http://trac.webkit.org/changeset/86920
        https://bugs.webkit.org/show_bug.cgi?id=61173

        It cause compile error on some buildbot in chromium. e.g.
        http://build.chromium.org/p/chromium.memory/builders/Chromium%20Mac%20Builder%20%28valgrind%29/builds/12336/steps/compile/logs/stdio#error1
        (Requested by ukai_ on #webkit).

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EImageRendering):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):
        * css/SVGCSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * css/SVGCSSValueKeywords.in:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        * html/HTMLCanvasElement.h:
        * platform/graphics/ImageRenderingMode.h: Removed.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::ImageQualityController::shouldPaintAtLowQuality):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::initialImageRendering):
        (WebCore::SVGRenderStyle::setImageRendering):
        (WebCore::SVGRenderStyle::imageRendering):
        (WebCore::SVGRenderStyle::InheritedFlags::operator==):
        (WebCore::SVGRenderStyle::setBitDefaults):
        * rendering/style/SVGRenderStyleDefs.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):

2011-05-20  Dirk Schulze  <krit@webkit.org>

        Reviewed by Eric Seidel.

        SVG Large curve path segment OOM crash
        https://bugs.webkit.org/show_bug.cgi?id=42079

        Limit the depth of repeatedly splitting a segment on length calculation to 20. The limitation
        is necessary for very big segments that would be splitter into millions of parts otherwise.
        The limitation just cause a less accurate approximation.
        At the moment the limit is fixed to 20. This is comparable with splitting the segment into 
        ~1 million parts as a worst case. We might want to be more flexible later.

        Test: svg/custom/path-getTotalLength-on-big-segment-crash.svg

        * platform/graphics/PathTraversalState.cpp:
        (WebCore::midPoint):
        (WebCore::curveLength):
        (WebCore::PathTraversalState::PathTraversalState):
        (WebCore::PathTraversalState::moveTo):
        (WebCore::PathTraversalState::quadraticBezierTo):
        (WebCore::PathTraversalState::cubicBezierTo):
        * platform/graphics/PathTraversalState.h:

2011-05-20  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Nikolas Zimmermann.

        SVGRootInlineBox triggers calculateBoundaries twice in layout
        https://bugs.webkit.org/show_bug.cgi?id=60979

        SVGRootInlineBox was calculating boundaries for children twice
        in computePerCharacterLayoutInformation(). The first time of
        calculation was in layoutChildBoxes() which is called by
        computePerCharacterLayoutInformation(), and the second time of
        calculation was in layoutRootBox() following layoutChildBoxes().

        This patch calculates rectangle of children in layoutChildBoxes()
        and then uses the rectange in layoutRootBox() to reduce a pass
        of calculating child boundaries.

        No functionality change, no new tests.

        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        (WebCore::SVGRootInlineBox::layoutChildBoxes):
        (WebCore::SVGRootInlineBox::layoutRootBox):
        * rendering/svg/SVGRootInlineBox.h:

2011-05-19  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Kent Tamura.

        Fix a problem that updating HTMLInputElement::value sets the cursor to a wrong position.
        https://bugs.webkit.org/show_bug.cgi?id=61163

        Manual test input-number-localization.html.
        Because we can't assume any number formats in various WebKit ports.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValue): The cursor must be the last position of visibleValue(), not m_value.
        * manual-tests/input-number-localization.html: Added manual test to check the cursor correctly moved to the last poisition of the input.

2011-05-19  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Flashing when entering and exiting full screen mode
        https://bugs.webkit.org/show_bug.cgi?id=56957

        Guard against the parameter of setAnimating() matching the ivar value it's 
        setting, thus avoiding tearing down the renderer's layer backing.

        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::setAnimating):

2011-05-19  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by Adam Barth.

        Remove Node::deprecatedParserAddChild
        https://bugs.webkit.org/show_bug.cgi?id=60818

        Refactoring only so no new tests.

        This patch fails short of one instance of deprecatedParserAddChild which will
        require a refactoring of <input> shadow DOM to be removed.

        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::pushCurrentNode): Updated to use a ContainerNode.
        (WebCore::XMLDocumentParser::clearCurrentNodeStack): We now need to clear
        up m_leafTextNode too.

        (WebCore::XMLDocumentParser::enterText):
        (WebCore::XMLDocumentParser::exitText):
        Those methods were updated to use m_leafTextNode instead of m_currentNode.

        * dom/XMLDocumentParser.h:
        Changed the currentNode logic to use ContainerNode. Also fixed the style of the
        forward declarations.

        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::endElementNs):
        (WebCore::XMLDocumentParser::characters):
        (WebCore::XMLDocumentParser::processingInstruction):
        (WebCore::XMLDocumentParser::cdataBlock):
        (WebCore::XMLDocumentParser::comment):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parse):
        (WebCore::XMLDocumentParser::parseStartElement):
        (WebCore::XMLDocumentParser::parseEndElement):
        (WebCore::XMLDocumentParser::parseCharacters):
        (WebCore::XMLDocumentParser::parseProcessingInstruction):
        (WebCore::XMLDocumentParser::parseCdata):
        (WebCore::XMLDocumentParser::parseComment):
        Removed the calls to deprecatedParserAddChild, changed the code to use
        m_leafTextNode when it made sense and used ContainerNode instead of
        Node for m_currentNode.

2011-05-19  Mike Lawther  <mikelawther@chromium.org>

        Reviewed by Simon Fraser.

        implement image-rendering: optimize-contrast (with a vendor prefix) as defined in CSS3 image values
        https://bugs.webkit.org/show_bug.cgi?id=56627

        Tests: css3/images/optimize-contrast-canvas.html
               css3/images/optimize-contrast-image.html

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EImageRendering):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):
        * css/SVGCSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * css/SVGCSSValueKeywords.in:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        * html/HTMLCanvasElement.h:
        * platform/graphics/ImageRenderingMode.h: Added.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::ImageQualityController::shouldPaintAtLowQuality):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::imageRendering):
        (WebCore::InheritedFlags::setImageRendering):
        (WebCore::InheritedFlags::initialImageRendering):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::InheritedFlags::operator==):
        (WebCore::SVGRenderStyle::setBitDefaults):
        * rendering/style/SVGRenderStyleDefs.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):

2011-05-18  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        [chromium] Disable blending in compositor for WebGL layers with alpha=false
        https://bugs.webkit.org/show_bug.cgi?id=61091

        Test: compositing/webgl/webgl-no-alpha.html

        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::CanvasLayerChromium):
        (WebCore::CanvasLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::setContext):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp:
        (WebCore::CCCanvasLayerImpl::CCCanvasLayerImpl):
        (WebCore::CCCanvasLayerImpl::draw):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.h:
        (WebCore::CCCanvasLayerImpl::setHasAlpha):

2011-05-18  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Poster is not shown in Safari for video element with no playable source elements.
        https://bugs.webkit.org/show_bug.cgi?id=61109

        Test: media/video-src-invalid-poster.html

        In the case where no video sources are playable, update the display state and 
        renderer, allowing the poster image to display.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::waitForSourceChange): 

2011-05-19  Andrew Wilson  <atwilson@chromium.org>

        Reviewed by Darin Adler.

        MessagePortArray cloning code needs to verify source before copying.
        https://bugs.webkit.org/show_bug.cgi?id=61130

        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::fillMessagePortArray):
        Changed code to not pre-allocate the destination array.
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::getMessagePortArray):
        Changed code to not pre-allocate the destination array.

2011-05-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86869, r86873, r86875, and r86877.
        http://trac.webkit.org/changeset/86869
        http://trac.webkit.org/changeset/86873
        http://trac.webkit.org/changeset/86875
        http://trac.webkit.org/changeset/86877
        https://bugs.webkit.org/show_bug.cgi?id=61139

        broke builds and debug DRT (Requested by rniwa on #webkit).

        * DerivedSources.make:
        * WebCore.exp.in:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * testing/Internals.cpp: Removed.
        * testing/Internals.h: Removed.
        * testing/Internals.idl: Removed.
        * testing/js/WebCoreTestSupport.cpp: Removed.
        * testing/js/WebCoreTestSupport.h: Removed.
        * testing/v8/WebCoreTestSupport.cpp: Removed.
        * testing/v8/WebCoreTestSupport.h: Removed.

2011-05-19  Dimitri Glazkov  <dglazkov@chromium.org>

        One more fix after r86869.

        * WebCore.exp.in: Made __ZN7WebCore12JSDOMWrapperD2Ev only export for debug builds.

2011-05-19  Anders Carlsson  <andersca@apple.com>

        Add two more symbols needed by the window.internals library.

        * WebCore.exp.in:

2011-05-19  Dimitri Glazkov  <dglazkov@chromium.org>

        Fix Leopard build after r86869.

        * WebCore.exp.in: Moved now-always-used exported symbols out of the conditional guard.

2011-05-19  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Fix plugins/windowless_plugin_paint_test.html
        https://bugs.webkit.org/show_bug.cgi?id=60992

        Call gdk_init_check before gdk_display_get_default().
        If we don't do this, gdk_display_get_default() will hang
        the next time it's called.

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::getPluginDisplay):

2011-05-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Add build logistics and plumbing for window.internals object.
        https://bugs.webkit.org/show_bug.cgi?id=60313

        Test: fast/harness/internals-object.html

        * DerivedSources.make: Added support for generating from Internals.idl.
        * WebCore.gyp/WebCore.gyp: Added new webcore_test_support library.
        * WebCore.gypi: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Added WebCoreTestSupport library.
        * testing/Internals.cpp: Added.
        * testing/Internals.h: Added.
        * testing/Internals.idl: Added.
        * testing/js/WebCoreTestSupport.cpp: Added.
        * testing/js/WebCoreTestSupport.h: Added.
        * testing/v8/WebCoreTestSupport.cpp: Added.
        * testing/v8/WebCoreTestSupport.h: Added.

2011-05-19  Dimitri Glazkov  <dglazkov@chromium.org>

        Accept XCode's decisions to keep modifying WebCore.xcodeproj.

        * WebCore.xcodeproj/project.pbxproj: Opened in XCode then closed.

2011-05-19  Andrew Wason  <rectalogic@rectalogic.com>

        Reviewed by Darin Adler.

        Fix GraphicsContext3DQt.cpp compile error
        https://bugs.webkit.org/show_bug.cgi?id=61128

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
         clear() m_internal OwnPtr.

2011-05-19  Tonis Tiigi  <tonistiigi@gmail.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Resizing columns in the network panel is weird
        https://bugs.webkit.org/show_bug.cgi?id=55238

        Makes network panel column resizing more usable by adding "first only" and "last only"
        resizing methods to WebInspector.DataGrid. Current behavior is named "nearest" and
        remains default. Network panels datagrid is set to use method "last".

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype.get resizeMethod):
        (WebInspector.DataGrid.prototype.set resizeMethod):
        (WebInspector.DataGrid.prototype._resizerDragging):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._createTable):

2011-05-19  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        JoinTextNodesCommand is never used
        https://bugs.webkit.org/show_bug.cgi?id=61089

        Deleted JoinTextNodesCommand because it's never used.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/CompositeEditCommand.cpp:
        * editing/CompositeEditCommand.h:
        * editing/EditingAllInOne.cpp:
        * editing/JoinTextNodesCommand.cpp: Removed.
        * editing/JoinTextNodesCommand.h: Removed.

2011-05-19  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION (r83322): Many crashes in Mail.app in WebCore::Node::nodeIndex
        https://bugs.webkit.org/show_bug.cgi?id=61012

        The crash was caused by ReplaceSelectionCommand's inserting content into a middle of the paragraph
        being moved when the insertion position's container node is the node to split to. Fixed the crash
        by not changing the insertion position in such a case.

        Unfortunately, this fix caused markup to bloat in some tests but we'll take this regression since
        it's much better than crashing.

        Test: editing/pasteboard/paste-after-inline-style-element.html

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

2011-05-19  Brady Eidson  <beidson@apple.com>

        Try to fix SUPPORT_AUTOCORRECTION_PANEL build.

        * editing/SpellingCorrectionController.cpp:
        (WebCore::SpellingCorrectionController::recordSpellcheckerResponseForModifiedCorrection):
        (WebCore::SpellingCorrectionController::processMarkersOnTextToBeReplacedByResult):

2011-05-19  Darin Adler  <darin@apple.com>

        Try to fix SUPPORT_AUTOCORRECTION_PANEL build.

        * editing/SpellingCorrectionController.cpp:
        (WebCore::markersHaveIdenticalDescription): Call description() function.

2011-05-19  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: switch to Scripts panel is too slow
        https://bugs.webkit.org/show_bug.cgi?id=61030

        - It is very expensive to listen to the DOM mutation events, thus we remove the listeners whenever we do any internal
        DOM manipulations (such as expand/collapse line rows) and set the listeners back when we are finished.
        - Also, when we switch to the Scripts panel that have a non-zero scrollTop offset, we would do the rendering work twice.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.show):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.beginDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype.endDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._enableDOMNodeRemovedListener):
        (WebInspector.TextEditorMainChunk):
        (WebInspector.TextEditorMainChunk.prototype.set expanded):
        (WebInspector.TextEditorMainChunk.prototype._createRow):

2011-05-19  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: inspector protocol tests fixed.

        * inspector/InjectedScriptSource.js:

2011-05-19  David Grogan  <dgrogan@chromium.org>

        Reviewed by David Levin.

        Make EventQueue post a Task to the task queue for each asynchronous event
        https://bugs.webkit.org/show_bug.cgi?id=60790

        Currently EventQueue queues up events to be fired asynchronously and
        fires each of them when a single DOMTimer goes off.  In the words of
        dimich, "Having 2 queues will sooner or later cause problems with
        ordering of tasks, termination, suspension and other things that all
        require some control on how queues operate."

        No new tests; this is just a refactoring to avoid potential future
        problems.

        * dom/EventQueue.cpp:
        (WebCore::EventQueue::EventQueue):
        (WebCore::EventQueue::EventDispatcherTask::create):
        (WebCore::EventQueue::EventDispatcherTask::dispatchEvent):
        (WebCore::EventQueue::EventDispatcherTask::performTask):
        (WebCore::EventQueue::EventDispatcherTask::cancel):
        (WebCore::EventQueue::EventDispatcherTask::EventDispatcherTask):
        (WebCore::EventQueue::removeEvent):
        (WebCore::EventQueue::enqueueEvent):
        (WebCore::EventQueue::enqueueOrDispatchScrollEvent):
        (WebCore::EventQueue::cancelEvent):
        (WebCore::EventQueue::cancelQueuedEvents):
        * dom/EventQueue.h:

2011-05-18  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        InjectedScriptSource.js - "Don't be eval()."
        https://bugs.webkit.org/show_bug.cgi?id=60800

        Thanks to Adam Barth for providing JSC implementation!

        InjectedScriptHost.evaluate is used to perform script evaluations for
        inspector needs. This method is not affected by CSP and should fix inspector
        on pages with CSP restrictions.

        Test: inspector/console/console-eval-blocked.html

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::evaluate):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::evaluateCallback):
        (WebCore::V8InjectedScriptHost::inspectedNodeCallback):
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        (.):

2011-05-19  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: expose object class name as a part of RemoteObject mirror.
        https://bugs.webkit.org/show_bug.cgi?id=61067

        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.json:

2011-05-19  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make "this" a part of callFrame, not scope in the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=61057

        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.json:
        * inspector/front-end/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update):

2011-05-19  Kent Tamura  <tkent@chromium.org>

        Reviewed by Hajime Morita.

        tooLong validity should not be true for a value set by a script
        https://bugs.webkit.org/show_bug.cgi?id=60948

        The specification has been updated so that tooLong should be true only
        for user-edit values.
        
        Introduce m_wasModifiedByUser flag to HTMLInputElement and
        HTMLTextAreaElemnt. It is set to true when a renderer updates the
        value, and is cleared when the value is updated by others.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
          Initialize m_wasModifiedByUser.
        (WebCore::HTMLInputElement::tooLong):
          Skip the check if m_wasModifiedByUser is false.
        (WebCore::HTMLInputElement::updateType): Clear m_wasModifiedByUser.
        (WebCore::HTMLInputElement::copyNonAttributeProperties):
        (WebCore::HTMLInputElement::setValue): If sendChange is true,
          m_wasModifiedByUser should be true because sendChange is set in a case
          of form auto-fill.  We assume a value set by form auto-fill is a kind
          of user-edit.
        (WebCore::HTMLInputElement::setValueFromRenderer):
          m_wasModifiedByUser should be true for the update by a renderer.
        * html/HTMLInputElement.h: Declare m_wasModifiedByUser.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::HTMLTextAreaElement):
          Initialize m_wasModifiedByUser.
        (WebCore::HTMLTextAreaElement::updateValue):
          m_wasModifiedByUser should be true for the update by a renderer.
        (WebCore::HTMLTextAreaElement::setValueCommon): Clear m_wasModifiedByUser.
        (WebCore::HTMLTextAreaElement::tooLong):
          Skip the check if m_wasModifiedByUser is false.
        * html/HTMLTextAreaElement.h: Declare m_wasModifiedByUser.

2011-05-19  David Barr  <davidbarr@chromium.org>

        Reviewed by Simon Fraser.

        CSS3: We fail 'border radius sum of radii' test
        https://bugs.webkit.org/show_bug.cgi?id=38788

        Ignore border-radius properties with negative values.

        Test: fast/css/border-radius-non-negative.html

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseBorderRadius):

2011-05-19  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        WebSocket: Use ScriptContext::Task to hold pending events of ThreadableWebSocketChannelClientWrapper
        https://bugs.webkit.org/show_bug.cgi?id=61034

        Refactoring only. No new tests.

        * websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnect):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessage):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        (WebCore::ThreadableWebSocketChannelClientWrapper::resume):
        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnectCallback):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageCallback):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didCloseCallback):
        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        Remove m_pendingConnected, m_pendingMessages and m_pendingClosed, and use ScriptContext::Task
        to hold these pending events.

2011-05-19  Emil A Eklund  <eae@chromium.org>

        Reviewed by Alexey Proskuryakov.

        REGRESSION (r80808): Multiple <select> - Selection reset to first element from multiple selected ones
        https://bugs.webkit.org/show_bug.cgi?id=60986

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setMultiple):
        Don't restore selection if the multiple attribute hasn't changed.

2011-05-18  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        http/tests/websocket/tests/workers/worker-handshake-challenge-randomness.html crashed once on Windows XP Debug (Tests)
        https://bugs.webkit.org/show_bug.cgi?id=57048

        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::platformClose): use loaderRunLoop to schedule streams on platform WIN

2011-05-18  MORITA Hajime  <morrita@google.com>

        Unreviewed attempt to fix clang build.

        * rendering/InlineTextBox.h:

2011-05-18  Nat Duca  <nduca@chromium.org>

        Reviewed by James Robinson.

        [chromium] Add histograms for paint times
        https://bugs.webkit.org/show_bug.cgi?id=61010

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerPainter::paint):

2011-05-18  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Fix incorrect size when clipping image layer upload rects
        https://bugs.webkit.org/show_bug.cgi?id=61105

        The clipped destination and source rects should have the same size.

        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerTextureUpdater::updateTextureRect):

2011-05-17  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        [Refactoring] Member variables of DocumentMarker should be encapsulated.
        https://bugs.webkit.org/show_bug.cgi?id=56814

        - Moved DocumentMarker's member variables to private and added getters for them.
        - Added DocumentMarker setters and constructors, which contain assertions against m_type values
          because description and activeMatch are used with specific type of MarkerType.
        - Moved chromium's WebKit::WebFrameImpl::addMarker() to DocumentMarkerController::addTextMatchMarker()
          because it accesses DocumentMarker internals.
        - Moved a version of DMC::addMarker() to private and add alternatives that hide
          internals of DocumentMarker. (The internal will be renewed by upcoming change.)
        
        * dom/DocumentMarker.h:
        (WebCore::DocumentMarker::type):
        (WebCore::DocumentMarker::startOffset):
        (WebCore::DocumentMarker::endOffset):
        (WebCore::DocumentMarker::description):
        (WebCore::DocumentMarker::hasDescription):
        (WebCore::DocumentMarker::activeMatch):
        (WebCore::DocumentMarker::clearDescription):
        (WebCore::DocumentMarker::setStartOffset):
        (WebCore::DocumentMarker::setEndOffset):
        (WebCore::DocumentMarker::operator==):
        (WebCore::DocumentMarker::DocumentMarker):
        (WebCore::DocumentMarker::shiftOffsets):
        (WebCore::DocumentMarker::setActiveMatch):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::addTextMatchMarker):
        (WebCore::DocumentMarkerController::copyMarkers):
        (WebCore::DocumentMarkerController::removeMarkers):
        (WebCore::DocumentMarkerController::markerContainingPoint):
        (WebCore::DocumentMarkerController::markersInRange):
        (WebCore::DocumentMarkerController::renderedRectsForMarkers):
        (WebCore::DocumentMarkerController::removeMarkersFromList):
        (WebCore::DocumentMarkerController::repaintMarkers):
        (WebCore::DocumentMarkerController::shiftMarkers):
        (WebCore::DocumentMarkerController::setMarkersActive):
        (WebCore::DocumentMarkerController::hasMarkers):
        (WebCore::DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange):
        (WebCore::DocumentMarkerController::showMarkers):
        * dom/DocumentMarkerController.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::originalStringForAutocorrectionAtBeginningOfSelection):
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartHasMarkerFor):
        * editing/SpellingCorrectionController.cpp:
        (WebCore::SpellingCorrectionController::respondToChangedSelection):
        * editing/SpellingCorrectionController.h:
        (WebCore::SpellingCorrectionController::shouldStartTimerFor):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::spellingToolTip):
        (WebCore::HitTestResult::replacedString):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::paintDocumentMarkers):
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer):

2011-05-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        +[WebScriptObject throwException:] doesn't work when invoked from obj-c field access
        https://bugs.webkit.org/show_bug.cgi?id=61100

        The objc bindings were written to assume exceptions would
        come from obj-c style exceptions, rather than throwException:
        This code simply calls the global ObjcInstance mechanism for
        transferring the reported exception.

        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcField::valueFromInstance):
        (JSC::Bindings::ObjcField::setValueToInstance):

2011-05-16  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Robustly handle mapTexSubImage2D returning NULL
        https://bugs.webkit.org/show_bug.cgi?id=60934

        Also, lazily create the temp buffer so that both the map and non-map
        cases can use it.

        * platform/graphics/chromium/LayerTextureSubImage.cpp:
        (WebCore::LayerTextureSubImage::setSubImageSize):
        (WebCore::LayerTextureSubImage::uploadWithTexSubImage):
        (WebCore::LayerTextureSubImage::uploadWithMapTexSubImage):

2011-05-18  Emil A Eklund  <eae@chromium.org>

        Reviewed by Darin Adler.

        Change RenderTextControl::hitInnerTextElement to use IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=61003

        Covered by existing tests.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::hitInnerTextElement):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::nodeAtPoint):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::nodeAtPoint):

2011-05-18  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Maciej Stachowiak.

        WK2: VoiceOver cannot move focus into a web area programmatically
        https://bugs.webkit.org/show_bug.cgi?id=60661

        Accessibility code relies on the ability to bring focus to the containing widget view.
        In WK2, that message needs to be propagated to the UI process.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::makeFirstResponder):
        * page/mac/ChromeMac.mm:
        (WebCore::Chrome::focusNSView):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::setFocus):

2011-05-18  Alok Priyadarshi  <alokp@chromium.org> and Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Split canvas from LayerTilerChromium
        https://bugs.webkit.org/show_bug.cgi?id=60719

        LayerTilerChromium now just does tiling. It delegates the task of painting and updating textures to LayerTextureUpdater.
        Also abstracted LayerTextureSubImage to upload texture pixels.

        * WebCore.gypi:
        * platform/chromium/TraceEvent.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::create):
        (WebCore::ContentLayerChromium::ContentLayerChromium):
        (WebCore::ContentLayerChromium::~ContentLayerChromium):
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        (WebCore::ContentLayerChromium::cleanupResources):
        (WebCore::ContentLayerChromium::setLayerRenderer):
        (WebCore::ContentLayerChromium::createTextureUpdater):
        (WebCore::ContentLayerChromium::drawsContent):
        (WebCore::ContentLayerChromium::createTilerIfNeeded):
        (WebCore::ContentLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerTextureUpdater::ImageLayerTextureUpdater):
        (WebCore::ImageLayerTextureUpdater::~ImageLayerTextureUpdater):
        (WebCore::ImageLayerTextureUpdater::orientation):
        (WebCore::ImageLayerTextureUpdater::prepareToUpdate):
        (WebCore::ImageLayerTextureUpdater::updateTextureRect):
        (WebCore::ImageLayerTextureUpdater::imageRect):
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        (WebCore::ImageLayerChromium::updateCompositorResources):
        (WebCore::ImageLayerChromium::createTextureUpdater):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerPainterChromium.h: Added.
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::updateRootLayerContents):
        (WebCore::LayerRendererChromium::drawRootLayer):
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        (WebCore::LayerRendererChromium::updateLayers):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/LayerTextureSubImage.cpp: Added.
        (WebCore::LayerTextureSubImage::LayerTextureSubImage):
        (WebCore::LayerTextureSubImage::~LayerTextureSubImage):
        (WebCore::LayerTextureSubImage::setSubImageSize):
        (WebCore::LayerTextureSubImage::upload):
        (WebCore::LayerTextureSubImage::uploadWithTexSubImage):
        (WebCore::LayerTextureSubImage::uploadWithMapTexSubImage):
        * platform/graphics/chromium/LayerTextureSubImage.h: Copied from Source/WebCore/platform/chromium/TraceEvent.h.
        * platform/graphics/chromium/LayerTextureUpdater.h: Copied from Source/WebCore/platform/chromium/TraceEvent.h.
        (WebCore::LayerTextureUpdater::LayerTextureUpdater):
        (WebCore::LayerTextureUpdater::~LayerTextureUpdater):
        (WebCore::LayerTextureUpdater::context):
        * platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp: Added.
        (WebCore::LayerTextureUpdaterCanvas::LayerTextureUpdaterCanvas):
        (WebCore::LayerTextureUpdaterCanvas::paintContents):
        (WebCore::LayerTextureUpdaterBitmap::LayerTextureUpdaterBitmap):
        (WebCore::LayerTextureUpdaterBitmap::prepareToUpdate):
        (WebCore::LayerTextureUpdaterBitmap::updateTextureRect):
        * platform/graphics/chromium/LayerTextureUpdaterCanvas.h: Added.
        (WebCore::LayerTextureUpdaterCanvas::~LayerTextureUpdaterCanvas):
        (WebCore::LayerTextureUpdaterCanvas::contentRect):
        (WebCore::LayerTextureUpdaterBitmap::~LayerTextureUpdaterBitmap):
        (WebCore::LayerTextureUpdaterBitmap::orientation):
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::create):
        (WebCore::LayerTilerChromium::LayerTilerChromium):
        (WebCore::LayerTilerChromium::setTileSize):
        (WebCore::LayerTilerChromium::prepareToUpdate):
        (WebCore::LayerTilerChromium::updateRect):
        (WebCore::LayerTilerChromium::draw):
        * platform/graphics/chromium/LayerTilerChromium.h:
        (WebCore::LayerTilerChromium::Tile::Tile):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::draw):

2011-05-18  Mark Pilgrim  <pilgrim@chromium.org>

        Reviewed by Tony Chang.

        IndexedDB put() should fail adding to object store that uses
        out-of-line keys and has no key generator and the key parameter
        was not provided
        https://bugs.webkit.org/show_bug.cgi?id=58609

        Out-of-line keys means that objectStore->m_keyPath is null in ::put(),
        no key generator means that objectStore->autoIncrement() is false, and
        key parameter was not provided means that prpKey will be a null pointer.
        The combination of these 3 should throw a DATA_ERR.

        Test: storage/indexeddb/mozilla/key-requirements-put-no-key.html

        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):

2011-05-18  Chris Rogers  <crogers@google.com>

        Reviewed by James Robinson.

        EqualPowerPanner is not using the correct azimuth range for stereo panning
        https://bugs.webkit.org/show_bug.cgi?id=61085

        No new tests since audio API is not yet implemented.

        * platform/audio/EqualPowerPanner.cpp:
        (WebCore::EqualPowerPanner::pan):

2011-05-18  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Enterkey to go to Newline does not work in the text area(in HTML form)
        https://bugs.webkit.org/show_bug.cgi?id=33179

        Fill the missing key text for the EnterKey event.

        Tests: fast/events/onsearch-enter.html

        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::keyTextForKeyEvent):

2011-05-17  Timothy Hatcher  <timothy@apple.com>

        Update the the context menu to reflect the system search provider on Mac.

        <rdar://problem/9198419>

        Reviewed by Sam Weinig.

        * English.lproj/Localizable.strings: Updated.
        * Source/WebCore/WebCore.exp.in: Added _wkCopyDefaultSearchProviderDisplayName.
        * platform/DefaultLocalizationStrategy.cpp:
        (WebCore::DefaultLocalizationStrategy::contextMenuItemTagSearchWeb): Use wkCopyDefaultSearchProviderDisplayName to
        create the string.
        * platform/mac/WebCoreSystemInterface.h: Added wkCopyDefaultSearchProviderDisplayName.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2011-05-18  Rob Buis  <rbuis@rim.com>

        Reviewed by Nikolas Zimmermann.

        Marker test from ietestcenter fails
        https://bugs.webkit.org/show_bug.cgi?id=60721

        Change <marker> renderer creation behaviour to always create the renderer. This fixes
        the problem that no marker is rendered when display=none is set on the <marker>. The
        specification states that display=none should have no influence on <marker> usage:
        "The ‘display’ property does not apply to the ‘marker’ element; thus, ..., and ‘marker’
        elements are available for referencing even when the ‘display’ property on the ‘marker’
        element or any of its ancestors is set to none."

        Tests: svg/W3C-SVG-1.1-SE/painting-marker-07-f.svg
               svg/custom/painting-marker-07-f-inherit.svg

        * svg/SVGMarkerElement.h:
        (WebCore::SVGMarkerElement::rendererIsNeeded):

2011-05-18  Alexis Menard  <alexis.menard@openbossa.org>, Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Eric Carlson.

        MediaElements fails to load the data in some cases.
        https://bugs.webkit.org/show_bug.cgi?id=60760

        WebKitWebSourceGStreamer is the interface between WebKit and GStreamer
        that uses the ResourceHandle API to request data and pass it down. For
        our builds it is absolutely essential that we have a NetworkingContext
        available there, in order to get access to the QNetworkAccessManager.
        No access means we basically cannot load the video. The WebSource gains
        access to the NetworkingContext through a WebCore::Frame pointer it has.

        MediaPlayerPrivateGStreamer is responsible for propagating a pointer of
        the WebCore::Frame to the WebKitWebSource in
        mediaPlayerPrivateSourceChangedCallback. In there we used the MediaPlayer's
        frameView() accessor to access the frame. However the frameView() member
        is only set through the render tree's RenderVideo, which is rather unreliable
        given that some sites create "fake" video tags initially that only become
        visible later (or never).

        A more reliable way is to simply use the document of the MediaPlayerClient,
        which is provided at constructor time.

        Test: http/tests/media/media-can-load-when-hidden.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::sourceChanged):

2011-05-18  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Check HUD texture reserve status before using texture
        https://bugs.webkit.org/show_bug.cgi?id=61082

        This only changes behavior behind a flag, so shouldn't impact any tests.

        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::draw):

2011-05-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        JSGlobalObject and some others do GC allocation during initialization, which can cause heap corruption
        https://bugs.webkit.org/show_bug.cgi?id=61090

        Rather than having Constructor objects create their structure
        as part of initialisation, we now pass their expected structure
        in as an argument.  This required fixing the few custom Constructors
        and the code generator.

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSAudioConstructor.h:
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::getDOMConstructor):
          Pass the Constructor objects structure in as an argument
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSImageConstructor.h:
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        * bindings/js/JSOptionConstructor.h:
        * bindings/scripts/CodeGeneratorJS.pm:

2011-05-18  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Beth Dakin.

        Remove removeChild on table caption since destroy call
        already does that.
        https://bugs.webkit.org/show_bug.cgi?id=61083

        Test: fast/table/table-captions-child-visible-crash.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::recalcCaption):

2011-05-18  Evan Martin  <evan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] make action_derivedsourcesallinone.py quiet
        https://bugs.webkit.org/show_bug.cgi?id=61081

        In gyp, it's the responsibility of the build system to print what actions are doing;
        for example, the compile command is generally silent, while the build system prints
        "compiling".

        Make this program behave like a compiler: silent on success.

        * WebCore.gyp/scripts/action_derivedsourcesallinone.py:
        delete a print statement.

2011-05-18  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/61078> Use toHTTPPipeliningPriority() in initializeMaximumHTTPConnectionCountPerHost()

        Reviewed by Joseph Pecoraro.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::initializeMaximumHTTPConnectionCountPerHost): Use
        toHTTPPipeliningPriority() to convert arguments passed to
        wkSetHTTPPipeliningMaximumPriority() and
        wkSetHTTPPipeliningMinimumFastLanePriority().

2011-05-18  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Ojan Vafai.

        event.clientX/clientY is 0/0 in a click generated through a label
        https://bugs.webkit.org/show_bug.cgi?id=56606

        This copies the coordinates from the underlying event to the simulated mouse event if the underlying event
        is a mouse event.

        This makes us match Firefox and IE.

        Test: fast/events/simulated-click-coords.html

        * dom/MouseEvent.cpp:
        (WebCore::SimulatedMouseEvent::SimulatedMouseEvent):

2011-05-18  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Sorted XCode project file.

        * WebCore.xcodeproj/project.pbxproj:

2011-05-18  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Non-color CSS property values can get a color-picker
        https://bugs.webkit.org/show_bug.cgi?id=61056

        * inspector/front-end/CSSKeywordCompletions.js:
        (WebInspector.CSSKeywordCompletions.forProperty):
        (WebInspector.CSSKeywordCompletions.isColorAwareProperty):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle):

2011-05-18  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Dan Bernstein.

        Don't use DEFINE_STATIC_LOCAL with an unsigned
        https://bugs.webkit.org/show_bug.cgi?id=61026

        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::syncFileSystemAndTrackerDatabase): DEFINE_STATIC_LOCAL is meant
        for objects, not unsigned ints. We can just use static here.

2011-05-18  Rob Buis  <rbuis@rim.com>

        Reviewed by Nikolas Zimmermann.

        NULL deref when SVG elements have table styles 
        https://bugs.webkit.org/show_bug.cgi?id=45561

        Restrict computed CSS values for SVG display property to block, inline or none.

        Tests: svg/custom/display-table-caption-foreignObject.svg
               svg/custom/display-table-caption-inherit-foreignObject.xhtml
               svg/custom/display-table-caption-inherit-text.xhtml
               svg/custom/display-table-caption-text.svg

        * css/CSSStyleSelector.cpp:
        (WebCore::SVGDisplayPropertyGuard::SVGDisplayPropertyGuard):
        (WebCore::SVGDisplayPropertyGuard::~SVGDisplayPropertyGuard):
        (WebCore::isAcceptableForSVGElement):
        (WebCore::CSSStyleSelector::applyProperty):

2011-05-18  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [REGRESSION] Completion while on a breakpoint is not working.
        https://bugs.webkit.org/show_bug.cgi?id=60811

        Test: inspector/debugger/debugger-completions-on-call-frame.html

        * inspector/InjectedScriptSource.js:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions.else.evaluated):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.PresenationCallFrame.prototype.get variables):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.selectedCallFrameVariables):

2011-05-18  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Rob Buis.

        All animated SVG enum properties are now ints
        https://bugs.webkit.org/show_bug.cgi?id=10749

        DECLARE/DEFINE_ANIMATED_ENUMERATION created fooBaseVal()/setFooBaseVal() methods that take int parameters, and stored all enum types as integers.
        Modify the SVG DOM API to store real enums, and get rid of any int<->enum conversions. It's now impossible to change any enum values to undefined
        types, which is the root of several filter security bugs in the past, that were fixed by adding workarounds.
        (Usual workaround: svgAttributeChanged(): if fooAttr has been changed from SVG DOM, and if it's an enum, check whether the enum is in range, or fix it up.)

        Using a type-safe internal representation for these enum values we can get rid of ugly int<->enum conversions.
        A lot of parseMappedAttribute() functions duplicated the code for parsing enum values (eg. userSpaceOnUse/objectBoundingBox unit values, in pattern/filter/mask/etc..)
        Add dozens of new SVGPropertyTraits<EnumType> specializations for all enums we expose to JS, and offer static fromString/toString conversion methods in single places.
        Use the new SVGPropertyTraits everywhere in svg/.

        This also fixes SVG DOM <-> XML DOM synchronization for SVGAnimatedEnumeration types.
        Example: <clipPath clipPathUnits="objectBoundingBox">
        myClipPath.clipPathUnits.baseVal = SVGUnitTypes.SVG_UNIT_TYPE_USERSPACEONUSE;
        alert(myClipPath.getAttribute('clipPathUnits')); <- without this patch it says "1", now it says "userSpaceOnUse" as expected, and as other browsers do.
        We're now properly converting the enum values to strings.

        Add testcases for all SVGAnimatedEnumeration objects used in the SVG DOM API. Found several small bugs:
        - SVGFEConvolveMatrix 'edgeMode' SVG DOM <-> XML DOM synchronization was not working, because of a typo: s/operatorAttr/edgeModeAttr
        - SVGFEConvolveMatrix was missing an synchronizeProperty() implementation, disabling SVG <-> XML DOM synchronization completly.

        Tests: svg/dom/SVGAnimatedEnumeration-SVGClipPathElement.html
               svg/dom/SVGAnimatedEnumeration-SVGComponentTransferFunctionElement.html
               svg/dom/SVGAnimatedEnumeration-SVGFEBlendElement.html
               svg/dom/SVGAnimatedEnumeration-SVGFEColorMatrixElement.html
               svg/dom/SVGAnimatedEnumeration-SVGFECompositeElement.html
               svg/dom/SVGAnimatedEnumeration-SVGFEConvolveMatrixElement.html
               svg/dom/SVGAnimatedEnumeration-SVGFEDisplacementMapElement.html
               svg/dom/SVGAnimatedEnumeration-SVGFEMorphologyElement.html
               svg/dom/SVGAnimatedEnumeration-SVGFETurbulenceElement.html
               svg/dom/SVGAnimatedEnumeration-SVGFilterElement.html
               svg/dom/SVGAnimatedEnumeration-SVGGradientElement.html
               svg/dom/SVGAnimatedEnumeration-SVGMarkerElement.html
               svg/dom/SVGAnimatedEnumeration-SVGMaskElement.html
               svg/dom/SVGAnimatedEnumeration-SVGPatternElement.html
               svg/dom/SVGAnimatedEnumeration-SVGTextContentElement.html
               svg/dom/SVGAnimatedEnumeration-SVGTextPathElement.html

        Fixes existing svg/dynamic-update/SVGTextContentElement-svgdom-lengthAdjust-prop.html where I found the bug initially.

        * GNUmakefile.list.am: Add svg/properties/SVGAnimatedEnumerationPropertyTearOff.h to build.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/scripts/CodeGeneratorV8.pm: Add V8 magic, to avoid ambigious conversion warning in toV8(PassRefPtr<SVGAnimatedEnumeration>).
        * platform/graphics/GraphicsTypes.h: Cleanup GradientSpreadMethod, as the SVG dependency is gone.
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::apply): Turn early-returns (introduce in security patches a while ago) into ASSERTs, as the underlying bug has been fixed.
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::apply): Ditto.
        * rendering/svg/RenderSVGResourceClipper.h: Remove toUnitType() usage, the clipPathUnits() provided by SVGClipPathElement have the correct enum type now.
        (WebCore::RenderSVGResourceClipper::clipPathUnits):
        * rendering/svg/RenderSVGResourceFilter.h: Remove toUnitType() usage, the filterUnits()/primitiveUnits() provided by SVGFilterElement have the correct enum type now.
        (WebCore::RenderSVGResourceFilter::filterUnits):
        (WebCore::RenderSVGResourceFilter::primitiveUnits):
        * rendering/svg/RenderSVGResourceGradient.cpp: Add helper method platformSpreadMethodFromSVGType() converting from SVGGradientElement::SVGSpreadMethodType to GradientSpreadMethod (platform).
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceGradient.h: Ditto.
        * rendering/svg/RenderSVGResourceLinearGradient.cpp:
        (WebCore::RenderSVGResourceLinearGradient::buildGradient): Use platformSpreadMethodFromSVGType().
        * rendering/svg/RenderSVGResourceMarker.h: Remove toUnitType() usage, the markerUnits() provided by SVGMarkerElement have the correct enum type now.
        (WebCore::RenderSVGResourceMarker::markerUnits):
        * rendering/svg/RenderSVGResourceMasker.h: Remove toUnitType() usage, the maskUnits()/maskContentUnits() provided by SVGMaskElement have the correct enum type now.
        (WebCore::RenderSVGResourceMasker::maskUnits):
        (WebCore::RenderSVGResourceMasker::maskContentUnits):
        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
        (WebCore::RenderSVGResourceRadialGradient::buildGradient): Use platformSpreadMethodFromSVGType().
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<): Use SVGPropertyTraits<SomeSVGEnumType>::toString() to convert from enum to string, remove code duplication.
        (WebCore::writeCommonGradientProperties):
        * rendering/svg/SVGTextChunkBuilder.cpp:
        (WebCore::SVGTextChunkBuilder::addTextChunk): Remove int->enum casting for SVGAnimatedEnumeration types, they are enums now.
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::parentDefinesTextLength): Ditto.
        (WebCore::SVGTextLayoutEngine::beginTextPathLayout): Ditto.
        * svg/GradientAttributes.h: Change spread method type from platform GradientSpreadMethod to SVGSpreadMethodType.
        (WebCore::GradientAttributes::GradientAttributes):
        (WebCore::GradientAttributes::spreadMethod):
        (WebCore::GradientAttributes::setSpreadMethod):
        * svg/SVGAnimatedBoolean.idl: Enable potential exception raising on baseVal setting for the primitive types.
        * svg/SVGAnimatedEnumeration.h: Switch from generic SVGAnimatedStaticPropertyTearOff<int> to new SVGAnimatedEnumerationPropertyTearOff<EnumType>.
        * svg/SVGAnimatedEnumeration.idl: Enable potential exception raising on baseVal setting for the primitive types.
                                          Only SVGAnimatedEnumeration makes use of this if the assigned value is out of range.
        * svg/SVGAnimatedInteger.idl: Ditto.
        * svg/SVGAnimatedNumber.idl: Ditto.
        * svg/SVGAnimatedString.idl: Ditto.
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::parseMappedAttribute): Convert attribute parsing to use SVGPropertyTraits<EnumType>::fromString(attr->value()).
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement): Initialize type to identity, not unknown, as per spec.
        (WebCore::SVGComponentTransferFunctionElement::parseMappedAttribute): Convert attribute parsing to use SVGPropertyTraits<EnumType>::fromString(attr->value()).
        (WebCore::SVGComponentTransferFunctionElement::transferFunction): Remove int->enum casting for SVGAnimatedEnumeration types, they are enums now.
        * svg/SVGComponentTransferFunctionElement.h: Remove svgAttributeChanged() method, that verified the enum value is not out of range.
                                                     It's not possible anymore for these values to go out of range.
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::parseMappedAttribute): Convert attribute parsing to use SVGPropertyTraits<BlendModeType>::fromString(attr->value()).
        (WebCore::SVGFEBlendElement::setFilterEffectAttribute): Remove int->enum casting for SVGAnimatedEnumeration types, they are enums now.
        (WebCore::SVGFEBlendElement::build): Ditto.
        * svg/SVGFEBlendElement.h: Add SVGPropertyTraits<BlendModeType> specializations.
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::parseMappedAttribute): Convert attribute parsing to use SVGPropertyTraits<ColorMatrixType>::fromString(attr->value()).
        (WebCore::SVGFEColorMatrixElement::setFilterEffectAttribute): Remove int->enum casting for SVGAnimatedEnumeration types, they are enums now..
        (WebCore::SVGFEColorMatrixElement::build): Ditto.
        * svg/SVGFEColorMatrixElement.h: Add SVGPropertyTraits<ColorMatrixType> specializations.
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::parseMappedAttribute): Convert attribute parsing to use SVGPropertyTraits<CompositeOperationType>::fromString(attr->value()).
        (WebCore::SVGFECompositeElement::setFilterEffectAttribute): Remove int->enum casting for SVGAnimatedEnumeration types, they are enums now.
        (WebCore::SVGFECompositeElement::build): Ditto.
        * svg/SVGFECompositeElement.h: Add SVGPropertyTraits<CompositeOperationType> specializations.
        * svg/SVGFEConvolveMatrixElement.cpp: Fix typo, edgeMode needs to be associated with SVGNames::edgeModeAttr, not SVGNames::operatorAttr.
        (WebCore::SVGFEConvolveMatrixElement::parseMappedAttribute): Convert attribute parsing to use SVGPropertyTraits<EdgeModeType>::fromString(attr->value()).
        (WebCore::SVGFEConvolveMatrixElement::setFilterEffectAttribute): Remove int->enum casting for SVGAnimatedEnumeration types, they are enums now.
        (WebCore::SVGFEConvolveMatrixElement::synchronizeProperty): Add missing synchronizeProperty() implementation, otherwhise SVG DOM <-> XML DOM is not in sync.
        (WebCore::SVGFEConvolveMatrixElement::build): Remove int->enum casting for SVGAnimatedEnumeration types, they are enums now.
        * svg/SVGFEConvolveMatrixElement.h: Add SVGPropertyTraits<EdgeModeType> specializations.
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::parseMappedAttribute): Convert attribute parsing to use SVGPropertyTraits<ChannelSelectorType>::fromString(attr->value()).
        (WebCore::SVGFEDisplacementMapElement::setFilterEffectAttribute): Remove int->enum casting for SVGAnimatedEnumeration types, they are enums now.
        (WebCore::SVGFEDisplacementMapElement::svgAttributeChanged): Remove range validation for enum types, they are always in range now.
        (WebCore::SVGFEDisplacementMapElement::build): Remove int->enum casting for SVGAnimatedEnumeration types, they are enums now.
        * svg/SVGFEDisplacementMapElement.h: Add SVGPropertyTraits<ChannelSelectorType> specializations.
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::parseMappedAttribute): Convert attribute parsing to use SVGPropertyTraits<MorphologyOperatorType>::fromString(attr->value()).
        (WebCore::SVGFEMorphologyElement::setFilterEffectAttribute): Remove int->enum casting for SVGAnimatedEnumeration types, they are enums now.
        (WebCore::SVGFEMorphologyElement::build): Ditto.
        * svg/SVGFEMorphologyElement.h: Add SVGPropertyTraits<MorphologyOperatorType> specializations.
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::parseMappedAttribute): Convert attribute parsing to use SVGPropertyTraits<SVGStitchOptions/TurbulenceType>::fromString(attr->value()).
        (WebCore::SVGFETurbulenceElement::setFilterEffectAttribute): Remove int->enum casting for SVGAnimatedEnumeration types, they are enums now.
        (WebCore::SVGFETurbulenceElement::build): Ditto.
        * svg/SVGFETurbulenceElement.h: Add SVGPropertyTraits<SVGStitchOptions/TurbulenceType> specializations.
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::parseMappedAttribute): Convert attribute parsing to use SVGPropertyTraits<SVGUnitType>::fromString(attr->value()).
        * svg/SVGFilterElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement): Missing spread method default initialization: set it to 'pad' as per spec.
        (WebCore::SVGGradientElement::parseMappedAttribute): Convert attribute parsing to use SVGPropertyTraits<SVGUnitType/SVGSpreadMethodType>::fromString(attr->value()).
        * svg/SVGGradientElement.h: Add SVGPropertyTraits<SVGSpreadMethodType> specializations.
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::collectGradientAttributes): Remove int->enum casting for SVGAnimatedEnumeration types, they are enums now.
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::parseMappedAttribute): Convert attribute parsing to use SVGPropertyTraits<EnumType>::fromString(attr->value()).
        (WebCore::SVGMarkerElement::synchronizeOrientType): Add a custom synchronization method, that handles orientType/orientAngle -> orientAttr synchronization, which is special
                                                            as it depends on to other SVG DOM objects (SVGAnimatedAngle and SVGAnimatedEnumeration). All covered by new tests.
        (WebCore::SVGMarkerElement::orientTypeAnimated): Custom tear off creation method, which would usually be generated by the DECLARE_ANIMATED_... macros.
        * svg/SVGMarkerElement.h: Add SVGPropertyTraits<SVGMarkerUnitsType/SVGMarkerOrientType> specializations.
        (WebCore::SVGMarkerElement::orientType): Add custom property handling for the 'orientType' SVGAnimatedEnumeration object, as it has special demands, based on 'orientAngle'.
        (WebCore::SVGMarkerElement::orientTypeBaseValue): Ditto.
        (WebCore::SVGMarkerElement::setOrientTypeBaseValue): Ditto.
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::parseMappedAttribute): Convert attribute parsing to use SVGPropertyTraits<EnumType>::fromString(attr->value()).
        * svg/SVGMaskElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::parseMappedAttribute): Convert attribute parsing to use SVGPropertyTraits<EnumType>::fromString(attr->value()).
        * svg/SVGPatternElement.h:
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::collectGradientAttributes): Remove int->enum casting for SVGAnimatedEnumeration types, they are enums now.
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::parseMappedAttribute): Convert attribute parsing to use SVGPropertyTraits<SVGLengthAdjustType>::fromString(attr->value()).
        * svg/SVGTextContentElement.h: Add SVGPropertyTraits<SVGLengthAdjustType> specializations.
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::parseMappedAttribute): Convert attribute parsing to use SVGPropertyTraits<SVGTextPathMethodType/SVGTextPathSpacingType>::fromString(attr->value()).
        * svg/SVGTextPathElement.h: Add SVGPropertyTraits<SVGTextPathMethodType/SVGTextPathSpacingType> specializations.
        * svg/SVGUnitTypes.h: Add SVGPropertyTraits<SVGUnitType> specializations.
        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h: Added. SVGAnimatedEnumerationPropertyTearOff inherits from SVGAnimatedStaticPropertyTearOff<int>.
                                                                  SVGAnimatedEnumeration remains a typedef to SVGAnimatedStaticPropertyTearOff<int>, to have a common base
                                                                  class for all enum types. This special tear off object, overrides setBaseVal, to verify the incoming int
                                                                  is within the enum range, otherwhise raise an SVG DOM exception. This makes it impossible to make any of
                                                                  the enums go out of range anymore (which lead to security bugs in the past).
        (WebCore::SVGAnimatedEnumerationPropertyTearOff::setBaseVal):
        (WebCore::SVGAnimatedEnumerationPropertyTearOff::create):
        (WebCore::SVGAnimatedEnumerationPropertyTearOff::SVGAnimatedEnumerationPropertyTearOff):
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h:
        (WebCore::SVGAnimatedStaticPropertyTearOff::setBaseVal): Made this method virtual, to SVGAnimatedEnumerationPropertyTearOff can override the default behaviour. Also added an ExceptionCode param.
        (WebCore::SVGAnimatedStaticPropertyTearOff::~SVGAnimatedStaticPropertyTearOff):

2011-05-18  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        Expose webkitStorageInfo.requestQuota() for Quota API if QUOTA flag is enabled
        https://bugs.webkit.org/show_bug.cgi?id=59681

        Test: storage/storageinfo-request-quota.html

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/StorageInfo.idl: Added requestQuota().
        * storage/StorageInfoQuotaCallback.idl: Added.

2011-05-18  Renata Hodovan  <reni@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Apply the ParallelJobs support to FEGaussianBlur
        https://bugs.webkit.org/show_bug.cgi?id=61049

        The Gaussian blur filter of SVG can consume lots of resources if it is
        applied to a large area. The computation can be distributed to multiple
        cores if the architecture supports.
        The average performance progression is about 15% on dual-core machines.

        Developed in cooperation with Gabor Loki and Zoltan Herczeg.


        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplyWorker):
        (WebCore::FEGaussianBlur::platformApply):
        * platform/graphics/filters/FEGaussianBlur.h:

2011-05-18  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make parentId for frame optional.
        https://bugs.webkit.org/show_bug.cgi?id=61032

        * inspector/Inspector.json:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._addFrame):

2011-05-18  Gabor Loki  <loki@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Apply the ParallelJobs support to FELighting
        https://bugs.webkit.org/show_bug.cgi?id=61048

        The lighting filter of SVG can consume lots of resources if it is
        applied to a large area. The computation can be distributed to multiple
        cores if the architecture supports.
        The average performance progression is 10-20% on dual-core machines.

        Developed in cooperation with Zoltan Herczeg.

        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApplyGenericPaint):
        (WebCore::FELighting::platformApplyGenericWorker):
        (WebCore::FELighting::platformApplyGeneric):
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/arm/FELightingNEON.cpp:
        (WebCore::FELighting::platformApplyNeonWorker):
        * platform/graphics/filters/arm/FELightingNEON.h:
        (WebCore::FELighting::platformApplyNeon):

2011-05-18  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Fix tst_QWebFrame::getSetStaticProperty() autotest
        https://bugs.webkit.org/show_bug.cgi?id=60984

        The code for converting objects to QVariantMap was causing exception,
        that was "leaking" to the next evaluation. One situation was reading
        the property 'localStorage' when we do not have a proper security
        origin, which throws a SECURITY_ERR.

        Now, we will simply not include on the QVariantMap those properties,
        and make sure that we clean the exception if necessary.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariantMap):
        Extracted function that performs conversion from JSObject to a QVariantMap. This
        functions makes sure that exception is clean after its execution.

        (JSC::Bindings::convertValueToQVariant):
        Use the previous function. Add a comment explaining the choice of distance value.

2011-05-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: scripts panel file selector element doesn't track keyboard events 
        https://bugs.webkit.org/show_bug.cgi?id=61047

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

2011-05-16  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactoring: ScriptDebugListener::didParseSource has too many parameters.
        https://bugs.webkit.org/show_bug.cgi?id=60900

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::getScriptSource):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/ScriptDebugListener.h:
        (WebCore::ScriptDebugListener::Script::Script):

2011-05-18  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: model-based CSS editing does not update @import-ed stylesheet resources
        https://bugs.webkit.org/show_bug.cgi?id=60966

        Imported stylesheets didn't use to be returned by InspectorCSSAgent.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        (WebCore::InspectorCSSAgent::collectStyleSheets):
        * inspector/InspectorCSSAgent.h:

2011-05-18  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make "Id" suffixes use consistent case.
        https://bugs.webkit.org/show_bug.cgi?id=61028

        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.json:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::parseLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::editScriptSource):
        (WebCore::InspectorDebuggerAgent::getScriptSource):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceResponse):
        * inspector/ScriptDebugListener.h:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.scriptForSourceID):
        (WebInspector.DebuggerModel.prototype.queryScripts):
        (WebInspector.DebuggerModel.prototype.editScriptSource):
        (WebInspector.DebuggerModel.prototype._didEditScriptSource):
        (WebInspector.DebuggerModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerDispatcher.prototype.scriptParsed):
        (WebInspector.DebuggerDispatcher.prototype.breakpointResolved):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource.didReceiveSource):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._setBreakpointInDebugger.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype._setBreakpointInDebugger):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerPaused):
        (WebInspector.DebuggerPresentationModel.prototype._sourceFileForScript):
        (WebInspector.DebuggerPresentationModel.prototype._scriptForSourceFileId):
        (WebInspector.DebuggerPresentationModel.prototype._createSourceFileId):
        (WebInspector.PresenationCallFrame):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithResponse):
        * inspector/front-end/Script.js:
        (WebInspector.Script):
        (WebInspector.Script.prototype.requestSource):
        (WebInspector.Script.prototype.editSource):
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile.prototype.forceLoadContent):
        (WebInspector.SourceFile.prototype._concatenateScriptsContent):
        (WebInspector.SourceMapping.prototype._sourceLocationToScriptLocation):
        (WebInspector):

2011-05-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86747.
        http://trac.webkit.org/changeset/86747
        https://bugs.webkit.org/show_bug.cgi?id=61039

        Breaks JSC debugger tests. (Requested by pfeldman on #webkit).

        * inspector/InjectedScriptSource.js:
        ():
        * inspector/Inspector.json:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::parseLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::editScriptSource):
        (WebCore::InspectorDebuggerAgent::getScriptSource):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceResponse):
        * inspector/ScriptDebugListener.h:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.scriptForSourceID):
        (WebInspector.DebuggerModel.prototype.queryScripts):
        (WebInspector.DebuggerModel.prototype.editScriptSource):
        (WebInspector.DebuggerModel.prototype._didEditScriptSource):
        (WebInspector.DebuggerModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerDispatcher.prototype.scriptParsed):
        (WebInspector.DebuggerDispatcher.prototype.breakpointResolved):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource.didReceiveSource):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._setBreakpointInDebugger.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype._setBreakpointInDebugger):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerPaused):
        (WebInspector.DebuggerPresentationModel.prototype._sourceFileForScript):
        (WebInspector.DebuggerPresentationModel.prototype._scriptForSourceFileId):
        (WebInspector.DebuggerPresentationModel.prototype._createSourceFileId):
        (WebInspector.PresenationCallFrame):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithResponse):
        * inspector/front-end/Script.js:
        (WebInspector.Script):
        (WebInspector.Script.prototype.requestSource):
        (WebInspector.Script.prototype.editSource):
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile.prototype.forceLoadContent):
        (WebInspector.SourceFile.prototype._concatenateScriptsContent):
        (WebInspector.SourceMapping.prototype._sourceLocationToScriptLocation):
        (WebInspector):

2011-05-18  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dirk Schulze.

        When SMIL element is getting removed, make sure to remove it
        from target's animation elements list.
        https://bugs.webkit.org/show_bug.cgi?id=60980

        Test: svg/animations/smil-element-not-removed-crash.html

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::~SVGSMILElement):

2011-05-18  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make "Id" suffixes use consistent case.
        https://bugs.webkit.org/show_bug.cgi?id=61028

        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.json:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::parseLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::editScriptSource):
        (WebCore::InspectorDebuggerAgent::getScriptSource):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceResponse):
        * inspector/ScriptDebugListener.h:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.scriptForSourceID):
        (WebInspector.DebuggerModel.prototype.queryScripts):
        (WebInspector.DebuggerModel.prototype.editScriptSource):
        (WebInspector.DebuggerModel.prototype._didEditScriptSource):
        (WebInspector.DebuggerModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerDispatcher.prototype.scriptParsed):
        (WebInspector.DebuggerDispatcher.prototype.breakpointResolved):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource.didReceiveSource):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._setBreakpointInDebugger.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype._setBreakpointInDebugger):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerPaused):
        (WebInspector.DebuggerPresentationModel.prototype._sourceFileForScript):
        (WebInspector.DebuggerPresentationModel.prototype._scriptForSourceFileId):
        (WebInspector.DebuggerPresentationModel.prototype._createSourceFileId):
        (WebInspector.PresenationCallFrame):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithResponse):
        * inspector/front-end/Script.js:
        (WebInspector.Script):
        (WebInspector.Script.prototype.requestSource):
        (WebInspector.Script.prototype.editSource):
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile.prototype.forceLoadContent):
        (WebInspector.SourceFile.prototype._concatenateScriptsContent):
        (WebInspector.SourceMapping.prototype._sourceLocationToScriptLocation):
        (WebInspector):

2011-05-18  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: do not reveal line -1 when navigating to anchor without line specified.
        https://bugs.webkit.org/show_bug.cgi?id=60971

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.showAnchorLocation):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.showAnchorLocation.):
        (WebInspector.ScriptsPanel.prototype.showAnchorLocation):
        * inspector/front-end/inspector.js:
        (WebInspector._showAnchorLocation):

2011-05-18  Kent Tamura  <tkent@chromium.org>

        Reviewed by Hajime Morita.

        valueMissing validity for <select> is lame when selecting a value by a key operation
        https://bugs.webkit.org/show_bug.cgi?id=61021

        We missed updating validity in case that SelectElement::defaultEventHandler
        update selections.  So, SelectElement::setSelectedIndex() updates validity.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::setSelectedIndex): Call SelectElement::updateValidity().
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndex):
          Remove unnecessary setNeedsValidityCheck() call.
          SelectElement::setSlectedIndex() calls it.
        (WebCore::HTMLSelectElement::setSelectedIndexByUser): ditto.

2011-05-17  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Enable detailed heap snapshots by default.
        https://bugs.webkit.org/show_bug.cgi?id=60286

        * inspector/front-end/ProfilesPanel.js:

2011-05-17  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Make retaining paths list of the Detailed
        heap snapshots view resizable.
        https://bugs.webkit.org/show_bug.cgi?id=60960

        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype.resize):
        (WebInspector.DetailedHeapshotView.prototype._startRetainersHeaderDragging):
        (WebInspector.DetailedHeapshotView.prototype._retainersHeaderDragging):
        (WebInspector.DetailedHeapshotView.prototype._endRetainersHeaderDragging):
        (WebInspector.DetailedHeapshotView.prototype._updateRetainmentViewHeight):
        * inspector/front-end/heapProfiler.css:

2011-05-16  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Disable keyboard input (with exceptions) in full-screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=60943

        Tests: fullscreen/full-screen-keyboard-disabled.html
               fullscreen/full-screen-keyboard-enabled.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::isKeyEventAllowedInFullScreen): Added.  Implements the 
            list of allowed keyboard events in the proposed API.
        (WebCore::EventHandler::keyEvent): Discard events which are not allowed in
            full-screen mode.
        * page/EventHandler.h:

2011-05-17  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Refactor TextRun creation
        https://bugs.webkit.org/show_bug.cgi?id=60255

        Add constructTextRun() methods to RenderBlock/InlineTextBox and use it in various places in rendering/.
        The long-term goal is to remove the ugly eight parameters catch-it-all TextRun constructor, and
        replace it with explicit setters/getters. To avoid expanding dozens of callsites, when removing
        the catch-it-all constructor, these helper functions are introduced, which hide the details of
        creating a TextRun.

        Furthermore it will be used to remove the platform layering violation, that TextRun stores
        RenderObject pointers for the sake of SVG Fonts support, see bug 60254.

        No change in functionaliy, no new tests.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::selectionRect):
        (WebCore::EllipsisBox::paintSelection):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        (WebCore::InlineTextBox::constructTextRun):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRunAllowTrailingExpansion):
        * rendering/RenderBlock.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::getReplacementTextGeometry):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        (WebCore::RenderFileUploadControl::computePreferredLogicalWidths):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::setImageSizeForAltText):
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::getAvgCharWidth):

2011-05-17  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Removing a full-screen element or ancestor from the DOM should trigger exiting full-screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=60997

        Tests: fullscreen/full-screen-remove-ancestor.html
               fullscreen/full-screen-remove-children.html
               fullscreen/full-screen-remove.html

        * dom/Document.cpp:
        (WebCore::Document::fullScreenChangeDelayTimerFired): If the target node was removed from the document
            make sure to message the documentElement() as well.
        (WebCore::Document::fullScreenElementRemoved): Cancel full screen mode.

2011-05-17  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        WebSocket: Add CLOSING state
        https://bugs.webkit.org/show_bug.cgi?id=60878

        No new tests are added because there is no change in functionality.

        * platform/network/SocketStreamHandleBase.h:
        * websockets/WebSocket.h:
        * websockets/WebSocket.idl:

2011-05-16  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        [Refactoring] ShadowContentElement should be part of dom/
        https://bugs.webkit.org/show_bug.cgi?id=59117

        - Moved html/shadow/ShadowContentElement.h to dom/ShadowContentElement.h
        - Pulled ShadowContentElement up to a subclass of StyledElement, from HTMLDivElement
        - Added ShadowContentElement.cpp
        - Extracted ShadowContentSelector.{cpp,h} from ShadowRoot.{cpp,h}
        
        No new tests, no behavior change.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp: Added new ShadowContentSelector.cpp and ShadowContentElement.cpp.
        * dom/Node.h: 
        (WebCore::Node::forceReattach): Moved from static local function to share between classes.
        * dom/ShadowContentElement.cpp: Copied from Source/WebCore/html/shadow/ShadowContentElement.h.
        (WebCore::ShadowContentElement::attach):
        * dom/ShadowContentElement.h: Copied from Source/WebCore/html/shadow/ShadowContentElement.h.
        (WebCore::ShadowContentElement::ShadowContentElement):
        (WebCore::ShadowContentElement::isShadowBoundary):
        (WebCore::ShadowContentElement::rendererIsNeeded):
        (WebCore::ShadowContentElement::createRenderer):
        * dom/ShadowContentSelector.cpp: Copied from Source/WebCore/html/shadow/ShadowContentElement.h.
        (WebCore::ShadowContentSelector::ShadowContentSelector):
        (WebCore::ShadowContentSelector::~ShadowContentSelector):
        (WebCore::ShadowContentSelector::attachChildrenFor):
        * dom/ShadowContentSelector.h: Renamed from Source/WebCore/html/shadow/ShadowContentElement.h.
        (WebCore::ShadowContentSelector::shadowRoot):
        (WebCore::ShadowContentSelector::activeElement):
        (WebCore::ShadowContentSelector::currentInstance):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::recalcStyle):
        * html/HTMLDetailsElement.cpp:
        (WebCore::DetailsContentElement::DetailsContentElement):
        (WebCore::DetailsSummaryElement::DetailsSummaryElement):
        * html/HTMLSummaryElement.cpp:
        (WebCore::SummaryContentElement::SummaryContentElement):

2011-05-17  Cris Neckar  <cdn@chromium.org>

        Reviewed by Adam Barth.

        Clear the image from ImageLoader rather than clearing the ImageLoader in HTMLObjectElement::renderFallbackContent.
        https://bugs.webkit.org/show_bug.cgi?id=61005

        Test: http/tests/loading/nested_bad_objects.php

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderFallbackContent):

2011-05-17  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Make sure that AudioNode gets re-enabled after having been disconnected and re-connected.
        https://bugs.webkit.org/show_bug.cgi?id=60995

        No new tests since audio API is not yet implemented.

        * webaudio/AudioNode.cpp:
        (WebCore::AudioNode::ref):

2011-05-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9366728> and https://webkit.org/b/60796
        Crash when code inside a ResourceLoadDelegate method calls [WebView stopLoading:]

        Break up ResourceLoader::didCancel() into willCancel() and didCancel(), and making them pure virtual.
        This change has the following benefits:
          - Managing ResourceLoader state can be in the base class; Subclasses no longer need to protect
            themselves, check these variables as often, or ASSERT them.
          - ResourceLoader subclasses no longer have to call the base class ::didCancel
          - ResourceLoader::cancel becomes more capable of handling reentrancy with the design that the 
            cancellation is completed inside the last call.

        No new tests - No change in behavior for previous tests, and new test would require API usage outside
        the scope of DumpRenderTree.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::cancel): Moved from ResourceLoader::didCancel, and does all of that same work
          except it interposes calls to "willCancel" and "didCancel" as required to maintain the same behavior.
        * loader/ResourceLoader.h: Added pure virtual didCancel() and willCancel().

        Split-up into willCancel() and didCancel(), based on when the base class didCancel() used to be called:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willCancel):
        (WebCore::MainResourceLoader::didCancel):
        * loader/MainResourceLoader.h:

        Split-up into willCancel() and didCancel(), based on when the "reached terminal state" flag used to be checked:
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didReceiveResponse): Call the entry point cancel() instead of the old didCancel()
        (WebCore::NetscapePlugInStreamLoader::willCancel):
        (WebCore::NetscapePlugInStreamLoader::didCancel):
        * loader/NetscapePlugInStreamLoader.h:

        Split-up into willCancel() and didCancel(), based on when the "reached terminal state" flag used to be checked:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willCancel):
        (WebCore::SubresourceLoader::didCancel):
        * loader/SubresourceLoader.h:

2011-05-17  Nat Duca  <nduca@chromium.org>

        Reviewed by James Robinson.

        [chromium] Always set layerRenderer, even on non-drawn-layers
        https://bugs.webkit.org/show_bug.cgi?id=60977

        This is a defensive fixe for crbug.com/82799, in which
        a RenderLayer could not prepare itself because its owning layerImpl
        had no associated layerRenderer. The underlying issue is that we
        sometimes put renderSurfaces onto the list that won't actually render.
        For now, the priority is to reduce fragility so that invisible layers
        dont lead to crashers. We do this by being more agressive about 
        binding CCLayerImpls to the LayerRenderer, doing it all the time rather
        than only when we think it will get rendered.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::paintLayerContents):

2011-05-17  Anders Carlsson  <andersca@apple.com>

        Fix the clang build.

        * rendering/RenderText.h:
        (WebCore::RenderText::nodeAtPoint):
        nodeAtPoint should take a const IntPoint reference.

2011-05-17  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Ryosuke Niwa.

        document.activeElement doesn't point to the focused frame
        https://bugs.webkit.org/show_bug.cgi?id=49509

        This makes us match IE and Firefox and there is an ongoing WHATWG discussion to make the spec match this.

        Test: fast/dom/HTMLDocument/active-element-frames.html

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::activeElement): Walk up the frame tree from the focusedFrame to find the active frame if any.

2011-05-17  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Change nodeAtPoint to take IntPoint instead of int x, int y
        https://bugs.webkit.org/show_bug.cgi?id=60663

        Change nodeAtPoint to take a single const IntPoint& instead of a pair of
        ints for the location.

        Covered by existing tests.

        * platform/graphics/FloatPoint.h:
        (WebCore::flooredIntPoint):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/EllipsisBox.h:
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::nodeAtPoint):
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::nodeAtPoint):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestContents):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::nodeAtPoint):
        * rendering/RenderBox.h:
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::nodeAtPoint):
        * rendering/RenderFrameSet.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::nodeAtPoint):
        * rendering/RenderImage.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::nodeAtPoint):
        * rendering/RenderInline.h:
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::hitTest):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::nodeAtPoint):
        * rendering/RenderListBox.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::hitTest):
        (WebCore::RenderObject::nodeAtPoint):
        * rendering/RenderObject.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::nodeAtPoint):
        * rendering/RenderTable.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::nodeAtPoint):
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderTableSection.h:
        * rendering/RenderText.h:
        (WebCore::RenderText::nodeAtPoint):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::nodeAtPoint):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::nodeAtPoint):
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::nodeAtPoint):
        * rendering/RenderWidget.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::nodeAtPoint):
        * rendering/RootInlineBox.h:
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::nodeAtFloatPoint):
        (WebCore::RenderSVGForeignObject::nodeAtPoint):
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::nodeAtPoint):
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::nodeAtPoint):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::nodeAtFloatPoint):
        (WebCore::RenderSVGText::nodeAtPoint):
        * rendering/svg/RenderSVGText.h:

2011-05-17  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed, rolling out r86647.
        http://trac.webkit.org/changeset/86647
        https://bugs.webkit.org/show_bug.cgi?id=56814

        Broke tests downstream in Chromium

        * dom/DocumentMarker.h:
        (WebCore::DocumentMarker::operator==):
        (WebCore::DocumentMarker::operator!=):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::copyMarkers):
        (WebCore::DocumentMarkerController::removeMarkers):
        (WebCore::DocumentMarkerController::markerContainingPoint):
        (WebCore::DocumentMarkerController::markersInRange):
        (WebCore::DocumentMarkerController::renderedRectsForMarkers):
        (WebCore::DocumentMarkerController::removeMarkersFromList):
        (WebCore::DocumentMarkerController::repaintMarkers):
        (WebCore::DocumentMarkerController::shiftMarkers):
        (WebCore::DocumentMarkerController::setMarkersActive):
        (WebCore::DocumentMarkerController::hasMarkers):
        (WebCore::DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange):
        (WebCore::DocumentMarkerController::showMarkers):
        * dom/DocumentMarkerController.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::originalStringForAutocorrectionAtBeginningOfSelection):
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartHasMarkerFor):
        * editing/SpellingCorrectionController.cpp:
        (WebCore::SpellingCorrectionController::respondToChangedSelection):
        * editing/SpellingCorrectionController.h:
        (WebCore::SpellingCorrectionController::shouldStartTimerFor):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::spellingToolTip):
        (WebCore::HitTestResult::replacedString):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::paintDocumentMarkers):
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer):

2011-05-17  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed, rolling out r86656.
        http://trac.webkit.org/changeset/86656

        Broke tests downstream in Chromium

        * editing/SpellingCorrectionController.cpp:
        (WebCore::markersHaveIdenticalDescription):
        (WebCore::SpellingCorrectionController::recordSpellcheckerResponseForModifiedCorrection):
        (WebCore::SpellingCorrectionController::processMarkersOnTextToBeReplacedByResult):

2011-05-17  Yufeng Shen  <miletus@chromium.org>

        Reviewed by Darin Fisher.

        Make WebKit expose extra touch information
        https://bugs.webkit.org/show_bug.cgi?id=59030

        * dom/Document.cpp:
        (WebCore::Document::createTouch):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/Touch.cpp:
        (WebCore::Touch::Touch):
        * dom/Touch.h:
        (WebCore::Touch::create):
        (WebCore::Touch::webkitRadiusX):
        (WebCore::Touch::webkitRadiusY):
        (WebCore::Touch::webkitRotationAngle):
        * dom/Touch.idl:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent):
        * platform/PlatformTouchPoint.h:
        (WebCore::PlatformTouchPoint::radiusX):
        (WebCore::PlatformTouchPoint::radiusY):
        (WebCore::PlatformTouchPoint::rotationAngle):

2011-05-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Add a LineLayoutState object to hold global state during line layout
        https://bugs.webkit.org/show_bug.cgi?id=60113

        Like LayoutState for layout(), LineLayoutState keeps track of global information
        during an entire linebox tree layout pass (aka layoutInlineChildren).

        For now it just holds isFullLayout and the logicalRepaintTop/Bottom.
        It's possible we should hold the useRepaintBounds bool as well as
        the startLine and endLine RootInlineBox pointers.

        No change in behavior, thus no tests.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineLayoutState::LineLayoutState):
        (WebCore::LineLayoutState::markForFullLayout):
        (WebCore::LineLayoutState::isFullLayout):
        (WebCore::LineLayoutState::setRepaintRange):
        (WebCore::LineLayoutState::updateRepaintRangeFromBox):
        (WebCore::LineLayoutState::startLine):
        (WebCore::LineLayoutState::endLine):
        (WebCore::deleteLineRange):
        (WebCore::RenderBlock::layoutRunsAndFloats):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::checkFloatsInCleanLine):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::RenderBlock::determineEndPosition):
        (WebCore::RenderBlock::matchedEndLine):

2011-05-17  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Area element doesn't update region when dynamically altered.
        https://bugs.webkit.org/show_bug.cgi?id=54636

        Recompute the clickable region after the "shape" or "coords" attribute
        of an area element is changed.

        Test: fast/images/imagemap-dynamic-area-updates.html

        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::parseMappedAttribute):
        (WebCore::HTMLAreaElement::invalidateCachedRegion):
        * html/HTMLAreaElement.h:

2011-05-09  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Redirection of HTTP POST (3xx) incorrectly includes original POST data
        https://bugs.webkit.org/show_bug.cgi?id=60440

        Makes sure that the HTTP headers Content-type and Content-length are not included in
        the requests that do not have any content.

        Tests: http/tests/navigation/post-301-response.html
               http/tests/navigation/post-302-response.html
               http/tests/navigation/post-303-response.html
               http/tests/navigation/post-307-response.html

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

2011-05-17  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] GraphicsLayerQtImpl: Remove an unused variable.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::paint):

2011-05-17  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: navigating from elements panel does not show source view.
        https://bugs.webkit.org/show_bug.cgi?id=60970

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.highlightLine):
        (WebInspector.TextEditorChunkedPanel.prototype.makeLineAChunk):

2011-05-17  Sam Magnuson  <smagnuson@netflix.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Node that have both an opacity and a transform animation on them seem not to fire.
        https://bugs.webkit.org/show_bug.cgi?id=40841

        Test: compositing/animation/busy-indicator.html

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::recache):
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        (WebCore::GraphicsLayerQt::setContentsToImage):
        (WebCore::TransformAnimationQt::getAnimatedProperty):
        (WebCore::OpacityAnimationQt::getAnimatedProperty):
        (WebCore::GraphicsLayerQt::addAnimation):

2011-05-17  Grace Kloba  <klobag@chromium.org>

        Reviewed by Kenneth Russell.

        GraphicsContext3DSkia needs to honor the platform Sk_x_SHIFT value instead of assuming BGRA color
        https://bugs.webkit.org/show_bug.cgi?id=60965

        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2011-05-17  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Enter/Tab after editing a CSS property does not invoke editor on next field
        https://bugs.webkit.org/show_bug.cgi?id=60962

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.updateStyles):

2011-05-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86660.
        http://trac.webkit.org/changeset/86660
        https://bugs.webkit.org/show_bug.cgi?id=60958

        broke search in console panel (Requested by podivilov on
        #webkit).

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.show):
        (WebInspector.ConsoleView.prototype.afterShow):
        (WebInspector.ConsoleView.prototype.hide):
        (WebInspector.ConsoleView.prototype.addMessage):
        (WebInspector.ConsoleView.prototype.clearMessages):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        * inspector/front-end/Drawer.js:
        (WebInspector.Drawer.prototype.set visibleView):
        (WebInspector.Drawer.prototype.show.animationFinished):
        (WebInspector.Drawer.prototype.show):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):

2011-05-17  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed warning fix introduced by r86377.

        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintMask):

2011-05-17  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        WebSocket: Uninline methods in ThreadableWebSocketChannelClientWrapper
        https://bugs.webkit.org/show_bug.cgi?id=60945

        Add ThreadableWebSocketChannelClientWrapper.cpp. Uninline methods in this class and
        move these definitions into .cpp in order to allow further modifications in this class.

        No new tests, as this is just refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * websockets/ThreadableWebSocketChannelClientWrapper.cpp: Added.
        (WebCore::ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper):
        (WebCore::ThreadableWebSocketChannelClientWrapper::create):
        (WebCore::ThreadableWebSocketChannelClientWrapper::clearSyncMethodDone):
        (WebCore::ThreadableWebSocketChannelClientWrapper::setSyncMethodDone):
        (WebCore::ThreadableWebSocketChannelClientWrapper::syncMethodDone):
        (WebCore::ThreadableWebSocketChannelClientWrapper::sent):
        (WebCore::ThreadableWebSocketChannelClientWrapper::setSent):
        (WebCore::ThreadableWebSocketChannelClientWrapper::bufferedAmount):
        (WebCore::ThreadableWebSocketChannelClientWrapper::setBufferedAmount):
        (WebCore::ThreadableWebSocketChannelClientWrapper::clearClient):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnect):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessage):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        (WebCore::ThreadableWebSocketChannelClientWrapper::suspend):
        (WebCore::ThreadableWebSocketChannelClientWrapper::resume):
        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingEvents):
        * websockets/ThreadableWebSocketChannelClientWrapper.h:

2011-05-17  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Support shadowed text in fast font path.
        https://bugs.webkit.org/show_bug.cgi?id=60462

        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText): Remove complex path shortcut for shadowed text.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::drawGlyphs): Paint shadows for simple text.

2011-05-17  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Construct GraphicsLayerQtImpl::State with correct values.
        https://bugs.webkit.org/show_bug.cgi?id=60902

        The GraphicsLayerQtImpl initial state should match the initial values
        of the corresponding GraphicsLayer flags.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::State::State):

2011-05-12  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        IndexedDB: Index population should ignore records without key for index
        https://bugs.webkit.org/show_bug.cgi?id=60697

        When populating a new index, records which do not have a key on the
        index's key path should be ignored.

        * storage/IDBObjectStoreBackendImpl.cpp:

2011-05-17  Young Han Lee  <joybro@company100.net>

        Reviewed by Csaba Osztrogonác.

        [Texmap][Qt] Enable strict PassOwnPtr for Qt with texmap enabled.
        https://bugs.webkit.org/show_bug.cgi?id=60947

        No new tests. Build fix.

        * platform/graphics/qt/TextureMapperQt.cpp:
        (WebCore::TextureMapper::create):
        * platform/graphics/qt/TextureMapperQt.h:
        (WebCore::TextureMapperQt::create):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayer::create):

2011-05-17  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Increment/decrement of very big CSS numeric values results in invalid CSS
        https://bugs.webkit.org/show_bug.cgi?id=60890

        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype._handleKeyDown):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.alteredFloatNumber):
        (WebInspector.StylePropertyTreeElement.prototype):

2011-05-17  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: merge ConsoleView into ConsolePanel.
        https://bugs.webkit.org/show_bug.cgi?id=54670

        Console view in drawer looks exactly the same as console panel. Merging ConsoleView and ConsolePanel together
        will allow us to reuse panel's functionality (e.g. resizable sidebar) even when console is docked.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsolePanel.prototype.get toolbarItemLabel):
        (WebInspector.ConsolePanel.prototype.show):
        (WebInspector.ConsolePanel.prototype.hide):
        (WebInspector.ConsolePanel.prototype.showInDrawer):
        (WebInspector.ConsolePanel.prototype.afterShowInDrawer):
        (WebInspector.ConsolePanel.prototype.hideInDrawer):
        (WebInspector.ConsolePanel.prototype.addMessage):
        (WebInspector.ConsolePanel.prototype.clearMessages):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        * inspector/front-end/Drawer.js:
        (WebInspector.Drawer.prototype.set visibleView):
        (WebInspector.Drawer.prototype.show.animationFinished):
        (WebInspector.Drawer.prototype.show):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):

2011-05-16  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        WebSocket: WebSocketHandshake prints a carriage return to console
        https://bugs.webkit.org/show_bug.cgi?id=60880

        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readStatusLine):
        WebSocketHandshake should not print a carriage return to console. To fix this,
        we first check whether the status line ends with CRLF. After that,
        we can print the first (lineLength - 2) characters of the status line
        which do not contain a carriage return.

2011-05-16  MORITA Hajime  <morrita@google.com>

        Unreviewed build fix for r86647, which broke SUPPORT_AUTOCORRECTION_PANEL.

        * editing/SpellingCorrectionController.cpp:
        (WebCore::markersHaveIdenticalDescription):
        (WebCore::SpellingCorrectionController::recordSpellcheckerResponseForModifiedCorrection):
        (WebCore::SpellingCorrectionController::processMarkersOnTextToBeReplacedByResult):

2011-05-16  Kent Tamura  <tkent@chromium.org>

        Fix Leopard build.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::stepUpFromRenderer): Use double instead of int.

2011-05-16  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Decouple LayerChromium/CCLayerImpl trees
        https://bugs.webkit.org/show_bug.cgi?id=58830

        Makes the CCLayerImpl tree self-hosting and provides an explicit step
        to synchronize the LayerChromium tree to the CCLayerImpl tree.
        Tested by compositing/ layout tests and by unit tests in WebKit/chromium.

        * WebCore.gypi:
        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::createCCLayerImpl):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::~LayerChromium):
        (WebCore::LayerChromium::cleanupResources):
        (WebCore::LayerChromium::dumpLayer):
        (WebCore::LayerChromium::dumpLayerProperties):
        (WebCore::LayerChromium::createCCLayerImpl):
        (WebCore::LayerChromium::ccLayerImpl):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::id):
        (WebCore::LayerChromium::setCCLayerImpl):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        (WebCore::LayerRendererChromium::updateLayers):
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):
        (WebCore::LayerRendererChromium::updateCompositorResourcesRecursive):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/PluginLayerChromium.cpp:
        (WebCore::PluginLayerChromium::createCCLayerImpl):
        * platform/graphics/chromium/TreeSynchronizer.cpp: Added.
        (WebCore::TreeSynchronizer::addCCLayerImplsToMapRecursive):
        (WebCore::TreeSynchronizer::synchronizeTreeRecursive):
        (WebCore::TreeSynchronizer::synchronizeTrees):
        * platform/graphics/chromium/TreeSynchronizer.h:
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::createCCLayerImpl):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp:
        (WebCore::CCCanvasLayerImpl::CCCanvasLayerImpl):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.h:
        (WebCore::CCCanvasLayerImpl::create):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        (WebCore::CCLayerImpl::addChild):
        (WebCore::CCLayerImpl::removeFromParent):
        (WebCore::CCLayerImpl::removeAllChildren):
        (WebCore::CCLayerImpl::clearChildList):
        (WebCore::CCLayerImpl::descendantsDrawsContent):
        (WebCore::CCLayerImpl::drawsContent):
        (WebCore::CCLayerImpl::updateCompositorResources):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::create):
        (WebCore::CCLayerImpl::parent):
        (WebCore::CCLayerImpl::children):
        (WebCore::CCLayerImpl::setMaskLayer):
        (WebCore::CCLayerImpl::maskLayer):
        (WebCore::CCLayerImpl::setReplicaLayer):
        (WebCore::CCLayerImpl::replicaLayer):
        (WebCore::CCLayerImpl::id):
        (WebCore::CCLayerImpl::owner):
        (WebCore::CCLayerImpl::setParent):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp:
        (WebCore::CCPluginLayerImpl::CCPluginLayerImpl):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.h:
        (WebCore::CCPluginLayerImpl::create):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::CCVideoLayerImpl):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:
        (WebCore::CCVideoLayerImpl::create):

2011-05-16  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Kent Tamura.

        HTML5 Number Spinbox displays a 0 in situations where a 0 is not between the min and max.
        https://bugs.webkit.org/show_bug.cgi?id=60871

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

        In number input type, if the value is not a number, including empty, the currect valued is assumed 0.
        But we have to handle it separately from the case when the value is actuall "0".

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::stepUpFromRenderer): Added cliping for default value.

2011-05-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove bogus ASSERT in Document::setCompatibilityMode
        https://bugs.webkit.org/show_bug.cgi?id=60935

        The ASSERT is invalid when the parser is in the initial state and the
        document is non-empty, which is strange but not impossible.

        Test: fast/parser/append-child-followed-by-document-write.html

        * dom/Document.cpp:
        (WebCore::Document::setCompatibilityMode):

2011-05-16  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        [Refactoring] Member variables of DocumentMarker should be encapsulated.        
        https://bugs.webkit.org/show_bug.cgi?id=56814

        - Moved DocumentMarker's member variables to private and added getters for them.
        - Added DocumentMarker setters and constructors, which contain assertions against m_type values
          because description and activeMatch are used with specific type of MarkerType.
        - Moved chromium's WebKit::WebFrameImpl::addMarker() to DocumentMarkerController because
          it accesses DocumentMarker internals.
        - Moved a version of DMC::addMarker() to private and add alternatives that hide
          internals of DocumentMarker. (The internal will be renewed by upcoming change.)
        
        * dom/DocumentMarker.h:
        (WebCore::DocumentMarker::type):
        (WebCore::DocumentMarker::startOffset):
        (WebCore::DocumentMarker::endOffset):
        (WebCore::DocumentMarker::description):
        (WebCore::DocumentMarker::hasDescription):
        (WebCore::DocumentMarker::activeMatch):
        (WebCore::DocumentMarker::clearDescription):
        (WebCore::DocumentMarker::setStartOffset):
        (WebCore::DocumentMarker::setEndOffset):
        (WebCore::DocumentMarker::operator==):
        (WebCore::DocumentMarker::DocumentMarker):
        (WebCore::DocumentMarker::shiftOffsets):
        (WebCore::DocumentMarker::setActiveMatch):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::addTextMatchMarker):
        (WebCore::DocumentMarkerController::copyMarkers):
        (WebCore::DocumentMarkerController::removeMarkers):
        (WebCore::DocumentMarkerController::markerContainingPoint):
        (WebCore::DocumentMarkerController::markersInRange):
        (WebCore::DocumentMarkerController::renderedRectsForMarkers):
        (WebCore::DocumentMarkerController::removeMarkersFromList):
        (WebCore::DocumentMarkerController::repaintMarkers):
        (WebCore::DocumentMarkerController::shiftMarkers):
        (WebCore::DocumentMarkerController::setMarkersActive):
        (WebCore::DocumentMarkerController::hasMarkers):
        (WebCore::DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange):
        (WebCore::DocumentMarkerController::showMarkers):
        * dom/DocumentMarkerController.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::originalStringForAutocorrectionAtBeginningOfSelection):
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartHasMarkerFor):
        * editing/SpellingCorrectionController.cpp:
        (WebCore::SpellingCorrectionController::respondToChangedSelection):
        * editing/SpellingCorrectionController.h:
        (WebCore::SpellingCorrectionController::shouldStartTimerFor):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::spellingToolTip):
        (WebCore::HitTestResult::replacedString):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::paintDocumentMarkers):
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer):

2011-05-16  Martin Robinson  <mrobinson@igalia.com>

        Fix the Cairo build for older versions of GTK+.

        * platform/gtk/GtkWidgetBackingStoreX11.cpp: Include GtkVersioning.h to
        satisfy older versions of GTK+ 2.x.

2011-05-16  Ian Henderson  <ianh@apple.com>

        Reviewed by Joseph Pecoraro.

        Page::goToItem doesn't work while loading is deferred
        https://bugs.webkit.org/show_bug.cgi?id=60412

        If goToItem is called while loading is deferred, save the arguments
        and try again later instead of doing nothing.

        Test: loader/navigation-while-deferring-loads.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setDefersLoading):
        Pipe the "defersLoading" state into HistoryController.
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::HistoryController):
        (WebCore::HistoryController::goToItem):
        Save the HistoryItem and FrameLoadType if loading is deferred.
        (WebCore::HistoryController::setDefersLoading):
        If we have a saved HistoryItem after resuming, try going to it.
        * loader/HistoryController.h:
        * page/Page.cpp:
        (WebCore::Page::goToItem):
        No longer bail early if loading is deferred, since HistoryController
        now handles this case.

2011-05-16  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed, rolling out r86625.
        http://trac.webkit.org/changeset/86625
        https://bugs.webkit.org/show_bug.cgi?id=60719

        Caused failed assertion on Chromium gpu canary bots

        * WebCore.gypi:
        * platform/chromium/TraceEvent.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::create):
        (WebCore::ContentLayerChromium::ContentLayerChromium):
        (WebCore::ContentLayerChromium::~ContentLayerChromium):
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        (WebCore::ContentLayerChromium::setLayerRenderer):
        (WebCore::ContentLayerChromium::createTilerIfNeeded):
        (WebCore::ContentLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (WebCore::ContentLayerChromium::drawsContent):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        (WebCore::ImageLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerPainterChromium.h: Removed.
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::updateRootLayerContents):
        (WebCore::LayerRendererChromium::drawRootLayer):
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        (WebCore::LayerRendererChromium::updateLayers):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/LayerTextureSubImage.cpp: Removed.
        * platform/graphics/chromium/LayerTextureSubImage.h: Removed.
        * platform/graphics/chromium/LayerTextureUpdater.h: Removed.
        * platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp: Removed.
        * platform/graphics/chromium/LayerTextureUpdaterCanvas.h: Removed.
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::create):
        (WebCore::LayerTilerChromium::LayerTilerChromium):
        (WebCore::LayerTilerChromium::setLayerRenderer):
        (WebCore::LayerTilerChromium::setTileSize):
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::uploadCanvas):
        (WebCore::LayerTilerChromium::updateFromPixels):
        (WebCore::LayerTilerChromium::draw):
        * platform/graphics/chromium/LayerTilerChromium.h:
        (WebCore::LayerTilerChromium::Tile::Tile):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::draw):

2011-05-16  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=60927
        fastCheckSelector() does not inline correctly in all cases

        Use anonymous namespace instead of static qualifier to get internal linkage.
        Use functions as template arguments instead of classes.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::fastCheckSelector):

2011-05-16  Chris Rogers  <crogers@google.com>

        Unreviewed build fix.

        Just return "nullptr" to fix compile errors
        https://bugs.webkit.org/show_bug.cgi?id=60932

        * platform/audio/mac/AudioBusMac.mm:
        (WebCore::AudioBus::loadPlatformResource):
        * platform/audio/mac/AudioFileReaderMac.cpp:
        (WebCore::AudioFileReader::createBus):

2011-05-16  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Replace docTop/Right/Bottom/Left/Width/Height with documentRect
        https://bugs.webkit.org/show_bug.cgi?id=60743

        Change RenderView::documentRect to compute rect once rather than four times.
        Replace all uses of docTop/Right/Bottom/Left/Width/Height with documentRect to
        simplify the code and reduce complexity.

        Covered by existing tests.

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustViewSize):
        (WebCore::FrameView::forceLayoutForPagination):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::computePageRects):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxFillLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::documentRect):
        * rendering/RenderView.h:

2011-05-16  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        [chromium] shard V8DerivedSources into 19 files
        https://bugs.webkit.org/show_bug.cgi?id=60926

        This reduces the clobber build time by 4s on my machine.  It helps
        by making the slowest to compile V8DerivedSources faster (and thus
        more parallelizable).  With 8 files, the 3 slowest are 23s, 18s and
        10s.  With 19 files, the 3 slowest are 16s, 10s, and 10s.

        * WebCore.gyp/WebCore.gyp:
        * storage/IDBObjectStore.h: Fix a missing include that was working
          because a different .cpp file before it was including the header.

2011-05-16  Chris Rogers  <crogers@google.com>

        Unreviewed build fix.

        Fix web audio enabled mac port compile errors
        https://bugs.webkit.org/show_bug.cgi?id=60930

        * platform/audio/mac/AudioBusMac.mm:
        (WebCore::AudioBus::loadPlatformResource):
        * platform/audio/mac/AudioFileReaderMac.cpp:
        (WebCore::AudioFileReader::createBus):

2011-05-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Document why RenderBlockLineLayout has its own deleteLineBoxTree implementation
        https://bugs.webkit.org/show_bug.cgi?id=60925

        I suspect this difference is really just papering over other bugs
        but now that I finally understand the difference, I should at least
        document it for others.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::deleteLineRange):
        (WebCore::RenderBlock::determineStartPosition):

2011-05-16  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by James Robinson.

        [chromium] Split canvas from LayerTilerChromium
        https://bugs.webkit.org/show_bug.cgi?id=60719

        LayerTilerChromium now just does tiling. It delegates the task of painting and updating textures to LayerTextureUpdater.
        Also abstracted LayerTextureSubImage to upload texture pixels.

        * WebCore.gypi:
        * platform/chromium/TraceEvent.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::create):
        (WebCore::ContentLayerChromium::ContentLayerChromium):
        (WebCore::ContentLayerChromium::~ContentLayerChromium):
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        (WebCore::ContentLayerChromium::cleanupResources):
        (WebCore::ContentLayerChromium::setLayerRenderer):
        (WebCore::ContentLayerChromium::createTextureUpdater):
        (WebCore::ContentLayerChromium::drawsContent):
        (WebCore::ContentLayerChromium::createTilerIfNeeded):
        (WebCore::ContentLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerTextureUpdater::ImageLayerTextureUpdater):
        (WebCore::ImageLayerTextureUpdater::~ImageLayerTextureUpdater):
        (WebCore::ImageLayerTextureUpdater::orientation):
        (WebCore::ImageLayerTextureUpdater::prepareToUpdate):
        (WebCore::ImageLayerTextureUpdater::updateTextureRect):
        (WebCore::ImageLayerTextureUpdater::imageRect):
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        (WebCore::ImageLayerChromium::updateCompositorResources):
        (WebCore::ImageLayerChromium::createTextureUpdater):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerPainterChromium.h: Added.
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::updateRootLayerContents):
        (WebCore::LayerRendererChromium::drawRootLayer):
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        (WebCore::LayerRendererChromium::updateLayers):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/LayerTextureSubImage.cpp: Added.
        (WebCore::LayerTextureSubImage::LayerTextureSubImage):
        (WebCore::LayerTextureSubImage::~LayerTextureSubImage):
        (WebCore::LayerTextureSubImage::setSubImageSize):
        (WebCore::LayerTextureSubImage::upload):
        (WebCore::LayerTextureSubImage::uploadWithTexSubImage):
        (WebCore::LayerTextureSubImage::uploadWithMapTexSubImage):
        * platform/graphics/chromium/LayerTextureSubImage.h: Added.
        * platform/graphics/chromium/LayerTextureUpdater.h: Added.
        (WebCore::LayerTextureUpdater::LayerTextureUpdater):
        (WebCore::LayerTextureUpdater::~LayerTextureUpdater):
        (WebCore::LayerTextureUpdater::context):
        * platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp: Added.
        (WebCore::LayerTextureUpdaterCanvas::LayerTextureUpdaterCanvas):
        (WebCore::LayerTextureUpdaterCanvas::paintContents):
        (WebCore::LayerTextureUpdaterBitmap::LayerTextureUpdaterBitmap):
        (WebCore::LayerTextureUpdaterBitmap::prepareToUpdate):
        (WebCore::LayerTextureUpdaterBitmap::updateTextureRect):
        * platform/graphics/chromium/LayerTextureUpdaterCanvas.h: Added.
        (WebCore::LayerTextureUpdaterCanvas::~LayerTextureUpdaterCanvas):
        (WebCore::LayerTextureUpdaterCanvas::contentRect):
        (WebCore::LayerTextureUpdaterBitmap::~LayerTextureUpdaterBitmap):
        (WebCore::LayerTextureUpdaterBitmap::orientation):
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::create):
        (WebCore::LayerTilerChromium::LayerTilerChromium):
        (WebCore::LayerTilerChromium::setTileSize):
        (WebCore::LayerTilerChromium::prepareToUpdate):
        (WebCore::LayerTilerChromium::updateRect):
        (WebCore::LayerTilerChromium::draw):
        * platform/graphics/chromium/LayerTilerChromium.h:
        (WebCore::LayerTilerChromium::Tile::Tile):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::draw):

2011-05-16  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed prospective build fix/workaround for chromium ARM compiler error.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::animationNameForTransition):

2011-05-16  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Anders Carlsson.

        [GTK] [WebKit2] Provide a fast version of the backing store for X11
        https://bugs.webkit.org/show_bug.cgi?id=60912

        No new tests. This will be covered by WebKit2 pixel tests.

        * GNUmakefile.list.am: Added new GtkWidgetBackingStore source and header files.
        * platform/gtk/GtkWidgetBackingStore.h: Added.
        * platform/gtk/GtkWidgetBackingStoreCairo.cpp: Added this implementation of the backing
        store that uses Cairo and has the same performance characteristics as the WebKit2 implementaiton.
        * platform/gtk/GtkWidgetBackingStoreX11.cpp: Added this implementation of the backing
        store that uses X11 directly and has better performance than the Cairo version.

2011-05-16  Chris Rogers  <crogers@google.com>

        Reviewed by senorblanco@chromium.org.

        Add DynamicsCompressorNode implementation
        https://bugs.webkit.org/show_bug.cgi?id=60682

        No new tests since audio API is not yet implemented.

        * DerivedSources.make:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/DynamicsCompressor.cpp: Added.
        (WebCore::DynamicsCompressor::DynamicsCompressor):
        (WebCore::DynamicsCompressor::initializeParameters):
        (WebCore::DynamicsCompressor::parameterValue):
        (WebCore::DynamicsCompressor::setEmphasisStageParameters):
        (WebCore::DynamicsCompressor::setEmphasisParameters):
        (WebCore::DynamicsCompressor::process):
        (WebCore::DynamicsCompressor::reset):
        * platform/audio/DynamicsCompressor.h: Added.
        (WebCore::DynamicsCompressor::isStereo):
        (WebCore::DynamicsCompressor::sampleRate):
        (WebCore::DynamicsCompressor::nyquist):
        * platform/audio/DynamicsCompressorKernel.cpp: Added.
        (WebCore::saturate):
        (WebCore::DynamicsCompressorKernel::DynamicsCompressorKernel):
        (WebCore::DynamicsCompressorKernel::setPreDelayTime):
        (WebCore::DynamicsCompressorKernel::process):
        (WebCore::DynamicsCompressorKernel::reset):
        * platform/audio/DynamicsCompressorKernel.h: Added.
        (WebCore::DynamicsCompressorKernel::latencyFrames):
        (WebCore::DynamicsCompressorKernel::sampleRate):
        * platform/audio/ZeroPole.cpp: Added.
        (WebCore::ZeroPole::process):
        * platform/audio/ZeroPole.h: Added.
        (WebCore::ZeroPole::ZeroPole):
        (WebCore::ZeroPole::reset):
        (WebCore::ZeroPole::setZero):
        (WebCore::ZeroPole::setPole):
        (WebCore::ZeroPole::zero):
        (WebCore::ZeroPole::pole):
        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createDynamicsCompressor):
        * webaudio/AudioContext.h:
        * webaudio/AudioContext.idl:
        * webaudio/AudioNode.h:
        * webaudio/DynamicsCompressorNode.cpp: Added.
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        (WebCore::DynamicsCompressorNode::~DynamicsCompressorNode):
        (WebCore::DynamicsCompressorNode::process):
        (WebCore::DynamicsCompressorNode::reset):
        (WebCore::DynamicsCompressorNode::initialize):
        (WebCore::DynamicsCompressorNode::uninitialize):
        * webaudio/DynamicsCompressorNode.h: Added.
        (WebCore::DynamicsCompressorNode::create):
        * webaudio/DynamicsCompressorNode.idl: Added.

2011-05-16  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Antti Koivisto.

        Fix for Bug 43704 - Web font is printed as blank if it is not cached
        https://bugs.webkit.org/show_bug.cgi?id=43704

        In setting printing, we should not validate resources already cached
        for the document. If we do, web fonts used for screen are revalidated
        and possiby reloaded. Then the fonts can be shown as blank on print.
        This patch won't save the case where screen and print use different web
        fonts. Nonetheless, this is an improvement.

        No new tests because there seems to be no good way to test print images.

        * editing/Editor.cpp:
        (WebCore::Editor::paste): Use ResourceCacheValidationSuppressor instead of explicitly allowing/disallowing stale resources.
        * loader/cache/CachedResourceLoader.h:
        (WebCore::ResourceCacheValidationSuppressor::ResourceCacheValidationSuppressor): RAII class for allowing/disallowing stale resources.
        (WebCore::ResourceCacheValidationSuppressor::~ResourceCacheValidationSuppressor):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag): Use ResourceCacheValidationSuppressor instead of explicitly allowing/disallowing stale resources.
        * page/Frame.cpp:
        (WebCore::Frame::setPrinting): Use ResourceCacheValidationSuppressor to allow stale resources in printing.

2011-05-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9446653> REGRESSION (r84750): Moving by word stops at apostrophe mid-word
        https://bugs.webkit.org/show_bug.cgi?id=60915

        CFStringTokenizer’s kCFStringTokenizerUnitWord considers “Here’s” as two separate tokens.
        Switching to CFStringTokenizer in r84750 was an attempt to address an issue with Japanese word
        boundaries for searches with WebFindOptionsAtWordStarts, but it turned out to be insufficient,
        and in r86387 the Japanese word issue was addressed independently of text boundaries, so just
        revert r84750.

        * platform/text/mac/TextBoundaries.mm:
        (WebCore::findNextWordFromIndex):

2011-05-16  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/60913> C++ exceptions should not be enabled when building with llvm-gcc-4.2
        <rdar://problem/9446430>

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig: Fixed typo.

2011-05-16  Jon Lee  <jonlee@apple.com>

        Fix for broken regression tests. Adding null pointer check

        * page/FrameView.cpp:
        (WebCore::FrameView::didAddHorizontalScrollbar):
        (WebCore::FrameView::willRemoveHorizontalScrollbar):

2011-05-16  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Remove unused member variables from LayerRendererChromium
        https://bugs.webkit.org/show_bug.cgi?id=60899

        These should have been removed when tiling was enabled for root
        layers.

        * platform/graphics/chromium/LayerRendererChromium.h:

2011-05-16  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed, rolling out r86589.
        http://trac.webkit.org/changeset/86589
        https://bugs.webkit.org/show_bug.cgi?id=54670

        Broke chromium inspector tests.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.show):
        (WebInspector.ConsoleView.prototype.afterShow):
        (WebInspector.ConsoleView.prototype.hide):
        (WebInspector.ConsoleView.prototype.addMessage):
        (WebInspector.ConsoleView.prototype.clearMessages):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        * inspector/front-end/Drawer.js:
        (WebInspector.Drawer.prototype.set visibleView):
        (WebInspector.Drawer.prototype.show.animationFinished):
        (WebInspector.Drawer.prototype.show):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):

2011-05-16  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Enrica Casucci.

        REGRESSION (r86542): Dropping URL onto Desktop creates broken Internet Shortcut file.
        
        r86477 fixed this bug by using latin1 as the CString's encoding instead of ascii, but r86542
        undid this change.
        
        Change it back to latin1 to fix the bug.

        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::writeURL):

2011-05-16  Jeremy Noble  <jer.noble@apple.com>

        Unreviewed; build fix for non-SnowLeopard builds.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm: Wrap definition 
            of layerIsDescendentOf in a #if check.

2011-05-16  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: merge ConsoleView into ConsolePanel.
        https://bugs.webkit.org/show_bug.cgi?id=54670

        Console view in drawer looks exactly the same as console panel. Merging ConsoleView and ConsolePanel together
        will allow us to reuse panel's functionality (e.g. resizable sidebar) even when console is docked.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsolePanel.prototype.get toolbarItemLabel):
        (WebInspector.ConsolePanel.prototype.show):
        (WebInspector.ConsolePanel.prototype.hide):
        (WebInspector.ConsolePanel.prototype.showInDrawer):
        (WebInspector.ConsolePanel.prototype.afterShowInDrawer):
        (WebInspector.ConsolePanel.prototype.hideInDrawer):
        (WebInspector.ConsolePanel.prototype.addMessage):
        (WebInspector.ConsolePanel.prototype.clearMessages):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        * inspector/front-end/Drawer.js:
        (WebInspector.Drawer.prototype.set visibleView):
        (WebInspector.Drawer.prototype.show.animationFinished):
        (WebInspector.Drawer.prototype.show):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):

2011-05-13  Jer Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        Video is blank, controller is misplaced on trailers.apple.com movie in fullscreen (with two screens)
        https://bugs.webkit.org/show_bug.cgi?id=60826

        Listen for a WebKitLayerHostChanged notification and, if the affected layer is an
        ancestor layer of the qtMovieLayer, tear down the layer and recreate it the
        next time setVisible(true) is called.

        * dom/Document.cpp:
        (WebCore::Document::webkitDidEnterFullScreenForElement):  Call setFullScreenRootLayer(0) 
            before disabling animation on the full screen renderer.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::createQTMovie): Register an observer for the new 
            WebKitLayerHostChanged notification.
        (WebCore::layerIsDescendentOf): Added.
        (WebCore::MediaPlayerPrivateQTKit::layerHostChanged): Added.  If the changed
            layer is an ancestor of the movie layer, tear down rendering and re-
            create the next time setVisible(true) is called.
        (-[WebCoreMovieObserver layerHostChanged:]):  Added ObjC listener wrapper.

2011-05-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Remove disable-javascript-urls CSP directive
        https://bugs.webkit.org/show_bug.cgi?id=60874

        After talking this out with various folks in the CSP working group, we
        decided that this syntax isn't the right way to approach this issue.
        If we want to address the use case of enabling JavaScript URLs
        separately from inline script, we'll probably just make

          script-src javascript:

        work that way.

        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::ContentSecurityPolicy):
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:

2011-05-16  Jon Lee  <jonlee@apple.com>

       Reviewed by Simon Fraser.

       Can't horizontally scroll iframes and overflow because wheel events are always accepted
       https://bugs.webkit.org/show_bug.cgi?id=60779

       * dom/Document.cpp:
       (WebCore::Document::Document): Initialize wheel event handler count
       (WebCore::Document::didAddWheelEventHandler): Increment count, and tell the main frame
       to recalculate the total number of wheel event handlers in all of its frames' documents
       (WebCore::Document::didRemoveWheelEventHandler): Reverse of previous method
       * dom/Document.h:
       (WebCore::Document::wheelEventHandlerCount): Access the count
       * dom/Node.cpp:
       (WebCore::tryAddEventListener): If the event listener is a mouse wheel event, then
       tell the document to increment its count
       (WebCore::tryRemoveEventListener): Reverse of previous method

       * page/ChromeClient.h: Two new methods:
         numWheelEventHandlersChanged: WebProcess tells UIProcess to update its cached
           count of total wheel event handlers, which in this case only include horizontal
           scrollbars and mouse wheel JS handlers
         shouldRubberBandInDirection: allow the UIProcess to provide some control over
           whether rubber banding is allowed when scrolling in a particular direction
       * loader/EmptyClients.h:
       (WebCore::EmptyChromeClient::numWheelEventHandlersChanged): Default empty impl
       (WebCore::EmptyChromeClient::shouldRubberBandInDirection): Default empty impl
       * page/EventHandler.cpp:
       (WebCore::EventHandler::handleWheelEvent): Remove a redundant pointer check
       * page/Frame.cpp:
       (WebCore::Frame::setDocument): When the frame's document changes, calculate that
       document's total wheel event handlers, and notify the UIProcess
       (WebCore::Frame::notifyChromeClientWheelEventHandlerCountChanged): Performs a crawl
       of the frame tree to aggregate the count
       * page/Frame.h:

       * platform/ScrollableArea.h: Virtualize didAddHorizontalScrollbar and
       willRemoveHorizontalScrollbar for overriding in RenderLayer and FrameView
       (WebCore::ScrollableArea::isHorizontalScrollerPinnedToMinimumPosition): Returns true if there is
       no scrollbar or the scroller position is in the minimum scroll position.
       (WebCore::ScrollableArea::isHorizontalScrollerPinnedToMaximumPosition): Converse of the above.
       (WebCore::ScrollableArea::shouldRubberBandInDirection): Default impl
       * page/FrameView.cpp:
       (WebCore::FrameView::didAddHorizontalScrollbar): Updates the frame's document's count
       (WebCore::FrameView::willRemoveHorizontalScrollbar): Updates the frame's document's
       count
       (WebCore::FrameView::shouldRubberBandInDirection): Connective glue
       * page/FrameView.h: Adding overriding methods from ScrollableArea
       * rendering/RenderLayer.cpp: Similar functionality to FrameView
       (WebCore::RenderLayer::didAddHorizontalScrollbar):
       (WebCore::RenderLayer::willRemoveHorizontalScrollbar):
       * rendering/RenderLayer.h:
       
       * platform/mac/ScrollAnimatorMac.h: Fix typo of "momentum"
       * platform/mac/ScrollAnimatorMac.mm:
       (WebCore::ScrollAnimatorMac::ScrollAnimatorMac): Fix typo of "momentum"
       (WebCore::ScrollAnimatorMac::smoothScrollWithEvent): Fix typo of "coalesced"
       (WebCore::ScrollAnimatorMac::beginScrollGesture): Fix typo of "coalesced"
       (WebCore::ScrollAnimatorMac::snapRubberBand): Fix typo of "momentum"
       
       (WebCore::ScrollAnimatorMac::handleWheelEvent): New logic for determining whether
       to allow rubber-banding based on the area's scroll position and the wheel event.
       Could prevent accepting the wheel event. Also, fix typo of "momentum"
       (WebCore::isScrollingLeftAndShouldNotRubberBand): Inline helper function for logic
       (WebCore::isScrollingRightAndShouldNotRubberBand): Inline helper function for logic

2011-05-16  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Tony Gentilcore.

        Media Stream API: add local stream requests.
        https://bugs.webkit.org/show_bug.cgi?id=60177

        Add the code and messages for requesting the generation of local streams and getting the reply back.

        Tests for the Media Stream API will be provided by the bug 56587.
        One test is re-enabled with this patch.

        Test: fast/dom/MediaStream/argument-types.html

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/CallbackTask.h: Added.
        (WebCore::CallbackTask1::create):
        (WebCore::CallbackTask1::performTask):
        (WebCore::CallbackTask1::Scheduler::scheduleCallback):
        (WebCore::CallbackTask1::CallbackTask1):
        * page/MediaStreamClient.h:
        * page/MediaStreamController.cpp:
        (WebCore::MediaStreamController::isClientAvailable):
        (WebCore::MediaStreamController::unregisterFrameController):
        (WebCore::MediaStreamController::registerRequest):
        (WebCore::MediaStreamController::registerStream):
        (WebCore::MediaStreamController::generateStream):
        (WebCore::MediaStreamController::streamGenerated):
        (WebCore::MediaStreamController::streamGenerationFailed):
        * page/MediaStreamController.h:
        * page/MediaStreamFrameController.cpp:
        (WebCore::MediaStreamFrameController::GenerateStreamRequest::GenerateStreamRequest):
        (WebCore::MediaStreamFrameController::GenerateStreamRequest::~GenerateStreamRequest):
        (WebCore::MediaStreamFrameController::GenerateStreamRequest::isGenerateStreamRequest):
        (WebCore::MediaStreamFrameController::GenerateStreamRequest::abort):
        (WebCore::MediaStreamFrameController::GenerateStreamRequest::successCallback):
        (WebCore::MediaStreamFrameController::GenerateStreamRequest::errorCallback):
        (WebCore::::unregisterAll):
        (WebCore::::detachEmbedder):
        (WebCore::MediaStreamFrameController::MediaStreamFrameController):
        (WebCore::MediaStreamFrameController::pageController):
        (WebCore::MediaStreamFrameController::unregister):
        (WebCore::MediaStreamFrameController::enterDetachedState):
        (WebCore::MediaStreamFrameController::isClientAvailable):
        (WebCore::MediaStreamFrameController::disconnectFrame):
        (WebCore::MediaStreamFrameController::parseGenerateStreamOptions):
        (WebCore::MediaStreamFrameController::generateStream):
        (WebCore::MediaStreamFrameController::streamGenerated):
        (WebCore::MediaStreamFrameController::streamGenerationFailed):
        * page/MediaStreamFrameController.h:
        (WebCore::MediaStreamFrameController::ClientBase::ClientBase):
        (WebCore::MediaStreamFrameController::ClientBase::~ClientBase):
        (WebCore::MediaStreamFrameController::ClientBase::mediaStreamFrameController):
        (WebCore::MediaStreamFrameController::ClientBase::clientId):
        (WebCore::MediaStreamFrameController::ClientBase::isStream):
        (WebCore::MediaStreamFrameController::ClientBase::isGeneratedStream):
        (WebCore::MediaStreamFrameController::ClientBase::detachEmbedder):
        (WebCore::MediaStreamFrameController::ClientBase::associateFrameController):
        (WebCore::MediaStreamFrameController::ClientBase::unregisterClient):
        (WebCore::MediaStreamFrameController::StreamClient::StreamClient):
        (WebCore::MediaStreamFrameController::StreamClient::~StreamClient):
        (WebCore::MediaStreamFrameController::StreamClient::isStream):
        (WebCore::MediaStreamFrameController::StreamClient::unregister):
        (WebCore::MediaStreamFrameController::IdGenerator::IdGenerator):
        (WebCore::MediaStreamFrameController::IdGenerator::getNextId):
        (WebCore::MediaStreamFrameController::ClientMapBase::ClientMapBase):
        * page/Navigator.cpp:
        (WebCore::Navigator::webkitGetUserMedia):
        * page/NavigatorUserMediaErrorCallback.h:

2011-05-16  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: debuggerWasEnabled notification should not be send to front-end on navigation.
        https://bugs.webkit.org/show_bug.cgi?id=60888

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::disableDebugger):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::restore):
        (WebCore::InspectorDebuggerAgent::clearFrontend):
        * inspector/InspectorDebuggerAgent.h:

2011-05-16  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Windows build fix.

        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::consoleMarkTimeline):

2011-05-16  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Build fix.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willStartWorkerContext):

2011-05-11  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: use InstrumentingAgents to access agents from InspectorInstrumentation
        https://bugs.webkit.org/show_bug.cgi?id=60624

        InspectorInstrumentation retrieves inspector agents from corresponding InstrumentingAgents
        instance. Each agent notifies InstrumentingAgents whenever it wants to receive notifications
        about changes in WebCore.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::inspectedPageDestroyed):
        * inspector/InspectorAgent.h:
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        (WebCore::InspectorInstrumentation::consoleCount):
        (WebCore::InspectorInstrumentation::startConsoleTiming):
        (WebCore::InspectorInstrumentation::stopConsoleTiming):
        (WebCore::InspectorInstrumentation::consoleMarkTimeline):
        (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsole):
        (WebCore::InspectorInstrumentation::addProfile):
        (WebCore::InspectorInstrumentation::profilerEnabled):
        (WebCore::InspectorInstrumentation::getCurrentUserInitiatedProfileName):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::didClearWindowObjectInWorld):
        (WebCore::InspectorController::inspectedPage):
        * inspector/InspectorController.h:
        * inspector/InspectorDatabaseInstrumentation.h: FAST_RETURN_IF_NO_FRONTENDS macros
        is used for early return in common case when inspector is not opened. In this
        case inspector instrumentation costs one additional check of a static field.
        (WebCore::InspectorInstrumentation::didOpenDatabase):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::instrumentingAgents):
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        (WebCore::InspectorInstrumentation::inspectedPageDestroyedImpl):
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::didModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::didInvalidateStyleAttrImpl):
        (WebCore::InspectorInstrumentation::mouseDidMoveOverElementImpl):
        (WebCore::InspectorInstrumentation::handleMousePressImpl):
        (WebCore::InspectorInstrumentation::characterDataModifiedImpl):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::didScheduleResourceRequestImpl):
        (WebCore::InspectorInstrumentation::didInstallTimerImpl):
        (WebCore::InspectorInstrumentation::didRemoveTimerImpl):
        (WebCore::InspectorInstrumentation::willCallFunctionImpl):
        (WebCore::InspectorInstrumentation::willChangeXHRReadyStateImpl):
        (WebCore::InspectorInstrumentation::willDispatchEventImpl):
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindowImpl):
        (WebCore::InspectorInstrumentation::willEvaluateScriptImpl):
        (WebCore::InspectorInstrumentation::willFireTimerImpl):
        (WebCore::InspectorInstrumentation::willLayoutImpl):
        (WebCore::InspectorInstrumentation::willLoadXHRImpl):
        (WebCore::InspectorInstrumentation::willPaintImpl):
        (WebCore::InspectorInstrumentation::willRecalculateStyleImpl):
        (WebCore::InspectorInstrumentation::applyUserAgentOverrideImpl):
        (WebCore::InspectorInstrumentation::willSendRequestImpl):
        (WebCore::InspectorInstrumentation::continueAfterPingLoaderImpl):
        (WebCore::InspectorInstrumentation::markResourceAsCachedImpl):
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl):
        (WebCore::InspectorInstrumentation::willReceiveResourceDataImpl):
        (WebCore::InspectorInstrumentation::willReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didReceiveContentLengthImpl):
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl):
        (WebCore::InspectorInstrumentation::didFailLoadingImpl):
        (WebCore::InspectorInstrumentation::resourceRetrievedByXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::scriptImportedImpl):
        (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl):
        (WebCore::InspectorInstrumentation::loadEventFiredImpl):
        (WebCore::InspectorInstrumentation::frameDetachedFromParentImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::willWriteHTMLImpl):
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::consoleCountImpl):
        (WebCore::InspectorInstrumentation::startConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::stopConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::consoleMarkTimelineImpl):
        (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::addProfileImpl):
        (WebCore::InspectorInstrumentation::getCurrentUserInitiatedProfileNameImpl):
        (WebCore::InspectorInstrumentation::profilerEnabledImpl):
        (WebCore::InspectorInstrumentation::didOpenDatabaseImpl):
        (WebCore::InspectorInstrumentation::didUseDOMStorageImpl):
        (WebCore::InspectorInstrumentation::didStartWorkerContextImpl):
        (WebCore::InspectorInstrumentation::didCreateWorkerImpl):
        (WebCore::InspectorInstrumentation::didDestroyWorkerImpl):
        (WebCore::InspectorInstrumentation::didCreateWebSocketImpl):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl):
        (WebCore::InspectorInstrumentation::didCloseWebSocketImpl):
        (WebCore::InspectorInstrumentation::networkStateChangedImpl):
        (WebCore::InspectorInstrumentation::updateApplicationCacheStatusImpl):
        (WebCore::InspectorInstrumentation::hasFrontend):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorInstrumentation::cancelPauseOnNativeEvent):
        (WebCore::InspectorInstrumentation::retrieveTimelineAgent):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::bindInstrumentingAgents):
        (WebCore::InspectorInstrumentation::unbindInstrumentingAgents):
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorld):
        (WebCore::InspectorInstrumentation::inspectedPageDestroyed):
        (WebCore::InspectorInstrumentation::willInsertDOMNode):
        (WebCore::InspectorInstrumentation::didInsertDOMNode):
        (WebCore::InspectorInstrumentation::willRemoveDOMNode):
        (WebCore::InspectorInstrumentation::willModifyDOMAttr):
        (WebCore::InspectorInstrumentation::didModifyDOMAttr):
        (WebCore::InspectorInstrumentation::didInvalidateStyleAttr):
        (WebCore::InspectorInstrumentation::mouseDidMoveOverElement):
        (WebCore::InspectorInstrumentation::handleMousePress):
        (WebCore::InspectorInstrumentation::characterDataModified):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequest):
        (WebCore::InspectorInstrumentation::didScheduleResourceRequest):
        (WebCore::InspectorInstrumentation::didInstallTimer):
        (WebCore::InspectorInstrumentation::didRemoveTimer):
        (WebCore::InspectorInstrumentation::willCallFunction):
        (WebCore::InspectorInstrumentation::willChangeXHRReadyState):
        (WebCore::InspectorInstrumentation::willDispatchEvent):
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindow):
        (WebCore::InspectorInstrumentation::willEvaluateScript):
        (WebCore::InspectorInstrumentation::willFireTimer):
        (WebCore::InspectorInstrumentation::willLayout):
        (WebCore::InspectorInstrumentation::willLoadXHR):
        (WebCore::InspectorInstrumentation::willPaint):
        (WebCore::InspectorInstrumentation::willRecalculateStyle):
        (WebCore::InspectorInstrumentation::applyUserAgentOverride):
        (WebCore::InspectorInstrumentation::willSendRequest):
        (WebCore::InspectorInstrumentation::continueAfterPingLoader):
        (WebCore::InspectorInstrumentation::markResourceAsCached):
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCache):
        (WebCore::InspectorInstrumentation::willReceiveResourceData):
        (WebCore::InspectorInstrumentation::willReceiveResourceResponse):
        (WebCore::InspectorInstrumentation::continueAfterXFrameOptionsDenied):
        (WebCore::InspectorInstrumentation::continueWithPolicyDownload):
        (WebCore::InspectorInstrumentation::continueWithPolicyIgnore):
        (WebCore::InspectorInstrumentation::didReceiveContentLength):
        (WebCore::InspectorInstrumentation::didFinishLoading):
        (WebCore::InspectorInstrumentation::didFailLoading):
        (WebCore::InspectorInstrumentation::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorInstrumentation::scriptImported):
        (WebCore::InspectorInstrumentation::domContentLoadedEventFired):
        (WebCore::InspectorInstrumentation::loadEventFired):
        (WebCore::InspectorInstrumentation::frameDetachedFromParent):
        (WebCore::InspectorInstrumentation::didCommitLoad):
        (WebCore::InspectorInstrumentation::willWriteHTML):
        (WebCore::InspectorInstrumentation::didUseDOMStorage):
        (WebCore::InspectorInstrumentation::willStartWorkerContext):
        (WebCore::InspectorInstrumentation::didStartWorkerContext):
        (WebCore::InspectorInstrumentation::didCreateWorker):
        (WebCore::InspectorInstrumentation::didDestroyWorker):
        (WebCore::InspectorInstrumentation::didCreateWebSocket):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorInstrumentation::didCloseWebSocket):
        (WebCore::InspectorInstrumentation::networkStateChanged):
        (WebCore::InspectorInstrumentation::updateApplicationCacheStatus):
        (WebCore::InspectorInstrumentation::hasFrontend):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForContext):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForPage):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForFrame):
        (WebCore::InspectorInstrumentation::instrumentingAgentsWithFrontendForFrame):
        (WebCore::InspectorInstrumentation::instrumentingAgentsWithFrontendForPage):
        (WebCore::InspectorInstrumentation::instrumentingAgentsWithFrontendForContext):
        (WebCore::InspectorInstrumentation::instrumentingAgentsWithFrontendForDocument):

2011-05-16  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Move Resources Panel search to backend
        https://bugs.webkit.org/show_bug.cgi?id=59596

        * inspector/Inspector.json:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::decodeMainResource):
        (WebCore::InspectorPageAgent::resourceContent):
        (WebCore::cachedResourcesForFrame):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::deleteCookie):
        (WebCore::createSearchRegexSource):
        (WebCore::countRegularExpressionMatches):
        (WebCore::buildObjectForSearchMatch):
        (WebCore::InspectorPageAgent::searchInResources):
        (WebCore::InspectorPageAgent::domContentEventFired):
        (WebCore::InspectorPageAgent::loadEventFired):
        (WebCore::InspectorPageAgent::frameNavigated):
        (WebCore::InspectorPageAgent::frameDetached):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._showResourceView):
        (WebInspector.ResourcesPanel.prototype.performSearch.searchInEditedResource):
        (WebInspector.ResourcesPanel.prototype.performSearch.callback):
        (WebInspector.ResourcesPanel.prototype.performSearch):
        (WebInspector.ResourcesPanel.prototype._ensureViewSearchPerformed):
        (WebInspector.ResourcesPanel.prototype._showSearchResult.callback):
        (WebInspector.ResourcesPanel.prototype._showSearchResult):
        (WebInspector.ResourcesPanel.prototype._resetSearchResults):
        (WebInspector.ResourcesPanel.prototype.searchCanceled):
        (WebInspector.ResourcesPanel.prototype.jumpToNextSearchResult):
        (WebInspector.ResourcesPanel.prototype.jumpToPreviousSearchResult):
        (WebInspector.FrameTreeElement.prototype.resourceByURL):
        (WebInspector.FrameResourceTreeElement.prototype._resetSearchResults):
        (WebInspector.FrameResourceTreeElement.prototype.get searchMatchesCount):
        (WebInspector.FrameResourceTreeElement.prototype.searchMatchesFound):
        (WebInspector.ResourcesSearchController):
        (WebInspector.ResourcesSearchController.prototype.nextSearchResult):
        (WebInspector.ResourcesSearchController.prototype.previousSearchResult):
        (WebInspector.ResourcesSearchController.prototype._searchResult):
        (WebInspector.SearchResultsTreeElementsTraverser):
        (WebInspector.SearchResultsTreeElementsTraverser.prototype.first):
        (WebInspector.SearchResultsTreeElementsTraverser.prototype.last):
        (WebInspector.SearchResultsTreeElementsTraverser.prototype.next):
        (WebInspector.SearchResultsTreeElementsTraverser.prototype.previous):
        (WebInspector.SearchResultsTreeElementsTraverser.prototype._traverseNext):
        (WebInspector.SearchResultsTreeElementsTraverser.prototype._elementHasSearchResults):
        (WebInspector.SearchResultsTreeElementsTraverser.prototype._traversePrevious):
        (WebInspector.SearchResultsTreeElementsTraverser.prototype._lastTreeElement):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.createSearchRegex):
        (WebInspector.SourceFrame.prototype.performSearch.doFindSearchMatches):
        (WebInspector.SourceFrame.prototype.performSearch):
        (WebInspector.SourceFrame.prototype.hasSearchResults):
        (WebInspector.SourceFrame.prototype.jumpToFirstSearchResult):
        (WebInspector.SourceFrame.prototype.jumpToLastSearchResult):
        (WebInspector.SourceFrame.prototype.jumpToNextSearchResult):
        (WebInspector.SourceFrame.prototype.jumpToPreviousSearchResult):
        (WebInspector.SourceFrame.prototype.jumpToSearchResult):
        (WebInspector.SourceFrame.prototype._collectRegexMatches):
        * inspector/front-end/utilities.js:
        ():

2011-05-16  Andreas Kling  <kling@webkit.org>

        Reviewed by Darin Adler.

        CSS: Fast path for 'px' lengths should be case-insensitive.
        https://bugs.webkit.org/show_bug.cgi?id=60703

        No new tests, this is an optimization that avoids creating
        a full CSSParser to parse the value.

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

2011-05-16  Naiem Shaik  <naiem.shaik@gmail.com>

        Reviewed by Adam Barth.

        This is for fixing build break in webgl due to https://bugs.webkit.org/show_bug.cgi?id=59861
        The bug raised for fixing this is https://bugs.webkit.org/show_bug.cgi?id=60867

        No new tests. This does not change any functionality.

        * platform/graphics/gtk/GraphicsContext3DGtk.cpp:
        (WebCore::GraphicsContext3D::create):
        * platform/graphics/gtk/GraphicsContext3DInternal.cpp:
        (WebCore::GraphicsContext3DInternal::create):
        * platform/graphics/gtk/GraphicsContext3DInternal.h:

2011-05-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: parse edited attributes by means of InspectorDOMAgent.
        https://bugs.webkit.org/show_bug.cgi?id=60807

        This change moves attribute parsing from the front-end to the backend. 

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setAttribute):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.setAttribute):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted.moveToNextAttributeIfNeeded):
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted):

2011-05-16  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed.

        Switch from Vector<UChar> to StringBuilder in dom/
        https://bugs.webkit.org/show_bug.cgi?id=57843

        Incorporate comment from Darin/Andreas.

        * dom/DatasetDOMStringMap.cpp:
        (WebCore::convertAttributeNameToPropertyName): Use 'character' local, instead of charaters[i].
        (WebCore::convertPropertyNameToAttributeName): Ditto.

2011-05-16  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Fix SourceJavaScriptTokenizer keyword parsing
        https://bugs.webkit.org/show_bug.cgi?id=60773

        * inspector/front-end/SourceJavaScriptTokenizer.js:
        (WebInspector.SourceJavaScriptTokenizer.prototype.nextToken):
        * inspector/front-end/SourceJavaScriptTokenizer.re2js:

2011-05-16  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Darin Adler.

        Switch from Vector<UChar> to StringBuilder in dom/
        https://bugs.webkit.org/show_bug.cgi?id=57843

        * dom/DatasetDOMStringMap.cpp:
        (WebCore::convertAttributeNameToPropertyName):
        (WebCore::convertPropertyNameToAttributeName):
        * dom/Range.cpp:
        (WebCore::Range::toString):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::scriptContent):

2011-05-05  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move double click handling from TextEditor to SourceFrame.
        https://bugs.webkit.org/show_bug.cgi?id=60271

        It is SourceFrame's responsibility to check if content is editable and
        to configure TextEditor component (e.g. set editable range) when user
        tries to initiate editing.

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceSourceFrame.prototype.doubleClick):
        (WebInspector.RevisionSourceFrame.prototype.doubleClick):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.beforeTextChanged):
        (WebInspector.SourceFrame.prototype.afterTextChanged):
        (WebInspector.SourceFrame.prototype.doubleClick):
        (WebInspector.SourceFrame.prototype.commitEditing.didEditContent):
        (WebInspector.SourceFrame.prototype.commitEditing):
        (WebInspector.SourceFrame.prototype.cancelEditing):
        (WebInspector.SourceFrame.prototype._setReadOnly):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.set readOnly):
        (WebInspector.TextViewer.prototype._enterInternalTextChangeMode):
        (WebInspector.TextViewer.prototype._exitInternalTextChangeMode):
        (WebInspector.TextViewer.prototype._doubleClick):
        (WebInspector.TextViewer.prototype._commitEditing):
        (WebInspector.TextViewer.prototype._cancelEditing):
        (WebInspector.TextViewerDelegate.prototype.doubleClick):
        (WebInspector.TextViewerDelegate.prototype.beforeTextChanged):
        (WebInspector.TextViewerDelegate.prototype.afterTextChanged):

2011-05-15  Robert Hogan  <robert@webkit.org>

        Reviewed by Yury Semikhatsky.

        [Qt] Fix crash in inspector/console/console-long-eval-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=60858

        The client may be gone when sendMessageToBackend() is called.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::sendMessageToBackend):

2011-05-16  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Replace direct StringConcatenate usage, by using operator+ (again)
        https://bugs.webkit.org/show_bug.cgi?id=60700

        Remove makeString() usage everywhere, instead directly use operator+.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::listMarkerTextForNodeAndPosition):
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::reportUnsafeAccessTo):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::borderSpacingValue):
        * dom/ExceptionBase.cpp:
        (WebCore::ExceptionBase::ExceptionBase):
        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::handleError):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::processFileDateString):
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::count):
        (WebCore::InspectorConsoleAgent::didReceiveResponse):
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkIfDisplayInsecureContent):
        (WebCore::FrameLoader::checkIfRunInsecureContent):
        (WebCore::FrameLoader::shouldAllowNavigation):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createFromSelection):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::printAccessDeniedMessage):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirective::CSPDirective):
        (WebCore::ContentSecurityPolicy::checkSourceAndReportViolation):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessageTimerFired):
        (WebCore::DOMWindow::crossDomainAccessErrorMessage):
        * page/PageSerializer.cpp:
        (WebCore::SerializerMarkupAccumulator::SerializerMarkupAccumulator):
        (WebCore::SerializerMarkupAccumulator::appendElement):
        (WebCore::PageSerializer::urlForBlankFrame):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageProperty):
        (WebCore::PrintContext::pageSizeAndMarginsInPixels):
        * platform/efl/PlatformKeyboardEventEfl.cpp:
        (WebCore::createKeyMap):
        (WebCore::createWindowsKeyMap):
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::formatMediaControlsCurrentTime):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::animationNameForTransition):
        * platform/graphics/brew/ImageBrew.cpp:
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::animationIdentifier):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::CGImageToDataURL):
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/haiku/ImageBufferHaiku.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageToDataURL):
        * platform/network/CredentialStorage.cpp:
        (WebCore::originStringFromURL):
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::reportErrorToClient):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::setSynchronous):
        * platform/text/wince/TextCodecWinCE.cpp:
        (WebCore::LanguageManager::LanguageManager):
        * platform/win/ClipboardUtilitiesWin.cpp:
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::writeURL):
        * platform/win/FileSystemWin.cpp:
        (WebCore::listDirectory):
        * platform/win/LanguageWin.cpp:
        (WebCore::platformDefaultLanguage):
        * platform/win/PathWalker.cpp:
        (WebCore::PathWalker::PathWalker):
        * platform/win/SystemInfo.cpp:
        (WebCore::osVersionForUAString):
        (WebCore::windowsVersionForUAString):
        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::startStream):
        * svg/SVGAngle.cpp:
        (WebCore::SVGAngle::valueAsString):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::valueAsString):
        * svg/SVGPaint.cpp:
        (WebCore::SVGPaint::cssText):
        * svg/SVGPointList.cpp:
        (WebCore::SVGPointList::valueAsString):
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::valueAsString):
        * svg/SVGTransform.cpp:
        (WebCore::SVGTransform::valueAsString):
        * svg/SVGTransformList.cpp:
        * svg/SVGUseElement.cpp:
        (WebCore::dumpInstanceTree):
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didFail):
        (WebCore::WebSocketChannel::appendToBuffer):
        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readServerHandshake):

2011-05-12  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: inspector console should be searchable
        https://bugs.webkit.org/show_bug.cgi?id=60711

        Search now works for Console panel. It shows number of matching console entries
        and allows to jump to the next matching console entry. Also the matches count
        is dynamically updated when new messages are added to the console.

        ResourceTreeModel and DebuggerPresentationModel now listen to console events instead
        of being called directly from ConsoleView.

        * inspector/front-end/ConsolePanel.js:
        (WebInspector.ConsolePanel):
        (WebInspector.ConsolePanel.prototype.show):
        (WebInspector.ConsolePanel.prototype.hide):
        (WebInspector.ConsolePanel.prototype.searchCanceled):
        (WebInspector.ConsolePanel.prototype.performSearch):
        (WebInspector.ConsolePanel.prototype.jumpToNextSearchResult):
        (WebInspector.ConsolePanel.prototype.jumpToPreviousSearchResult):
        (WebInspector.ConsolePanel.prototype._clearCurrentSearchResultHighlight):
        (WebInspector.ConsolePanel.prototype._jumpToSearchResult):
        (WebInspector.ConsolePanel.prototype._consoleMessageAdded):
        (WebInspector.ConsolePanel.prototype._consoleCleared):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.addMessage):
        (WebInspector.ConsoleView.prototype.clearMessages):
        (WebInspector.ConsoleMessage.prototype.clearHighlight):
        (WebInspector.ConsoleMessage.prototype.highlightSearchResults):
        (WebInspector.ConsoleMessage.prototype.matchesRegex):
        (WebInspector.ConsoleMessage.prototype.toMessageElement):
        (WebInspector.ConsoleCommand.prototype.clearHighlight):
        (WebInspector.ConsoleCommand.prototype.highlightSearchResults):
        (WebInspector.ConsoleCommand.prototype.matchesRegex):
        (WebInspector.ConsoleCommand.prototype.toMessageElement):
        (WebInspector.ConsoleCommand.prototype._formatCommand):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.setFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype._consoleMessageAdded):
        (WebInspector.DebuggerPresentationModel.prototype._consoleCleared):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype._consoleMessageAdded):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._consoleMessagesCleared):
        * inspector/front-end/utilities.js:
        ():

2011-05-16  Adam Barth  <abarth@webkit.org>

        [Qt] QtPlatformPlugin create methods should use PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=60873

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

2011-05-15  Adam Barth  <abarth@webkit.org>

        Attempt to fix Qt build.  (Strict PassOwnPtr fix.)

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQt::GraphicsLayerQt):
        (WebCore::GraphicsLayer::create):

2011-05-15  Adam Barth  <abarth@webkit.org>

        Attempt to fix Qt build.  (Strict PassOwnPtr fix.)

        * platform/text/qt/TextCodecQt.cpp:
        (WebCore::newTextCodecQt):

2011-05-15  Adam Barth  <abarth@webkit.org>

        Attempt to fix Qt build.  (Strict PassOwnPtr fix.)

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyWrapper::release):
        (WebCore::QNetworkReplyWrapper::receiveMetaData):
        (WebCore::QNetworkReplyWrapper::receiveSniffedMIMEType):
        (WebCore::QNetworkReplyHandler::release):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::redirect):
        (WebCore::QNetworkReplyHandler::start):

2011-05-15  Adam Barth  <abarth@webkit.org>

        Attempt to fix Qt build.  (Strict PassOwnPtr fix.)

        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::doEnd):

2011-05-15  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed by Kent Tamura.

        <output>, <meter> and <progress> elements with display:block can be focused if you try to tab to it
        https://bugs.webkit.org/show_bug.cgi?id=60602

        HTMLFormControlElement::isFocusable() returns true when the element is
        visible as a block element.  However, for output, meter, and progress
        elements, the function should not return true unless they have
        tabindex attributes.  Override supportsFocus() of these elements to
        apply the result of Node::supportsFocus() because it takes care of
        whether the element has tabindex or not.

        Test: fast/forms/focus-with-display-block.html

        * html/HTMLFormControlElement.h: Made supportsFocus() protected.
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::supportsFocus): Added.
        * html/HTMLMeterElement.h:
        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::supportsFocus): Added.
        * html/HTMLOutputElement.h:
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::supportsFocus): Added.
        * html/HTMLProgressElement.h:

2011-05-15  Jon Lee  <jonlee@apple.com>

        Reviewed by Dan Bernstein.

        Missing migration from Editor::TextCheckingOptions to TextCheckingType in SpellingCorrectionController.cpp
        https://bugs.webkit.org/show_bug.cgi?id=60870

        * editing/SpellingCorrectionController.cpp:
        (WebCore::SpellingCorrectionController::correctionPanelTimerFired): Migrating to using TextCheckingType

2011-05-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Gavin Barraclough.

        https://bugs.webkit.org/show_bug.cgi?id=59699
        Global object is recreated on teardown, for no good reason
        
        (Another partial fix for <rdar://problem/9417875> REGRESSION: SunSpider
        ~7% slower in browser than on command line (was 17%))
        
        I'm basically rolling out http://trac.webkit.org/changeset/49786 because

        (a) it created this performance problem
        
        and
        
        (b) a more complete fix, which obsoletes http://trac.webkit.org/changeset/49786,
        was committed in http://trac.webkit.org/changeset/53439.
        
        Tested with the file attached to https://bugs.webkit.org/show_bug.cgi?id=29832.

        * page/Frame.cpp:
        (WebCore::Frame::~Frame): Don't create a new window every time we destroy
        a frame.

2011-05-12  MORITA Hajime  <morrita@google.com>

        ShadowContentElement should affect the order of renderer children
        https://bugs.webkit.org/show_bug.cgi?id=59157

        Introduced ShadowContentSelector to collect and forward content
        children for each ShadowContentElement. ShadowRoot collects child
        nodes of its host (we call these children "content children"), and
        the descendant ShadowContentElement pulls that these content
        children and put it under its child during
        ShadowContentElement::attach().
        
        Content children no longer create its renderer during its normal
        attach() phase (called "light" phase). And they create it during
        attach() as a content children instead (called "forwarded phase").
        These phases are detected by NodeRendererFactory and represented
        as NodeRendererFactory::AttachPhase value AttachContentLight and
        AttachContentForwarded.
        
        Tests: fast/html/details-add-details-child-1.html
               fast/html/details-add-details-child-2.html
               fast/html/details-nested-1.html
               fast/html/details-nested-2.html

        * dom/Element.cpp:
        (WebCore::Element::attach):
        (WebCore::Element::childrenChanged):
        * dom/Node.cpp:
        (WebCore::NodeRendererFactory::NodeRendererFactory):
        (WebCore::NodeRendererFactory::shouldCreateRenderer):
        (WebCore::NodeRendererFactory::nextRenderer):
        (WebCore::NodeRendererFactory::createRendererIfNeeded):
        * dom/ShadowRoot.cpp:
        (WebCore::forceReattach):
        (WebCore::ShadowContentSelector::shadowRoot):
        (WebCore::ShadowContentSelector::activeElement):
        (WebCore::ShadowContentSelector::currentInstance):
        (WebCore::ShadowContentSelector::ShadowContentSelector):
        (WebCore::ShadowContentSelector::~ShadowContentSelector):
        (WebCore::ShadowContentSelector::attachChildrenFor):
        (WebCore::ShadowContentElement::attach):
        (WebCore::ShadowRoot::recalcStyle):
        (WebCore::ShadowRoot::activeContentContainer):
        (WebCore::ShadowRoot::hostChildrenChanged):
        (WebCore::ShadowRoot::attach):
        * dom/ShadowRoot.h:
        * html/shadow/ShadowContentElement.h:
        (WebCore::ShadowContentElement::rendererIsNeeded):
        * rendering/RenderDetails.cpp:
        * rendering/RenderDetails.h:

2011-05-13  MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.

        Refactoring: Editor::TextCheckingOptions should be replaced with TextCheckingType
        https://bugs.webkit.org/show_bug.cgi?id=57088

        Removed Editor::TextCheckingOptions and replaced it with TextCheckingTypeMask
        No new tests, no behavior change.

        * editing/Editor.cpp:
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::markMisspellingsAndBadGrammar):
        (WebCore::Editor::resolveTextCheckingTypeMask):
        * editing/Editor.h:
        * platform/text/TextChecking.h: Added TextCheckingTypeShowCorrectionPanel

2011-05-15  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: chromium renderer crash at eval in console.

        https://bugs.webkit.org/show_bug.cgi?id=60616
        Renderer of inspected page is crashing when modal dialog
        has been opened via console eval and page is reloaded.

        Test: inspector/console/console-long-eval-crash.html

        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::dispatchMessageFromFrontend):
        * inspector/InspectorController.h:

2011-05-15  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Maciej Stachowiak.

        Use new AVAssetReferenceRestrictions to prevent cross site media references
        https://bugs.webkit.org/show_bug.cgi?id=60791
        <rdar://problem/9374202>

        Test: http/tests/media/video-cross-site.html

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Set restriction
            to prevent cross-domain references from being followed.

2011-05-15  Arno Renevier  <arno@renevier.net>

        Reviewed by Darin Adler.

        remove unecessary includes from Source/WebCore/html/HTMLFrameElementBase.cpp
        https://bugs.webkit.org/show_bug.cgi?id=60775

        No new tests. This change only impacts compilation.

        * html/HTMLFrameElementBase.cpp:

2011-05-14  Malcolm MacLeod  <malcolm.macleod@tshwanedje.com>

        Reviewed by Kevin Ollivier.

        [wx] Fix strokeArc and fillRoundedRect drawing, and add clipPath support.
        
        https://bugs.webkit.org/show_bug.cgi?id=60847

        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::clipConvexPolygon):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):

2011-05-14  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        HTTP video-on-demand streams frequently have live stream UI
        https://bugs.webkit.org/show_bug.cgi?id=60849
        <rdar://problem/9440502>

        No new tests, we don't currently have tests for http live streams. Changes verified manually.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerDurationChanged): Reset the media controls so
            a duration change which identifies a format will be picked up.
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged): New, reset media controls
            so they can be reconfigured for the media file characteristics.
        * html/HTMLMediaElement.h:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::characteristicChanged): New, pass through to the element.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerCharacteristicChanged):

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::setHasVideo): Call characteristicChanged when
            setting changes.
        (WebCore::MediaPlayerPrivateAVFoundation::setHasAudio): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::setHasClosedCaptions): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::loadedTimeRangesChanged): Move the duration
            change notification logic to invalidateCachedDuration.
        (WebCore::MediaPlayerPrivateAVFoundation::invalidateCachedDuration): New, invalidate
            the cached duration and notify the element when it changes.
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification): Call invalidateCachedDuration
            for the DurationChanged notification.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h: Define DurationChanged.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformDuration): Don't check asset or
            item duration until they have been loaded.
        (WebCore::itemKVOProperties): Listen for duration change.
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): Deal with
            duration change notification.

2011-05-14  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dan Bernstein.

        As per spec, only allow one font family name in a font face rule.
        Other things like initial value, inherited value or multiple names
        are discarded.
        https://bugs.webkit.org/show_bug.cgi?id=60837

        Test: fast/css/invalid-font-family-in-font-face-crash.html

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

2011-05-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make GC validation more aggressive
        https://bugs.webkit.org/show_bug.cgi?id=60802

        This makes GC_VALIDATION much more aggressive in webcore,
        adding logic to every visitChildren method to ensure that
        the structure still has correct flags.

        Additionally every function generated for the dom bindings
        makes use of the new GC_VALIDATION object assertions to further
        ensure that the object appears to be sensible.

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::visitChildren):
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContext::visitChildren):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::JSCSSRule::visitChildren):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::visitChildren):
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        (WebCore::JSCanvasRenderingContext::visitChildren):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::visitChildren):
        (WebCore::JSDOMGlobalObject::setInjectedScript):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitChildren):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::visitChildren):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):
        * bindings/js/JSJavaScriptAudioNodeCustom.cpp:
        (WebCore::JSJavaScriptAudioNode::visitChildren):
        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::visitChildren):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::visitChildren):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::visitChildren):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::visitChildren):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::visitChildren):
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::visitChildren):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::visitChildren):
        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::JSSharedWorker::visitChildren):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::JSStyleSheet::visitChildren):
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::visitChildren):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::visitChildren):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::visitChildren):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::visitChildren):
        * bindings/js/JSXPathResultCustom.cpp:
        (WebCore::JSXPathResult::visitChildren):
        * bindings/scripts/CodeGeneratorJS.pm:

2011-05-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make GC validation more aggressive
        https://bugs.webkit.org/show_bug.cgi?id=60802

        This makes GC_VALIDATION much more aggressive in webcore,
        adding logic to every visitChildren method to ensure that
        the structure still has correct flags.

        Additionally every function generated for the dom bindings
        makes use of the new GC_VALIDATION object assertions to further
        ensure that the object appears to be sensible.

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::visitChildren):
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContext::visitChildren):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::JSCSSRule::visitChildren):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::visitChildren):
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        (WebCore::JSCanvasRenderingContext::visitChildren):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::visitChildren):
        (WebCore::JSDOMGlobalObject::setInjectedScript):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitChildren):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::visitChildren):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):
        * bindings/js/JSJavaScriptAudioNodeCustom.cpp:
        (WebCore::JSJavaScriptAudioNode::visitChildren):
        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::visitChildren):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::visitChildren):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::visitChildren):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::visitChildren):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::visitChildren):
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::visitChildren):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::visitChildren):
        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::JSSharedWorker::visitChildren):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::JSStyleSheet::visitChildren):
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::visitChildren):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::visitChildren):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::visitChildren):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::visitChildren):
        * bindings/js/JSXPathResultCustom.cpp:
        (WebCore::JSXPathResult::visitChildren):
        * bindings/scripts/CodeGeneratorJS.pm:

2011-05-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders Carlsson.

        Make Qt bindings GC safe
        https://bugs.webkit.org/show_bug.cgi?id=60841

        Trying to do cache management by using "this" as a key from a GC
        object's destructor leads to a violation of GC semantics.  Make
        the qt bindings use a Weak<> handle for finalization.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMethod::QtRuntimeMethod):
        (JSC::Bindings::QtRuntimeMethod::~QtRuntimeMethod):
        * bridge/qt/qt_runtime.h:
        (JSC::Bindings::QtRuntimeMethodData::finalize):

2011-05-14  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Make canHaveChildrenForEditing more efficient
        https://bugs.webkit.org/show_bug.cgi?id=53564

        Improved the performance (1-2% in release and 20% in debug) by adding virtual member function
        canContainRangeEndPoint to Node. It returns true whenever the associated node can have be a container
        node for a position.

        As of this revision, canContainRangeEndPoint returns true on Document, DocumentFragment, Text nodes
        and any elements except:

        HTML: applet, br, embed, frame, frameset, hr (unless has children), img, input, keygen,
              meter, object (unless uses fallback content), output, progress, select, and textarea.

        No new tests are added since this change cannot be tested directly.

        * dom/Document.h:
        (WebCore::Document::canContainRangeEndPoint): Added; returns false.
        * dom/DocumentFragment.h:
        (WebCore::DocumentFragment::canContainRangeEndPoint): Added; returns true.
        * dom/Element.h:
        (WebCore::Element::canContainRangeEndPoint): Ditto.
        * dom/Node.h:
        (WebCore::Node::canContainRangeEndPoint): Added; returns false.
        * dom/Text.h:
        (WebCore::Text::canContainRangeEndPoint): Added; returns true.
        * editing/htmlediting.cpp: Removed editingIgnoresContent and canHaveChildrenForEditing.
        * editing/htmlediting.h:
        (WebCore::editingIgnoresContent): Moved from htmlediting.cpp; made it inline.
        (WebCore::canHaveChildrenForEditing): Ditto.
        * html/HTMLBRElement.h:
        (WebCore::HTMLBRElement::canContainRangeEndPoint): Added; returns false.
        * html/HTMLButtonElement.h:
        (WebCore::HTMLDataGridElement::canContainRangeEndPoint): Ditto.
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElementWithState::canContainRangeEndPoint): Ditto.
        * html/HTMLFrameElementBase.h:
        (WebCore::HTMLFrameElementBase::canContainRangeEndPoint): Ditto.
        * html/HTMLImageElement.h:
        (WebCore::HTMLImageElement::canContainRangeEndPoint): Ditto.
        * html/HTMLMeterElement.h:
        (WebCore::HTMLMeterElement::canContainRangeEndPoint): Ditto.
        * html/HTMLOutputElement.h:
        (WebCore::HTMLOutputElement::canContainRangeEndPoint): Ditto.
        * html/HTMLPlugInElement.h:
        (WebCore::HTMLPlugInElement::canContainRangeEndPoint): Ditto.
        * html/HTMLProgressElement.h:
        (WebCore::HTMLProgressElement::canContainRangeEndPoint): Ditto.
        * html/HTMLHRElement.h:
        (WebCore::HTMLHRElement::canContainRangeEndPoint): Added; returns true iff it has children.
        * html/HTMLObjectElement.h:
        (WebCore::HTMLObjectElement::canContainRangeEndPoint): Added; returns true iff it uses fallback
        content.

2011-05-14  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Exiting full screen causes <video> element inline controls to become visible
        https://bugs.webkit.org/show_bug.cgi?id=60142

        Create a queue of elements who must be targeted with webkitfullscreenchange events. Instead of dispatching
        a single event with whatever the current value of m_fullScreenElement is (which may have been cleared, or
        changed since the timer was asked to fire), dispatch one event for each entry in the queue.

        Test: fullscreen/video-controls-override.html

        * dom/Document.cpp:
        (WebCore::Document::webkitDidEnterFullScreenForElement): Push current full screen element onto the
            webkitfullscreenchange event delay queue.
        (WebCore::Document::webkitDidExitFullScreenForElement): Ditto.
        (WebCore::Document::fullScreenElementRemoved): Ditto.
        (WebCore::Document::fullScreenChangeDelayTimerFired): Empty the queue, dispatching a 
            webkitfullscreenchange event for each entry.
        * dom/Document.h:

2011-05-14  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Buildfix for SharedTimerWx.cpp
        https://bugs.webkit.org/show_bug.cgi?id=60829

        * platform/wx/SharedTimerWx.cpp:
        (WebCore::WebKitTimer::WebKitTimer):
        We can't call the constructor of a base class in the body of the constructor.

2011-05-14  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r86477.

        Remove the global namespace prefix from GlobalLock/GlobalUnlock.

        * platform/win/ClipboardUtilitiesWin.cpp:

2011-05-14  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, rolling out r86469 and r86471, because they made hundreds tests crash on Qt.

        Make GC validation more aggressive
        https://bugs.webkit.org/show_bug.cgi?id=60802

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::visitChildren):
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContext::visitChildren):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::JSCSSRule::visitChildren):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::visitChildren):
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        (WebCore::JSCanvasRenderingContext::visitChildren):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::visitChildren):
        (WebCore::JSDOMGlobalObject::setInjectedScript):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitChildren):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::visitChildren):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):
        * bindings/js/JSJavaScriptAudioNodeCustom.cpp:
        (WebCore::JSJavaScriptAudioNode::visitChildren):
        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::visitChildren):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::visitChildren):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::visitChildren):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::visitChildren):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::visitChildren):
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::visitChildren):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::visitChildren):
        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::JSSharedWorker::visitChildren):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::JSStyleSheet::visitChildren):
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::visitChildren):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::visitChildren):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::visitChildren):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::visitChildren):
        * bindings/js/JSXPathResultCustom.cpp:
        (WebCore::JSXPathResult::visitChildren):
        * bindings/scripts/CodeGeneratorJS.pm:

2011-05-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        HTML5 Application Cache Update Failures on Page Refresh
        https://bugs.webkit.org/show_bug.cgi?id=60598
        <rdar://problem/9418639>

        Test: http/tests/appcache/interrupted-update.html

        The reason was two-fold:
        1) Cache group state wasn't fully reset after a failed cache update (or an initial load).
        2) The cache group is not deleted until after after the navigation (from autorelease pool),
        so the failed and sorry old version was picked up by cache selection algorithm.

        The latter is more of a surprising behavior than a problem in itself. Keeping an appcache in
        memory for reload is generally a good thing for performance.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::stopLoading): Added a FIXME about half-baked state resetting
        code that sent me looking for a wrong fix originally.
        (WebCore::ApplicationCacheGroup::stopLoadingInFrame): Stopped load is an update failure like
        any other, so we should call cacheUpdateFailed(), which knows how to reset state.

2011-05-13  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler and Brian Weinstein.

        REGRESSION (WK2): Can't drag and drop a link or image from Safari to Desktop
        https://bugs.webkit.org/show_bug.cgi?id=60819
        <rdar://problem/9370689>

        To support drag-and-drop to the desktop and other windows applications,
        we need to support the fileDescriptor and fileContentZero clipboard formats.
        This patch adds the support for serializing these types across the process boundary.
        It also fixes a regression introduced by r70914, that was causing the content of the
        shortcut files to be corrupted. Using ascii() to convert from String to CString was
        causing '\n' and '\r' to be replaced with '?'.
        
        * platform/DragData.h:
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::fileDescriptorFormat): Moved from ClipboardWin.cpp.
        (WebCore::fileContentFormatZero): Moved from ClipboardWin.cpp.
        (WebCore::getFileDescriptorData): Serialize FileDescriptor type.
        (WebCore::getFileContentData): Serialize FileContent type.
        (WebCore::setFileDescriptorData): Deserialize FileDescriptor type.
        (WebCore::setFileContentData): Deserialize FileContent type.
        (WebCore::setCFData): Added missing initialization of the tymed field
        that was causing the cfHDrop format not to be deserialized correctly. 
        * platform/win/ClipboardUtilitiesWin.h:
        * platform/win/ClipboardWin.cpp:
        (WebCore::createGlobalHDropContent): Changed ascii() to latin1().
        (WebCore::ClipboardWin::writeURL):
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::getDragFileDescriptorData):
        (WebCore::DragData::getDragFileContentData):

2011-05-13  Daniel Cheng  <dcheng@chromium.org>

        Fix the build.

        Add includes that the builders are suddenly complaining about...

        * page/DragState.h:

2011-05-13  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        Improve drag start logic
        https://bugs.webkit.org/show_bug.cgi?id=59409

        Rewrite and simplify the dragging logic to better match IE, Firefox, and the behavior
        defined in the spec. Among other things:
        - draggableNode() no longer returns text nodes when dragging anchors.
        - When starting a drag over an image in a selection, prefer to drag the selection.
        - Several redundant hit tests have been removed.
        - Minor refactoring to make the logic easier to follow.

        Test: platform/mac/editing/pasteboard/drag-selections-to-contenteditable.html

        * WebCore.xcodeproj/project.pbxproj:
        * page/DragController.cpp:
        (WebCore::DragController::draggableNode):
        (WebCore::DragController::startDrag):
        * page/DragController.h:
        * page/DragState.h:
        (WebCore::DragState::shouldDispatchEvents):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::updateDragSourceActionsAllowed):
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::cancelDragAndDrop):
        (WebCore::EventHandler::dragHysteresisExceeded):
        (WebCore::EventHandler::dragSourceEndedAt):
        (WebCore::ExactlyOneBitSet):
        (WebCore::EventHandler::handleDrag):
        * page/EventHandler.h:

2011-05-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make GC validation more aggressive
        https://bugs.webkit.org/show_bug.cgi?id=60802

        This makes GC_VALIDATION much more aggressive in webcore,
        adding logic to every visitChildren method to ensure that
        the structure still has correct flags.

        Additionally every function generated for the dom bindings
        makes use of the new GC_VALIDATION object assertions to further
        ensure that the object appears to be sensible.

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::visitChildren):
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContext::visitChildren):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::JSCSSRule::visitChildren):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::visitChildren):
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        (WebCore::JSCanvasRenderingContext::visitChildren):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::visitChildren):
        (WebCore::JSDOMGlobalObject::setInjectedScript):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitChildren):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::visitChildren):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):
        * bindings/js/JSJavaScriptAudioNodeCustom.cpp:
        (WebCore::JSJavaScriptAudioNode::visitChildren):
        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::visitChildren):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::visitChildren):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::visitChildren):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::visitChildren):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::visitChildren):
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::visitChildren):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::visitChildren):
        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::JSSharedWorker::visitChildren):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::JSStyleSheet::visitChildren):
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::visitChildren):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::visitChildren):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::visitChildren):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::visitChildren):
        * bindings/js/JSXPathResultCustom.cpp:
        (WebCore::JSXPathResult::visitChildren):
        * bindings/scripts/CodeGeneratorJS.pm:

2011-05-13  Mikhail Naganov  <mnaganov@chromium.org>

        Web Inspector: Unreviewed image glyph position fix in CSS after r85588.

        * inspector/front-end/heapProfiler.css:
        (.heapshot-help-status-bar-item .glyph):

2011-05-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        iframe sandbox doesn't properly block popups
        https://bugs.webkit.org/show_bug.cgi?id=60784

        Previously, we weren't implementing this requirement from the spec:

        "This flag also prevents content from creating new auxiliary browsing
        contexts, e.g. using the target attribute or the window.open() method."

        Tests: http/tests/security/no-popup-from-sandbox-top.html
               http/tests/security/no-popup-from-sandbox.html

        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNewWindowPolicy):

2011-05-13  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        click event shouldn't fire when the target is ever removed in mouseup
        https://bugs.webkit.org/show_bug.cgi?id=60600

        Fixed the bug by invalidating m_clickNode when it or one of its ancestors has been removed
        from the document. New behavior matches Internet Explorer and Firefox.

        Tests: fast/events/remove-target-in-mouseup-deep.html
               fast/events/remove-target-in-mouseup-insertback.html
               fast/events/remove-target-in-mouseup-twice.html
               fast/events/remove-target-in-mouseup.html

        * dom/Document.cpp:
        (WebCore::Document::nodeChildrenWillBeRemoved): Calls EventHandler::nodeWillBeRemoved.
        (WebCore::Document::nodeWillBeRemoved): Calls EventHandler::nodeWillBeRemoved.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::nodeWillBeRemoved): Added; invalidates m_clickNode when m_clickNode
        or one of its ancestor is removed from the document.
        * page/EventHandler.h:

2011-05-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Joseph Pecoraro.

        Hide appcache status bar items
        https://bugs.webkit.org/show_bug.cgi?id=60799

        We have a number of non-trivial bugs that make these more misleading than helpful to developers.

        * inspector/front-end/ApplicationCacheItemsView.js: (WebInspector.ApplicationCacheItemsView):
        Just hide the items for now. Removing all support code would be complicated, and not helpful.

2011-05-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        indexedDB is visible inside iframe sandbox
        https://bugs.webkit.org/show_bug.cgi?id=60785

        We're supposed to return a null indexedDB factory when inside an iframe
        sandbox.

        Test: http/tests/security/no-indexeddb-from-sandbox.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitIndexedDB):

2011-05-13  Adam Roben  <aroben@apple.com>

        Fix manual tests that got broken by the move of WebCore into Source

        * manual-tests/plugins/object-clipping.html:
        * manual-tests/pointer-events.html:
        * manual-tests/video-waiting-seeking.html:
        Updated some paths.

2011-05-13  Nat Duca  <nduca@chromium.org>

        Reviewed by James Robinson.

        [chromium] compositing tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=60738

        Bind texture before setting its filtering state.

        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::updateFromPixels):

2011-05-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=60787
        Add some assertions to ApplicationCacheGroup

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource): Check that count doesn't underflow.
        (WebCore::ApplicationCacheGroup::failedLoadingMainResource): Ditto.
        (WebCore::ApplicationCacheGroup::stopLoading): Check that we are the handle's client before
        resetting it.
        (WebCore::ApplicationCacheGroup::update): Check that there isn't a stale current handle or
        resource hanging around.
        (WebCore::ApplicationCacheGroup::didFail): Check that the handle is either manifest or current one.

2011-05-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Prune #includes from FrameView.h (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=60748

        - Replace #includes in FrameView.h of Frame.h and Page.h
          with Color.h, wtf/text/WTFString.h, and the new AdjustViewSizeOrNot.h

        - Update files that were depending on FrameView.h #including Frame.h or
          Page.h.

        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/AccessibilityScrollView.cpp:
        * accessibility/chromium/AXObjectCacheChromium.cpp:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        * css/MediaQueryMatcher.cpp:
        * dom/Range.cpp:
        * editing/SpellingCorrectionController.cpp:
        * history/CachedFrame.cpp:
        * html/HTMLBodyElement.cpp:
        * html/canvas/WebGLRenderingContext.cpp:
        * html/parser/HTMLParserScheduler.cpp:
        * page/AdjustViewSizeOrNot.h: Added.
        * page/EditorClient.h:
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::forceLayoutForPagination):
        * page/FrameView.h:
        * page/PrintContext.cpp:
        (WebCore::PrintContext::begin):
        (WebCore::PrintContext::end):
        * page/chromium/FrameChromium.cpp:
        * page/win/FrameCGWin.cpp:
        * page/win/FrameWin.cpp:
        * platform/efl/PopupMenuEfl.cpp:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        * platform/gtk/WidgetGtk.cpp:
        * plugins/IFrameShimSupport.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBoxModelObject.cpp:
        * rendering/RenderFrameBase.cpp:
        * rendering/RenderIFrame.cpp:
        * rendering/RenderMenuList.cpp:
        * rendering/RenderTextControlSingleLine.cpp:
        * rendering/RenderWidget.cpp:
        * svg/SVGSVGElement.cpp:

2011-05-13  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch paintCollapsedBorder to use IntRect
        https://bugs.webkit.org/show_bug.cgi?id=60739

        Updating the last offending paint function that takes four ints
        instead of an IntRect.

        No new tests as this is simple refactoring.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paint):
        (WebCore::RenderTableCell::paintCollapsedBorder):
        * rendering/RenderTableCell.h:

2011-05-13  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Regression(r75823): Revert initialization back to the first RenderBlock
        in the parent chain.
        https://bugs.webkit.org/show_bug.cgi?id=60780

        Test: fast/block/float/float-not-removed-crash.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::removeFloatingOrPositionedChildFromBlockLists):
        In r75823, I forgot to initialize parentBlock, when the original code
        did and Hyatt did mention in c#5. Now, initializing parentBlock to the
        first RenderBlock in the parent chain.

2011-05-05  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: TextEditor should support editing a range.
        https://bugs.webkit.org/show_bug.cgi?id=59688

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorChunkedPanel.prototype.makeLineAChunk):
        (WebInspector.TextEditorChunkedPanel.prototype._splitChunkOnALine):
        (WebInspector.TextEditorMainPanel.prototype.setEditableRange):
        (WebInspector.TextEditorMainPanel.prototype.clearEditableRange):
        (WebInspector.TextEditorMainPanel.prototype._splitChunkOnALine):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainChunk):
        (WebInspector.TextEditorMainChunk.prototype.set expanded):
        (WebInspector.TextEditorMainChunk.prototype.set readOnly):
        (WebInspector.TextEditorMainChunk.prototype.get readOnly):
        (WebInspector.TextEditorMainChunk.prototype._updateElementReadOnlyState):
        * inspector/front-end/textViewer.css:
        (.text-editor-read-only):

2011-05-05  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: fix source mapping for formatted scripts.
        https://bugs.webkit.org/show_bug.cgi?id=60263

        Source mapping is broken for script chunks that are already formatted at the beginning
        and at the end of the script (see script-formatter.html).

        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter.prototype._didFormatContent):
        (WebInspector.FormattedSourceMapping):
        (WebInspector.FormattedSourceMapping.prototype.originalToFormatted):
        (WebInspector.FormattedSourceMapping.prototype.formattedToOriginal):
        (WebInspector.FormattedSourceMapping.prototype._convertPosition):
        * inspector/front-end/ScriptFormatterWorker.js:
        (onmessage):
        (HTMLScriptFormatter.prototype.format):
        * inspector/front-end/SourceFile.js:
        (WebInspector.FormattedSourceFile.prototype._didRequestContent):
        (WebInspector.SourceMappingForFormattedSourceFile):
        (WebInspector.SourceMappingForFormattedSourceFile.prototype.scriptLocationToSourceLine):
        (WebInspector.SourceMappingForFormattedSourceFile.prototype.sourceLineToScriptLocation):

2011-05-13  Adam Roben  <aroben@apple.com>

        Tell ScrollView's child Widgets that their frame rects have changed when its own frame rect
        changes

        r79167 moved some code from setFrameRect to setBoundsSize, including a call to
        frameRectsChanged. This was done because positionScrollbarLayers, which is called by
        frameRectsChanged, only needs to be called when the bounds change, not when the frame rect
        changes. But the recursive calls inside frameRectsChanged *do* need to be called when the
        frame rect changes.

        This patch moves the positionScrollbarLayers call out of frameRectsChanged, since it needs
        to be called at different times from frameRectsChanged. Then it restores the
        frameRectsChanged call to setFrameRect, which fixes the bug.

        Test: platform/win/plugins/iframe-inside-overflow.html

        Fixes <http://webkit.org/b/60194> <rdar://problem/9383760> REGRESSION (r79167): Windowed
        plugins in Google Reader don't move when the article list is scrolled

        Reviewed by Dan Bernstein.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars): Added a positionScrollbarLayers call here now that
        frameRectsChanged doesn't call it for us. Also added a FIXME because it seems strange to
        call frameRectsChanged here when our frame rect hasn't changed.
        (WebCore::ScrollView::setFrameRect): Added back the frameRectsChanged call that was removed
        in r79167.
        (WebCore::ScrollView::setBoundsSize): Replaced a frameRectsChanged call with a call to
        positionScrollbarLayers. We were only calling frameRectsChanged here in order to get
        positionScrollbarLayers to be called.
        (WebCore::ScrollView::frameRectsChanged): Removed the call to positionScrollbarLayers. All
        callers of frameRectsChanged have been updated to call positionScrollbarLayers if needed.

2011-05-13  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] Share the GTK+ key binding code between WebKit1 and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=59765

        Move the keybinding code form WebKit1/WebKit2 to this utility class. This code is
        almost directly moved from the WebKit layer.

        No new tests. This is covered by the editing tests.

        * GNUmakefile.list.am:
        * platform/gtk/KeyBindingTranslator.cpp: Added.
        (WebCore::backspaceCallback):Added.
        (WebCore::selectAllCallback):Added.
        (WebCore::cutClipboardCallback):Added.
        (WebCore::copyClipboardCallback):Added.
        (WebCore::pasteClipboardCallback):Added.
        (WebCore::toggleOverwriteCallback):Added.
        (WebCore::popupMenuCallback):Added.
        (WebCore::showHelpCallback):Added.
        (WebCore::deleteFromCursorCallback):Added.
        (WebCore::moveCursorCallback):Added.
        (WebCore::KeyBindingTranslator::KeyBindingTranslator):Added.
        (WebCore::KeyBindingTranslator::getEditorCommandsForKeyEvent):Added.
        * platform/gtk/KeyBindingTranslator.h: Added.
        (WebCore::KeyBindingTranslator::addPendingEditorCommand):Added.

2011-05-01  Holger Hans Peter Freyther  <holger@moiji-mobile.com>

        Reviewed by Adam Barth.

        [android] Forward declare types for PlatformWidget and DragImage
        https://bugs.webkit.org/show_bug.cgi?id=59890

        This is a simple build fix.

        * platform/DragImage.h:
        * platform/Widget.h:

2011-05-06  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: fix incremental html highlight.
        https://bugs.webkit.org/show_bug.cgi?id=60163

        SourceTokenizers for html, js, and css are declared to be stateless. However they store some state in
        various ways (like using _internalJavaScriptTokenizer field in html tokenizer, or modifying "static"
        initialCondition object via condition link). This all worked because of another bug in tokenizers registry
        that always returned new tokenizer object.
        For incremental highlighting, we need to be able to stringify tokenizers state and then restore the
        state from string. That's why we need tokenizers to be truly stateless.

        * inspector/front-end/DOMSyntaxHighlighter.js:
        (WebInspector.DOMSyntaxHighlighter.prototype.syntaxHighlightNode):
        * inspector/front-end/SourceCSSTokenizer.js:
        (WebInspector.SourceCSSTokenizer):
        (WebInspector.SourceCSSTokenizer.prototype.createInitialCondition):
        * inspector/front-end/SourceCSSTokenizer.re2js:
        * inspector/front-end/SourceHTMLTokenizer.js:
        (WebInspector.SourceHTMLTokenizer):
        (WebInspector.SourceHTMLTokenizer.prototype.createInitialCondition):
        (WebInspector.SourceHTMLTokenizer.prototype.set line):
        (WebInspector.SourceHTMLTokenizer.prototype.get _internalJavaScriptTokenizer):
        (WebInspector.SourceHTMLTokenizer.prototype.get _internalCSSTokenizer):
        (WebInspector.SourceHTMLTokenizer.prototype.scriptStarted):
        (WebInspector.SourceHTMLTokenizer.prototype.styleSheetStarted):
        (WebInspector.SourceHTMLTokenizer.prototype.nextToken):
        * inspector/front-end/SourceHTMLTokenizer.re2js:
        * inspector/front-end/SourceJavaScriptTokenizer.js:
        (WebInspector.SourceJavaScriptTokenizer):
        (WebInspector.SourceJavaScriptTokenizer.prototype.createInitialCondition):
        * inspector/front-end/SourceJavaScriptTokenizer.re2js:
        * inspector/front-end/SourceTokenizer.js:
        (WebInspector.SourceTokenizer.Registry.prototype.getTokenizer):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter.prototype._highlightLines):

2011-05-13  Adam Roben  <aroben@apple.com>

        Build fix after r86418

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        Made the destructor public so that this class can be used with
        [Pass]OwnPtr.

2011-05-11  Hans Wennborg  <hans@chromium.org>

        Reviewed by Tony Gentilcore.

        IndexedDB: Fix integer comparison bug in LevelDB coding routines
        https://bugs.webkit.org/show_bug.cgi?id=60623

        Fix the code for comparing two int64_t variables.
        Also remove faulty line in ObjectStoreNamesKey::encode which was
        uncovered by the unit test in this patch.

        Very hard to cover with layout tests; covered by unit test.

        * storage/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::compareInts):
        (WebCore::IDBLevelDBCoding::KeyPrefix::compare):
        (WebCore::IDBLevelDBCoding::DatabaseFreeListKey::compare):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::compare):
        (WebCore::IDBLevelDBCoding::IndexMetaDataKey::compare):
        (WebCore::IDBLevelDBCoding::ObjectStoreFreeListKey::compare):
        (WebCore::IDBLevelDBCoding::IndexFreeListKey::compare):
        (WebCore::IDBLevelDBCoding::ObjectStoreNamesKey::encode):
        (WebCore::IDBLevelDBCoding::IndexNamesKey::compare):
        (WebCore::IDBLevelDBCoding::IndexDataKey::compare):

2011-05-13  Andrew Wason  <rectalogic@rectalogic.com>

        Reviewed by Darin Adler.

        GraphicsContext3DQt.cpp fails to compile
        https://bugs.webkit.org/show_bug.cgi?id=60740

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
         Change order of initializers.

2011-05-05  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        IndexedDB: Transaction rollback prevented by open SQLite statement
        https://bugs.webkit.org/show_bug.cgi?id=60032

        Let the IDBTransactionbackendImpl keep track of all open cursors, and
        "close" them (i.e. finalizing the underlying SQLiteStatement) before
        committing or rolling back the transaction. This fixes the problem
        with opened cursors preventing transaction rollback.

        Test: storage/indexeddb/transaction-rollback.html

        * storage/IDBBackingStore.h:
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::~IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::close):
        * storage/IDBCursorBackendImpl.h:
        * storage/IDBLevelDBBackingStore.cpp:
        * storage/IDBSQLiteBackingStore.cpp:
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::abort):
        (WebCore::IDBTransactionBackendImpl::registerOpenCursor):
        (WebCore::IDBTransactionBackendImpl::unregisterOpenCursor):
        (WebCore::IDBTransactionBackendImpl::commit):
        (WebCore::IDBTransactionBackendImpl::closeOpenCursors):
        * storage/IDBTransactionBackendImpl.h:
        * storage/IDBTransactionBackendInterface.h:
        (WebCore::IDBTransactionBackendInterface::registerOpenCursor):
        (WebCore::IDBTransactionBackendInterface::unregisterOpenCursor):

2011-05-13  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Enable OwnPtr strict mode in MediaPlayer
        https://bugs.webkit.org/show_bug.cgi?id=59466

        Let the CreateMediaEnginePlayer function return a PassOwnPtr instead of a raw pointer.
        Also fix the templete argument of OwnPtr for the m_private member variable.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer):
        (WebCore::MediaPlayer::loadWithNextMediaEngine):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::create):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::create):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::create):
        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivatePhonon::create):
        * platform/graphics/qt/MediaPlayerPrivatePhonon.h:
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::create):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::create):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::create):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
        * platform/graphics/wince/MediaPlayerPrivateWinCE.h:

2011-05-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Show Error Messages for Application Cache Errors
        https://bugs.webkit.org/show_bug.cgi?id=41642

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didFail):
        (WebCore::ApplicationCacheGroup::didReceiveManifestResponse):
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::cacheUpdateFailedDueToOriginQuota):
        Added console error logging.

2011-05-12  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Antti Koivisto.

        Part of WebCore should use CFNetwork-based loader on Mac
        https://bugs.webkit.org/show_bug.cgi?id=51836

        Fixes for warnings and other minor cleanups when we enable USE_CFNETWORK on Mac.

        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::cfStreamError):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::allowsAnyHTTPSCertificateHosts):
        (WebCore::clientCerts):
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        (WebCore::didReceiveData):
        (WebCore::didSendBodyData):
        (WebCore::shouldUseCredentialStorageCallback):
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::didReceiveChallenge):
        (WebCore::makeFinalRequest):
        (WebCore::ResourceHandle::willLoadFromCache):

2011-05-12  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Antti Koivisto.

        Part of WebCore should use CFNetwork-based loader on Mac
        https://bugs.webkit.org/show_bug.cgi?id=51836

        Implement ResourceHandle::schedule()/unschedule() based on CF for Mac.

        * WebCore.exp.in:
        * platform/cf/SchedulePair.h:
        * platform/mac/SchedulePairMac.mm:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::schedule):
        (WebCore::ResourceHandle::unschedule):

2011-05-12  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Antti Koivisto.

        Part of WebCore should use CFNetwork-based loader on Mac
        https://bugs.webkit.org/show_bug.cgi?id=51836

        Implement mac specific Authentication functions when using CFNetwork.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/ResourceHandle.h:
        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::AuthenticationChallenge::authenticationClient):
        (WebCore::createCF):
        (WebCore::core):
        * platform/network/cf/AuthenticationCF.h:
        * platform/network/cf/AuthenticationChallenge.h:
        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::core):
        (WebCore::mac):
        * platform/network/mac/CredentialStorageMac.mm:

2011-05-12  Ben Wells  <benwells@chromium.org>

        Reviewed by Simon Fraser.

        RGBA colors in outlines show overpainting at the corners
        https://bugs.webkit.org/show_bug.cgi?id=58999

        Added FIXMEs near temporary $if !USE(SKIA)s, referencing bug 60342.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutline):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintOutline):

2011-05-12  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler and Adam Barth.

        Fix for <rdar://problem/9253454> Solar Walk For Mac: Info window is blank (HTML5 parser)
        https://bugs.webkit.org/show_bug.cgi?id=60685

        Detect the Solar Walk application so we can add targeted parser quirks.

        * WebCore.exp.in:
        * platform/RuntimeApplicationChecks.cpp: (WebCore::applicationIsSolarWalk):
        * platform/RuntimeApplicationChecks.h:

2011-05-12  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Regression caused by changeset 86281
        https://bugs.webkit.org/show_bug.cgi?id=60712

        Changed wording in some tests to reflect AppKit UI change.

        * manual-tests/autocorrection/delete-to-end-of-word-to-show-reversion.html:
        * manual-tests/autocorrection/move-to-end-of-word-to-show-reversion.html:

2011-05-12  Daniel Bates  <dbates@rim.com>

        Attempt to fix the build after changeset 86391 <http://trac.webkit.org/changeset/86391>
        (https://bugs.webkit.org/show_bug.cgi?id=60681).

        * page/PluginHalter.cpp:
        (WebCore::PluginHalter::PluginHalter): Substitute m_client for client in ASSERT_ARG since client is now of type PassOwnPtr
        so it becomes 0 when assigned to another variable.

2011-05-12  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Rename SimpleFontData::scaledFontData to createScaledFontData
        https://bugs.webkit.org/show_bug.cgi?id=60723

        * platform/graphics/SimpleFontData.h:
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        * platform/graphics/haiku/SimpleFontDataHaiku.cpp:
        * platform/graphics/mac/SimpleFontDataMac.mm:
        * platform/graphics/pango/SimpleFontDataPango.cpp:
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        * platform/graphics/win/SimpleFontDataWin.cpp:
        * platform/graphics/wince/SimpleFontDataWinCE.cpp:
        * platform/graphics/wx/SimpleFontDataWx.cpp:

2011-05-12  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Simon Fraser.

        Switch paintOutline to use IntRect
        https://bugs.webkit.org/show_bug.cgi?id=60718

        Switching paintOutline to use an IntRect instead of 4 ints.

        No new tests as this is just refactoring.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintOutline):
        * rendering/RenderObject.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintObject):
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::paint):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paint):

2011-05-12  Anders Carlsson  <andersca@apple.com>

        Address review comment by Dan Bernstein.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::substituteResourceDeliveryTimerFired):

2011-05-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Crash when a plug-in tries to load a resource from the application cache
        https://bugs.webkit.org/show_bug.cgi?id=60735
        <rdar://problem/8216142>

        When loading application cache resources from disk, we would never restore the
        HTTP status code, which means that resources would always have a 0 status code.
        This led to the plug-in stream loader canceling the load, something which the application
        cache loading machinery couldn't deal and thus would crash.

        Fix the reading of the HTTP status code, and make the loader more robust against
        application cache loads being canceled.

        Unfortunately, I couldn't come up with a test for this because I couldn't find a reliable way
        to force the application cache to be read from disk, so all resources would have valid values.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::substituteResourceDeliveryTimerFired):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::loadCache):

2011-05-12  Emil A Eklund  <eae@chromium.org>

        Reviewed by Darin Adler.

        Convert RenderBox::setLocation, setLogicalLocation and setLogicalSize to IntPoint/IntSize
        https://bugs.webkit.org/show_bug.cgi?id=60585

        Refactoring, covered by existing tests.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionLineBox):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::setLogicalLocation):
        (WebCore::RenderBox::setLogicalSize):
        (WebCore::RenderBox::setLocation):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::positionFrames):
        (WebCore::RenderFrameSet::positionFramesWithFlattening):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::layout):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::paintIntoRect):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::adjustLogicalHeightForCaption):
        (WebCore::RenderTable::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::layoutRootBox):

2011-05-12  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] show-composited-layer-tree crashes on null ptr deref
        https://bugs.webkit.org/show_bug.cgi?id=60734

        The tiler is created lazily, so it won't not be around for the first
        dumpLayerProperties call.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::dumpLayerProperties):

2011-05-12  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Enable OwnPtr strict mode in PluginHalter
        https://bugs.webkit.org/show_bug.cgi?id=60681

        Pass PluginHalterClient as (Pass)OwnPtr to Page and PluginHalter.

        * WebCore.exp.in:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::PageClients::PageClients):
        * page/Page.h:
        * page/PluginHalter.cpp:
        (WebCore::PluginHalter::PluginHalter):
        * page/PluginHalter.h:

2011-05-12  Daniel Bates  <dbates@rim.com>

        Reviewed by Adele Peterson.

        Frame's noResize attribute can not be set by JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=14845

        Tests: fast/frames/frame-inherit-noresize-from-frameset.html
               fast/frames/frame-programmatic-noresize.html
               fast/frames/frame-with-noresize-can-be-resized-after-removal-of-noresize.html
               fast/frames/frame-with-noresize-can-be-resized-after-setting-noResize-to-false.html

        Implements support to programmatically allow and disallow frame resizing.

        Currently, HTMLFrameElement::parseMappedAttribute() is hardcoded to disallow frame resize (i.e.
        m_noResize = true) when either the noresize DOM attribute is specified (or existed at some
        point in time) or the value of the noResize attribute is modified. Instead we should allow/disallow
        frame resize depending on the presence of the noresize DOM attribute/the value of the noResize
        attribute.

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::HTMLFrameElement):
        (WebCore::HTMLFrameElement::noResize): Made this a non-inline function since this
        code path isn't performance critical.
        (WebCore::HTMLFrameElement::attach): Removed code to inherit noresize attribute from
        parent <frameset> since this functionality is part of RenderFrameSet::computeEdgeInfo().
        (WebCore::HTMLFrameElement::parseMappedAttribute):
        * html/HTMLFrameElement.h:
        * rendering/RenderFrame.cpp:
        (WebCore::RenderFrame::updateFromElement): Added.
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::notifyFrameEdgeInfoChanged): Added.
        * rendering/RenderFrameSet.h:

2011-05-12  Emil A Eklund  <eae@chromium.org>

        Reviewed by Darin Adler.

        Replace IntPoint with const IntPoint& in RenderFlexibleBox::placeChild
        https://bugs.webkit.org/show_bug.cgi?id=60640

        Pass by const reference instead of by value for consistency reasons.

        Refactoring, covered by existing tests.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::placeChild):
        * rendering/RenderFlexibleBox.h:
        Use const IntPoint& instead of just IntPoint to avoid extra constructor overhead

2011-05-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/9427336> WebFindOptionsAtWordStarts still fails with some Japanese words
        https://bugs.webkit.org/show_bug.cgi?id=60730

        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::isWordStartMatch): Consider all positions before a CJK ideograph as
        word starts.

2011-05-12  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch paintBoxDecorationWithSize to IntRect
        https://bugs.webkit.org/show_bug.cgi?id=60679

        Switching paintBoxDecorationWithSize to take an IntRect instead of 4 ints.

        No new tests as this is simple refactoring.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations): Cleaning up amazingly confusing logic.
        (WebCore::RenderBox::paintBoxDecorationsWithSize):
        * rendering/RenderBox.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::paintBoxDecorations):

2011-05-12  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch paintBoxShadow to use IntRect
        https://bugs.webkit.org/show_bug.cgi?id=60713

        Switching paintBoxShadow from taking four ints to taking an IntRect.

        No new tests since this is refactoring.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxShadow):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorationsWithSize):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBoxDecorations):

2011-05-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        XMLDocumentParserLibxml2 should play nice with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59394

        Properly fix this (formerly rolled out for breaking the build). I think the original
        failure had nothing to do with Deque<OwnPtr>, which in fact appears to work fine.

        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::PendingCallbacks::~PendingCallbacks):
        (WebCore::PendingCallbacks::create):
        (WebCore::PendingCallbacks::appendStartElementNSCallback):
        (WebCore::PendingCallbacks::appendEndElementNSCallback):
        (WebCore::PendingCallbacks::appendCharactersCallback):
        (WebCore::PendingCallbacks::appendProcessingInstructionCallback):
        (WebCore::PendingCallbacks::appendCDATABlockCallback):
        (WebCore::PendingCallbacks::appendCommentCallback):
        (WebCore::PendingCallbacks::appendInternalSubsetCallback):
        (WebCore::PendingCallbacks::appendErrorCallback):
        (WebCore::PendingCallbacks::PendingCallbacks):
        (WebCore::XMLDocumentParser::XMLDocumentParser):

2011-05-12  Daniel Bates  <dbates@rim.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] fast/events/fire-mousedown-while-pressing-mouse-button.html failing
        https://bugs.webkit.org/show_bug.cgi?id=58863

        Fixes an issue where a platform mouse event corresponding to mouse button A
        may be associated with the wrong WebCore mouse button when the event occurs
        while pressing and holding a mouse button B, where A != B.

        For example, a person clicks the middle mouse button while pressing and holding
        the left mouse button. Then we dispatch the following DOM events: mouse down for
        left button, mouse down for left button, mouse up for left button. But, we should
        have dispatched: mouse down for left button, mouse down for middle button, mouse up
        for middle button.

        * platform/qt/PlatformMouseEventQt.cpp:
        (WebCore::mouseEventTypeAndMouseButtonFromQEvent): Added.
        (WebCore::PlatformMouseEvent::PlatformMouseEvent): Modified to call mouseEventTypeAndMouseButtonFromQEvent()
        to determine the WebCore mouse event type and button from the platform-specific event.

2011-05-12  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch paintMask and paintMaskImages off of ints
        https://bugs.webkit.org/show_bug.cgi?id=60578

        Primarily switching paintMask and paintMaskImages to use IntSize and IntRect respectively.
        In the process of that:
         - added an "expand" function to IntRect that allows you to add an IntSize or pair of
           integers to the size portion of an IntRect.
         - changed borderFitAdjust to take an IntRect. It modifies only the x and width attributes.

        No new tests since this refactoring.

        * platform/graphics/IntRect.h:
        (WebCore::IntRect::expand): Added for convenience.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::borderFitAdjust):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorationsWithSize):
        (WebCore::RenderBox::paintMask):
        (WebCore::RenderBox::paintMaskImages):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::borderFitAdjust):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintMask):
        * rendering/RenderFieldset.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::paint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintObject):
        (WebCore::RenderTable::paintMask):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintMask):
        * rendering/RenderTableCell.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):

2011-05-12  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        SimpleFontData::scaledFontData should return a PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=60657

        Let scaledFontData return a PassOwnPtr instead of a raw pointer
        to make SimpleFontData build without LOOSE_PASS_OWN_PTR.

        * platform/graphics/SimpleFontData.h:
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::scaledFontData):
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::scaledFontData):
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::scaledFontData):
        * platform/graphics/haiku/SimpleFontDataHaiku.cpp:
        (WebCore::SimpleFontData::scaledFontData):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::scaledFontData):
        * platform/graphics/pango/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::scaledFontData):
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::scaledFontData):
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::scaledFontData):
        * platform/graphics/wince/SimpleFontDataWinCE.cpp:
        (WebCore::SimpleFontData::scaledFontData):
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::scaledFontData):

2011-05-12  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        Assertion failure when requesting that storage be deleted for an origin without storage.
        https://bugs.webkit.org/show_bug.cgi?id=60709

        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::syncDeleteOrigin):
        If the path to the storage location for the givin origin is empty, return early instead of
        asserting.

2011-05-12  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        [Windows WebKit2] Use cookies set in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=60274

        Make sure any Private Browsing session is based off the default session.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createPrivateBrowsingStorageSession):

2011-05-12  Rob Buis  <rbuis@rim.com>

        Reviewed by Eric Seidel.

        SVGStyledElement::resolveStyle(RenderStyle*) must be removed/fixed!
        https://bugs.webkit.org/show_bug.cgi?id=15479

        Finally remove resolveStyle, it is not used anymore.

        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::childrenChanged):
        * svg/SVGStyledElement.h:

2011-05-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION (r65868): createContextualFragment does not work with <style>
        https://bugs.webkit.org/show_bug.cgi?id=60155

        createContextualFragment doesn't have a spec, so it's hard to tell what
        we're supposed to do exactly.  This patch appears to make our behavior
        more like Firefox and should fix the compat issue with this site.

        Tests: fast/parser/style-in-create-contextual-fragment-head.html
               fast/parser/style-in-create-contextual-fragment.html

        * dom/Element.cpp:
        (WebCore::Element::deprecatedCreateContextualFragment):

2011-05-12  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        WebKit inserts base, link, meta, style, and title elements into an editable region
        when pasting table cells from Excel
        https://bugs.webkit.org/show_bug.cgi?id=60644

        Strip base, link, meta, style, and tile elements from the fragment to be pasted prior
        to the merge. We don't have to strip these elements in performTrivialReplace because
        the function only handles a fragment that consists of exactly one text node.

        Test: editing/pasteboard/paste-head-contents.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::removeHeadContents): Added.
        (WebCore::ReplaceSelectionCommand::doApply): Calls removeHeadContents before handing
        style spans.

2011-05-12  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Simon Fraser.

        Switch calculateBackgroundImageGeometry to use IntRect
        https://bugs.webkit.org/show_bug.cgi?id=60671

        Replacing the four ints passed into calculateBackgroundImageGeometry with an IntRect.

        No new tests since this is just refactoring.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::maskClipRect):
        (WebCore::RenderBox::repaintLayerRectsForImage):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        * rendering/RenderBoxModelObject.h:

2011-05-12  Carol Szabo  <carol@webkit.org>

        Reviewed by David Hyatt.

        Fix reparenting and destruction of counter nodes. 
        https://bugs.webkit.org/show_bug.cgi?id=57929

        Fixed several issues related to not met assertions.
        See below in the per file description.

        Test: fast/css/counters/element-removal-crash.xhtml

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChildren):
        Fixed the fact that Node::detach() used to be called
        while the DOM tree was in an inconsistent state.
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::rendererRemovedFromTree):
        Introduced this function to remove counters from
        descendents of renderers removed from the renderer
        tree not only from the removed renderers themselves.
        * rendering/RenderCounter.h:
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        Changed to call RenderCounter::rendererRemovedFromTree
        instead of RenderCounter::destroyCounters.

2011-05-12  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Merge ApplyPropertyExpanding and ApplyPropertyExpandingSuppressValue classes using template.
        https://bugs.webkit.org/show_bug.cgi?id=60691

        No new tests - refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyExpanding::applyValue):
        Use new template parameter to early exit if needed.
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Specify template parameters for ApplyPropertyExpanding.

2011-05-12  Simon Fraser  <simon.fraser@apple.com>

        Followup to r86351; give the vectors some inline capacity
        to avoid heap allocations in most cases.

        * page/animation/AnimationBase.cpp:
        (WebCore::PropertyWrapperShadow::blendMismatchedShadowLists):

2011-05-12  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Mismatched multiple box-shadows do not transition as expected
        https://bugs.webkit.org/show_bug.cgi?id=60137
        
        When animating between two sets of shadows of different lengths, we need
        to walk the ShadowData list backwards, since it stores the shadows in
        reverse order relative to the CSS (so that painting is back-to-front).
        
        This progresses the behavior of the transitions/multiple-shadow-transitions.html
        test, which is given new expected results.

        Test: transitions/mismatched-shadow-transitions.html

        * page/animation/AnimationBase.cpp:
        (WebCore::shadowListLength): Utility to walk the list of ShadowData and count the number
        of shadows.
        (WebCore::shadowForBlending): Return a ShadowData* that is useful as a blending target,
        based on the shadow type, and whether it's a -webkit-box-shadow.
        (WebCore::PropertyWrapperShadow::blend): Call one of the specialized blend methods.
        (WebCore::PropertyWrapperShadow::blendSimpleOrMatchedShadowLists): Fast path
        for shadow blending, when the list lengths match, or both are single or null shadows.
        (WebCore::PropertyWrapperShadow::blendMismatchedShadowLists): Slower path that builds
        vectors for each list to reverse them.

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

        Attempted WinCairo build fix after r86169, part II

        * platform/network/curl/CredentialStorageCurl.cpp: Added a missing #include.

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

        Fix linker warnings in Production builds

        * WebCore.vcproj/WebCore.vcproj: Exclude JSSVGFEDropShadowElement.cpp from the build in the
        Production configuration, just like in the other configurations. Let VS resort some files
        (again).

2011-05-12  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Adam Roben.

        Autocorrection persists after deleting and retyping the same word at same location.
        https://bugs.webkit.org/show_bug.cgi?id=60555

        Follow-up fix for the 3 editing/deleting tests crashing on GTK,
        Leopard and Windows XP. Don't create the Range if the start of the
        selection has no next position.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::originalStringForAutocorrectionAtBeginningOfSelection):

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

        Attempted WinCairo build fix after r86169

        * WebCore.vcproj/WebCore.vcproj: Added CredentialStorageCurl.cpp. Also let VS do what it
        wants.

        * platform/network/curl/CredentialStorageCurl.cpp: Added.
        (WebCore::CredentialStorage::getFromPersistentStorage): Stubbed out.

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

        Build fixes after r86325

        * editing/SpellingCorrectionController.cpp:
        * editing/SpellingCorrectionController.h:
        Added missing declarations/#includes.

2011-05-12  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed.

        String operator+ reallocates unnecessary when concatting > 2 strings
        https://bugs.webkit.org/show_bug.cgi?id=58420

        Attempt to fix the WinCE build. WinCE/WinCairo still won't link because of unresolved symbols, hmm. If we had EWS for those, I would have caught the problem earlier.

        * platform/wince/FileSystemWinCE.cpp:
        (WebCore::listDirectory):

2011-05-12  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed.

        String operator+ reallocates unnecessary when concatting > 2 strings
        https://bugs.webkit.org/show_bug.cgi?id=58420

        Fix fast/forms/input-image-submit.html regression, seens on the bots - by removing a last-minute typo: s/!!/!/

        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::appendFormData):

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

        Reviewed by Eric Seidel.

        REGRESSION(79985): Changes in fill-opacity should trigger repaint but don't
        https://bugs.webkit.org/show_bug.cgi?id=59941

        Also consider fill-opacity when determining whether StyleDifferenceRepaint is needed.

        Test: svg/custom/fill-opacity-update.svg

        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff):

2011-05-12  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Darin Adler.

        String operator+ reallocates unnecessary when concatting > 2 strings
        https://bugs.webkit.org/show_bug.cgi?id=58420

        Provide a faster String append operator. See Source/JavaScriptCore/ChangeLog for details.

        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::handleElementAttributes):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::shouldAddNamespaceElement):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::hash):
        (WebCore::HTMLAnchorElement::search):
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::appendFormData):
        * html/parser/HTMLTreeBuilder.cpp:
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::passesAccessControlCheck):
        * page/Location.cpp:
        (WebCore::Location::search):
        (WebCore::Location::hash):
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::platform):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::writeImageToDataObject):
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::fillSelectionData):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::encodeBasicAuthorization):
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::copyCFStreamDescription):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::encodeBasicAuthorization):
        * workers/WorkerLocation.cpp:
        (WebCore::WorkerLocation::search):
        (WebCore::WorkerLocation::hash):

2011-05-06  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move agents from InspectorAgent to InspectorController
        https://bugs.webkit.org/show_bug.cgi?id=60359

        All inspector agents are now created and owned by InspectorController which
        in turned is owned by the inspected Page. InspectorInstrumentation gets access
        to the instrumenting agents by means of InspectorAgent::instrumentingAgents().

        In addition to managing inspector agents lifetime InspectorController sets
        InspectorFronted on the agents when the front-end is connected.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::~InspectorAgent):
        (WebCore::InspectorAgent::inspectedPageDestroyed):
        (WebCore::InspectorAgent::restore):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::clearFrontend):
        * inspector/InspectorAgent.h: all accessors to other agents were removed along with
        the agents themselves from InspectorAgent. Every agent that depends on some other agents
        receives pointers to them explicitely in its constructor. All access to the agents
        from WebCore should go through InspectorInstrumentation which retrieves corresponding
        agents using InstrumentingAgents structure which represents the set of active agents.
        (WebCore::InspectorAgent::instrumentingAgents):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::startTimelineProfiler):
        (WebCore::InspectorController::stopTimelineProfiler):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::restoreInspectorStateFromCookie):
        (WebCore::InspectorController::drawNodeHighlight):
        (WebCore::InspectorController::inspect):
        (WebCore::InspectorController::timelineProfilerEnabled):
        (WebCore::InspectorController::hideHighlight):
        (WebCore::InspectorController::highlightedNode):
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        (WebCore::InspectorController::profilerEnabled):
        (WebCore::InspectorController::debuggerEnabled):
        (WebCore::InspectorController::disableDebugger):
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        (WebCore::InspectorController::isRecordingUserInitiatedProfile):
        (WebCore::InspectorController::resume):
        * inspector/InspectorController.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::didInvalidateStyleAttrImpl):
        (WebCore::InspectorInstrumentation::characterDataModifiedImpl):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didFailLoadingImpl):
        (WebCore::InspectorInstrumentation::resourceRetrievedByXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::consoleCountImpl):
        (WebCore::InspectorInstrumentation::startConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::stopConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::addProfileImpl):
        (WebCore::InspectorInstrumentation::getCurrentUserInitiatedProfileNameImpl):
        (WebCore::InspectorInstrumentation::profilerEnabledImpl):
        (WebCore::InspectorInstrumentation::cancelPauseOnNativeEvent):
        * page/Page.cpp:
        (WebCore::Page::~Page): we send two notifications when inspected Page is being
        destroyed: one to the inspector instrumentation and another one to the InspectorController
        which is owned by the Page.

2011-05-12  Tony Gentilcore  <tonyg@chromium.org>

        Build fix: include ExceptionCode.h
        https://bugs.webkit.org/show_bug.cgi?id=60694

        * dom/Range.cpp:

2011-05-10  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Adler.

        Perform some forward declarations suggested by include-what-you-use
        https://bugs.webkit.org/show_bug.cgi?id=60545

        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        * dom/DocumentMarkerController.cpp:
        * dom/Position.cpp:
        * dom/PositionIterator.cpp:
        * dom/Range.cpp:
        * editing/ApplyBlockElementCommand.cpp:
        * editing/ApplyStyleCommand.cpp:
        * editing/Editor.cpp:
        * editing/EditorCommand.cpp:
        * editing/FrameSelection.cpp:
        * editing/HTMLInterchange.cpp:
        * editing/IndentOutdentCommand.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        * editing/SpellChecker.h:
        * editing/SpellingCorrectionCommand.cpp:
        * editing/SpellingCorrectionController.h:
        * editing/TextCheckingHelper.cpp:
        * editing/TextIterator.h:
        * editing/htmlediting.h:
        * editing/markup.cpp:
        * editing/visible_units.cpp:
        * editing/visible_units.h:
        * fileapi/DOMFileSystem.cpp:
        * fileapi/DirectoryReaderSync.cpp:
        * fileapi/DirectoryReaderSync.h:
        * fileapi/FileEntry.h:
        * fileapi/FileWriter.h:
        * fileapi/FileWriterBase.h:
        * fileapi/FileWriterSync.h:
        * history/CachedFrame.cpp:
        * history/CachedPage.cpp:
        * history/HistoryItem.cpp:
        * history/HistoryItem.h:
        * history/PageCache.h:
        * loader/HistoryController.h:
        * loader/PingLoader.h:
        * loader/ResourceLoader.h:
        * loader/appcache/DOMApplicationCache.h:
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.cpp:
        * loader/cache/CachedFont.h:
        * loader/cache/CachedResourceRequest.cpp:
        * loader/cache/CachedResourceRequest.h:
        * loader/cache/MemoryCache.h:
        * notifications/Notification.cpp:
        * notifications/Notification.h:
        * notifications/NotificationCenter.cpp:
        * notifications/NotificationCenter.h:
        * page/Chrome.cpp:
        * page/Chrome.h:
        * page/DOMSelection.cpp:
        * page/DOMTimer.h:
        * page/DOMWindow.cpp:
        * page/EventHandler.cpp:
        * page/FocusController.h:
        * page/Geolocation.cpp:
        * page/Geolocation.h:
        * page/History.cpp:
        * rendering/RenderListBox.cpp:
        * workers/WorkerContext.cpp:

2011-05-12  Yuta Kitamura  <yutak@chromium.org>

        Unreviewed, another attempt of build fix.

        * websockets/CloseEvent.h:
        * websockets/CloseEvent.idl:

2011-05-12  Yuta Kitamura  <yutak@chromium.org>

        Unreviewed, trying to fix Qt minimal compile.

        * websockets/CloseEvent.idl:

2011-05-12  ojab  <ojab@ojab.ru>

        Reviewed by Eric Seidel.

        Fix build with --disable-video --enable-fullscreen-api
        https://bugs.webkit.org/show_bug.cgi?id=60542

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):

2011-05-12  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        WebSocket add new event: CloseEvent
        https://bugs.webkit.org/show_bug.cgi?id=35573

        Original patch was written by Fumitoshi Ukai <ukai@chromium.org>.
        I added CloseEvent constructor to DOMWindow, so it can be referred
        in the new test (close-event.html).

        Test: http/tests/websocket/tests/close-event.html

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):
        * dom/Event.cpp:
        (WebCore::Event::isCloseEvent):
        * dom/Event.h:
        * page/DOMWindow.idl: Add CloseEvent constructor.
        * websockets/CloseEvent.h: Added.
        (WebCore::CloseEvent::isCloseEvent):
        (WebCore::CloseEvent::create):
        (WebCore::CloseEvent::initCloseEvent):
        (WebCore::CloseEvent::wasClean):
        (WebCore::CloseEvent::CloseEvent):
        * websockets/CloseEvent.idl: Added.
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::didClose):

2011-05-12  Ben Wells  <benwells@chromium.org>

        Reviewed by Simon Fraser.

        RGBA colors in outlines show overpainting at the corners
        https://bugs.webkit.org/show_bug.cgi?id=58999

        Tests: fast/borders/outline-alpha-block.html
               fast/borders/outline-alpha-inline.html

        Updated baseline images for tests with rgba outlines:
               fast/box-shadow/box-shadow-radius.html
               fast/layers/self-painting-outline.html

         * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutline):
        (WebCore::RenderInline::paintOutlineForLine):
        * rendering/RenderInline.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintOutline):

2011-05-11  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Rename Widget::pos()
        https://bugs.webkit.org/show_bug.cgi?id=60575

        Renaming Widget::pos() to the more-descriptive location().

        No new tests as this is a simple rename

        * page/FrameView.cpp:
        (WebCore::FrameView::create):
        * platform/Widget.h:
        (WebCore::Widget::location):
        (WebCore::Widget::resize):

2011-05-10  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        Crashes if the document inside iframe is removed during pasting some text into it.
        https://bugs.webkit.org/show_bug.cgi?id=60534

        Added missing null check.
        
        Test: editing/pasteboard/paste-removing-iframe.html

        * editing/Editor.cpp:
        (WebCore::Editor::shouldChangeSelection):

2011-05-11  Brian Salomon  <bsalomon@google.com>

        Reviewed by Eric Seidel.

        Handle case when GrContext creation fails
        https://bugs.webkit.org/show_bug.cgi?id=60410

        Exercised by all canvas tests when DRT is run with skia-gpu

        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::grContext):

2011-05-11  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Andreas Kling.

        Remove empty class CallbackGuard
        https://bugs.webkit.org/show_bug.cgi?id=60610

        CallbackGuard was only ever used on Tiger and it is now an empty class. Remove all uses of it.

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsDelegate connectionShouldUseCredentialStorage:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate connection:didCancelAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsDelegate connection:canAuthenticateAgainstProtectionSpace:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveData:lengthReceived:]):
        (-[WebCoreResourceHandleAsDelegate connection:willStopBufferingData:]):
        (-[WebCoreResourceHandleAsDelegate connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]):
        (-[WebCoreResourceHandleAsDelegate connection:didFailWithError:]):
        (-[WebCoreResourceHandleAsDelegate connection:willCacheResponse:]):

2011-05-11  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Implement CSSPropertyMargin and CSSPropertyPadding in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=60609

        No new tests - refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Initialise CSSPropertyMargin and CSSPropertyPadding handlers.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove unused implementations.

2011-05-11  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        [wx] Implement more clipping functions for wxWebKit.
        
        https://bugs.webkit.org/show_bug.cgi?id=60662

        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipOut):

2011-05-11  Damian Kaleta  <dkaleta@apple.com>

        Reviewed by Brady Eidson.

        Need a new API that will try to restore the scrollbars' position, when navigating in the back/forward history
        https://bugs.webkit.org/show_bug.cgi?id=60674

        * WebCore.exp.in: Export restoreScrollPositionAndViewState()

2011-05-11  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch paintFillLayer and its progeny to use IntRect instead of four ints
        https://bugs.webkit.org/show_bug.cgi?id=60596

        Changing integers passed into paintFillLayer and other derivatives to IntRects
        and IntSizes that reflect their function.

        No new tests since this is just refactoring.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintFillLayers):
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxFillLayers):
        (WebCore::RenderBox::paintBoxDecorationsWithSize):
        (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):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):

2011-05-11  Nat Duca  <nduca@chromium.org>

        Reviewed by James Robinson.

        [chromium] Use mapTexSubImage2D for tile uploads if available
        https://bugs.webkit.org/show_bug.cgi?id=60008

        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::LayerTilerChromium):
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::updateFromPixels):
        * platform/graphics/chromium/LayerTilerChromium.h:

2011-05-11  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implements a disable appearance for Media Elements of Qt port.
        https://bugs.webkit.org/show_bug.cgi?id=60561

        Implements a disable appearance for the media controls of the Qt port
        when the media is not yet available.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::mediaElementCanPlay):
        (WebCore::RenderThemeQt::getMediaControlForegroundColor):
        (WebCore::RenderThemeQt::paintMediaSliderThumb):

2011-05-11  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        input type=email is too strict
        https://bugs.webkit.org/show_bug.cgi?id=55988

        Follow the updated specification.

        * html/EmailInputType.cpp: Update the pattern to allow a domain part without periods.

2011-05-11  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Autocorrection persists after deleting and retyping the same word at same location.
        https://bugs.webkit.org/show_bug.cgi?id=60555
        <rdar://problem/9373915>

        This patch intends to alleviate the issue of repetitively applying the same autocorrection
        when user delete and retype the same word at the same location. This scenario is especially
        common when autocorrection modifies the first letter of the word.

        This patch consists following major changes:
        1. Added a new marker type, DeletedAutocorrection. This marker is added to the whitespace that
           precedes a deleted autocorrection. If the user later types the same original word at after
           this whitespace, the autocorrection will not be applied again.
        2. In DeleteSelectionCommand, added code to notify SpellingCorrectionController about the
           autocorrection that has just been deleted.
        3. In Editor and SpellingCorrectionController, added code to apply the marker and to suppress
           autocorrection when necessary.
        4. The change in CompositeEditCommand::replaceTextInNode is necessary for preserving markers.
           Otherwise, we will loose the DeletedAutocorrection on the whitespace, when inserting text
           after the whitespace.

        Test: platform/mac/editing/spelling/delete-autocorrected-word-2.html

        * dom/DocumentMarker.h: Added new marker type DeletedAutocorrection.
        (WebCore::DocumentMarker::AllMarkers::AllMarkers):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::markersInRange): Support querying multiple marker types.
        * dom/DocumentMarkerController.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::replaceTextInNodeAndPreserveMarkers):
        (WebCore::CompositeEditCommand::rebalanceWhitespaceOnTextSubstring):
        (WebCore::CompositeEditCommand::prepareWhitespaceAtPositionForSplit):
        * editing/CompositeEditCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::DeleteSelectionCommand):
        (WebCore::DeleteSelectionCommand::fixupWhitespace):
        (WebCore::DeleteSelectionCommand::originalStringForAutocorrectionAtBeginningOfSelection): Extracting
           the original string if we are deleting an autocorrection.
        (WebCore::DeleteSelectionCommand::doApply): Notify editor about the deleted autocorrection and its position.
        * editing/DeleteSelectionCommand.h:
        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Moved all logic of determining
           when to suppress an autocorrection into SpellingCorrectionController.
        (WebCore::Editor::deletedAutocorrectionAtPosition):
        * editing/Editor.h:
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/SpellingCorrectionController.cpp:
        (WebCore::SpellingCorrectionController::respondToAppliedEditing):
        (WebCore::SpellingCorrectionController::deletedAutocorrectionAtPosition):
        (WebCore::SpellingCorrectionController::markPrecedingWhitespaceForDeletedAutocorrectionAfterCommand):
        (WebCore::SpellingCorrectionController::processMarkersOnTextToBeReplacedByResult):
        * editing/SpellingCorrectionController.h:
        (WebCore::SpellingCorrectionController::UNLESS_ENABLED):
        * editing/visible_units.cpp:
        (WebCore::isStartOfWord):
        * editing/visible_units.h:
        * manual-tests/autocorrection/spell-checking-after-reversion.html:

2011-05-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9414874> Layout unnecessarily interrupts smooth scrolling at msnbc.com
        https://bugs.webkit.org/show_bug.cgi?id=60677

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars): Only perform an immediate scroll, aborting any running
        animation, if the new scroll offset computed here is different from the current scroll offset.

2011-05-11  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        <input pattern="1|10" value="10"> doesn't work correctly.
        https://bugs.webkit.org/show_bug.cgi?id=60619

        Fixes a bug that patternMismatch returns a wrong result if
         - a whole value matches to a pattern,
         - a sub-string of the value also matches to the pattern, and
         - the sub-string matching has priority.

        * html/BaseTextInputType.cpp:
        (WebCore::BaseTextInputType::patternMismatch):
          Enclose the specified pattern with ^( and )$.

2011-05-11  Zelidrag Hornung  <zelidrag@chromium.org>

        Reviewed by David Levin.

        Prevented DOMFileSystemBase from imposing file naming restrictions on
        external file systems.

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

        There are no new tests for this change since it requires the presence
        of external file system provider which is specific to the platform host
        process. Chromium implementation will test this within its extension API
        test suite.

        * fileapi/DOMFileSystemBase.cpp:
        (WebCore::pathToAbsolutePath):
        (WebCore::DOMFileSystemBase::getFile):
        (WebCore::DOMFileSystemBase::getDirectory):

2011-05-11  Antoine Labour  <piman@chromium.org>

        Reviewed by David Levin.

        Expose shouldBufferData to ThreadableLoaderOptions to be able to disable buffering of the
        loaded resource.
        https://bugs.webkit.org/show_bug.cgi?id=60656

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        Pass the shouldBufferData to the resource load scheduler, forcing it to true for the
        preflight request.
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::scheduleSubresourceLoad):
        Pass through shouldBufferData to SubresourceLoader::create
        * loader/ResourceLoadScheduler.h:

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        Set shouldBufferData on the newly created loader

        * loader/SubresourceLoader.h:

        * loader/ThreadableLoader.h:
        (WebCore::ThreadableLoaderOptions::ThreadableLoaderOptions):
        Add shouldBufferData to the options, defaulting to true.

2011-05-11  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Adam Barth.

        Adding a Content-Type parser. This is needed for MHTML support.
        https://bugs.webkit.org/show_bug.cgi?id=60637

        (WebCore::ScriptController::disableEval):
        * platform/network/ContentTypeParser.cpp: Added.
        * platform/network/ContentTypeParser.h: Added.

2011-05-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Steve Falkenburg.

        [Windows WebKit2] Use cookies set in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=60274

        Share the default storage session between the UI and Web Processes.

        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::defaultSessionCookieStorage):
        Keep track of the default storage session cookie storage.
        (WebCore::currentCookieStorage):
        Call defaultCookieStorage to get the default cookie storage.
        (WebCore::defaultCookieStorage):
        If there is a default storage session cookie storage, prefer that over getting the default
        cookie storage. In the Web Process, asking CFNetwork for the default cookie storage directly
        without specifying a storage session will not get the cookie storage being shared by the UI
        and Web Processes.

        * platform/network/ResourceHandle.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        Make sure to set the current storage session on any requests used by the Web
        Process before CFNetwork has to do anything with them, in order for CFNetwork to avoid
        doing anything with the Web Process's default storage session (which is not the one shared
        with the UI Process).
        (WebCore::makeFinalRequest):
        Ditto.
        (WebCore::ResourceHandle::willSendRequest):
        Ditto.
        (WebCore::ResourceHandle::currentStorageSession):
        If there is a Private Browsing storage session, return that.
        If not, on Windows return the default storage session that is being shared with the UI
        Process and on Mac return 0.
        (WebCore::defaultCFURLStorageSession):
        (WebCore::ResourceHandle::setDefaultStorageSession):
        (WebCore::ResourceHandle::defaultStorageSession):

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        Make sure to set the current storage session on any requests used by the Web
        Process before CFNetwork has to do anything with them, in order for CFNetwork to avoid
        doing anything with the Web Process's default storage session (which is not the one shared
        with the UI Process).

2011-05-11  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by David Kilzer.

        Remove wml directory from include lists
        https://bugs.webkit.org/show_bug.cgi?id=60646

        Remove wml dir from CMake, Autotools and qmake build systems since WML
        was removed in r85256.

        No new tests since no change in functionality.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.pri:

2011-05-11  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Antonio Gomes.

        [CMAKE] Move EFL-specific file to CMakeListsEfl.txt
        https://bugs.webkit.org/show_bug.cgi?id=60642

        Move file EFL-specific file to the CMakeListsEfl.txt file. This implies
        having to include CMakeLists${PORT}.txt before the ADD_CUSTOM_COMMAND
        calls, since they depend on lists that now may change inside a port
        like WebCore_USER_AGENT_STYLE_SHEETS.

        No new tests since no change in functionality.

        * CMakeLists.txt: remove css file specific to EFL port.
        * CMakeListsEfl.txt: move file here.

2011-05-11  Tao Bai  <michaelbai@chromium.org>

        Reviewed by David Kilzer.

        Return empty Favicon URL instead of default one when the frame isn't top level one
        https://bugs.webkit.org/show_bug.cgi?id=60527
        This issue was discovered by chromium browser test.

        * dom/Document.cpp:
        (WebCore::Document::setIconURL):
        Restored original logic which was inadvertently flipped by http://trac.webkit.org/changeset/85785.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::iconURLs):
        (WebCore::FrameLoader::fillIconURL):
        Restored original logic, the empty URL should be returned instead of default one. The client (at
        least chromium) may rely on the returned value to decided whether the favicon should be changed.

2011-05-11  Nat Duca  <nduca@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Make throttling of WebGL based on webgl frames, not compositor frames
        https://bugs.webkit.org/show_bug.cgi?id=60508

        When a WebGL layer is dirtied outside of a requestAnimFrame callback, we need
        to prevent WebGL from running too far ahead of the GPU process. The current
        throttling mechanism relies on prepareTexture being called for every WebGL frame.
        However, in a non-requestAnimFrame application, multiple frames might get created
        before the compositor runs and calls prepareTexture on the surface.

        To address this, we post a task that calls a special rate limiting GL extension on
        the WebGL context after every WebGL "frame." When the compositor runs, it calls
        prepareTexture as usual.

        * platform/graphics/chromium/Extensions3DChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::setIsAnimating):
        (WebCore::LayerRendererChromium::isAnimating):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromiumRateLimitTask::WebGLLayerChromiumRateLimitTask):
        (WebCore::WebGLLayerChromiumRateLimitTask::run):
        (WebCore::WebGLLayerChromiumRateLimitTask::cancel):
        (WebCore::WebGLLayerChromium::WebGLLayerChromium):
        (WebCore::WebGLLayerChromium::~WebGLLayerChromium):
        (WebCore::WebGLLayerChromium::setTextureUpdated):
        (WebCore::WebGLLayerChromium::setContext):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        (WebCore::WebGLLayerChromium::context):

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 12/12: Enable accelerated animations in texture-mapper. The entire interpolation
        mechanism happens inside TextureMapper, and we interpolate right before we paint.

        No new tests. Tests in LayoutTests/compositing cover this.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::syncCompositingState):
        (WebCore::GraphicsLayerTextureMapper::addAnimation):
        (WebCore::GraphicsLayerTextureMapper::pauseAnimation):
        (WebCore::GraphicsLayerTextureMapper::removeAnimation):
        (WebCore::GraphicsLayerTextureMapper::animationStartedTimerFired):
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::descendantsOrSelfHaveRunningAnimations):
        (WebCore::normalizedAnimationValue):
        (WebCore::TextureMapperNode::applyOpacityAnimation):
        (WebCore::solveEpsilon):
        (WebCore::solveCubicBezierFunction):
        (WebCore::solveStepsFunction):
        (WebCore::applyTimingFunction):
        (WebCore::TextureMapperNode::applyTransformAnimation):
        (WebCore::TextureMapperNode::applyAnimationFrame):
        (WebCore::TextureMapperNode::applyAnimation):
        (WebCore::TextureMapperNode::hasRunningOpacityAnimation):
        (WebCore::TextureMapperNode::hasRunningTransformAnimation):
        (WebCore::TextureMapperNode::syncAnimations):
        (WebCore::copyTimingFunction):
        (WebCore::copyAnimationValue):
        (WebCore::TextureMapperAnimation::TextureMapperAnimation):
        * platform/graphics/texmap/TextureMapperNode.h:
        (WebCore::TextureMapperAnimation::create):

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 11/12: Patch PluginView to build with TextureMapper on Linux.

        No new tests. This is a build fix.

        * platform/qt/QWebPageClient.h:
        (QWebPageClient::setRootGraphicsLayer):

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 10/12: Glue the TextureMapper refactoring into Webkit(1).
        Pass a GraphicsLayer* instead of a PlatformLayer* to the QWebPageClient.

        No new tests. Tests in LayoutTests/compositing cover this.

        * platform/qt/QWebPageClient.h:
        (QWebPageClient::setRootGraphicsLayer):

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 9/12: Refactor TextureMapperNode for performance, readability and accuracy.
        Changes include:
        1. Support the new TextureMapperPlatformLayer for media & WebGL.
        2. Use a pool for intermediate surfaces, to avoid constant allocating/freeing of textures.
        3. Divide computation operations to different smaller functions.
        4. Get rid of scissor/clip layers, use transformed clip instead.
        5. Allow tiling for big layers.

        No new tests. Tests in LayoutTests/compositing cover this.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::setNeedsDisplayInRect):
        (WebCore::GraphicsLayerTextureMapper::setContentsToMedia):
        (WebCore::GraphicsLayerTextureMapper::platformLayer):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (WebCore::GraphicsLayerTextureMapper::setContentsNeedsDisplay):
        (WebCore::GraphicsLayerTextureMapper::setContentsToCanvas):
        (WebCore::GraphicsLayerTextureMapper::node):
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperSurfaceManager::getIntermediateSurface):
        (WebCore::TextureMapperSurfaceManager::releaseIntermediateSurface):
        (WebCore::toTextureMapperNode):
        (WebCore::TextureMapperNode::rootLayer):
        (WebCore::TextureMapperNode::setTransform):
        (WebCore::TextureMapperNode::computePerspectiveTransformIfNeeded):
        (WebCore::TextureMapperNode::countDescendantsWithContent):
        (WebCore::TextureMapperNode::computeOverlapsIfNeeded):
        (WebCore::TextureMapperNode::computeReplicaTransformIfNeeded):
        (WebCore::TextureMapperNode::computeLocalTransformIfNeeded):
        (WebCore::TextureMapperNode::needsToComputeBoundingRect):
        (WebCore::TextureMapperNode::computeAllTransforms):
        (WebCore::TextureMapperNode::computeBoundingRectFromRootIfNeeded):
        (WebCore::TextureMapperNode::computeTiles):
        (WebCore::TextureMapperNode::computeVisibleRectIfNeeded):
        (WebCore::TextureMapperNode::renderContent):
        (WebCore::TextureMapperNode::paint):
        (WebCore::TextureMapperNode::targetRectForTileRect):
        (WebCore::TextureMapperNode::paintSelf):
        (WebCore::TextureMapperNode::compareGraphicsLayersZValue):
        (WebCore::TextureMapperNode::sortByZOrder):
        (WebCore::TextureMapperNode::paintSelfAndChildren):
        (WebCore::TextureMapperNode::paintReflection):
        (WebCore::TextureMapperNode::paintRecursive):
        (WebCore::TextureMapperNode::~TextureMapperNode):
        (WebCore::TextureMapperNode::resetDescendants):
        (WebCore::TextureMapperNode::setContentScale):
        (WebCore::TextureMapperNode::setVisibleRect):
        (WebCore::TextureMapperNode::syncCompositingState):
        (WebCore::TextureMapperNode::invalidateOverlaps):
        (WebCore::TextureMapperNode::syncCompositingStateSelf):
        (WebCore::TextureMapperNode::descendantsOrSelfHaveRunningAnimations):
        * platform/graphics/texmap/TextureMapperNode.h:
        (WebCore::TextureMapperPaintOptions::TextureMapperPaintOptions):
        (WebCore::TextureMapperAnimation::create):
        (WebCore::TextureMapperNode::TextureMapperNode):
        (WebCore::TextureMapperNode::size):
        (WebCore::TextureMapperNode::setOpacity):
        (WebCore::TextureMapperNode::setTextureMapper):
        (WebCore::TextureMapperNode::media):
        (WebCore::TextureMapperNode::texture):
        (WebCore::TextureMapperNode::targetRect):
        (WebCore::TextureMapperNode::entireRect):
        (WebCore::TextureMapperNode::contentSize):
        (WebCore::TextureMapperNode::State::State):
        (WebCore::deleteOwnedPtr):

2011-05-07  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 8/12: Changes to the GL backend of TextureMapper. The code for these changes is intertwined so it was hard to separate
        them to different patches. This is the summary of what the changes do:

        1. Use stencil for clipping instead of scissors, refactor beginClip/endClip functions to accomodate that.
        2. Get rid of the "Target" program which forced an intermediate framebuffer for any content. Instead,
           we upload the texture with BGRA from the start. Ports other than Qt can optimize this for their needs.
        3. Use glGetAttribLocation instead of glBindAttribLocation; On some platforms we might be polluting the
           GL context otherwise.
        4. Use image UIDs (cache-key in Qt) instead of image pointers. This is important for images that change their
           internal content.
        5. Allow packing and unpacking. This is currently a stub, for future memory optimizations.
        6. Put some of the initialization code here (beginPainting/endPainting).
        7. Allow painting a texture via an ID instead of a BitmapTexture data type.
        8. Get rid of makeContextCurrent / obtainCurrentContext. We only use texture-mapper when the context is current.

        No new tests. Tests in LayoutTests/compositing test this.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore::debugGLCommand):
        (WebCore::TextureMapperGLData::GlobalGLData::createShaderProgram):
        (WebCore::TextureMapperGLData::GlobalGLData::GlobalGLData):
        (WebCore::TextureMapperGLData::DirectlyCompositedImageRepository::findOrCreate):
        (WebCore::TextureMapperGLData::DirectlyCompositedImageRepository::deref):
        (WebCore::TextureMapperGLData::DirectlyCompositedImageRepository::~DirectlyCompositedImageRepository):
        (WebCore::TextureMapperGLData::TextureMapperGLData):
        (WebCore::BitmapTextureGL::id):
        (WebCore::BitmapTextureGL::isOpaque):
        (WebCore::BitmapTextureGL::relativeSize):
        (WebCore::BitmapTextureGL::setTextureMapper):
        (WebCore::BitmapTextureGL::pack):
        (WebCore::BitmapTextureGL::unpack):
        (WebCore::BitmapTextureGL::isPacked):
        (WebCore::BitmapTextureGL::BitmapTextureGL):
        (WebCore::TextureMapperGL::TextureMapperGL):
        (WebCore::TextureMapperGL::initializeShaders):
        (WebCore::TextureMapperGL::beginPainting):
        (WebCore::TextureMapperGL::endPainting):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::BitmapTextureGL::reset):
        (WebCore::BitmapTextureGL::endPaint):
        (WebCore::BitmapTextureGL::setContentsToImage):
        (WebCore::createProjectionMatrix):
        (WebCore::BitmapTextureGL::bind):
        (WebCore::BitmapTextureGL::destroy):
        (WebCore::TextureMapperGL::~TextureMapperGL):
        (WebCore::TextureMapperGL::bindSurface):
        (WebCore::TextureMapperGL::beginClip):
        (WebCore::TextureMapperGL::endClip):
        (WebCore::TextureMapperGL::createTexture):
        * platform/graphics/opengl/TextureMapperGL.h:
        (WebCore::TextureMapperGL::allowSurfaceForRoot):
        (WebCore::TextureMapperGL::create):
        (WebCore::TextureMapperGL::setGraphicsContext):
        (WebCore::TextureMapperGL::graphicsContext):
        (WebCore::TextureMapperGL::isOpenGLBacked):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::paintToTextureMapper):
        (WebCore::GraphicsContext3DInternal::boundingRect):
        (WebCore::GraphicsContext3DInternal::paint):
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::repaint):
        (WebCore::MediaPlayerPrivateQt::paintToTextureMapper):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        (WebCore::MediaPlayerPrivateQt::acceleratedRenderingStateChanged):
        (WebCore::MediaPlayerPrivateQt::platformLayer):

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 7/12: Allow a 3D-context (WebGL) to paint itself into a TextureMapper.
        This allows using a WebGL canvas with CSS.

        No new tests. Tests in LayoutTests/compositing/webgl cover this.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::paintToTextureMapper):
        (WebCore::GraphicsContext3DInternal::boundingRect):
        (WebCore::GraphicsContext3DInternal::paint):
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::repaint):
        (WebCore::MediaPlayerPrivateQt::paintToTextureMapper):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        (WebCore::MediaPlayerPrivateQt::acceleratedRenderingStateChanged):
        (WebCore::MediaPlayerPrivateQt::platformLayer):

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 6/12: Allow the Qt media player implementation to paint into a TextureMapper,
        to allow videos to be composited.

        No new tests. Tests in LayoutTests/compositing cover this.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::repaint):
        (WebCore::MediaPlayerPrivateQt::paintToTextureMapper):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        (WebCore::MediaPlayerPrivateQt::acceleratedRenderingStateChanged):
        (WebCore::MediaPlayerPrivateQt::platformLayer):

2011-05-11  John Bauman  <jbauman@chromium.org>

        Reviewed by Kenneth Russell.

        Don't send zeros in TexImage if GL implementation handles that
        https://bugs.webkit.org/show_bug.cgi?id=60581

        Chromium already handles zeroing textures upon creation, so don't
        bother zeroing them in WebKit, as that causes some unnecessary memcpys
        of zeros.

        No new tests as functionality is the same.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::texImage2DBase):
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::texImage2DResourceSafe):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/gtk/GraphicsContext3DGtk.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2011-05-11  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix Chromium Mac build.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSliderThumb):

2011-05-11  Daniel Bates  <dbates@rim.com>

        Reviewed by Antonio Gomes.

        [Qt] Extract code to set mouse event modifiers into common function
        https://bugs.webkit.org/show_bug.cgi?id=60649

        Consolidate code to set the keyboard modifiers for a mouse event into a common
        function that can be used by both PlatformMouseEvent(QGraphicsSceneMouseEvent*, int clickCount)
        and PlatformMouseEvent(QInputEvent*, int clickCount) so as to remove duplicate code.

        No functionality was changed. So, no new tests.

        * platform/qt/PlatformMouseEventQt.cpp:
        (WebCore::mouseEventModifiersFromQtKeyboardModifiers): Added.
        (WebCore::PlatformMouseEvent::PlatformMouseEvent): Modified to call mouseEventModifiersFromQtKeyboardModifiers().

2011-05-11  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch RenderBoxModelObject::paintBorder to use IntRect instead of four ints
        https://bugs.webkit.org/show_bug.cgi?id=60591

        Switching RenderBoxModelObject::paintBorder to use IntRect instead of four ints representing a rect.

        No new tests since there is no functionality change.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxDecorations):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorationsWithSize):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBoxDecorations):

2011-05-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86255.
        http://trac.webkit.org/changeset/86255
        https://bugs.webkit.org/show_bug.cgi?id=60660

        REGRESSION (r86255): Lots of tests crashing in
        CFWriteStreamCreateWithAllocatedBuffers on Windows 7 Release
        (WebKit2 Tests) (Requested by aroben on #webkit).

        * platform/network/ResourceHandle.h:
        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::currentCookieStorage):
        (WebCore::defaultCookieStorage):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::makeFinalRequest):
        (WebCore::ResourceHandle::willSendRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2011-05-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Eric Seidel.

        Frequent crashes beneath WebCore::ScriptElement::prepareScript
        https://bugs.webkit.org/show_bug.cgi?id=60559

        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::runScript):
        Add null check and explanation that we are keeping the ASSERT to help
        track down the cause and produce a test.

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 5/12: Implement the new TextureMapper functions for the Qt backend.
        This allow non-rectangular clipping, some stub functions, and getting a unique
        id for an image.

        No new tests. Tests in LayoutTests/compositing cover this.

        * platform/graphics/qt/TextureMapperQt.cpp:
        (WebCore::TextureMapperQt::beginClip):
        (WebCore::TextureMapperQt::endClip):
        (WebCore::TextureMapperQt::viewportSize):
        (WebCore::TextureMapperQt::setGraphicsContext):
        (WebCore::TextureMapperQt::graphicsContext):
        (WebCore::TextureMapperQt::drawTexture):
        (WebCore::TextureMapperQt::beginPainting):
        (WebCore::TextureMapperQt::endPainting):
        (WebCore::RGBA32PremultimpliedBufferQt::beginPaint):
        (WebCore::uidForImage):
        * platform/graphics/qt/TextureMapperQt.h:

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 3/12: TextureMapper shouldn't depend on OpenGL, but rather only allow the GL backend when
        OpenGL is present.

        No new tests. This is a build fix.

        * WebCore.pri:
        * WebCore.pro:

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 2/12: Add a few functions to the TextureMapper API, allowing:
        1. an entry/exit point for painting (beginPaint/endPaint)
        2. Clipping with a matrix, since we use stencil instead of scissors
        3. Draw a texture directly with an ID
        4. Remove offset, since we're using real tiling
        5. numberOfBytes calculation for textures, for memory management

        No new tests. Tests in LayoutTests/compositing test this.

        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::BitmapTexture::destroy):
        (WebCore::BitmapTexture::allowOfflineTextureUpload):
        (WebCore::BitmapTexture::bpp):
        (WebCore::BitmapTexture::numberOfBytes):
        (WebCore::TextureMapper::viewportSize):
        (WebCore::TextureMapper::setViewportSize):
        (WebCore::TextureMapper::allowPartialUpdates):
        (WebCore::TextureMapper::isOpenGLBacked):
        (WebCore::TextureMapper::setTransform):
        (WebCore::TextureMapper::transform):
        (WebCore::TextureMapper::beginPainting):
        (WebCore::TextureMapper::endPainting):

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 1/12: Change the TextureMapperPlatformLayer API to allow a 3D-context or a
        media player to decide how to paint into the TextureMapper, rather than mandate specific
        types of platform layers.

        No new tests. Tests in LayoutTests/compositing test this.

        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/texmap/TextureMapperPlatformLayer.h:

2011-05-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Flesh out RenderLayer's ScrollableArea implementation a little more
        https://bugs.webkit.org/show_bug.cgi?id=60593

        Override a few more ScrollableArea methods on RenderLayer
        as a baby-step towards animating overflow div scrolling.

        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::visibleContentRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollPosition):
        (WebCore::RenderLayer::minimumScrollPosition):
        (WebCore::RenderLayer::maximumScrollPosition):
        (WebCore::RenderLayer::visibleContentRect):
        (WebCore::RenderLayer::overhangAmount):
        (WebCore::RenderLayer::didCompleteRubberBand):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::shouldSuspendScrollAnimations):

2011-05-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/9421781> Slider thumb draws upside-down in WebKit2
        <rdar://problem/9418025> Slider thumb has odd appearance

        Fix two issues drawing the slider thumb.
        
        To fix <rdar://problem/9421781>, if we detect that we're in WebKit2
        by virtual of the FrameView not having a documentView, then flip
        the graphics context.

        To fix <rdar://problem/9418025>, we call -drawInteriorWithFrame:inView:
        rather than -drawWithFrame:inView: so that AppKit doesn't draw a section
        of track behind the thumb.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSliderThumb):

2011-05-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Steve Falkenburg.

        [Windows WebKit2] Use cookies set in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=60274

        Share the default storage session between the UI and Web Processes.

        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::defaultSessionCookieStorage):
        Keep track of the default storage session cookie storage.
        (WebCore::currentCookieStorage):
        Call defaultCookieStorage to get the default cookie storage.
        (WebCore::defaultCookieStorage):
        If there is a default storage session cookie storage, prefer that over getting the default
        cookie storage. In the Web Process, asking CFNetwork for the default cookie storage directly
        without specifying a storage session will not get the cookie storage being shared by the UI
        and Web Processes.

        * platform/network/ResourceHandle.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        Make sure to set the current storage session on any requests used by the Web
        Process before CFNetwork has to do anything with them, in order for CFNetwork to avoid
        doing anything with the Web Process's default storage session (which is not the one shared
        with the UI Process).
        (WebCore::makeFinalRequest):
        Ditto.
        (WebCore::ResourceHandle::willSendRequest):
        Ditto.
        (WebCore::ResourceHandle::currentStorageSession):
        If there is a Private Browsing storage session, return that.
        If not, on Windows return the default storage session that is being shared with the UI
        Process and on Mac return 0.
        (WebCore::defaultCFURLStorageSession):
        (WebCore::ResourceHandle::setDefaultStorageSession):
        (WebCore::ResourceHandle::defaultStorageSession):

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        Make sure to set the current storage session on any requests used by the Web
        Process before CFNetwork has to do anything with them, in order for CFNetwork to avoid
        doing anything with the Web Process's default storage session (which is not the one shared
        with the UI Process).

2011-05-11  Martin Robinson  <mrobinson@igalia.com>

        Try once more to fix the WinCairo build.

        * platform/graphics/cairo/CairoUtilities.h: Include GraphicsTypes.h with a relative
        include rather than a system include.

2011-05-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Eric Seidel.

        Stop including Console.h just to get Console enum types
        https://bugs.webkit.org/show_bug.cgi?id=60607

        Move MessageSource, MessageType and MessageLevel into its own
        header and cleanup surrounding classes.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/v8/V8Proxy.cpp:
        * dom/ScriptExecutionContext.h:
        * html/HTMLFormElement.cpp:
        * html/parser/XSSFilter.cpp:
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptHost.h:
        * inspector/InspectorAgent.h:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        * loader/MainResourceLoader.cpp:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * page/ChromeClient.h:
        * page/Console.cpp:
        (WebCore::Console::~Console):
        * page/Console.h:
        * page/ConsoleTypes.h: Added.
        * page/ContentSecurityPolicy.cpp:
        * page/Geolocation.h:
        * workers/WorkerReportingProxy.h:
        * xml/XMLHttpRequest.cpp:

2011-05-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r85650.
        http://trac.webkit.org/changeset/85650
        https://bugs.webkit.org/show_bug.cgi?id=59983

        Triggers m_numNodeListCaches > 0 assert in gc-heavy sites.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::childrenChanged):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::setDocument):
        (WebCore::Node::setTreeScopeRecursively):
        (WebCore::Node::childNodes):
        (WebCore::Node::registerDynamicNodeList):
        (WebCore::Node::unregisterDynamicNodeList):
        (WebCore::Node::notifyLocalNodeListsAttributeChanged):
        (WebCore::Node::notifyLocalNodeListsChildrenChanged):
        (WebCore::Node::getElementsByTagName):
        (WebCore::Node::getElementsByTagNameNS):
        (WebCore::Node::getElementsByName):
        (WebCore::Node::getElementsByClassName):
        * dom/Node.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::labels):

2011-05-11  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Video track sometimes fails to draw.
        https://bugs.webkit.org/show_bug.cgi?id=60635
        <rdar://problem/9281951>

        No new tests, covered by existing pixel tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource): Set display mode to "Unknown" to force a 
            recalculation, and media engine notification, the next time the state machine runs.

2011-05-11  Adam Roben  <aroben@apple.com>

        WinCE build fixes for strict PassOwnPtr

        * platform/graphics/wince/SharedBitmap.cpp:
        (WebCore::SharedBitmap::createHandle):
        (WebCore::SharedBitmap::clipBitmap):
        Use nullptr instead of 0.

        * platform/graphics/wince/SimpleFontDataWinCE.cpp: Keep LOOSE_PASS_OWN_PTR turned on for
        this file until SimpleFontData::scaledFontData is dealt with on all platforms.

        * platform/text/wince/TextCodecWinCE.cpp:
        (WebCore::newTextCodecWinCE): Use adoptPtr.

2011-05-11  Chang Shu  <cshu@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Tab not working in editing/inserting/typing-tab-designmode-forms.html
        https://bugs.webkit.org/show_bug.cgi?id=60477

        PlatformKeyboardEvent.m_text should be set to "\t" instead of leaving as null.
        The value is checked at EventHandler.cpp:2527 (r86166).

        Function keyTextForKeyEvent is partially implemented and can be enhanced in
        a need-base.

        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::keyTextForKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2011-05-11  Adam Roben  <aroben@apple.com>

        Use case-insensitive comparisons when checking plugin filenames on Windows

        Windows paths are nearly always case-insensitive.

        I couldn't think of a good way to test this.

        Fixes <http://webkit.org/b/60633> WebKit1 loads Windows Presentation Foundation plugin, but
        should not

        Reviewed by Steve Falkenburg.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::isPluginBlacklisted): Use equalIgnoringCase instead of == when
        checking plugin filenames.

2011-05-11  Adam Roben  <aroben@apple.com>

        Turn on strict PassOwnPtr on Windows

        Fixes <http://webkit.org/b/60632> Windows should build with strict PassOwnPtr enabled

        Reviewed by Adam Barth.

        * platform/graphics/win/SimpleFontDataWin.cpp: Keep LOOSE_PASS_OWN_PTR turned on for this
        file until SimpleFontData::scaledFontData is dealt with on all platforms.

2011-05-11  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Geoffrey Garen.

        XPathResult should keep its node set's JS wrappers alive
        https://bugs.webkit.org/show_bug.cgi?id=34231

        The change added a custom mark function for JSC. V8 was already properly
        marking the nodes so no change were done on the V8 side.

        Tests: fast/xpath/xpath-iterator-result-should-mark-its-nodeset.html
               fast/xpath/xpath-other-nodeset-result-should-mark-its-nodeset.html
               fast/xpath/xpath-result-eventlistener-crash.html
               fast/xpath/xpath-snapshot-result-should-mark-its-nodeset.html

        * Android.jscbindings.mk:
        * GNUmakefile.list.am:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        Added the new file to our build systems.

        * bindings/js/JSXPathResultCustom.cpp: Added.
        (WebCore::JSXPathResult::markChildren): Added code to mark the
        XPathResult snapshot's nodes.
        * xml/XPathResult.h:
        (WebCore::XPathResult::value): Exposed this getter so that we can
        mark our XPathValue.
        * xml/XPathResult.idl: Told the IDL parser that we now need
        a custom mark function.

2011-05-04  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk+] deadlock in gstreamer video player when exiting fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=58548

        Block data flow towards the pipeline branch to remove to avoid
        potential deadlocks during the PAUSED->READY transitions of the
        elements to remove.

        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::GStreamerGWorld::exitFullscreen):

2011-05-11  Kent Tamura  <tkent@chromium.org>

        Reviewed by Hajime Morita.

        The position of validation message bubble is wrong for non text fields.
        https://bugs.webkit.org/show_bug.cgi?id=60341

        Tests: fast/forms/validation-message-on-checkbox.html
               fast/forms/validation-message-on-listbox.html
               fast/forms/validation-message-on-menulist.html
               fast/forms/validation-message-on-radio.html
               fast/forms/validation-message-on-textarea.html

        * css/html.css:
        (::-webkit-validation-bubble-message):
          Add white-space:normal in order not to inherit white-space:pre for <select>.
        * html/ValidationMessage.cpp:
        (WebCore::adjustBubblePosition):
          Adjust the bubble position.
          - The top of the bubble should be same as the bottom of the target control.
          - The left of the bubble should be same as the left of the target control.
            But If the left+32 is larger than the center of the target control,
            left+32 should be at the center of the target control.
            But the left position should not be less than 0.
        (WebCore::ValidationMessage::buildBubbleTree): Call adjustBubblePosition().

2011-05-11  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Convert RenderFlexibleBox to use IntPoint/IntSize instead of x,y/w,h pairs
        https://bugs.webkit.org/show_bug.cgi?id=60592

        Refactoring, covered by existing tests.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        (WebCore::RenderFlexibleBox::placeChild):
        * rendering/RenderFlexibleBox.h:

2011-05-10  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed buildfix for strict OwnPtr.

        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::createBufferFromRange):
        (WebCore::AudioBus::createBySampleRateConverting):
        (WebCore::AudioBus::createByMixingToMono):
        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::createForSubject):
        (WebCore::HRTFElevation::createByInterpolatingSlices):
        * platform/audio/Panner.cpp:
        (WebCore::Panner::create):
        * platform/audio/Reverb.cpp:
        (WebCore::Reverb::initialize):
        * platform/audio/chromium/AudioBusChromium.cpp:
        (WebCore::AudioBus::loadPlatformResource):
        (WebCore::createBusFromInMemoryAudioFile):

2011-05-10  Adam Barth  <abarth@webkit.org>

        Build fix for font data madness.  I've had to whitelist this on several
        ports.  They need to all be fixed at once.

        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:

2011-05-10  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX for !ENABLE(TEXT_CARET) after r86039

        * editing/FrameSelection.cpp:
        (WebCore::DragCaretController::paintDragCaret): Added
        UNUSED_PARAM(frame) for !ENABLE(TEXT_CARET).

2011-05-10  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Clean up setLayerRenderer() calls in LayerRendererChromium
        https://bugs.webkit.org/show_bug.cgi?id=60524

        This refactors the way LayerRendererChromium calls setLayerRenderer on its layers in a few ways to clean things
        up:

        *) Move the pre-paint call to setLayerRenderer from updatePropertiesAndRenderSurfaces() to paintLayerContents().
            updatePropertiesAndRenderSurfaces() does too much and the layer renderer pointer only has to be up to date to do
            the actual paint. Longer term we won't need to call this at all in order to call paint and this call will just
            go away.
        *) Tweaks updateCompositorResourcesRecursive() to be slightly shorter and less error-prone.
        *) Explicitly set the LayerRendererChromium for each layer in the tree when transfering the root layer (used
            during lost context).  LayerChromium::setLayerRenderer checks if the new LayerRendererChromium is different
            by comparing the pointer value to the old one.  This check will be incorrect if there are multiple lost
            contexts between a setLayerRenderer() call and a new LayerRendererChromium happens to be allocated at the
            same address as the old one.  An explicit call to setLayerRenderer() for every layer in the tree fixes this
            since when this function is called the new and old LayerRendererChromium are still live and so they cannot
            live at the same address.

        The first two changes are purely refactors and do not change behavior.  The third issue can't be tested via a
        layout test directly as we don't have a way to induce a lost context on the compositor in a layout test.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::paintLayerContents):
        (WebCore::LayerRendererChromium::clearLayerRendererRecursive):
        (WebCore::LayerRendererChromium::transferRootLayer):
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):
        (WebCore::LayerRendererChromium::updateCompositorResourcesRecursive):
        * platform/graphics/chromium/LayerRendererChromium.h:

2011-05-10  Anton D'Auria  <adauria@apple.com>

        Reviewed by David Levin.

        StorageTracker should report actual local storage usage on disk
        https://bugs.webkit.org/show_bug.cgi?id=60558

        Tests: storage/domstorage/localstorage/storagetracker/storage-tracker-6-create.html
               storage/domstorage/localstorage/storagetracker/storage-tracker-7-usage.html

        Use SQLiteFileSystem::getDatabaseFileSize to get actual usage by
        an origin's local storage db. Factored out code that retrieves
        path of local storage db.

        * WebCore.exp.in: Sorted alphabetically StorageTracker's mangled
        function names.
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::syncDeleteOrigin): Uses helper function
        to get path of origin's db
        (WebCore::StorageTracker::databasePathForOrigin): New helper function.
        that gets the path of an origin's local storage db from StorageTracker.
        (WebCore::StorageTracker::diskUsageForOrigin): New API.
        * storage/StorageTracker.h:

2011-05-10  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        Add ApplicationCache API to get disk usage per origin
        https://bugs.webkit.org/show_bug.cgi?id=57127

        ApplicationCacheStorage already provides an API to get per-origin
        disk usage. This should be exposed through WebCore::ApplicationCache
        to not be dependent on storage implementation.

        Test: http/tests/appcache/origin-usage.html

        * WebCore.exp.in:
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::diskUsageForOrigin):
        * loader/appcache/ApplicationCache.h:

2011-05-10  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Alexey Proskuryakov.

        Protect self in [WebCoreResourceHandleAsDelegate connection:didReceiveDataArray:]
        https://bugs.webkit.org/show_bug.cgi?id=60594
        <rdar://problem/9203259>

        No tests since we don't have any bots testing CFNETWORK_DATA_ARRAY_CALLBACK.

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveDataArray:]): The didReceiveData()
        callback on client can result in the load being cancelled. This results in the delegate
        (self) being freed.  Protect self during the loop so we can check for m_handle and safely
        return without crashing.

2011-05-10  Chris Guillory  <chris.guillory@google.com>

        Reviewed by James Robinson.

        [ChromiumWin] Font::drawComplexText calls EndPlatformPaint without calling BeginPlatformPaint.
        https://bugs.webkit.org/show_bug.cgi?id=59848

        To test this I plan to make the non-printing device (BitmapPlatformDevice) fail
        when EndPlatformPaint doesn't matchup with BeginPlatformPaint.
        http://codereview.chromium.org/6949012/ 

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawComplexText):

2011-05-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86195.
        http://trac.webkit.org/changeset/86195
        https://bugs.webkit.org/show_bug.cgi?id=60597

        LayerOffset is a really bad name (Requested by smfr on
        #webkit).

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/FrameView.cpp:
        (WebCore::FrameView::paintScrollCorner):
        * platform/graphics/LayerOffset.h: Removed.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintCustomHighlight):
        * rendering/InlineTextBox.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintCustomHighlight):
        * rendering/RenderBox.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintScrollCorner):
        (WebCore::RenderLayer::paintResizer):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderObject.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::paintPart):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::paintIntoRect):
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintObject):
        (WebCore::RenderTable::paintMask):
        * rendering/RenderTable.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paintCustomHighlight):
        (WebCore::RootInlineBox::paint):
        * rendering/RootInlineBox.h:

2011-05-10  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Convert x,y and width,height pairs to IntPoint and IntSize for RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=60409

        Convert RenderLayer to use IntPoint for x,y pairs and IntSize for offsets and sizes.

        Refactoring, covered by existing tests.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::visibleHeight):
        (WebCore::RenderLayer::visibleWidth):
        (WebCore::RenderLayer::scrollWidth):
        (WebCore::RenderLayer::scrollHeight):
        (WebCore::RenderLayer::computeScrollDimensions):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::x):
        (WebCore::RenderLayer::y):
        (WebCore::RenderLayer::setLocation):
        (WebCore::RenderLayer::width):
        (WebCore::RenderLayer::height):
        (WebCore::RenderLayer::size):
        (WebCore::RenderLayer::setWidth):
        (WebCore::RenderLayer::setHeight):
        (WebCore::RenderLayer::scrolledContentOffset):
        (WebCore::RenderLayer::scrollXOffset):
        (WebCore::RenderLayer::scrollYOffset):
        (WebCore::RenderLayer::scrollOffset):
        (WebCore::RenderLayer::scrollToXOffset):
        (WebCore::RenderLayer::scrollToYOffset):
        (WebCore::RenderLayer::relativePositionOffset):

2011-05-10  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Create LayerOffset class
        https://bugs.webkit.org/show_bug.cgi?id=60490

        Adding a LayerOffset class that will replace existing usage of tx/ty.
        LayerOffset is necessary since these values are commonly used as both
        a size and a point. Updating paintIntoRect to use this new class.

        No new tests since this doesn't change any behavior.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/FrameView.cpp:
        (WebCore::FrameView::paintScrollCorner):
        * platform/graphics/LayerOffset.h: Added.
        (WebCore::LayerOffset::LayerOffset):
        (WebCore::LayerOffset::x):
        (WebCore::LayerOffset::y):
        (WebCore::LayerOffset::setX):
        (WebCore::LayerOffset::setY):
        (WebCore::LayerOffset::toSize):
        (WebCore::LayerOffset::toPoint):
        (WebCore::operator+=):
        (WebCore::operator-=):
        (WebCore::operator+):
        (WebCore::operator-):
        (WebCore::operator==):
        (WebCore::operator!=):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintScrollCorner):
        (WebCore::RenderLayer::paintResizer):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::paintPart):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::paintIntoRect):
        * rendering/RenderScrollbarPart.h:

2011-05-10  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Make member variables of CaretBase private
        https://bugs.webkit.org/show_bug.cgi?id=60454

        Moved m_absCaretBounds, m_absoluteCaretRepaintBounds, m_absCaretBoundsDirty, and m_caretPaint back
        from CaretBase to FrameSelection because they are only used in FrameSelection, and made the rest
        of member variables in CaretBase private.

        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::CaretBase): Takes CaretVisibility as an argument.
        (WebCore::DragCaretController::DragCaretController):
        (WebCore::FrameSelection::FrameSelection): Initializes m_absCaretBoundsDirty and m_caretPaint
        now that they are part of FrameSelection again.
        (WebCore::DragCaretController::setCaretPosition):
        (WebCore::FrameSelection::setSelection):
        (WebCore::CaretBase::clearCaretRect): Extracted from updateCaretRect.
        (WebCore::CaretBase::updateCaretRect): No longer clears caret; all call sites (namely setCaretPosition
        and localCaretRect) that used to call updateCaretRect now need to call clearCaretRect or updateCaretRect
        based on some conditions.
        (WebCore::FrameSelection::localCaretRect):
        (WebCore::CaretBase::caretRepaintRect):
        (WebCore::FrameSelection::recomputeCaretRect):
        (WebCore::FrameSelection::paintCaret): Only calls CaretBase::paintCaret if m_caretPaint is true.
        (WebCore::CaretBase::paintCaret): Removed an early exit for when m_caretPaint is false since m_caretPaint
        has been moved from CaretBase to FrameSelection.
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        (WebCore::FrameSelection::updateAppearance):
        (WebCore::FrameSelection::setCaretVisibility): Takes CaretVisibility instead of bool.
        (WebCore::FrameSelection::caretBlinkTimerFired):
        * editing/FrameSelection.h:
        (WebCore::CaretBase::fastLocalCaretRect): Added; replaces localCaretRectForPainting.
        (WebCore::CaretBase::shouldUpdateCaretRect): Added.
        (WebCore::CaretBase::setCaretRectNeedsUpdate): Added.
        (WebCore::CaretBase::setCaretVisibility): Added.
        (WebCore::CaretBase::caretIsVisible): Added.
        (WebCore::FrameSelection::setCaretRectNeedsUpdate): Added.

2011-05-10  James Robinson  <jamesr@chromium.org>

        Reviewed by Nate Chapin.

        [chromium] Use parent/child terms for compositor tree structures consistently instead of superlayer/sublayer
        https://bugs.webkit.org/show_bug.cgi?id=60588

        GraphicsLayer uses parent/child terminology for tree structure, as does CCLayerImpl.  LayerChromium was using
        superlayer/sublayer terms, inherited from this code's branching from the platform/graphics/win/CACF code.  The
        mixed terminology is confusing and parent/child is more common, so this unifies everything to use parent/child.

        No new tests, refactor only.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setChildren):
        (WebCore::GraphicsLayerChromium::addChild):
        (WebCore::GraphicsLayerChromium::addChildAtIndex):
        (WebCore::GraphicsLayerChromium::addChildBelow):
        (WebCore::GraphicsLayerChromium::addChildAbove):
        (WebCore::GraphicsLayerChromium::replaceChild):
        (WebCore::GraphicsLayerChromium::removeFromParent):
        (WebCore::GraphicsLayerChromium::setContentsToImage):
        (WebCore::GraphicsLayerChromium::setContentsToCanvas):
        (WebCore::GraphicsLayerChromium::setContentsToMedia):
        (WebCore::GraphicsLayerChromium::hostLayerForChildren):
        (WebCore::GraphicsLayerChromium::layerForParent):
        (WebCore::GraphicsLayerChromium::updateChildList):
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        (WebCore::GraphicsLayerChromium::setupContentsLayer):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::~LayerChromium):
        (WebCore::LayerChromium::addChild):
        (WebCore::LayerChromium::insertChild):
        (WebCore::LayerChromium::removeFromParent):
        (WebCore::LayerChromium::removeChild):
        (WebCore::LayerChromium::replaceChild):
        (WebCore::LayerChromium::indexOfChild):
        (WebCore::LayerChromium::rootLayer):
        (WebCore::LayerChromium::removeAllChildren):
        (WebCore::LayerChromium::setChildren):
        (WebCore::LayerChromium::parent):
        (WebCore::LayerChromium::dumpLayer):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::children):
        (WebCore::LayerChromium::setParent):
        (WebCore::LayerChromium::numChildren):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):
        (WebCore::LayerRendererChromium::updateCompositorResourcesRecursive):
        (WebCore::LayerRendererChromium::dumpRenderSurfaces):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::parent):
        (WebCore::CCLayerImpl::descendantsDrawsContent):
        * platform/graphics/chromium/cc/CCLayerImpl.h:

2011-05-10  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Darin Adler.

        Switch RenderBoxModelObject::paintNinePieceImage to use IntRect instead of four ints
        https://bugs.webkit.org/show_bug.cgi?id=60586

        Switch paintNinePieceImage to take an IntRect instead of four ints representing an IntRect!

        No new tests as this is simply refactoring.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintMask):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintMaskImages):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        (WebCore::RenderBoxModelObject::paintBorder):
        * rendering/RenderBoxModelObject.h:

2011-05-05  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Removing the full screen element via parent.innerHTML="" does not result in a webkitfullscreenchange event.
        https://bugs.webkit.org/show_bug.cgi?id=60278

        Handle the removal of a full screen element from within Node::willRemove() instead
        of Document::nodeWillBeRemoved().  The new function Document::fullScreenElementWillBeRemoved() will
        be called by Node::willRemove() to handle those changes which used to occur in nodeWillBeRemoved().

        Test: fullscreen/full-screen-remove-children.html

        * dom/Document.cpp:
        (WebCore::Document::nodeWillBeRemoved): Removed the code checking for the full screen element.
        (WebCore::Document::fullScreenElementWillBeRemoved): Added, moved from nodeWillBeRemoved.
        * dom/Document.h:
        * dom/Node.cpp:
        (WebCore::Node::willRemove): Check to see if this is the current full screen element.

2011-05-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=60582
        Crash switching overlay/non-overlay scrollbar preference still possible
        -and corresponding-
        <rdar://problem/9323983>

        This patch prevents any work from being done on pages that are in the page cache 
        when the preference is switched.

        When the Document is going into or coming out of the page cache, have the 
        FrameView inactivate or activate the Page's ScrollAnimators as appropriate.
        * dom/Document.cpp:
        (WebCore::Document::setInPageCache):

        Iterate through the Page's ScrollableAreas setting the active state of the 
        ScrollAnimators.
        * page/FrameView.cpp:
        (WebCore::FrameView::setAnimatorsAreActive):
        * page/FrameView.h:

        ScrollAnimator has a new bit -- m_isActive. Right now m_isActive is always true 
        unless the ScrollAnimator belongs to a ScrollableArea that is in the page cache.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::ScrollAnimator):
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::setIsActive):
        (WebCore::ScrollAnimator::isActive):

        ScrollAnimatorMac has a new bit -- m_needsScrollerStyleUpdate. This is set to true 
        when a ScrollAnimator is inactive and has received the 
        updateScrollerStyleForNewRecommendedScrollerStyle delegate notification. It 
        prevents any work from being done for this delegate until the ScrollAnimator 
        becomes active again.
        * platform/mac/ScrollAnimatorMac.h:
        (WebCore::ScrollAnimatorMac::setNeedsScrollerStyleUpdate):
        (WebCore::ScrollAnimatorMac::needsScrollerStyleUpdate):

        This delegate method has been re-factored into ScrollAnimatorMac:: 
        updateScrollerStyle(). This way the meat of the function can be called by both the 
        delegate and ScrollAnimatorMac::setIsActive()
        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPainterControllerDelegate scrollerImpPair:updateScrollerStyleForNewRecommendedScrollerStyle:]):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):

        This override of ScrollAnimator::setIsActive() calls the base class, and then calls updateScrollerStyle() if needsScrollerStyleUpdate() is set to true.
        (WebCore::ScrollAnimatorMac::setIsActive):

        This is mostly the same as the old delegate method. Key differences are that if 
        the ScrollAnimator is inactive, we now setNeedsScrollerStyleUpdate(true) and 
        return early. We also only call scrollableArea()->scrollbarStyleChanged() if 
        needsScrollerStyleUpdate() is false since in the true case when we are restoring 
        from the page cache, this would be duplicated work.
        (WebCore::ScrollAnimatorMac::updateScrollerStyle):

        New WKSystemInterface function is needed to retrieve the scrollbar style.
        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2011-05-10  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Enable strict PassOwnPtr on Chromium
        https://bugs.webkit.org/show_bug.cgi?id=60502

        Technically there are a few bits in here that weren't reviewed by Dave,
        but close enough for government work.  This patch all fixes  the
        remaining strict PassOwnPtr violations on Chromium Linux.

        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::resize):
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::setSharedGraphicsContext3D):

2011-05-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Alice Liu.

        <rdar://problem/9343191> and https://bugs.webkit.org/show_bug.cgi?id=60572
        REGRESSION - Canon On-screen Manual.app crashes after a search

        No new tests - There's no way to reproduce the truly bizarre things Canon does in their app
        that would reasonably fit in to our testing infrastructure.

        In r66577 a new behavior was added where changing the "setLoadsImagesAutomatically" setting to "true" would immediately
        start loading those images that had been disabled.

        If this happens while a WebView is being dealloc'ed, and we don't know the WebView is being dealloc'ed, these new loads
        can cause crashes downstream when the WebView memory has actually been free'd.

        One example where this can happen is in Mac apps that subclass WebView then do work in their overridden dealloc methods.
        And the Canon Onscreen Manual is one such app.

        Starting these loads synchronously is not important.  By putting it on a 0-delay, properly closing the Page cancels them
        before they have a chance to really start.

        See http://webkit.org/b/60572 for more discussion.


        Add a timer to Settings and instead of calling setLoadsImagesAutomaticallyInAllFrames right
        away when this pref changes, call it on a 0-delay:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setLoadsImagesAutomatically):
        (WebCore::Settings::loadsImagesAutomaticallyTimerFired):
        * page/Settings.h:

2011-05-10  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK][WebKit2] GTK+ 2.x widget rendering fails after r85480
        https://bugs.webkit.org/show_bug.cgi?id=59990

        No new tests. This is covered by existing pixel tests.

        * platform/gtk/GtkVersioning.c:
        (getGdkDrawableSize): Added this helper method.
        * platform/gtk/GtkVersioning.h: Added helper method declaration.
        * platform/gtk/WidgetRenderingContext.cpp:
        (WebCore::WidgetRenderingContext::WidgetRenderingContext): Call into the helper if
        there is actually a GdkDrawable. If not, disable the sanity check.

2011-05-10  Martin Robinson  <mrobinson@igalia.com>

        Fix the GTK+ WebKit2 build. Add a CredentialsStorage stub for libsoup.

        * GNUmakefile.list.am: Add stub to source list.
        * platform/network/soup/CredentialStorageSoup.cpp: Added.
        (WebCore::CredentialStorage::getFromPersistentStorage):  Added stub.
        (WebCore::CredentialStorage::get):

2011-05-09  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/9354979> REGRESSION (r83070-r83126): This conversation takes 10 seconds to load and makes mail unresponsive
        
        Second attempts at a fix for this bug.  Instead of removing the dirtying (which turned out to be needed in a few cases),
        make dirtyLinesFromChangedChild mark a child as needing layout when it has to recur to the parent.  Because the method already
        aborts the recursion if selfNeedsLayout() is set on the parent, this has the effect of stopping the O(n^2) pathological
        behavior, since you can use the selfNeedsLayout() bit to understand that you've dirtied the lines already.

        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):

2011-05-05  Brent Fulgham  <bfulgham@webkit.org> and Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Anders Carlsson.

        [Cairo][WebKit2] Add an implementation of ShareableBitmap for Cairo
        https://bugs.webkit.org/show_bug.cgi?id=60293

        No new tests. This is covered by current pixel tests.

        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::copyCairoImageSurface): Abstract the code from WebCore::ImageBuffer::copyImage
        into this helper which creates a deep copy of a Cairo image surface.
        * platform/graphics/cairo/CairoUtilities.h: Added declaration.
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::copyImage): Use the new helper.
        * platform/graphics/cairo/ImageCairo.cpp: Abstract some of this logic
        into the new drawSurfaceToContext method on PlatformContextCairo.
        (WebCore::BitmapImage::draw):
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::drawPatternToCairoContext): Added.
        (WebCore::PlatformContextCairo::drawSurfaceToContext): Added.
        * platform/graphics/cairo/PlatformContextCairo.h: Added declarations.

2011-05-10  Anders Carlsson  <andersca@apple.com>

        Attempt to fix Qt build.

        * platform/network/qt/CredentialStorageQt.cpp:
        (WebCore::CredentialStorage::get):
        Add stub.

2011-05-10  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed by Tony Chang.

        REGRESSION(r85013): platform/chromium-linux/fast/text/international/complex-joining-using-gpos.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=60079

        Set resultingNumPoints = 0 so that harfbuzz uses the design coordinate
        value pair.

        * platform/graphics/chromium/HarfbuzzSkia.cpp:
        (WebCore::getOutlinePoint): Just return HB_Err_Ok with resultingNumPoints = 0.

2011-05-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Extra sign in required to view video on MobileMe Gallery album
        https://bugs.webkit.org/show_bug.cgi?id=60560
        <rdar://problem/9338693>

        Add symbols required by WebKit2.

        * WebCore.exp.in:

2011-05-10  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Styles sidebar is not updated upon changes in the Resources panel.
        https://bugs.webkit.org/show_bug.cgi?id=60320

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

2011-05-06  Brett Wilson  <brettw@chromium.org>

        Reviewed by Adam Barth.

        Use a File object to store the downloaded file reference rather than
        just the path. This keeps the file and permissions in scope (using the
        already-existing blob system) so the browser won't delete the file
        when the load is complete. Instead, the file will be cleaned up when
        the request objects are deleted.
        https://bugs.webkit.org/show_bug.cgi?id=60281

        * platform/network/chromium/ResourceResponse.cpp:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::downloadedFile):
        (WebCore::ResourceResponse::setDownloadedFile):

2011-05-10  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Files that load quickly sometimes won't play.
        https://bugs.webkit.org/show_bug.cgi?id=60556
        <rdar://problem/9330567>

        No new tests, this failure is very difficult to reproduce on some machines. The fix was
        verified manually.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::playabilityKnown): Move the call to updateStates
            to dispatchNotification so it is more obvious which state changes call it.
        (WebCore::MediaPlayerPrivateAVFoundation::setNaturalSize): Correct logging typo.
        (WebCore::MediaPlayerPrivateAVFoundation::metadataLoaded): Move updateStates call to 
            dispatchNotification.
        (WebCore::MediaPlayerPrivateAVFoundation::rateChanged): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::loadedTimeRangesChanged): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification): Call updateStates after
            processing "size changed" notification so we detect all state changes. Consolidate
            calls to updateStates here.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer): Name the video layer in
            a debug build.

2011-05-10  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Simon Fraser.

        Add containsFloats call to hasOverhangingFloats.
        https://bugs.webkit.org/show_bug.cgi?id=60537

        Test: fast/block/float/no-overhanging-float-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::repaintOverhangingFloats):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::hasOverhangingFloats):

2011-05-10  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Antonio Gomes.

        Warning fix on PluginPackage.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=60371

        Warning fix on conversion from time_t to unsigned on Linux with GCC 4.6.0.
        Let's use a struct rather than an array so we can pass everything to StringHasher.

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::hash):

2011-05-10  Andreas Kling  <andreas.kling@nokia.com>

        Rubber-stamped by Csaba Osztrogonác.

        [Qt] Disable HAVE_QRAWFONT until Qt API stabilizes.
        https://bugs.webkit.org/show_bug.cgi?id=60551

        * WebCore.pro: Disable the line that enables HAVE_QRAWFONT
        if the feature is found. Added a comment about why.

2011-05-10  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Sam Weinig.

        Web Inspector: inspector/console/console-shadow-dom-access.html crashes on mac debug
        https://bugs.webkit.org/show_bug.cgi?id=60266

        * bindings/objc/DOM.mm:
        (kitClass): return DOMNode class for shadow root node


2011-05-10  Ben Murdoch  <benm@google.com>

        Reviewed by Steve Block.

        Fix build in WebCore/xml/XSLTProcessorLibxslt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=60478

        No new tests), build fix only.

        * xml/XSLTProcessorLibxslt.cpp: Add CString.h include.

2011-05-10  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtRawFont support should check based on feature, not version
        https://bugs.webkit.org/show_bug.cgi?id=60513

        Build fix - no tests added.

        * WebCore.pro:

2011-05-10  Tony Gentilcore  <tonyg@chromium.org>

        Build fix: include ExceptionCode
        https://bugs.webkit.org/show_bug.cgi?id=60538

        * bindings/js/JSDOMBinding.cpp:

2011-05-06  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Adler.

        Fix some unnecessary includes in headers
        https://bugs.webkit.org/show_bug.cgi?id=60388

        These were all found using the include-what-you-use clang plugin.

        * css/CSSFontFaceSrcValue.h:
        * css/CSSImageGeneratorValue.h:
        * css/CSSParser.h:
        * css/CSSPrimitiveValueCache.cpp:
        * css/CSSPrimitiveValueCache.h:
        * css/CSSStyleSelector.cpp:
        * css/CSSStyleSelector.h:
        * css/RGBColor.cpp:
        * css/RGBColor.h:
        * dom/EventTarget.h:
        * dom/ExceptionBase.cpp:
        * dom/ExceptionBase.h:
        * dom/MessagePort.cpp:
        * dom/Range.cpp:
        * dom/Range.h:
        * dom/SelectElement.cpp:
        * dom/SelectElement.h:
        * dom/TextEvent.cpp:
        * dom/TextEvent.h:
        * dom/Touch.cpp:
        * dom/Touch.h:
        * dom/TouchEvent.cpp:
        * dom/TouchEvent.h:
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserScope.h:
        * editing/AppendNodeCommand.cpp:
        * editing/ApplyBlockElementCommand.h:
        * editing/DeleteFromTextNodeCommand.cpp:
        * editing/EditCommand.h:
        * editing/Editor.h:
        * editing/FormatBlockCommand.h:
        * editing/IndentOutdentCommand.h:
        * editing/InsertIntoTextNodeCommand.cpp:
        * editing/InsertNodeBeforeCommand.cpp:
        * editing/ReplaceSelectionCommand.h:
        * editing/SetNodeAttributeCommand.h:
        * html/HTMLSelectElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * loader/appcache/DOMApplicationCache.cpp:
        * page/EventSource.cpp:
        * rendering/RenderListBox.cpp:
        * rendering/RenderMenuList.cpp:
        * rendering/RenderTextControlSingleLine.cpp:
        * rendering/svg/RenderSVGInlineText.cpp:
        * svg/SVGMatrix.h:
        * websockets/WebSocket.cpp:
        * workers/AbstractWorker.cpp:
        * xml/XMLHttpRequest.cpp:
        * xml/XPathExpression.cpp:

2011-05-10  MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.

        REGRESSION(r73886): Frequent crashes in replaceSelectionWithFragment
        https://bugs.webkit.org/show_bug.cgi?id=60090

        SpellChecker uses TextCheckerClient, which belongs Page object,
        which is possibly destroyed during SpellChecker's lifetime.
        This change added to a guard before using TextCheckerClient to
        ensure it being live.
        
        No new tests, this is a speculative fix for a real crash.

        * editing/Editor.cpp:
        (WebCore::Editor::Editor):
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::SpellChecker):
        (WebCore::SpellChecker::client):
        (WebCore::SpellChecker::canCheckAsynchronously):
        (WebCore::SpellChecker::requestCheckingFor):
        * editing/SpellChecker.h:

2011-05-09  Dan Bernstein  <mitz@apple.com>

        Try to fix the LLVM Compiler build.

        * page/EventHandler.h:

2011-05-09  Daniel Cheng  <dcheng@chromium.org>

        Fix the build.

        Really add the file this time.

        * page/DragState.h: Added.
        (WebCore::DragState::DragState):

2011-05-09  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        Refactor RenderObject::draggableNode.
        https://bugs.webkit.org/show_bug.cgi?id=60503

        This patch lays the ground for refactoring the drag start logic. It moves draggableNode to
        DragController to avoid the awkward plumbing of calling DragController from RenderObject and
        also moves EventHandlerDragState out from EventHandler so it can be shared between
        EventHandler and DragController where appropriate.

        No new tests since there should be no behavior change.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/DragController.cpp:
        (WebCore::DragController::draggableNode):
        (WebCore::DragController::mayStartDragAtEventLocation):
        * page/DragController.h:
        * page/DragState.h: Added.
        (WebCore::DragState::DragState):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dragState):
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::handleDrag):
        * page/EventHandler.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:

2011-05-09  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Darin Adler.

        Enable casting between CSSPrimitiveValue and FontWeight enum
        https://bugs.webkit.org/show_bug.cgi?id=60516

        No new tests added as no functionality changed.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        Implement cast from FontWeight to CSSPrimitiveValue.
        (WebCore::CSSPrimitiveValue::operator FontWeight):
        Implement cast from CSSPrimitiveValue to FontWeight
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Use new cast to reduce code size.
        Flatten switch inside if.

2011-05-09  Simon Fraser  <simon.fraser@apple.com>

        Move IconURL.* into the dom grouping.

        * WebCore.xcodeproj/project.pbxproj:

2011-05-08  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Dan Bernstein.

        Full-screen video disappears behind black screen with scrollbar, followed by crash at jerryseinfeld.com
        https://bugs.webkit.org/show_bug.cgi?id=60449

        Make RenderFullScreen a non-anonymous block, so that it does not get deleted when a parent attempts to 
        coalesce anonymous children.

        Test: fullscreen/full-screen-remove-sibling.html

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isAnonymousBlock):

2011-05-09  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION (r84706): Crazy rendering of vimeo.com after exiting fullscreen video
        https://bugs.webkit.org/show_bug.cgi?id=60512

        Initialize m_containsFullScreenElement.

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

2011-05-09  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION(r86039): DragCaretController doesn't draw caret
        https://bugs.webkit.org/show_bug.cgi?id=60505

        Removed an early exit in setCaretPosition introduced by r86039.
        Also replaced calls to containerNode by deprecatedNode since rendering code doesn't
        support container node for rendering caret.

        * editing/FrameSelection.cpp:
        (WebCore::DragCaretController::setCaretPosition):

2011-04-29  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Untangle GtkAdjustments from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=59821

        Completely remove the ability for WebKit to set GtkAdjustments on ScrollViews
        and, consequently, Scrollbars. Handling adjustment updates can now be managed
        in WebKit.

        No new tests. This is covered by existing Scrollbar tests.

        * platform/ScrollView.cpp: platformInit and platformDestroy can now be shared
        between ScrollView.cpp and ScrollViewGtk.cpp.
        * platform/ScrollView.h: Remove unused methods.
        * platform/gtk/MainFrameScrollbarGtk.cpp:
        (MainFrameScrollbarGtk::create): No longer need to pass in the adjustment.
        (MainFrameScrollbarGtk::MainFrameScrollbarGtk): Update the comments here.
        * platform/gtk/MainFrameScrollbarGtk.h: Lots of code removal.
        * platform/gtk/ScrollViewGtk.cpp: Ditto.
        (WebCore::ScrollView::createScrollbar): Ditto.
        (WebCore::ScrollView::setScrollbarModes): Ditto.
        * plugins/gtk/PluginViewGtk.cpp: This file needs the GRefPtrGtk.h include now
        that it doesn't receive it transitively.

2011-05-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP should block Function constructor
        https://bugs.webkit.org/show_bug.cgi?id=60240

        Tests: http/tests/security/contentSecurityPolicy/function-constructor-allowed.html
               http/tests/security/contentSecurityPolicy/function-constructor-blocked.html

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
            - Update call site to the new entrypoint.
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):
            - Add some comments about the rediculousness of this implementation.

2011-05-09  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add RAII-style DenormalDisabler class to disable denormals which hurt audio performance
        https://bugs.webkit.org/show_bug.cgi?id=60396

        No new tests since audio API is not yet implemented.

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/DenormalDisabler.h: Added.
        (WebCore::DenormalDisabler::DenormalDisabler):
        (WebCore::DenormalDisabler::~DenormalDisabler):
        (WebCore::DenormalDisabler::getCSR):
        (WebCore::DenormalDisabler::setCSR):
        * webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::provideInput):

2011-05-09  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        Style cleanups in RenderFlexibleBox.cpp
        https://bugs.webkit.org/show_bug.cgi?id=60504

        No new tests, just refactoring.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::FlexBoxIterator::FlexBoxIterator): Use m_ for member variables, and
            use class initializer list.
        (WebCore::FlexBoxIterator::reset):
        (WebCore::FlexBoxIterator::next):
        (WebCore::RenderFlexibleBox::RenderFlexibleBox):
        (WebCore::marginWidthForChild): Pull out common code used in calc*PrefWidths
        (WebCore::RenderFlexibleBox::calcHorizontalPrefWidths):
        (WebCore::RenderFlexibleBox::calcVerticalPrefWidths):
        (WebCore::RenderFlexibleBox::computePreferredLogicalWidths):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::gatherFlexChildrenInfo): Rewrite uses of FlexBoxIterator into for statements
            rather than while loops.
        (WebCore::RenderFlexibleBox::layoutHorizontalBox): ditto
        (WebCore::RenderFlexibleBox::layoutVerticalBox): ditto
        (WebCore::RenderFlexibleBox::applyLineClamp):
        (WebCore::RenderFlexibleBox::allowedChildFlex): Rename variables w/h to width/height.

2011-05-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Abstract line deletion code into a function
        https://bugs.webkit.org/show_bug.cgi?id=60501

        No change in behavior, thus no testing.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::deleteLineRange):
        (WebCore::RenderBlock::layoutRunsAndFloats):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::RenderBlock::matchedEndLine):

2011-05-09  Darin Adler  <darin@apple.com>

        Cleared some stray executable bits on source files.

        * bindings/js/WorkerScriptDebugServer.cpp: Removed property svn:executable.
        * bindings/js/WorkerScriptDebugServer.h: Removed property svn:executable.

2011-05-09  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Darin Adler.

        radiogroup: onchange not detected when triggered by keyboard
        https://bugs.webkit.org/show_bug.cgi?id=32013

        Test: fast/forms/radio-group-keyboard-change-event.html

        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::handleKeydownEvent): Ensure that we do not check the radio input before we simulate the click
            event. The simulated click event will check it for us but more importantly it will fire the "change" event as
            expected.

2011-05-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Daniel Bates.

        XSSAuditor should be more selective about the <meta http-equivs> that it blocks
        https://bugs.webkit.org/show_bug.cgi?id=60489

        We don't need to filter most http-equiv attributes.  This patch
        introduces a blacklist for two that we probably do want to filter.
        It's possible a whitelist would be more appropriate, but I'm inclined
        to start with a blacklist and see how it works.

        This patch will hopefully fix a false positive that is causing errors
        with copy-and-pasted text in Gmail in some configurations (due to using
        the <meta> tag to request UTF-8 encoding both in the pasted text and in
        the page itself).

        * html/parser/XSSFilter.cpp:
        (WebCore::isNonCanonicalCharacter):
        (WebCore::canonicalize):
        (WebCore::isRequiredForInjection):
        (WebCore::hasName):
        (WebCore::findAttributeWithName):
        (WebCore::isNameOfInlineEventHandler):
        (WebCore::isDangerousHTTPEquiv):
            - This function is new in the patch and includes a blacklist of
              dangerous http-equivs.  Many of the other functions listed here
              are just being moved from an anonymous namespace to use static
              for internal linkage.
        (WebCore::containsJavaScriptURL):
        (WebCore::decodeURL):
        (WebCore::XSSFilter::eraseAttributeIfInjected):

2011-05-05  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Remove canvas usage of roundToDevicePixels
        https://bugs.webkit.org/show_bug.cgi?id=60331

        No new tests. This could only affect canvases at non-integral scale factors. Our tests only run in 1.0x.

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

2011-05-09  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Fix the build on Embedded Linux.
        https://bugs.webkit.org/show_bug.cgi?id=60347        

        qpa is the name for lighthouse but the old name for Qt for Embedded Linux should
        still be used in order to build properly.

        * WebCore.pri:

2011-05-09  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Simple small-caps text is displayed in uniform size.
        https://bugs.webkit.org/show_bug.cgi?id=60492

        Covered by existing tests.

        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData): In the FontPlatformData constructor
        used by SimpleFontData::scaledFontData(), pass the pixel size to both QFont and QRawFont
        to make small caps and emphasis marks have the correct size when rendered through
        the fast font path.

2011-05-09  Andreas Kling  <kling@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] Remove unused FontPlatformData functions.
        https://bugs.webkit.org/show_bug.cgi?id=60485

        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformData::bold): Removed.
        (WebCore::FontPlatformData::family): Removed.
        (WebCore::FontPlatformData::italic): Removed.
        (WebCore::FontPlatformData::smallCaps): Removed.

2011-05-09  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        [wx] Add invalid file handle check.
        
        https://bugs.webkit.org/show_bug.cgi?id=60483

        * platform/wx/FileSystemWx.cpp:
        (WebCore::closeFile):

2011-05-09  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        [wx] Update the popup menu code to grab the native control and initialize the
        event handler properly.
        
        https://bugs.webkit.org/show_bug.cgi?id=60482

        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenuWx::PopupMenuWx):
        (WebCore::PopupMenuWx::~PopupMenuWx):
        (WebCore::PopupMenuWx::show):

2011-05-09  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        [wx] Make sure other controls adjust the rect to handle transforms, and turn off the
        adjustment in 2.9.2+ where it is handled internally by wx.
        
        Also add a couple drawing and focus handling fixes for text fields and menulist controls.
        
        https://bugs.webkit.org/show_bug.cgi?id=60481

        * platform/wx/RenderThemeWx.cpp:
        (WebCore::getAdjustedRect):
        (WebCore::RenderThemeWx::supportsFocus):
        (WebCore::RenderThemeWx::paintButton):
        (WebCore::RenderThemeWx::adjustTextFieldStyle):
        (WebCore::RenderThemeWx::paintTextField):
        (WebCore::RenderThemeWx::adjustMenuListStyle):
        (WebCore::RenderThemeWx::paintMenuList):
        (WebCore::RenderThemeWx::paintMenuListButton):

2011-05-09  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Adler.

        Style fix: Function names must begin with lowercase letter and should not use "get".
        https://bugs.webkit.org/show_bug.cgi?id=60475

        * dom/Document.cpp:
        (WebCore::Document::webkitVisibilityState):
        * page/PageVisibilityState.cpp:
        (WebCore::pageVisibilityStateString): Renamed.
        * page/PageVisibilityState.h:

2011-05-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Tony Gentilcore.

        Make Chromium build with strict PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=60461

        Fix many, many PassOwnPtr nits.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::precompileScript):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::WindowSetTimeoutImpl):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::initMessageEventCallback):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval):
        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        (WebCore::Document::detach):
        * fileapi/DOMFileSystem.h:
        (WebCore::DOMFileSystem::scheduleCallback):
        * fileapi/FileSystemCallbacks.cpp:
        (WebCore::FileSystemCallbacks::didOpenFileSystem):
        (WebCore::ResolveURICallbacks::didOpenFileSystem):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayer::create):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::createRenderSurface):
        * platform/graphics/gpu/BicubicShader.cpp:
        (WebCore::BicubicShader::create):
        * platform/graphics/gpu/ConvolutionShader.cpp:
        (WebCore::ConvolutionShader::create):
        * platform/graphics/gpu/LoopBlinnSolidFillShader.cpp:
        (WebCore::LoopBlinnSolidFillShader::create):
        * platform/graphics/gpu/SolidFillShader.cpp:
        (WebCore::SolidFillShader::create):
        * platform/graphics/gpu/TexShader.cpp:
        (WebCore::TexShader::create):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::create):
        * storage/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::TrackerRemoveOpenDatabaseTask::create):
        * storage/chromium/SQLTransactionClientChromium.cpp:
        (WebCore::NotifyDatabaseChangedTask::create):

2011-05-07  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Daniel Bates.

        [Soup] Clean up error handling in ResourceHandleSoup
        https://bugs.webkit.org/show_bug.cgi?id=60436

        Instead of repeating the ResourceError creation twice, abstract
        it into a helper method.

        No new tests. This is a code cleanup.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::soupErrorShouldCauseLoadFailure): Added.
        (WebCore::convertSoupErrorToResourceError): Added.
        (WebCore::sendRequestCallback): Use the new helpers.
        (WebCore::readCallback): Ditto.

2011-05-09  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Regression(r85869): Restore dirty line logic in RenderInline::destroy.
        https://bugs.webkit.org/show_bug.cgi?id=60448

        Test: fast/inline/inline-destroy-dirty-lines-crash.html

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::destroy):

2011-05-09  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] WidgetGtk setFocus can not access directly the widget in WK2
        https://bugs.webkit.org/show_bug.cgi?id=60016

        Added code to check the situation where we do not have direct
        access to the widget. We use the page to grab the focus which
        would send a request to the UIProcess in WK2.

        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::setFocus):

2011-05-09  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Tony Gentilcore.

        Media Stream API: add exception raising to the getUserMedia method.
        https://bugs.webkit.org/show_bug.cgi?id=60387

        Perform the required changes to support rising exceptions in the
        navigator.getUserMedia method. This is required by the latest changes in the spec:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#dom-navigator-getusermedia

        Test: fast/dom/MediaStream/argument-types.html

        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::webkitGetUserMedia):
        * bindings/v8/custom/V8NavigatorCustom.cpp:
        (WebCore::V8Navigator::webkitGetUserMediaCallback):
        * page/Navigator.cpp:
        (WebCore::Navigator::webkitGetUserMedia):
        * page/Navigator.h:
        * page/Navigator.idl:

2011-05-09  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed Qt 4.8 fix.

        * WebCore.pro: 4.8 bots are updated with the full QRawFont APIs, so we can set HAVE_QRAWFONT now.

2011-05-09  Adam Roben  <aroben@apple.com>

        Windows project file fix after r86047

        * WebCore.vcproj/WebCore.vcproj: Added missing closing tags.

2011-05-06  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        Fix layer names to say "tiled" and show CALayer addresses, not PlatformCALayer addresses
        https://bugs.webkit.org/show_bug.cgi?id=60417

        Layer name now has "Tiled" prepended if it is a TiledLayer. This is true on Mac where
        the layer is a CATiledLayer and on Win where the layer is actually still a CACFLayer
        but implements a tiled layer. I also now print the address of the CALayer or CACFLayer
        instead of the PlatformCALayer everywhere.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):

2011-05-09  Rob Buis  <rbuis@rim.com>

        Reviewed by Dirk Schulze.

        Elements should assert that the QualifiedName given to their constructor corresponds to the Element constructed
        https://bugs.webkit.org/show_bug.cgi?id=22576

        Add tag name ASSERTs in SVG Element constructors.

        No new tests, since no change in behaviour.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::SVGAElement):
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::SVGAltGlyphElement):
        * svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::SVGAnimateColorElement):
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::SVGAnimateElement):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::SVGAnimateMotionElement):
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::SVGAnimateTransformElement):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::SVGCircleElement):
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::SVGClipPathElement):
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::SVGCursorElement):
        * svg/SVGDefsElement.cpp:
        (WebCore::SVGDefsElement::SVGDefsElement):
        * svg/SVGDescElement.cpp:
        (WebCore::SVGDescElement::SVGDescElement):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::SVGEllipseElement):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::SVGFEBlendElement):
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::SVGFEComponentTransferElement):
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::SVGFECompositeElement):
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::SVGFEConvolveMatrixElement):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement):
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
        * svg/SVGFEDistantLightElement.cpp:
        (WebCore::SVGFEDistantLightElement::SVGFEDistantLightElement):
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::SVGFEDropShadowElement):
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::SVGFEFloodElement):
        * svg/SVGFEFuncAElement.cpp:
        (WebCore::SVGFEFuncAElement::SVGFEFuncAElement):
        * svg/SVGFEFuncBElement.cpp:
        (WebCore::SVGFEFuncBElement::SVGFEFuncBElement):
        * svg/SVGFEFuncGElement.cpp:
        (WebCore::SVGFEFuncGElement::SVGFEFuncGElement):
        * svg/SVGFEFuncRElement.cpp:
        (WebCore::SVGFEFuncRElement::SVGFEFuncRElement):
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::SVGFEGaussianBlurElement):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::SVGFEImageElement):
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::SVGFEMergeElement):
        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::SVGFEMergeNodeElement):
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::SVGFEMorphologyElement):
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::SVGFEOffsetElement):
        * svg/SVGFEPointLightElement.cpp:
        (WebCore::SVGFEPointLightElement::SVGFEPointLightElement):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::SVGFESpecularLightingElement):
        * svg/SVGFESpotLightElement.cpp:
        (WebCore::SVGFESpotLightElement::SVGFESpotLightElement):
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::SVGFETileElement):
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::SVGFETurbulenceElement):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::SVGFontElement):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):
        * svg/SVGFontFaceFormatElement.cpp:
        (WebCore::SVGFontFaceFormatElement::SVGFontFaceFormatElement):
        * svg/SVGFontFaceNameElement.cpp:
        (WebCore::SVGFontFaceNameElement::SVGFontFaceNameElement):
        * svg/SVGFontFaceSrcElement.cpp:
        (WebCore::SVGFontFaceSrcElement::SVGFontFaceSrcElement):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::SVGFontFaceUriElement):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::SVGGElement):
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::SVGGlyphElement):
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::SVGHKernElement):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::SVGLineElement):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::SVGLinearGradientElement):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::SVGMPathElement):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        * svg/SVGMetadataElement.cpp:
        (WebCore::SVGMetadataElement::SVGMetadataElement):
        * svg/SVGMissingGlyphElement.cpp:
        (WebCore::SVGMissingGlyphElement::SVGMissingGlyphElement):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        * svg/SVGPolygonElement.cpp:
        (WebCore::SVGPolygonElement::SVGPolygonElement):
        * svg/SVGPolylineElement.cpp:
        (WebCore::SVGPolylineElement::SVGPolylineElement):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::SVGRadialGradientElement):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::SVGRectElement):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        * svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::SVGSetElement):
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::SVGStopElement):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::SVGStyleElement):
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::SVGSwitchElement):
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::SVGSymbolElement):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::SVGTRefElement):
        * svg/SVGTSpanElement.cpp:
        (WebCore::SVGTSpanElement::SVGTSpanElement):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::SVGTextElement):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::SVGTextPathElement):
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::SVGTitleElement):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        * svg/SVGVKernElement.cpp:
        (WebCore::SVGVKernElement::SVGVKernElement):
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::SVGViewElement):

2011-05-09  Shishir Agrawal  <shishir@chromium.org>

        Reviewed by Tony Gentilcore.

        Implement Page Visibility API.
        https://bugs.webkit.org/show_bug.cgi?id=54181

        Tests: fast/events/page-visibility-iframe-delete-test.html
               fast/events/page-visibility-iframe-move-test.html
               fast/events/page-visibility-iframe-propagation-test.html
               fast/events/page-visibility-transition-test.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::visibilityState):
        (WebCore::Document::webkitVisibilityState):
        (WebCore::Document::webkitIsVisible):
        (WebCore::Document::dispatchVisibilityStateChangeEvent):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/EventNames.h:
        * page/Frame.cpp:
        (WebCore::Frame::dispatchVisibilityStateChangeEvent):
        * page/Frame.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setVisibilityState):
        (WebCore::Page::visibilityState):
        * page/Page.h:
        * page/PageVisibilityState.cpp: Added.
        (WebCore::GetPageVisibilityStateString):
        * page/PageVisibilityState.h: Added.

2011-05-09  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Implement expanding CSS border properties in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=60456

        No new tests added as no functionality changed.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Create CSS border expanding property handlers.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove property handlers that are no longer needed.

2011-05-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        selectstart event does not fire when selection is made via select all
        https://bugs.webkit.org/show_bug.cgi?id=60376

        Fire selectstart event when a user selects all contents (i.e. document.execCommand('SelectAll')) in
        document, editable region, or text control.

        Tests: editing/selection/selectstart-on-selectall.html
               editing/selection/selectstart-prevent-selectall.html

        * dom/Node.h: Removed canSelectAll and selectAll as they are left over from WMLSelectElement.
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectAll): Dispatch selectstart event on selectStartTarget, which is
        input element or textarea element when the current selection is inside a shadow DOM, and the root
        editable element if it's inside a non-shadow editable region, and the body element otherwise.
        * html/HTMLSelectElement.h: Made canSelectAll and selectAll public since they are no longer
        declared in Node.

2011-05-08  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Make RenderStyle::setColumnBreakInside() reject unsupported enum values.
        https://bugs.webkit.org/show_bug.cgi?id=60249

        No new tests added as no functionality changed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove special-case code and use appropriate macro.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setColumnBreakInside):
        Assert that supported values are used.

2011-05-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Extract a DragCaretController from FrameSelection
        https://bugs.webkit.org/show_bug.cgi?id=60273

        Extracted CaretBase and DragCaretController from FrameSelection. CaretBase is a base class for
        DragCaretController and FrameSelection and provides functions to paint caret.

        Since DragCaretController doesn't need to store selection, it only holds one VisiblePosition.

        * WebCore.exp.in:
        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::CaretBase): Added.
        (WebCore::DragCaretController::DragCaretController): Added; Set m_caretVisible true.
        (WebCore::DragCaretController::isContentRichlyEditable): Added.
        (WebCore::FrameSelection::FrameSelection): Several member variables are move to CaretBase.
        (WebCore::DragCaretController::setCaretPosition): Extracted from FrameSelection::setSelection.
        (WebCore::FrameSelection::setSelection): Removed an early exit for DragCaretController.
        (WebCore::clearRenderViewSelection): Extracted from FrameSelection::respondToNodeModification.
        (WebCore::DragCaretController::nodeWillBeRemoved): Extracted from FrameSelection::nodeWillBeRemoved
        and respondToNodeModification. Note that the position DragCaretController holds is equivalent to
        FrameSelection's base or start so when removingNodeRemovesPosition returns true for m_position,
        we used to execute the first if clause and cleared render tree selection and DOM tree selection.
        This is exactly what new DragCaretController::nodeWillBeRemoved does.
        (WebCore::FrameSelection::nodeWillBeRemoved): Simplified early exist conditions.
        (WebCore::FrameSelection::respondToNodeModification): Calls clearRenderViewSelection.
        (WebCore::CaretBase::updateCaretRect): Takes document, caretPosition, selection type, and boolean isOrphaned.
        Note that we can't obtain the document from caretPosition because VisiblePosition can be null even if
        FrameSelection's start was not null.
        (WebCore::caretRendersInsideNode): Moved; Made static local.
        (WebCore::CaretBase::caretRenderer): Extracted from FrameSelection::caretRenderer.
        (WebCore::FrameSelection::caretRenderer): Calls CaretBase::caretRenderer.
        (WebCore::DragCaretController::caretRenderer): Ditto.
        (WebCore::FrameSelection::localCaretRect): Calls updateCaretRect with extra arguments.
        (WebCore::CaretBase::absoluteBoundsForLocalRect): Moved from FrameSelection; Takes Node*.
        (WebCore::CaretBase::caretRepaintRect): Ditto.
        (WebCore::FrameSelection::recomputeCaretRect): Calls absoluteBoundsForLocalRect, caretRepaintRect,
        and shouldRepaintCaret with extra arguments.
        (WebCore::CaretBase::shouldRepaintCaret): Takes a boolean isContentEditable.
        (WebCore::FrameSelection::invalidateCaretRect): Calls CaretBase::invalidateCaretRect.
        (WebCore::CaretBase::invalidateCaretRect): Extracted from FrameSelection::invalidateCaretRect.
        (WebCore::FrameSelection::paintCaret): Calls CaretBase::paintCaret.
        (WebCore::CaretBase::paintCaret): Extracted from FrameSelection::paintCaret.
        (WebCore::FrameSelection::updateAppearance): Removed an assertion that this function is never called for
        DragCaretController.
        (WebCore::DragCaretController::paintDragCaret): Moved from FrameSelection::paintDragCaret.
        * editing/FrameSelection.h:
        (WebCore::CaretBase::localCaretRectForPainting): Added.
        (WebCore::DragCaretController::isContentEditable): Added.
        (WebCore::DragCaretController::hasCaret): Added.
        (WebCore::DragCaretController::caretPosition): Added.
        (WebCore::DragCaretController::clear): Added.
        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag): Uses DragCaretController.
        (WebCore::DragController::dispatchTextInputEventFor): Ditto.
        (WebCore::DragController::concludeEditDrag): Ditto.
        (WebCore::DragController::placeDragCaret): Ditto.
        * page/Page.cpp:
        (WebCore::Page::Page): Instantiates DragCaretController instead of FrameSelection.
        * page/Page.h:
        (WebCore::Page::dragCaretController): Returns DragCaretController* instead of FrameSelection*.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret): Uses FrameSelection and DragCaretController.

2011-05-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9401853> REGRESSION (r78846): Insufficient expansion for justification when there are multiple inline boxes
        https://bugs.webkit.org/show_bug.cgi?id=60432

        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::setExpansion): Changed back to take a int, since the m_expansion member
        variable is a (truncated) int anyway.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::computeExpansionForJustifiedText): Changed the expansion local variable into an int
        so that the right amount is added to the total width. Also changed to use an early return.

2011-05-08  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: ignore 0 responses in the inspector network instrumentation.

        * inspector/front-end/NetworkManager.js:

2011-05-08  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsContext3D::getImageData() does not retrieve image data correctly
        https://bugs.webkit.org/show_bug.cgi?id=58556

        Tests: fast/canvas/webgl/gl-teximage.html

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2011-05-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9403055> REGRESSION (r85499): Inline images in iChat overflow their chat bubbles
        https://bugs.webkit.org/show_bug.cgi?id=60443

        Test: fast/replaced/table-percent-height-positioned.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing): Do not apply the logic to prevent precent-height
        replaced elements from being squeezed by table cells when the replaced element is positioned (and thus
        doesn’t affect the table cell’s height).

2011-05-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86016.
        http://trac.webkit.org/changeset/86016
        https://bugs.webkit.org/show_bug.cgi?id=60445

        caused crashes on the WK2 Windows bots (Requested by
        jessieberlin on #webkit).

        * platform/network/ResourceHandle.h:
        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::currentCookieStorage):
        (WebCore::defaultCookieStorage):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::makeFinalRequest):
        (WebCore::ResourceHandle::willSendRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2011-05-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r85974.
        http://trac.webkit.org/changeset/85974
        https://bugs.webkit.org/show_bug.cgi?id=60444

        broke browser tests (Requested by inferno-sec on #webkit).

        * platform/network/chromium/ResourceResponse.cpp:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::downloadFilePath):
        (WebCore::ResourceResponse::setDownloadFilePath):

2011-05-07  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Steve Falkenburg.

        [Windows WebKit2] Use cookies set in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=60274

        Share the default storage session between the UI and Web Processes.

        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::defaultSessionCookieStorage):
        Keep track of the default storage session cookie storage.
        (WebCore::currentCookieStorage):
        Call defaultCookieStorage to get the default cookie storage.
        (WebCore::defaultCookieStorage):
        If there is a default storage session cookie storage, prefer that over getting the default
        cookie storage. In the Web Process, asking CFNetwork for the default cookie storage directly
        without specifying a storage session will not get the cookie storage being shared by the UI
        and Web Processes.

        * platform/network/ResourceHandle.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        Make sure to set the current storage session on any requests used by the Web
        Process before CFNetwork has to do anything with them, in order for CFNetwork to avoid
        doing anything with the Web Process's default storage session (which is not the one shared
        with the UI Process).
        (WebCore::makeFinalRequest):
        Ditto.
        (WebCore::ResourceHandle::willSendRequest):
        Ditto.
        (WebCore::ResourceHandle::currentStorageSession):
        If there is a Private Browsing storage session, return that.
        If not, on Windows return the default storage session that is being shared with the UI
        Process and on Mac return 0.
        (WebCore::defaultCFURLStorageSession):
        (WebCore::ResourceHandle::setDefaultStorageSession):
        (WebCore::ResourceHandle::defaultStorageSession):

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        Make sure to set the current storage session on any requests used by the Web
        Process before CFNetwork has to do anything with them, in order for CFNetwork to avoid
        doing anything with the Web Process's default storage session (which is not the one shared
        with the UI Process).

2011-05-07  Joe Mason  <jmason@rim.com>

        Reviewed by Daniel Bates.

        FrameLoader::isProcessingUserGesture is wrong in dispatchWillPerformClientRedirect
        https://bugs.webkit.org/show_bug.cgi?id=52211

        Create a UserGestureIndicator when calling the clientRedirected callback.

        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledURLNavigation::didStartTimer):
        (WebCore::ScheduledURLNavigation::didStopTimer):
        (WebCore::ScheduledFormSubmission::didStartTimer):
        (WebCore::ScheduledFormSubmission::didStopTimer):

2011-05-06  Jon Lee  <jonlee@apple.com>

        Reviewed by Alice Liu.

        Crash when sending a wheel event to a node with no shadow ancestor node
        https://bugs.webkit.org/show_bug.cgi?id=60429
        <rdar://problem/9389619>

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent):add check to see if the shadow ancestor node of the node that was under the mouse exists before trying to dispatch the wheel event to it.

2011-05-06  Kent Tamura  <tkent@chromium.org>

        Reviewed by Ryosuke Niwa.

        Eliminate WebCore/dom/InputElement.{cpp,h}
        https://bugs.webkit.org/show_bug.cgi?id=60262

        - Fold in all of the code of InputElement.{cpp,h} into HTMLInputElement
          and TextFieldInputType.
        - Change the return type of Node::toInputElement():
          InputElement* -> HTMLInputElement*

        No new tests. This change should not change the existing behaviour.

        * CMakeLists.txt: Remove InpuntElement.cpp and/or InputElement.h.
        * GNUmakefile.list.am: ditto.
        * WebCore.exp.in: Add symbols of functions exposed to WebKit.
        * WebCore.gypi: Remove InpuntElement.cpp and/or InputElement.h.
        * WebCore.pro: ditto.
        * WebCore.vcproj/WebCore.vcproj: ditto.
        * WebCore.xcodeproj/project.pbxproj: ditto.
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::textMarkerDataForVisiblePosition):
          Follow the return type change of Node::toInputElement().
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isPasswordField): ditto.
        (WebCore::AccessibilityRenderObject::isIndeterminate): ditto.
        (WebCore::AccessibilityRenderObject::isNativeCheckboxOrRadio): ditto.
        (WebCore::AccessibilityRenderObject::isChecked): ditto.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement): ditto.
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): ditto.
        * dom/CheckedRadioButtons.cpp:
        (WebCore::CheckedRadioButtons::removeButton): ditto.
        * dom/DOMAllInOne.cpp: Remove InputElement.h.
        * dom/InputElement.cpp: Removed.
        * dom/InputElement.h: Removed.
        * dom/Node.cpp:
        (WebCore::Node::toInputElement):
          Change the return type from InputElement* to HTMLInputElement*.
        * dom/Node.h: ditto.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        (WebCore::HTMLInputElement::formControlName):
        (WebCore::HTMLInputElement::tooLong):
        (WebCore::HTMLInputElement::updateFocusAppearance):
        (WebCore::HTMLInputElement::aboutToUnload):
        (WebCore::HTMLInputElement::handleFocusEvent):
        (WebCore::HTMLInputElement::handleBlurEvent):
        (WebCore::HTMLInputElement::updateType):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::size):
        (WebCore::HTMLInputElement::copyNonAttributeProperties):
        (WebCore::HTMLInputElement::value):
        (WebCore::HTMLInputElement::suggestedValue):
        (WebCore::HTMLInputElement::setSuggestedValue):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        (WebCore::HTMLInputElement::setFileListFromRenderer):
        (WebCore::HTMLInputElement::setDefaultName):
        (WebCore::HTMLInputElement::maxLength):
        (WebCore::HTMLInputElement::cacheSelection):
        (WebCore::formatCodes): Moved from InputElement.
        (WebCore::cursorPositionToMaskIndex): ditto.
        (WebCore::HTMLInputElement::isConformToInputMask): ditto.
        (WebCore::HTMLInputElement::validateInputMask): ditto.
        (WebCore::HTMLInputElement::setWapInputFormat): ditto.
        (WebCore::HTMLInputElement::notifyFormStateChanged): ditto.
        (WebCore::HTMLInputElement::parseMaxLengthAttribute): ditto.
        (WebCore::HTMLInputElement::updateValueIfNeeded):ditto.
        * html/HTMLInputElement.h:
          - Add data members which were defined in InputElementData.
          - Make some functions public because the public interface InputElement is removed.
          - Make some functions non-virtual because they don't override
            corresponding virtual functions of InputElement anymore.
        (WebCore::HTMLInputElement::toInputElement):
          Follow the return type change of Node::toInputElement().
        (WebCore::HTMLInputElement::isIndeterminate):
        (WebCore::HTMLInputElement::isAutofilled):
        (WebCore::HTMLInputElement::supportsMaxLength):
        (WebCore::HTMLInputElement::cachedSelectionStart):
        (WebCore::HTMLInputElement::cachedSelectionEnd):
        * html/HTMLTextAreaElement.cpp: Remove unused InputElement.h.
        * html/InputType.cpp:
        (WebCore::InputType::handleBeforeTextInsertedEvent): Remove the code.
        * html/InputType.h: Update for the above.
        * html/TextFieldInputType.cpp:
        (WebCore::replaceEOLAndLimitLength): Moved from InputElement.cpp.
        (WebCore::TextFieldInputType::sanitizeValue): Implement with replaceEOLAndLimitLength().
        (WebCore::TextFieldInputType::handleBeforeTextInsertedEvent):
          Move the code from InputElement::handleBeforeTextInsertedEvent().
        * html/TextFieldInputType.h: Update declarations.
        * rendering/RenderTextControlSingleLine.cpp:
          - Remove ASSERT(node()->isHTMLElement()) because it is checked in the constructor.
          - Follow the return type change of inputElement().
        (WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
          Make sure node() is an HTMLInputElement instance.
        (WebCore::RenderTextControlSingleLine::addSearchResult):
        (WebCore::RenderTextControlSingleLine::stopSearchEventTimer):
        (WebCore::RenderTextControlSingleLine::showPopup):
        (WebCore::RenderTextControlSingleLine::hidePopup):
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged):
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        (WebCore::RenderTextControlSingleLine::createInnerBlockStyle):
        (WebCore::RenderTextControlSingleLine::createResultsButtonStyle):
        (WebCore::RenderTextControlSingleLine::createCancelButtonStyle):
        (WebCore::RenderTextControlSingleLine::createInnerSpinButtonStyle):
        (WebCore::RenderTextControlSingleLine::createOuterSpinButtonStyle):
        (WebCore::RenderTextControlSingleLine::createSpeechButtonStyle):
        (WebCore::RenderTextControlSingleLine::visibilityForCancelButton):
        (WebCore::RenderTextControlSingleLine::startSearchEventTimer):
        (WebCore::RenderTextControlSingleLine::searchEventTimerFired):
        (WebCore::RenderTextControlSingleLine::valueChanged):
        (WebCore::RenderTextControlSingleLine::setTextFromItem):
        (WebCore::RenderTextControlSingleLine::inputElement):
        * rendering/RenderTextControlSingleLine.h:
          Change the return type of inputElement(): InputElement* -> HTMLInputElement*.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isChecked):
          Follow the return type change of Node::toInputElement().
        (WebCore::RenderTheme::isIndeterminate): ditto.
        (WebCore::RenderTheme::shouldHaveSpinButton):
          Change the parameter type: InputElement* -> HTMLInputElement*.
        * rendering/RenderTheme.h: ditto.

2011-05-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement "Report-Only" mode for CSP
        https://bugs.webkit.org/show_bug.cgi?id=60402

        This mode lets web sites try out CSP by getting violation reports (and
        console spam) without actually changing the behavior of their web sites.

        Test: http/tests/security/contentSecurityPolicy/report-only.html

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::ContentSecurityPolicy):
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        (WebCore::ContentSecurityPolicy::reportViolation):
        (WebCore::ContentSecurityPolicy::checkInlineAndReportViolation):
        (WebCore::ContentSecurityPolicy::checkEvalAndReportViolation):
        (WebCore::ContentSecurityPolicy::checkSourceAndReportViolation):
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs):
        * page/ContentSecurityPolicy.h:

2011-05-06  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=60421
        Custom scrollbars nested inside an overlay scrollbar overflow region end up 
        painting twice
        -and corresponding-
        <rdar://problem/9389072>

        Be sure not to paint custom css scrollbars during the special overlay-scrollbar 
        painting pass.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintOverflowControls):

2011-05-06  Cary Clark  <caryclark@google.com>

        Reviewed by Eric Seidel.

        Add utility for converting SkCanvas to CGContext
        https://bugs.webkit.org/show_bug.cgi?id=59808

        Skia on Mac uses Skia to render WebKit, and CG 
        to render UI elements. The CG elements need a 
        transcribed graphics context that preserves the 
        canvas matrix, and the canvas clip. 

        The BitLockerSkia utility class sets up a CGContext 
        from the SkCanvas, locks the bitmap's bits, and 
        releases the lock when the class goes out of scope. 

        Each time the CGContext is retrieved, it is rebuilt. 
        This permits the caller to modify the same canvas 
        between calls. 

        This change adds utilities but does not modify any 
        existing code. For now, there are no callers to these 
        utilities, so there is no functional change.

        No new tests.

        * platform/graphics/skia/BitLockerSkia.cpp: Added.
        (WebCore::SkMatrixToCGAffineTransform): Conversion utility.
        (WebCore::BitLockerSkia::BitLockerSkia): Takes SkCanvas.
        (WebCore::BitLockerSkia::~BitLockerSkia): Unlocks, cleans up.
        (WebCore::BitLockerSkia::release): Internal private helper.
        (WebCore::BitLockerSkia::cgContext): Returns CGContextRef.
        * platform/graphics/skia/BitLockerSkia.h: Added.

2011-05-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] [WebKit2] WebView::windowToScreen needs an implementation
        https://bugs.webkit.org/show_bug.cgi?id=55960

        Abstract coordinate system translation code from WebKit into WebCore.
        This will allow the code to be shared between WebKit and WebKit2. The code
        now lives in a new GtkUtilities.cpp helper file.

        * GNUmakefile.list.am: Added GtkUtilities to the source list.
        * platform/gtk/GtkUtilities.cpp: Added.
        (WebCore::convertWidgetRectToScreenRect):
        * platform/gtk/GtkUtilities.h: Added.

2011-05-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Remove some unnecessary static methods in ResourceHandleSoup.

        No new tests. This is only a small cleanup.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback): Call ResourceResponse::updateFromSoupMessage directly.
        (WebCore::gotHeadersCallback):Ditto.
        (WebCore::contentSniffedCallback):Ditto.
        (WebCore::sendRequestCallback):Ditto.
        (WebCore::ResourceHandle::defaultSession): Create the soup session directly.

2011-05-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Soup] ResourceHandles are leaked on 304 responses
        https://bugs.webkit.org/show_bug.cgi?id=60413

        Always call cleanupSoupRequestOperation, even when the request was not
        canceled. Before the code would call didFinishLoading and then never clean up
        the request.

        No new tests. This simply fixes a memory leak.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sendRequestCallback):

2011-05-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add disable-javascript-urls CSP directive
        https://bugs.webkit.org/show_bug.cgi?id=60301

        This CSP directive is not in the CSP spec.  This patch is somewhat of
        an experiment to see whether this feature is useful.  Based on our
        implementation experience, we will coordinate with folks via the W3C to
        see if this makes sense to add to the spec.

        Test: http/tests/security/contentSecurityPolicy/javascript-urls-blocked.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::ContentSecurityPolicy):
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:

2011-05-06  Brett Wilson  <brettw@chromium.org>

        Reviewed by Adam Barth.

        Use a File object to store the downloaded file reference rather than
        just the path. This keeps the file and permissions in scope (using the
        already-existing blob system) so the browser won't delete the file
        when the load is complete. Instead, the file will be cleaned up when
        the request objects are deleted.
        https://bugs.webkit.org/show_bug.cgi?id=60281

        * platform/network/chromium/ResourceResponse.cpp:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::downloadedFile):
        (WebCore::ResourceResponse::setDownloadedFile):

2011-05-06  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Darin Adler.

        Fix two warnings of unused variables.
        https://bugs.webkit.org/show_bug.cgi?id=60370

        Remove two unused local variable from the code.

        No new tests, the existing ones should cover.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::calculateNextProgressTime):

2011-05-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Wire up CSP's eval blocking to V8's new API
        https://bugs.webkit.org/show_bug.cgi?id=60384

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

2011-05-06  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=60398 (<rdar://problem/9307696>)
        REGRESSION (r81684?): cox.com sign in button is missing
        
        Fix a typo in r81684 where the ascent was used in a comparison instead of boxHeight.
        This restores the original behavior before the refactoring messed it up.

        Added fast/inline/nested-top-alignment.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):

2011-05-06  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=60390 (<rdar://problem/9364449>)
        REGRESSION (r81992): portions of ticketmaster site render blank

        Make simplified layout skip from a positioned object out to its containing block.  There is no
        need to dirty the intermediate inlines, and in this case it's actively harmful, since the
        block responsible for the layout of the positioned object doesn't get m_posChildNeedsLayout set.

        Added fast/block/positioning/hiding-inside-relpositioned-inline.html

        * rendering/RenderObject.h:
        (WebCore::RenderObject::markContainingBlocksForLayout):

2011-05-06  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: move selection test into the text area branch.

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._contextMenu):

2011-05-04  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Fix incorrect scissor rect for layers that render into a rendersurface
        https://bugs.webkit.org/show_bug.cgi?id=59020

        Allow for empty scissor rects, which implies scissoring to the render
        surface. The previous code and previous patch on this bug both didn't
        take into account that the scissor rect should be the render surface
        and not the projection of the layer itself, because child layers
        aren't necessarily contained within the bounds of their superlayer.

        Test: compositing/flat-with-transformed-child.html

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::paintLayerContents):
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):
        (WebCore::LayerRendererChromium::drawLayer):
        (WebCore::LayerRendererChromium::setScissorToRect):

2011-05-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Lazily allocate ScrollAnimator in ScrollableArea
        https://bugs.webkit.org/show_bug.cgi?id=60327

        Avoid allocating the ScrollAnimator up-front, because we
        create lots of ScrollableAreas via RenderLayer, and we should
        only need the animator when scrolling.

        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::ScrollableArea):
        (WebCore::ScrollableArea::scrollAnimator):
        (WebCore::ScrollableArea::scroll):
        (WebCore::ScrollableArea::scrollToOffsetWithoutAnimation):
        (WebCore::ScrollableArea::scrollToXOffsetWithoutAnimation):
        (WebCore::ScrollableArea::scrollToYOffsetWithoutAnimation):
        (WebCore::ScrollableArea::handleWheelEvent):
        (WebCore::ScrollableArea::handleGestureEvent):
        * platform/ScrollableArea.h:

2011-05-06  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r77954): HTTP Live Streams have incorrect controller UI
        https://bugs.webkit.org/show_bug.cgi?id=60304
        <rdar://problem/9392609>

        Don't assume that the only time the media controls UI may need to change is on a 
        network state change, readyState changes can be significant as well.

        Tested manually because we don't have any live streams to test in DRT.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setNetworkState): changedNetworkState -> updateStatusDisplay.
        (WebCore::HTMLMediaElement::setReadyState): Call updateStatusDisplay.

        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::reset): changedNetworkState -> updateStatusDisplay.
        (WebCore::MediaControlRootElement::updateStatusDisplay): Ditto.
        * html/shadow/MediaControlRootElement.h:

        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::reset): Ditto.
        (WebCore::MediaControlRootElementChromium::updateStatusDisplay): Ditto.
        * html/shadow/MediaControlRootElementChromium.h:
        * html/shadow/MediaControls.h:

2011-05-06  Andreas Kling  <andreas.kling@nokia.com>

        Unreviewed Qt 4.8 build fix.

        * WebCore.pro: Don't set HAVE_QRAWFONT yet. Left a FIXME so we can
        enable it after the 4.8 bots are updated with the full QRawFont APIs.

2011-05-06  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: editing CSS in the Resources panel and not committing does not revert the change.
        https://bugs.webkit.org/show_bug.cgi?id=60319

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceSourceFrame.prototype.cancelEditing):

2011-05-06  Joe Mason  <jmason@rim.com>

        Reviewed by Adam Barth.

        WebSocket urls should always be encoded as UTF-8.
        https://bugs.webkit.org/show_bug.cgi?id=57138

        Change WebSocket::connect to take the raw URL string and parse it
        internally using the simple KURL constructor, which expects an absolute
        UTF-8 encoded URL.  This ensures that all code that creates a WebSocket
        goes through this method instead of completeURL.

        Test: http/tests/websocket/tests/url-with-nonascii-query.html

        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocketConstructor::constructJSWebSocket): Pass String instead of KURL to WebSocket::connect().
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect): Now takes a String instead of a KURL and parses it using UTF-8.
        * websockets/WebSocket.h:

2011-05-06  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Make CSSStyleSelector::applyProperty() CSSPropertyWebkitColorCorrection case use appropriate macro.
        https://bugs.webkit.org/show_bug.cgi?id=60339

        No tests added as no functionality changed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Use correct macro for CSSPropertySpeak.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::initialColorSpace):
        Add initialColorSpace() static method.

2011-05-06  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Make RenderStyle::setPageBreakInside() reject unsupported enum values.
        https://bugs.webkit.org/show_bug.cgi?id=60235

        No tests added as no functionality changed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove special-case code and use appropriate macro.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setPageBreakInside):
        Assert that only supported values are used.

2011-05-06  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Move burden of checking for BJustify box alignment into RenderStyle
        https://bugs.webkit.org/show_bug.cgi?id=60246

        No new tests added as no functionality changed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove special-case logic checking for BJUSTIFY and use existing macro.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setBoxAlign):
        Assert valid values are used.

2011-05-06  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Make CSSStyleSelector::applyProperty() CSSPropertyPointerEvents use the correct macro.
        https://bugs.webkit.org/show_bug.cgi?id=60338

        No tests added as no functionality changed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Use correct macro for CSSPropertySpeak.

2011-05-06  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Alexey Proskuryakov.

        Build fix with gcc 4.6 and c++0x support.
        https://bugs.webkit.org/show_bug.cgi?id=60284

        When enabling support of c++0x the compilation fails because of an
        ambiguous overload error. In this code when constructing the pair
        we use the new c++0x rvalue reference feature (&&). It means we are
        calling String(const WTF::AtomicString&) which becomes ambiguous because
        it has an overload WTF::String::String(const WTF::String&) and usually one
        with the native port string type (e.g. QString). In this code we want the
        String version because the pair store Strings.

        No new tests, build fix.

        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):

2011-05-06  Cris Neckar  <cdn@chromium.org>

        Reviewed by Dirk Schulze.

        Tests for crash when a transform is applied to certain filters.
        https://bugs.webkit.org/show_bug.cgi?id=59551

        Test: svg/filters/filter-after-transform-crash.svg

        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::determineAbsolutePaintRect):
        * platform/graphics/filters/FEConvolveMatrix.h:
        (WebCore::FEConvolveMatrix::determineAbsolutePaintRect):
        * platform/graphics/filters/FEDisplacementMap.h:
        (WebCore::FEDisplacementMap::determineAbsolutePaintRect):
        * platform/graphics/filters/FEFlood.h:
        (WebCore::FEFlood::determineAbsolutePaintRect):
        * platform/graphics/filters/FELighting.h:
        (WebCore::FELighting::determineAbsolutePaintRect):
        * platform/graphics/filters/FETile.h:
        (WebCore::FETile::determineAbsolutePaintRect):
        * platform/graphics/filters/FETurbulence.h:
        (WebCore::FETurbulence::determineAbsolutePaintRect):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::isFilterSizeValid):
        (WebCore::FilterEffect::determineAbsolutePaintRect):
        (WebCore::FilterEffect::asUnmultipliedImage):
        (WebCore::FilterEffect::asPremultipliedImage):
        (WebCore::FilterEffect::copyUnmultipliedImage):
        (WebCore::FilterEffect::copyPremultipliedImage):
        (WebCore::FilterEffect::createUnmultipliedImageResult):
        (WebCore::FilterEffect::createPremultipliedImageResult):
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::maxEffectRect):
        (WebCore::FilterEffect::setMaxEffectRect):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion):

2011-05-06  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Use cast to convert primitive value to FontSmoothingMode.
        https://bugs.webkit.org/show_bug.cgi?id=60242

        No tests added as no functionality changed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Use cast to convert primitive value to FontSmoothingMode.

2011-05-05  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Make CSSPropertySpeak use the correct macro.
        https://bugs.webkit.org/show_bug.cgi?id=60335

        No tests added as no functionality changed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Use correct macro for CSSPropertySpeak.

2011-05-05  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9390864>
        https://bugs.webkit.org/show_bug.cgi?id=60343
        Crash on Recovery System when trying to load page that includes media element

        Automated test not possible, tested manually.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isAvailable): Only return true if
            AVFoundation and CoreMedia are installed.

        * platform/mac/SoftLinking.h: Define SOFT_LINK_FRAMEWORK_OPTIONAL, identical to 
            SOFT_LINK_FRAMEWORK except that it doesn't ASSERT if the framework doesn't exist.

2011-05-05  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Live streams sometimes won't play with AVFoundation backend
        https://bugs.webkit.org/show_bug.cgi?id=58961
        rdar://problem/9284748

        Tested manually because we don't have any live streams to test in DRT.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates): Don't special case seeking, assume
            AVFoundation will notify us when internal states change.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h: Make m_timeObserver
            a RetainPtr
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): Ditto.

2011-05-05  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Adam Barth.

        Adding quoted-printable encoding/decoding capabilities.
        This is needed for MHTML support.
        https://bugs.webkit.org/show_bug.cgi?id=59834

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/text/QuotedPrintable.cpp: Added.
        * platform/text/QuotedPrintable.h: Added.

2011-05-05  Andy Estes  <aestes@apple.com>

        Reviewed by Eric Seidel.

        Implement document.innerHTML
        https://bugs.webkit.org/show_bug.cgi?id=60316

        ASSERT that contextElement is non-0 when constructing a HTMLTreeBuilder
        for fragment parsing. This assertion will become invalid when
        document.innerHTML is implemented, which is the only case where HTML5
        specifies that a fragment will not have a context element.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):

2011-05-05  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Include ApplicationServices for wx port.

        * platform/graphics/GlyphBuffer.h:
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:

2011-05-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        WebCore part of <rdar://problem/9155590> Broken animation in iAd producer

        * WebCore.exp.in: Export wkExecutableWasLinkedOnOrBeforeSnowLeopard.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): Account for the binary-compatiblity
        check in Core Animation.
        * platform/mac/WebCoreSystemInterface.h: Added wkExecutableWasLinkedOnOrBeforeSnowLeopard.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2011-05-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 (Mac): Background tabs/windows can force themselves to the front
        <rdar://problem/9386346>
        https://bugs.webkit.org/show_bug.cgi?id=60315

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::setFocus):
        It is incorrect for us to call Chrome::focus() here, which could bring a window/tab
        to the front. Calling focusNSView() was only necessary because in WebKit we must inform
        the platform widget that the focus has changed. WebKit2 Mac now matches other ports.

2011-05-05  Justin Novosad  <junov@chromium.org>

        Reviewed by Kenneth Russell.

        [Chromium] Change the --accelerated-2d-canvas flag to mean Ganesh, and stop using --enable-accelerated-drawing for that purpose
        https://bugs.webkit.org/show_bug.cgi?id=60173

        * page/Page.cpp:
        (WebCore::Page::sharedGraphicsContext3D):
        Flipping the switch to make Skia the default for the accelerated 2d canvas

2011-05-05  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        ASSERT(m_state == ParsingState) fires @ www.canalplus.fr
        https://bugs.webkit.org/show_bug.cgi?id=60101

        Test: fast/parser/close-while-stopping.html

        * dom/Document.cpp:
        (WebCore::Document::close): According to http://www.whatwg.org/specs/web-apps/current-work/#dom-document-close,
        the close() steps should be aborted if there is no script-created parser
        associated with the document. Our parser lives throughout
        http://www.whatwg.org/specs/web-apps/current-work/#the-end, but it seems
        the spec doesn't consider the parser active any more. So to properly
        respect this, we need to check that the parser is still parsing.

2011-04-28  Evan Martin  <evan@chromium.org>

        Reviewed by Ojan Vafai.

        REGRESSION: backspace should not go back on Linux
        https://bugs.webkit.org/show_bug.cgi?id=59731

        Add a new EditingBehavior, shouldNavigateBackOnBackspace, which is false on
        Linux, and test for it in the default backspace handler.

        * editing/EditingBehavior.h:
        (WebCore::EditingBehavior::shouldNavigateBackOnBackspace):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultBackspaceEventHandler):

2011-05-05  Igor Oliveira  <igor.oliveira@openbossa.org>

        Reviewed by Kenneth Russell.

        Framebuffer object is being created twice
        https://bugs.webkit.org/show_bug.cgi?id=60207

        Does not create more than one opengl framebuffer

        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/gpu/qt/DrawingBufferQt.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/gtk/DrawingBufferGtk.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):

2011-05-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Beth Dakin.

        Every RenderLayer registers itself as a ScrollableArea
        https://bugs.webkit.org/show_bug.cgi?id=59650

        Rather than registering every RenderLayer as a ScrollableArea
        on layer creation, only register RenderLayers which are overflow-
        scrollable. Use the m_scrollableAreaPage pointer to keep track
        of whether we've registered to avoid excess work.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::scrollsOverflow):
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:

2011-05-05  Jer Noble  <jer.noble@apple.com>

        Reviewed by Steve Falkenburg.

        Workaround iTunes' incorrect registry entry for .m4a extensions.
        https://bugs.webkit.org/show_bug.cgi?id=60229

        No new tests, as a test already exits for .m4a support (LayoutTests/media/audio-mpeg4-supported.html).
        The test failed to catch this regression because the build bots haven't installed iTunes.
        
        Add a hard-coded MIME type mapping for 'm4a' -> 'audio/x-m4a'.

        * platform/win/MIMETypeRegistryWin.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):

2011-05-05  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        When style changes for a RenderBlock and we lose our ability to intrude into
        floats in the next siblings block (e.g a position change), make sure to mark
        our childs with floats for layout and iterate through our next sibling block
        chain to see which ones contain the float that also exists in our floating
        objects list and clear those using markAllDescendantsWithFloatsForLayout.
        https://bugs.webkit.org/show_bug.cgi?id=56299

        Tests: fast/block/float/float-not-removed-from-next-sibling-crash.html
               fast/block/float/float-not-removed-from-next-sibling.html
               fast/block/float/float-not-removed-from-next-sibling2.html
               fast/block/float/float-not-removed-from-next-sibling3.html
               fast/block/float/float-not-removed-from-next-sibling4.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleWillChange):
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::markSiblingsWithFloatsForLayout):
        * rendering/RenderBlock.h:

2011-05-05  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        WebKit2: Docking Web Inspector doesn't respect maximum inspector size
        https://bugs.webkit.org/show_bug.cgi?id=60294
        <rdar://problem/9388518>

        Make a needed function public and export it.

        * WebCore.exp.in: Export constrainedAttaechedWindowHeight.
        * inspector/InspectorFrontendClientLocal.h: Make constrainedAttaechedWindowHeight public.

2011-05-05  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Nate Chapin.

        [Navigation Timing] navigationStart should always be available
        https://bugs.webkit.org/show_bug.cgi?id=59448

        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::navigationStart):

2011-05-05  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adam Roben.

        Block callbacks delivered during destruction
        https://bugs.webkit.org/show_bug.cgi?id=60291
        <rdar://problem/9382942>

        No new tests, tested by existing tests.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::~MediaPlayerPrivateAVFoundation): Call 
            setIgnoreLoadStateChanges(true) to cancel all callbacks.
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates): Return immediately if 
            m_ignoreLoadStateChanges is true.
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification): loadStateChanged -> updateStates.
            Don't call updateStates after calling loadedTimeRangesChanged, it already does it.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

2011-05-05  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9354979> REGRESSION (r83070-r83126): Conversation takes 10 seconds to load and makes mail unresponsive

        Culled inlines were triggering some pathological line box tree groveling that isn't even necessary.
        Removed the ancient code (that used to be in RenderFlow), since it made no sense in the RenderBlock case
        (it was running for inline blocks, which was definitely not even the intent) or in the RenderInline case
        (the object being removed has no effect on any lines).
        
        Also tweaked culledInlineFirstLineBox and culledInlineLastLineBox to avoid bailing if the first replaced object that
        is encountered has a null inlineBoxWrapper().  Just a slight speed optimization to avoid an extra null check.
        
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::destroy):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::destroy):
        (WebCore::RenderInline::culledInlineFirstLineBox):
        (WebCore::RenderInline::culledInlineLastLineBox):

2011-05-05  Bharathwaaj Srinivasan  <bharathwaaj.s@gmail.com>

        Reviewed by Holger Freyther.

        Fix build-webkit --minimal.
        https://bugs.webkit.org/show_bug.cgi?id=60257

        No new tests. This is just a build fix.

        * bindings/js/JSDOMBinding.cpp:

2011-05-05  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adam Roben.

        The preload attribute of the video tag is not completely implemented
        https://bugs.webkit.org/show_bug.cgi?id=43673
        <rdar://problem/9369746>

        This change implements "preload=metadata" for the AVFoundation backend.
        Tested manually with manual-tests/media-elements/video-preload.html.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_havePreparedToPlay.
        (WebCore::HTMLMediaElement::prepareForLoad): Ditto.
        (WebCore::HTMLMediaElement::prepareToPlay): New, tell player to prepare to play.
        (WebCore::HTMLMediaElement::seek): Call prepareToPlay when preload is less than 'auto'
            because we need to have media data loaded to seek.
        (WebCore::HTMLMediaElement::updatePlayState): Call prepareToPlay.
        * html/HTMLMediaElement.h:

        * manual-tests/media-elements/video-preload.html: Make changing urls work. 

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):  Remove 
            m_videoFrameHasDrawn and m_delayingLoad as they are no longer used.
        (WebCore::MediaPlayerPrivateAVFoundation::resumeLoad): Removed.
        (WebCore::MediaPlayerPrivateAVFoundation::load): Don't initialize m_videoFrameHasDrawn. 
            Move all preload logic to setPreload, call it from here.
        (WebCore::MediaPlayerPrivateAVFoundation::prepareToPlay): Move all preload logic to 
            setPreload, call it.
        (WebCore::MediaPlayerPrivateAVFoundation::duration): Don't cache duration = 0, it is
            unlikely to be correct and isn't worth caching. Use invalidTime() function.
        (WebCore::MediaPlayerPrivateAVFoundation::seeking): Use invalidTime() function.
        (WebCore::MediaPlayerPrivateAVFoundation::setNaturalSize): Add logging.
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates): Update for name change AVAssetStatus
            to AssetStatus. Always create a AVPlayerItem for live streams because they can't be inspected
            without one. Set networkState to 'idle' when the playback buffer is full because that is
            a signal that AVFoundation won't do any more IO. Set readyState to 'HAVE_CURRENT_DATA' 
            when the first frame is available.
        (WebCore::MediaPlayerPrivateAVFoundation::metadataLoaded): Call tracksChanged so we cache
            width, height, hasVideo, etc.
        (WebCore::MediaPlayerPrivateAVFoundation::loadedTimeRangesChanged): Use invalidTime() function.
        (WebCore::MediaPlayerPrivateAVFoundation::timeChanged): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::repaint): Don't set m_videoFrameHasDrawn, it is done
            in derived classes.
        (WebCore::MediaPlayerPrivateAVFoundation::setPreload): Centralize all logic about when to create
            AVAsset and AVPlayerItem here.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Initialize
            m_videoFrameHasDrawn.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasAvailableVideoFrame): New, renamed from
            videoLayerIsReadyToDisplay. Return true if we have a layer with frames available or
            if we have painted a frame to the context.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): New, create the AVAsset
            if necessary.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForCacheResource): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): Restructure logic.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem): New, create AVPlayerItem.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata): Correct logging.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playerItemStatus): Return "buffer full" when
            the buffer is full.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformDuration): Get the duration from the
            AVAsset when we haven't allocated the AVPlayerItem yet so that we can return duration
            when we only have metadata.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::assetStatus): Update for name change.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paint): Set m_videoFrameHasDrawn.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Get attributes from AVAsset
            when when we haven't allocated the AVPlayerItem yet so that we can report attributes
            when we only have metadata.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::sizeChanged): Guard against being called before
            we have allocated the AVPlayerItem.

2011-05-05  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Rename SelectionController to FrameSelection
        https://bugs.webkit.org/show_bug.cgi?id=60234

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionRangeForLine):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        * bindings/objc/ExceptionHandlers.h:
        * css/CSSStyleSelector.cpp:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::cloneChildNodes):
        * dom/Document.cpp:
        * dom/InputElement.cpp:
        * editing/DeleteButtonController.cpp:
        * editing/EditCommand.cpp:
        * editing/EditingAllInOne.cpp:
        * editing/EditingStyle.cpp:
        * editing/Editor.cpp:
        (WebCore::Editor::canCopy):
        (WebCore::Editor::canDelete):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::changeSelectionAfterCommand):
        (WebCore::Editor::respondToChangedSelection):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeDeleteToMark):
        (WebCore::executeMoveBackward):
        (WebCore::executeMoveBackwardAndModifySelection):
        (WebCore::executeMoveDown):
        (WebCore::executeMoveDownAndModifySelection):
        (WebCore::executeMoveForward):
        (WebCore::executeMoveForwardAndModifySelection):
        (WebCore::executeMoveLeft):
        (WebCore::executeMoveLeftAndModifySelection):
        (WebCore::executeMovePageDown):
        (WebCore::executeMovePageDownAndModifySelection):
        (WebCore::executeMovePageUp):
        (WebCore::executeMovePageUpAndModifySelection):
        (WebCore::executeMoveRight):
        (WebCore::executeMoveRightAndModifySelection):
        (WebCore::executeMoveToBeginningOfDocument):
        (WebCore::executeMoveToBeginningOfDocumentAndModifySelection):
        (WebCore::executeMoveToBeginningOfLine):
        (WebCore::executeMoveToBeginningOfLineAndModifySelection):
        (WebCore::executeMoveToBeginningOfParagraph):
        (WebCore::executeMoveToBeginningOfParagraphAndModifySelection):
        (WebCore::executeMoveToBeginningOfSentence):
        (WebCore::executeMoveToBeginningOfSentenceAndModifySelection):
        (WebCore::executeMoveToEndOfDocument):
        (WebCore::executeMoveToEndOfDocumentAndModifySelection):
        (WebCore::executeMoveToEndOfSentence):
        (WebCore::executeMoveToEndOfSentenceAndModifySelection):
        (WebCore::executeMoveToEndOfLine):
        (WebCore::executeMoveToEndOfLineAndModifySelection):
        (WebCore::executeMoveToEndOfParagraph):
        (WebCore::executeMoveToEndOfParagraphAndModifySelection):
        (WebCore::executeMoveParagraphBackwardAndModifySelection):
        (WebCore::executeMoveParagraphForwardAndModifySelection):
        (WebCore::executeMoveUp):
        (WebCore::executeMoveUpAndModifySelection):
        (WebCore::executeMoveWordBackward):
        (WebCore::executeMoveWordBackwardAndModifySelection):
        (WebCore::executeMoveWordForward):
        (WebCore::executeMoveWordForwardAndModifySelection):
        (WebCore::executeMoveWordLeft):
        (WebCore::executeMoveWordLeftAndModifySelection):
        (WebCore::executeMoveWordRight):
        (WebCore::executeMoveWordRightAndModifySelection):
        (WebCore::executeMoveToLeftEndOfLine):
        (WebCore::executeMoveToLeftEndOfLineAndModifySelection):
        (WebCore::executeMoveToRightEndOfLine):
        (WebCore::executeMoveToRightEndOfLineAndModifySelection):
        * editing/FrameSelection.cpp: Copied from Source/WebCore/editing/SelectionController.cpp.
        (WebCore::FrameSelection::FrameSelection):
        (WebCore::FrameSelection::moveTo):
        (WebCore::FrameSelection::setSelection):
        (WebCore::FrameSelection::nodeWillBeRemoved):
        (WebCore::FrameSelection::respondToNodeModification):
        (WebCore::FrameSelection::textWillBeReplaced):
        (WebCore::FrameSelection::setIsDirectional):
        (WebCore::FrameSelection::directionOfEnclosingBlock):
        (WebCore::FrameSelection::willBeModified):
        (WebCore::FrameSelection::positionForPlatform):
        (WebCore::FrameSelection::startForPlatform):
        (WebCore::FrameSelection::endForPlatform):
        (WebCore::FrameSelection::modifyExtendingRight):
        (WebCore::FrameSelection::modifyExtendingForward):
        (WebCore::FrameSelection::modifyMovingRight):
        (WebCore::FrameSelection::modifyMovingForward):
        (WebCore::FrameSelection::modifyExtendingLeft):
        (WebCore::FrameSelection::modifyExtendingBackward):
        (WebCore::FrameSelection::modifyMovingLeft):
        (WebCore::FrameSelection::modifyMovingBackward):
        (WebCore::FrameSelection::modify):
        (WebCore::FrameSelection::xPosForVerticalArrowNavigation):
        (WebCore::FrameSelection::clear):
        (WebCore::FrameSelection::setStart):
        (WebCore::FrameSelection::setEnd):
        (WebCore::FrameSelection::setBase):
        (WebCore::FrameSelection::setExtent):
        (WebCore::FrameSelection::setCaretRectNeedsUpdate):
        (WebCore::FrameSelection::updateCaretRect):
        (WebCore::FrameSelection::caretRenderer):
        (WebCore::FrameSelection::localCaretRect):
        (WebCore::FrameSelection::absoluteBoundsForLocalRect):
        (WebCore::FrameSelection::absoluteCaretBounds):
        (WebCore::FrameSelection::caretRepaintRect):
        (WebCore::FrameSelection::recomputeCaretRect):
        (WebCore::FrameSelection::shouldRepaintCaret):
        (WebCore::FrameSelection::invalidateCaretRect):
        (WebCore::FrameSelection::paintCaret):
        (WebCore::FrameSelection::debugRenderer):
        (WebCore::FrameSelection::contains):
        (WebCore::FrameSelection::selectFrameElementInParentIfFullySelected):
        (WebCore::FrameSelection::selectAll):
        (WebCore::FrameSelection::setSelectedRange):
        (WebCore::FrameSelection::isInPasswordField):
        (WebCore::FrameSelection::caretRendersInsideNode):
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        (WebCore::FrameSelection::pageActivationChanged):
        (WebCore::FrameSelection::updateSecureKeyboardEntryIfActive):
        (WebCore::FrameSelection::setUseSecureKeyboardEntry):
        (WebCore::FrameSelection::setFocused):
        (WebCore::FrameSelection::isFocusedAndActive):
        (WebCore::FrameSelection::updateAppearance):
        (WebCore::FrameSelection::setCaretVisible):
        (WebCore::FrameSelection::clearCaretRectIfNeeded):
        (WebCore::FrameSelection::caretBlinkTimerFired):
        (WebCore::FrameSelection::notifyRendererOfSelectionChange):
        (WebCore::FrameSelection::setFocusedNodeIfNeeded):
        (WebCore::FrameSelection::paintDragCaret):
        (WebCore::FrameSelection::copyTypingStyle):
        (WebCore::FrameSelection::shouldDeleteSelection):
        (WebCore::FrameSelection::bounds):
        (WebCore::FrameSelection::getClippedVisibleTextRectangles):
        (WebCore::FrameSelection::currentForm):
        (WebCore::FrameSelection::revealSelection):
        (WebCore::FrameSelection::setSelectionFromNone):
        (WebCore::FrameSelection::shouldChangeSelection):
        (WebCore::FrameSelection::formatForDebugger):
        (WebCore::FrameSelection::showTreeForThis):
        (showTree):
        * editing/FrameSelection.h: Copied from Source/WebCore/editing/SelectionController.h.
        (WebCore::FrameSelection::typingStyle):
        (WebCore::FrameSelection::clearTypingStyle):
        (WebCore::FrameSelection::setTypingStyle):
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * editing/ModifySelectionListLevel.cpp:
        * editing/RemoveFormatCommand.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        * editing/SelectionController.cpp: Removed.
        * editing/SelectionController.h: Removed.
        * editing/SetSelectionCommand.cpp:
        (WebCore::SetSelectionCommand::SetSelectionCommand):
        (WebCore::SetSelectionCommand::doApply):
        (WebCore::SetSelectionCommand::doUnapply):
        * editing/SetSelectionCommand.h:
        (WebCore::SetSelectionCommand::create):
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::doApply):
        * editing/SpellingCorrectionController.cpp:
        (WebCore::SpellingCorrectionController::respondToUnappliedSpellCorrection):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * editing/chromium/FrameSelectionChromium.cpp: Copied from Source/WebCore/editing/chromium/SelectionControllerChromium.cpp.
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * editing/chromium/SelectionControllerChromium.cpp: Removed.
        * editing/gtk/FrameSelectionGtk.cpp: Copied from Source/WebCore/editing/gtk/SelectionControllerGtk.cpp.
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * editing/gtk/SelectionControllerGtk.cpp: Removed.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::canCopyExcludingStandaloneImages):
        * editing/mac/FrameSelectionMac.mm: Copied from Source/WebCore/editing/mac/SelectionControllerMac.mm.
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * editing/mac/SelectionControllerMac.mm: Removed.
        * editing/qt/EditorQt.cpp:
        * loader/archive/cf/LegacyWebArchive.cpp:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::type):
        (WebCore::DOMSelection::modify):
        (WebCore::DOMSelection::addRange):
        (WebCore::DOMSelection::deleteFromDocument):
        (WebCore::DOMSelection::containsNode):
        * page/DragController.cpp:
        (WebCore::DragController::dragIsMove):
        * page/DragController.h:
        * page/EventHandler.cpp:
        (WebCore::setSelectionIfNeeded):
        (WebCore::setNonDirectionalSelectionIfNeeded):
        (WebCore::EventHandler::sendContextMenuEventForKey):
        (WebCore::EventHandler::handleKeyboardSelectionMovement):
        * page/EventHandler.h:
        * page/FocusController.cpp:
        (WebCore::clearSelectionIfNeeded):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/Frame.h:
        (WebCore::Frame::selection):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::dragCaretController):
        * page/chromium/DragControllerChromium.cpp:
        * page/chromium/EventHandlerChromium.cpp:
        * page/win/DragControllerWin.cpp:
        * page/win/EventHandlerWin.cpp:
        * rendering/HitTestResult.cpp:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::destroy):
        (WebCore::RenderBlock::paintCaret):
        * rendering/RenderImage.cpp:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::destroy):
        * rendering/RenderLayer.cpp:
        * rendering/RenderListBox.cpp:
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        * rendering/RenderTextControl.cpp:
        * rendering/RenderTextControlSingleLine.cpp:
        * rendering/RenderTheme.cpp:
        * rendering/RenderTreeAsText.cpp:
        * svg/SVGSVGElement.cpp:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::selectSubString):

2011-05-05  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] unreviewed build correction.

        * platform/network/curl/ResourceRequest.h:
        Stub out the new pipelined http logic for cURL.

2011-05-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: searching for node does not result in bringToFront call.
        https://bugs.webkit.org/show_bug.cgi?id=60222

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.updateFocusedNode):

2011-05-05  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement the fast font path for Qt.
        https://bugs.webkit.org/show_bug.cgi?id=51106

        Use the new QRawFont and QGlyphs APIs in Qt 4.8 to implement the fast paths for
        rendering and measurement of simple text.

        Since this is still unreleased API, it's guarded by HAVE(QRAWFONT) until the new
        classes are fully integrated into the Qt 4.8 release branch.

        * WebCore.pro: Add HAVE_QRAWFONT define (for Qt >= 4.8) and new files to build.

        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText): Disable fast font path for stroked text, and when
        painting text with a shadow. (Qt-only)
        (WebCore::Font::codePath): Try to use fast font path in more cases.

        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::rawFontForCharacters): Helper function, returns a suitable QRawFont
        to use for rendering a given string. Goes through QTextLayout to find the best
        font based on the original QFont query.
        (WebCore::FontCache::getFontDataForCharacters): Implemented using helper above.

        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformDataPrivate::FontPlatformDataPrivate):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::rawFont):
        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Add a QRawFont member to FontPlatformData.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::fillPenForContext):
        (WebCore::strokePenForContext):
        (WebCore::drawTextCommon): Factored QPen creation out of drawTextCommon
        to share code between complex and simple font rendering paths.
        (WebCore::Font::drawGlyphs): Implemented using QPainter::drawGlyphs().

        * platform/graphics/qt/GlyphPageTreeNodeQt.cpp:
        (WebCore::GlyphPage::fill): Implemented using QRawFont::glyphIndexesForString().

        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::determinePitch): Return false when using QRawFont since we
        have no way of knowing the pitch.
        (WebCore::SimpleFontData::containsCharacters): Implemented using QRawFont::supportsCharacter().
        (WebCore::SimpleFontData::platformWidthForGlyph): Implemented using QRawFont::advancesForGlyphIndexes().
        (WebCore::SimpleFontData::scaledFontData): Added, based on other ports.
        (WebCore::SimpleFontData::smallCapsFontData): Ditto.
        (WebCore::SimpleFontData::emphasisMarkFontData): Ditto.
        (WebCore::SimpleFontData::platformBoundsForGlyph): Stub.
        (WebCore::SimpleFontData::platformInit): Use QRawFont APIs to retrieve font metrics.
        (WebCore::SimpleFontData::platformCharWidthInit): Ditto.

2011-05-05  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] RenderThemeQt and DumpRenderTreeSupportQt should use nullptr rather than 0.
        https://bugs.webkit.org/show_bug.cgi?id=60224

        We should use nullptr rather than 0. nullptr will be added in the new C++ standard
        but WebKit already has a nullptr class if there is no c++0x support.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::adjustProgressBarStyle):
        (WebCore::RenderThemeQt::adjustSliderTrackStyle):
        (WebCore::RenderThemeQt::adjustSliderThumbStyle):

2011-05-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: rename BrowserDebugger to DOMDebugger.

        https://bugs.webkit.org/show_bug.cgi?id=60256
        InspectorBrowserDebuggerAgent => InspectorDOMDebuggerAgent
        browserDebugger => domDebugger

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::inspectedPageDestroyed):
        (WebCore::InspectorAgent::disconnectFrontend):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::DOMDebuggerAgent):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        * inspector/InspectorDOMDebuggerAgent.cpp: Renamed from Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp.
        (WebCore::InspectorDOMDebuggerAgent::create):
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::~InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::debuggerWasEnabled):
        (WebCore::InspectorDOMDebuggerAgent::debuggerWasDisabled):
        (WebCore::InspectorDOMDebuggerAgent::disable):
        (WebCore::InspectorDOMDebuggerAgent::clearFrontend):
        (WebCore::InspectorDOMDebuggerAgent::discardBindings):
        (WebCore::InspectorDOMDebuggerAgent::setEventListenerBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeEventListenerBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::didInsertDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::setDOMBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeDOMBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent):
        (WebCore::InspectorDOMDebuggerAgent::hasBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::updateSubtreeBreakpoints):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        (WebCore::InspectorDOMDebuggerAgent::clear):
        * inspector/InspectorDOMDebuggerAgent.h: Renamed from Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded):
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::inspectorDOMDebuggerAgent):
        (WebCore::InstrumentingAgents::setInspectorDOMDebuggerAgent):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::connectFrontend):

2011-05-04  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: show only Console and Scripts panels in worker inspector front-end
        https://bugs.webkit.org/show_bug.cgi?id=60159

        * inspector/front-end/WorkerManager.js:
        (WebInspector.WorkerManager.isWorkerFrontend):
        * inspector/front-end/inspector.js: show only Scripts and Console panels in the worker inspector front-end.

2011-05-03  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        IndexedDB: Unit tests for LevelDB key coding functions
        https://bugs.webkit.org/show_bug.cgi?id=59692

        Fix some embarrassing bugs uncovered by unit tests.

        No new functionality, but this is now covered by unit tests in the Chromium WebKit port.

        * storage/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::decodeInt):
        (WebCore::IDBLevelDBCoding::decodeVarInt):

2011-05-05  Young Han Lee  <joybro@company100.net>

        Reviewed by Csaba Osztrogonác.

        [Texmap][Qt] Enable strict OwnPtr for Qt with texmap enabled.
        https://bugs.webkit.org/show_bug.cgi?id=60251

        No new tests. Build fix.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):

2011-05-04  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Adam Barth.

        Adding a utility class to read a SharedBuffer line by line.
        https://bugs.webkit.org/show_bug.cgi?id=59946

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/SharedBufferCRLFLineReader.cpp: Added.
        * platform/SharedBufferCRLFLineReader.h: Added.

2011-05-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r85788.
        http://trac.webkit.org/changeset/85788
        https://bugs.webkit.org/show_bug.cgi?id=60250

        svg/text/text-block-child-crash.xhtml asserts (Requested by
        Ossy on #webkit).

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

2011-05-04  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Make more member functions in EventHandler private
        https://bugs.webkit.org/show_bug.cgi?id=60200

        Reduced the number of public member functions in EventHandler.

        * WebCore.exp.in:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleAutoscroll):
        (WebCore::EventHandler::autoscrollTimerFired):
        (WebCore::EventHandler::stopAutoscrollTimer):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult):
        * page/EventHandler.h:
        (WebCore::EventHandler::mouseDownMayStartSelect):

2011-05-04  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] REGRESSION(85136): Composited content vanishes when transform-style changes from preserve-3d to flat
        https://bugs.webkit.org/show_bug.cgi?id=60202

        In r85136 I accidentally transposed two lines in GraphicsLayerChromium when adding a null check.  This switches
        the order back and adds a regression test.

        Test: compositing/repaint/transform-style-change.html

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):

2011-05-04  Cris Neckar  <cdn@chromium.org>

        Reviewed by Adam Barth.

        Expose WebView directly through ChromeClient.
        https://bugs.webkit.org/show_bug.cgi?id=49902

        Test: fast/media/media-svg-crash.html

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::webView):
        * page/ChromeClient.h:
        * page/brew/ChromeClientBrew.h:
        (WebCore::ChromeClientBrew::webView):

2011-05-04  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Darin Adler.

        Unable to Paste After Deleting Text from Input due to -webkit-user-select
        https://bugs.webkit.org/show_bug.cgi?id=60219

        When deleting all the text inside the input a placeholder <br>
        element was inserted for the selection point. However, when
        pasting, the test run computes the -webkit-user-select for the
        <br> element, instead of what would be the text inside the
        <input> and incorrectly disallows selection and prevented
        the paste.

        Test: editing/pasteboard/paste-placeholder-input.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::insertFragmentForTestRendering): skip
        <br> elements above us as those are likely placeholder elements.

2011-05-04  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Martin Robinson.

        Windows build of WebKit GTK needs to be able to find SystemInfo.h
        https://bugs.webkit.org/show_bug.cgi?id=60221

        * GNUmakefile.am: add Source/WebCore/platform/win to the paths searched
        for headers, since Source/WebCore/platform/win/SystemInfo.h
        header is needed by Source/WebKit/gtk/webkit/webkitwebsettings.cpp
        on Windows.

2011-05-04  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Improve sorting of layers in hierarchies that preserve-3d
        by testing for overlapping regions between layer pairs and doing a
        topological sort to determine the right order.
        https://bugs.webkit.org/show_bug.cgi?id=59255

        Test: platform/chromium/compositing/perpendicular-layer-sorting.html

        * WebCore.gypi:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::clearRenderSurface):
        * platform/graphics/chromium/cc/CCLayerSorter.cpp: Added.
        (WebCore::perpProduct):
        (WebCore::innerProduct):
        (WebCore::pointInColinearEdge):
        (WebCore::edgeEdgeTest):
        (WebCore::CCLayerSorter::LayerIntersector::LayerIntersector):
        (WebCore::CCLayerSorter::LayerIntersector::go):
        (WebCore::CCLayerSorter::LayerIntersector::edgeTriangleTest):
        (WebCore::CCLayerSorter::LayerIntersector::triangleTriangleTest):
        (WebCore::CCLayerSorter::LayerIntersector::checkZDiff):
        (WebCore::CCLayerSorter::LayerIntersector::layerZFromProjectedPoint):
        (WebCore::CCLayerSorter::CCLayerSorter):
        (WebCore::CCLayerSorter::checkOverlap):
        (WebCore::CCLayerSorter::createGraphNodes):
        (WebCore::CCLayerSorter::createGraphEdges):
        (WebCore::CCLayerSorter::removeEdgeFromList):
        (WebCore::CCLayerSorter::sort):
        * platform/graphics/chromium/cc/CCLayerSorter.h: Added.
        (WebCore::CCLayerSorter::GraphNode::GraphNode):
        (WebCore::CCLayerSorter::GraphEdge::GraphEdge):

2011-05-03  Jer Noble  <jer.noble@apple.com>

        Reviewed by Antti Koivisto.

        Safari: Video at apple.com cannot play at full screen mode with layout distortion
        https://bugs.webkit.org/show_bug.cgi?id=60140

        Because a fullscreen element may be in a stacking context with a lower z-index than
        a sibling stacking context, those higher contexts would sometimes "pop" through the 
        full screen renderer. To facilitate eliminating all the stacking contexts aside from
        the full screen renderer, added a new pseudo-class specific to video or audio full
        screen elements. Then, added a new UA rule which resets the z-index and opacities of 
        all elements under said pseudo-class to auto and 1 respectively. To facilitate quick
        identity checking of HTMLMediaElements, added isMediaElement() virtual function to 
        Element and HTMLMediaElement. 

        Test: fullscreen/full-screen-stacking-context.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId): Support PseudoFullScreenMediaDocument.
        (WebCore::nameToPseudoTypeMap): Support fullScreenMediaDocument.
        (WebCore::CSSSelector::extractPseudoType): Support PseudoFullScreenMediaDocument.
        * css/CSSSelector.h: Add PseudoFullScreenMediaDocument.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Support PseudoFullScreenMediaDocument.
        * css/fullscreen.css:
        (:root:-webkit-full-screen-document:not(:-webkit-full-screen)): Corrected these names, 
            which were missing the -webkit prefix.
        (:root:-webkit-full-screen-media-document *:not(-webkit-full-screen)): Added.
        * dom/Element.h:
        (WebCore::Element::isMediaElement): Added, returns false.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::isMediaElement): Added, returns true.
        * rendering/style/RenderStyleConstants.h: Added FULL_SCREEN_MEDIA_DOCUMENT.

2011-05-04  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Split findNextLineBreak into a LineBreaker class
        https://bugs.webkit.org/show_bug.cgi?id=60209

        Breaking findNextLineBreak into a new class inside RenderBlock. Currently it's tracking
        nearly no state, but subsequent patches will move some of the local variables used throughout
        the nextLineBreak function into member variables to simplify breaking off helper functions from
        the bloated function.

        No new tests since this is just moving code around.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::LineBreaker::LineBreaker):
        (WebCore::RenderBlock::LineBreaker::lineWasHyphenated): Accessor.
        (WebCore::RenderBlock::LineBreaker::positionedObjects): Ditto.
        (WebCore::RenderBlock::LineBreaker::clear): Ditto.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloats):
        (WebCore::RenderBlock::LineBreaker::skipTrailingWhitespace):
        (WebCore::RenderBlock::LineBreaker::skipLeadingWhitespace):
        (WebCore::RenderBlock::LineBreaker::reset):
        (WebCore::RenderBlock::LineBreaker::nextLineBreak):

2011-05-04  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Adam Barth.

        Add COMPILER(MINGW) to the compilers using the Microsoft C Runtime's vsnprintf.
        The vsnprintf is part of Microsoft C runtime used also by MinGW (GCC) toolchain.
        https://bugs.webkit.org/show_bug.cgi?id=58579

        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::error):

2011-05-04  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed warning fix.

        The variable is just used in the ASSERT macro. Let's use ASSERT_UNUSED to avoid
        a warning in Release build.

        * dom/Node.cpp:
        (WebCore::Node::removeEventListener):
        * platform/DateComponents.cpp:
        (WebCore::DateComponents::parseTime):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::convertToLayerCoords):
        * storage/StorageMap.cpp:
        (WebCore::StorageMap::importItem):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildShadowTree):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):

2011-05-04  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed warning fix.

        The variable is just used in the ASSERT macro. Let's use ASSERT_UNUSED to avoid
        a warning in Release build.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::lastChildConsideringContinuation):

2011-05-04  Dimitri Glazkov  <dglazkov@chromium.org>

        Sort xcodeproj files.

        The WebCore.xcodeproj got out of sorts again.

        * WebCore.xcodeproj/project.pbxproj: Ran sort-XCode-project-file.

2011-05-04  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Adam Barth.

        Warning fix.

        * bindings/js/DOMObjectHashTableMap.h:
        (WebCore::DOMObjectHashTableMap::~DOMObjectHashTableMap):

2011-05-04  Rob Buis  <rbuis@rim.com>

        Reviewed by Darin Adler.

        NULL deref when SVG elements have table styles 
        https://bugs.webkit.org/show_bug.cgi?id=45561

        Restrict computed CSS values for SVG display property to block, inline or none.

        Tests: svg/custom/display-table-caption-foreignObject.svg
               svg/custom/display-table-caption-inherit-foreignObject.xhtml
               svg/custom/display-table-caption-inherit-text.xhtml
               svg/custom/display-table-caption-text.svg

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

2011-05-04  Tao Bai  <michaelbai@chromium.org>

        Reviewed by David Kilzer.

        Populate touch-icon url to FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=59143
        
        Parsed and populated apple-touch-icon url to FrameLoaderClient.
        Changed favicon to be a type of icon.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::iconURL):
        (WebCore::Document::setIconURL):
        * dom/Document.h:
        * dom/IconURL.cpp: Added.
        (WebCore::toIconIndex):
        * dom/IconURL.h: Added.
        (WebCore::IconURL::IconURL):
        * features.pri:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::tokenizeRelAttribute):
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::addSubresourceAttributeURLs):
        * html/HTMLLinkElement.h:
        (WebCore::HTMLLinkElement::RelAttribute::RelAttribute):
        (WebCore::HTMLLinkElement::isEnabledViaScript):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::HTMLNames::PreloadTask::relAttributeIsStyleSheet):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::iconURL):
        (WebCore::DocumentLoader::setIconURL):
        * loader/DocumentLoader.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::dispatchDidChangeIcons):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::iconURL):
        (WebCore::FrameLoader::iconURLs):
        (WebCore::FrameLoader::fillIconURL):
        (WebCore::FrameLoader::getDefaultIconURL):
        (WebCore::FrameLoader::setIconURL):
        (WebCore::FrameLoader::didChangeIcons):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:

2011-05-04  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Crash in PlatformCALayer ::replaceSublayer when layer has not superlayer
        https://bugs.webkit.org/show_bug.cgi?id=60191

        Skip replaceSublayer when there is no superlayer rather than asserting.
        This is probably not a problem and happens when restructuring the layer
        tree. Avoiding this crash will allow us to get more testing.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):

2011-05-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        Fix the GTK+ 2.x build for Windows. Instead of making getStockIcon a RenderTheme
        method, just use extern declarations to avoid having to declare it in the header.
        This will prevent having to include glib.h in RenderThemeGtk.h, which is included
        in many C++ files.

        No new tests. This is just a build fix.

        * platform/gtk/RenderThemeGtk.cpp: Update getStockIcon calls to say getStockIconForWidgetType.
        (WebCore::RenderThemeGtk::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeGtk::paintSearchFieldCancelButton):
        (WebCore::RenderThemeGtk::paintCapsLockIndicator):
        (WebCore::RenderThemeGtk::paintMediaButton):
        * platform/gtk/RenderThemeGtk.h: Removed getStockIcon declaration. Make gtkContainer() and
        gtkEntry() public because they are now accessed externally from getStockIcon().
        * platform/gtk/RenderThemeGtk2.cpp: Update getStockIcon calls.
        (WebCore::getStockIconForWidgetType):
        * platform/gtk/RenderThemeGtk3.cpp: Ditto.
        (WebCore::getStockIconForWidgetType):

2011-05-04  Mark Pilgrim  <pilgrim@chromium.org>

        Reviewed by Tony Chang.

        IndexedDB open (database) should fail if name is null
        https://bugs.webkit.org/show_bug.cgi?id=60022

        Test: storage/indexeddb/mozilla/open-database-null-name.html

        Combination problem: Bug in IDL didn't pass null values to .cpp layer,
        then .cpp layer didn't check for null value anyway.

        * storage/IDBFactory.cpp:
        (WebCore::IDBFactory::open): check for null name
        * storage/IDBFactory.idl: pass null name as null

2011-05-04  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Entering full screen fails >= second time on Vimeo.com.
        https://bugs.webkit.org/show_bug.cgi?id=60143

        Force the RenderFullScreen's layer backing to be recreated when setAnimating() is called.
        Previously, the RenderLayerCompositor would fail to reparent the RenderFullScreen's layer
        at the end of an animation, if it determined that the RenderFullScreen would still require
        a layer even when not animating.

        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::setAnimating): Clear the renderer's layer.

2011-05-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Avoid allocating a new image buffer in ~CanvasRenderingContext2D()
        https://bugs.webkit.org/show_bug.cgi?id=59849

        When attempting to unwind the graphics state stack in the
        CanvasRenderingContext2D destructor, don't allow HTMLCanvasElement
        to create a new ImageBuffer.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::existingDrawingContext):
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::~CanvasRenderingContext2D):

2011-05-04  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: expose shadow DOM in the Elements panel
        https://bugs.webkit.org/show_bug.cgi?id=60160

        Test: inspector/elements/shadow-dom.html

        * dom/Element.cpp:
        (WebCore::Element::ensureShadowRoot):
        (WebCore::Element::removeShadowRoot):
        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMAgent::isContainerNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.DOMNode.prototype.inShadowTree):
        (WebInspector.DOMNode.prototype._setShadowRootPayload):
        (WebInspector.DOMNode.prototype._renumber):
        (WebInspector.DOMAgent.prototype._bindNodes):
        (WebInspector.DOMAgent.prototype.querySelectorAll):
        (WebInspector.DOMAgent.prototype._shadowRootUpdated):
        (WebInspector.DOMDispatcher.prototype.searchResults):
        (WebInspector.DOMDispatcher.prototype.shadowRootUpdated):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype._nodeUpdated):
        (WebInspector.ElementsPanel.prototype._attributesUpdated):
        (WebInspector.ElementsPanel.prototype._nodeRemoved):
        (WebInspector.ElementsPanel.prototype.updateModifiedNodes):
        (WebInspector.ElementsPanel.prototype.updateBreadcrumb):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype._updateChildren.updateChildrenOfNode):
        (WebInspector.ElementsTreeElement.prototype._updateChildren):
        ():
        * inspector/front-end/inspector.css:
        (#elements-content .dom-shadow-root):
        (.outline-disclosure li .webkit-html-tag.shadow):
        * inspector/front-end/utilities.js:

2011-05-03  Adam Roben  <aroben@apple.com>

        Remove an unnecessary OwnPtr equality check in XSLT code

        Fixes <http://webkit.org/b/60053> Testing OwnPtrs for equality should cause a compiler error

        Reviewed by Anders Carlsson and Antti Koivisto.

        * dom/Document.cpp:
        (WebCore::Document::setTransformSource): No need to check for equality. If the pointers are
        equal, we're screwed anyway. (And the caller always passes in a newly-allocated object, so
        we're safe.)

2011-05-04  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Tony Gentilcore.

        Media Stream API: add the skeleton of the frame and page controllers and the embedder client.
        https://bugs.webkit.org/show_bug.cgi?id=56922

        Add the basic outlines of the page controller, the per-frame controller and the embedder
        client interface for the Media Stream API. Provide methods to handle the situations
        where a frame is detached from the page or transferred between pages.

        Tests for the Media Stream API will be provided by the bug 56587.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::~Frame):
        (WebCore::Frame::pageDestroyed):
        (WebCore::Frame::transferChildFrameToNewDocument):
        * page/Frame.h:
        (WebCore::Frame::mediaStreamFrameController):
        * page/MediaStreamClient.h: Added.
        (WebCore::MediaStreamClient::~MediaStreamClient):
        * page/MediaStreamController.cpp: Added.
        (WebCore::MediaStreamController::Request::Request):
        (WebCore::MediaStreamController::Request::localId):
        (WebCore::MediaStreamController::Request::frameController):
        (WebCore::MediaStreamController::MediaStreamController):
        (WebCore::MediaStreamController::~MediaStreamController):
        (WebCore::MediaStreamController::unregisterFrameController):
        (WebCore::MediaStreamController::registerRequest):
        * page/MediaStreamController.h: Added.
        * page/MediaStreamFrameController.cpp: Added.
        (WebCore::MediaStreamFrameController::Request::Request):
        (WebCore::MediaStreamFrameController::Request::~Request):
        (WebCore::MediaStreamFrameController::Request::scriptExecutionContext):
        (WebCore::MediaStreamFrameController::Request::isGenerateStreamRequest):
        (WebCore::MediaStreamFrameController::Request::isRecordedDataRequest):
        (WebCore::MediaStreamFrameController::RequestMap::abort):
        (WebCore::MediaStreamFrameController::RequestMap::abortAll):
        (WebCore::MediaStreamFrameController::MediaStreamFrameController):
        (WebCore::MediaStreamFrameController::~MediaStreamFrameController):
        (WebCore::MediaStreamFrameController::securityOrigin):
        (WebCore::MediaStreamFrameController::scriptExecutionContext):
        (WebCore::MediaStreamFrameController::pageController):
        (WebCore::MediaStreamFrameController::enterDetachedState):
        (WebCore::MediaStreamFrameController::disconnectPage):
        (WebCore::MediaStreamFrameController::disconnectFrame):
        (WebCore::MediaStreamFrameController::transferToNewPage):
        * page/MediaStreamFrameController.h: Added.
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::PageClients::PageClients):
        * page/Page.h:
        (WebCore::Page::mediaStreamController):

2011-05-04  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Double-click in a read-only style rule results in a non-editable blank property
        https://bugs.webkit.org/show_bug.cgi?id=60150

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype._handleEmptySpaceDoubleClick):

2011-05-04  Dominic Battre  <battre@chromium.org>

        Reviewed by Tony Gentilcore.

        Fix missing header in case SVG is disabled
        https://bugs.webkit.org/show_bug.cgi?id=60153

        * dom/EventDispatcher.cpp:

2011-05-04  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Rename CSSStyleApplyProperty::propertyValue and setPropertyValue.
        https://bugs.webkit.org/show_bug.cgi?id=60006

        No new tests as no functionality added. Simple rename only.

        * css/CSSStyleApplyProperty.cpp:
        Rename propertyValue propertyHandler and setPropertyValue setPropertyHandler.
        * css/CSSStyleApplyProperty.h:
        Rename propertyValue propertyHandler and setPropertyValue setPropertyHandler.

2011-05-04  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Cleanup conditionals in findNextLineBreak
        https://bugs.webkit.org/show_bug.cgi?id=60117

        Simplified conditional statements in findNextLineBreak.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2011-05-04  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Make CSSStyleSelector::applyProperty() CSSPropertyWebkitHyphens case use appropriate macro.
        https://bugs.webkit.org/show_bug.cgi?id=60114

        No new tests as no functionality changes.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Use HANDLE_INHERIT_AND_INITIAL_AND_PRIMITIVE macro to remove code duplication.

2011-05-04  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Fix QNetworkReplyWrapper to not depend on QNetworkReply::isFinished() method
        https://bugs.webkit.org/show_bug.cgi?id=59070

        Applications using our API and our autotests subclass QNetworkReply as part of providing a
        custom QNetworkAccessManager. But there's an API limitation in Qt 4.7, that makes
        QNetworkReply::isFinished() always be false for these custom replies. This was fixed in Qt
        4.8, see http://bugreports.qt.nokia.com/browse/QTBUG-11737.

        The consequence is that QtWebKit cannot rely on this function. So now QNetworkReplyWrapper
        watches for the finished() signal and set a dynamic property "_q_isFinished" on the reply
        indicating that it is finished. When there's no finished signal (synchronous) we set the
        dynamic property once we get the reply.

        This fixes tst_QWebFrame::requestedUrl(), that was breaking because sniffer was not
        emitting its own finished() signal, causing QWebFrame::loadFinished() to not be emitted.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
        Connect the finished signal to the new setFinished() slot.

        (WebCore::QNetworkReplyWrapper::synchronousLoad):
        Since we don't get the finished signal for synchronous loads, set the dynamic property
        before processing it.

        (WebCore::QNetworkReplyWrapper::resetConnections):
        Do not reset the connection to setFinished().

        (WebCore::QNetworkReplyWrapper::setFinished):
        Set the dynamic property in the reply.

        (WebCore::QNetworkReplyWrapper::emitMetaDataChanged):
        (WebCore::QNetworkReplyHandler::start):
        Change to use wrapper's isFinished() instead of asking the reply directly.

        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyWrapper::isFinished):
        Checks the dynamic property of the reply.

        * platform/network/qt/QtMIMETypeSniffer.cpp:
        (QtMIMETypeSniffer::sniff):
        Use the dynamic property to check if the reply is finished.

2011-05-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Split createLineBoxesFromBidiRuns out from layoutRunsAndFloats
        https://bugs.webkit.org/show_bug.cgi?id=60080

        No functional change, just moving code.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::createLineBoxesFromBidiRuns):
        (WebCore::RenderBlock::layoutRunsAndFloats):

2011-05-04  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove unused function FontPlatformData::pixelSize()
        https://bugs.webkit.org/show_bug.cgi?id=60156

        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformData::pixelSize): Removed.

2011-05-04  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Darin Adler.

        Remove redundant conversion from auto table layout to auto table layout in CSSStyleSelector::applyProperty()
        https://bugs.webkit.org/show_bug.cgi?id=60011

        No new tests added as no functionality changed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove reundant check for auto table layout.

2011-05-04  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Darin Adler.

        Remove double-free checks for bug 56124
        https://bugs.webkit.org/show_bug.cgi?id=60037

        Antti's speculative fix for bug 56124 (r84151) appears to have worked,
        these CRASH() calls are not triggering anymore.

        * css/CSSSelector.h:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::~CSSSelector):
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::deleteSelectors):

2011-05-04  Satish Sampath  <satish@chromium.org>

        Reviewed by Tony Gentilcore.

        Layout the speech input button to the left of outer spin button properly.
        https://bugs.webkit.org/show_bug.cgi?id=59742

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):

2011-05-04  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Build fix.

        * bindings/js/JSInjectedScriptHostCustom.cpp: fix includes declaration

2011-05-03  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: can't inspect element in an iframe when element originates from non-frame document
        https://bugs.webkit.org/show_bug.cgi?id=60031
        
        Inspected object type evaluation has moved into native bindings. This way it doesn't
        depend on the current JS context.

        Test: inspector/elements/elements-inspect-iframe-from-different-domain.html

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::isHTMLAllCollection): this method helps distinguish
        real undefined values from HTMLAllCollection
        (WebCore::JSInjectedScriptHost::type): method that returns presice type of the passed
        value
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::isHTMLAllCollectionCallback):
        (WebCore::V8InjectedScriptHost::typeCallback):
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        (.):

2011-05-03  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Antti Koivisto.

        Part of WebCore should use CFNetwork-based loader on Mac
        https://bugs.webkit.org/show_bug.cgi?id=51836

        Merge the conflicting definitions of WebCore::privateBrowsingCookieStorage() into one. Clean
        up some warnings and #if USE(CFNETWORK) around code.

        * platform/mac/CookieJar.mm:
        * platform/network/CookieStorage.h:
        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::privateBrowsingCookieStorage):
        (WebCore::currentCookieStorage):
        (WebCore::setCurrentCookieStorage):
        (WebCore::setCookieStoragePrivateBrowsingEnabled):
        (WebCore::notifyCookiesChangedOnMainThread):
        (WebCore::notifyCookiesChanged):
        * platform/network/cf/CookieStorageCFNet.h:
        * platform/network/mac/CookieStorageMac.mm:

2011-05-03  Justin Novosad  <junov@chromium.org>

        Reviewed by Kenneth Russell.

        [Chromium] Make accelerated 2d canvas enabled by default with skia
        https://bugs.webkit.org/show_bug.cgi?id=59929

        No new tests. Covered by existing layout tests

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        Initialized for accelerated canvas if either the accelerated2dCanvas
        or the legacyAccelerated2dCanvas flags are enabled
        * page/Page.cpp:
        (WebCore::Page::sharedGraphicsContext3D):
        This is where the code goes to implement the functionality for the
        legacy vs current acceleration paths for the 2D canvas. Currently,
        this is a no-op, and always select the legacy path.  This is temporary
        until we are ready to sort the GPU layout tests (rebasline vs. bug)
        * page/Settings.cpp:  Added new flage for legacyAccelerated2dCanvas
        (WebCore::Settings::Settings):
        (WebCore::Settings::setLegacyAccelerated2dCanvasEnabled):
        * page/Settings.h:
        (WebCore::Settings::legacyAccelerated2dCanvasEnabled):

2011-04-29  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Seidel.

        Implement FULLSCREEN_API on Windows, Part 4: Enable it
        https://bugs.webkit.org/show_bug.cgi?id=59798

        * WebCore.vcproj/WebCore.vcproj: Add missing full screen related
            files to the project.

2011-05-03  Alpha Lam  <hclam@chromium.org>

        Not reviewed. Build fix.

        More places from 0 to nullptr.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::precompileScript):
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::create):
        * platform/graphics/gpu/BicubicShader.cpp:
        (WebCore::BicubicShader::create):
        * platform/graphics/gpu/ConvolutionShader.cpp:
        (WebCore::ConvolutionShader::create):
        * platform/graphics/gpu/LoopBlinnSolidFillShader.cpp:
        (WebCore::LoopBlinnSolidFillShader::create):
        * platform/graphics/gpu/SolidFillShader.cpp:
        (WebCore::SolidFillShader::create):
        * platform/graphics/gpu/TexShader.cpp:
        (WebCore::TexShader::create):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::~PlatformContextSkia):
        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::createIterator):
        * platform/text/LocalizedNumberICU.cpp:
        (WebCore::createFormatterForCurrentLocale):

2011-05-03  Alpha Lam  <hclam@chromium.org>

        Not reviewed. Build fix.

        Using nullptr instead of 0. This makes visual studio happy.

        * storage/IDBTransactionBackendInterface.h:

2011-05-03  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add template parameter to ApplyPropertyColor to improve clarity by removing constructor parameter side effects.
        https://bugs.webkit.org/show_bug.cgi?id=59774

        No new tests required as on new functionality.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyColor::applyValue):
        Added template parameter "inheritColorFromParent = false".
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Use template parameter where appropriate.

2011-05-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9313186> Make the fix for <rdar://problem/9190108> more robust.

        Added a pointer from FloatingObject to its originating line, if there is one, and made sure to
        dirty the line when the float is removed, instead of relying on the float always intersecting
        its originating line.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeFloatingObject):
        (WebCore::RenderBlock::removeFloatingObjectsBelow):
        (WebCore::RenderBlock::clearFloats):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatingObject::FloatingObject):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::appendFloatingObjectToLastLine):
        (WebCore::RenderBlock::layoutRunsAndFloats):
        (WebCore::RenderBlock::determineStartPosition):

2011-05-02  Jer Noble  <jer.noble@apple.com>

        Reviewed by Adam Roben.

        Implement FULLSCREEN_API on Windows, Part 3: WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=59845

        Move WebFullScreenController into WebCore to facilitate code sharing between WebKit
        and WebKit2.  WebFullScreenController now uses a Client class to request work on its
        behalf by WebKit and WebKit2.  MediaPlayerPrivateFullscreenWindow now only creates a 
        CALayerHost once a root layer is set, as the CALayerHost was causing child window drawing
        problems, and because a CALayerHost is overkill if the window is only drawing black to
        its client area.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::MediaPlayerPrivateFullscreenWindow): Do not create 
            m_layerHost in the constructor.
        (WebCore::MediaPlayerPrivateFullscreenWindow::createWindow): NULL check m_layerHost.
        (WebCore::MediaPlayerPrivateFullscreenWindow::setRootChildLayer): Lazily instantiate m_layerHost.
        (WebCore::MediaPlayerPrivateFullscreenWindow::wndProc): NULL check m_layerHost; if a root layer is
            not present, fill the window with black in WM_PAINT.
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:
        * platform/graphics/win/FullScreenController.cpp: Renamed from Source/WebKit/win/WebFullScreenController.cpp.
        * platform/graphics/win/FullScreenController.h: Renamed from Source/WebKit/win/WebFullScreenController.h.
        * platform/graphics/win/FullScreenControllerClient.h: Split out from FullScreenController.h
        (WebCore::FullScreenControllerClient::~FullScreenControllerClient):

2011-05-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=60087 and <rdar://problem/9373182>
        WK2 Icon Database should provide access to all image representations in the icon.

        Add an accessor for CG platforms to get a CFArrayRef of all the CGImageRefs represented:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::getCGImageArray):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::getCGImageArray):

2011-05-03  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        findNextLineBreak splits InlineIterator into 3 pieces
        https://bugs.webkit.org/show_bug.cgi?id=60082

        Avoid splitting InlineIterator into 3 variables with inter-dependencies.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::fastIncrementInTextNode): Added.
        (WebCore::InlineIterator::previousInSameNode): Added.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2011-05-03  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        Interrupted transitions are not correctly removed
        https://bugs.webkit.org/show_bug.cgi?id=60062

        CompositeAnimation was replacing any existing
        transition as a new one was created. However, it wasn't
        clearing the lists in AnimationControllerPrivate that
        signal when a hardware animation starts. Rather than
        simple removing the existing transition, we now tell
        AnimationControllerPrivate that is has gone.

        Test: transitions/3d/interrupted-transition.html

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):

2011-05-03  Enrica Casucci  <enrica@apple.com>

        Reviewed by Ryosuke Niwa.

        Crash in SpellingCorrectionController::respondToChangedSelection.
        https://bugs.webkit.org/show_bug.cgi?id=60071
        <rdar://problem/9358190>

        Creating a Visible position could trigger a layout and there is no
        guarantee that the selection is still valid after that.

        Tests: editing/selection/undo-crash.html

        * editing/SpellingCorrectionController.cpp:
        (WebCore::SpellingCorrectionController::respondToChangedSelection):

2011-05-03  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Refactor computeInlineDirectionPositionsForLine into smaller functions
        https://bugs.webkit.org/show_bug.cgi?id=60072

        Split three functions off from computeInlineDirectionPositionsForLine
        to improve its readability.

        No new tests since this is just moving code around.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::setMarginsForRubyRun):
        (WebCore::setLogicalWidthForTextRun):
        (WebCore::computeExpansionForJustifiedText):
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):

2011-05-03  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/59838> Implement HTTP pipelining for CoreFoundation-based networking

        Reviewed by Antti Koivisto.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Set the
        priority on the request if HTTP pipelining is enabled.
        (WebCore::ResourceRequest::doUpdateResourceRequest): Read the
        priority from the request if HTTP pipelining is enabled.
        (readBooleanPreference): Enable code when compiling with
        USE(CFNETWORK).
        (WebCore::initializeMaximumHTTPConnectionCountPerHost): Ditto.
        Comment out setting the minimum fast lane priority on Windows
        since it's not currently available.

2011-05-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/9278296> Flicker zooming on Google Maps satellite view with accelerated compositing turned on

        Conditionalize compositing tiled layer size-constraining logic to older
        OSes.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::constrainedSize):

2011-05-03  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Allow access keys to be used in shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=59979

        Move access key methods and members back to Document from TreeScope.
        Also traverse into shadow trees when building the access key map.

        No new tests. (refactoring)

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::getElementByAccessKey):
        (WebCore::Document::buildAccessKeyMap):
        (WebCore::Document::invalidateAccessKeyMap):
        * dom/Document.h:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::destroyTreeScopeData):
        * dom/TreeScope.h:

2011-05-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8891395> -[DOMRange textRects] returns incorrect results for vertical or flipped text
        https://bugs.webkit.org/show_bug.cgi?id=60067

        No test because this code path is only used by the Objective-C API, which is not testable from DumpRenderTree.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRectsForRange): Use width/height instead of logicalWidth/logicalHeight here,
        and perform the local-to-absolute mapping on the rects rather than their origin, in order to get the right
        results for flipped writing modes.

2011-05-03  Anton Muhin  <antonm@chromium.org>

        Reviewed by Yury Semikhatsky.

        [v8] remove an ASSERT from grouping logic
        https://bugs.webkit.org/show_bug.cgi?id=60024

        This ASSERT was exploratory.  Alas, right now I am aware of no easy way to
        repro it.  Removing for now for greener bots.

        No new tests, only an ASSERT removal.

        * bindings/v8/V8GCController.cpp:
        (WebCore::calculateGroupId):

2011-05-03  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        WebKit allows selection that crosses the shadow boundary of a readonly input element
        https://bugs.webkit.org/show_bug.cgi?id=60000

        The bug was caused by VisibleSelection's not validating shadow DOM boundaries.
        Fixed the bug by adding an extra adjustment, adjustSelectionToAvoidCrossingShadowBoundaries,
        in its validation process.

        Tests: editing/selection/select-across-readonly-input-1.html
               editing/selection/select-across-readonly-input-2.html
               editing/selection/select-across-readonly-input-3.html
               editing/selection/select-across-readonly-input-4.html
               editing/selection/select-across-readonly-input-5.html

        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::validate): Calls adjustSelectionToAvoidCrossingShadowBoundaries.
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingShadowBoundaries): Added.
        * editing/VisibleSelection.h:

2011-05-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Split out layoutRunsAndFloats from layoutInlineChildren
        https://bugs.webkit.org/show_bug.cgi?id=60052

        No new tests, just moving code here.  There should be
        no change in behavior.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloats):
        (WebCore::RenderBlock::layoutInlineChildren):

2011-05-03  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Resizing a 2d canvas to huge dimensions after compositing crashes with accelerated 2d canvas option enabled
        https://bugs.webkit.org/show_bug.cgi?id=59965

        Fixes a few bugs leading to a crash if a canvas already being composited was resized to huge dimensions.

        Test: fast/canvas/canvas-resize-after-paint.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::reset):
            Mark the canvas's layer as needing a synthetic style recalculation when creating or destroying the backing
            DrawingBuffer so that we exit compositing mode properly if we can't handle the canvas dimensions.
        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::setLayerRenderer):
            Add a null check for m_drawingBuffer
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::clear):
            Avoid clearing the m_context pointer in reset() - we destroy the DrawingBuffer whenever reset() fails, so
            this is unnecessary.

2011-05-03  Adam Roben  <aroben@apple.com>

        Fix most strict PassOwnPtr violations on Windows

        Fixes <http://webkit.org/b/60025> Windows should (almost) build with strict PassOwnPtr
        enabled

        Reviewed by Anders Carlsson.

        * loader/EmptyClients.h:
        * platform/GeolocationService.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        * platform/mock/GeolocationServiceMock.cpp:
        * rendering/RenderTheme.cpp:
        * rendering/RenderThemeSafari.cpp:

2011-05-03  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Extract LineInfo class
        https://bugs.webkit.org/show_bug.cgi?id=60044

        Created a LineInfo class in RenderBlockLineLayout.cpp that brings together the relevant
        layout information about a line. This simplifies function signatures and clears up initialization.

        No new tests as this is refactoring.

        * rendering/RenderBlock.h: Updated internal layout function signatures to use LineInfo.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineInfo::LineInfo):
        (WebCore::LineInfo::isFirstLine):
        (WebCore::LineInfo::isLastLine):
        (WebCore::LineInfo::isEmpty):
        (WebCore::LineInfo::previousLineBrokeCleanly):
        (WebCore::LineInfo::setFirstLine):
        (WebCore::LineInfo::setLastLine):
        (WebCore::LineInfo::setEmpty):
        (WebCore::LineInfo::setPreviousLineBrokeCleanly):
        (WebCore::RenderBlock::createLineBoxes):
        (WebCore::RenderBlock::constructLine):
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::skipNonBreakingSpace):
        (WebCore::shouldCollapseWhiteSpace):
        (WebCore::requiresLineBox): Moved from RenderBlock.h and made it locally scoped to RenderBlockLineLayout.cpp
        (WebCore::RenderBlock::generatesLineBoxesForInlineChild):
        (WebCore::RenderBlock::skipTrailingWhitespace):
        (WebCore::RenderBlock::skipLeadingWhitespace):
        (WebCore::RenderBlock::findNextLineBreak):

2011-05-03  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Update node list cache count on the containing TreeScope rather than the Document
        https://bugs.webkit.org/show_bug.cgi?id=59983

        Change code to call add/removeNodeListCache() and hasNodeListCaches() on the proper tree scope.
        Move updating of the node list cache count from setDocument() to setTreeScopeRecursively().
        Make setDocument() and setDocumentRecursively() private.

        No new tests. (refactoring)

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::childrenChanged):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::setDocument):
        (WebCore::Node::setTreeScopeRecursively):
        (WebCore::Node::childNodes):
        (WebCore::Node::registerDynamicNodeList):
        (WebCore::Node::unregisterDynamicNodeList):
        (WebCore::Node::notifyLocalNodeListsAttributeChanged):
        (WebCore::Node::notifyLocalNodeListsChildrenChanged):
        (WebCore::Node::getElementsByTagName):
        (WebCore::Node::getElementsByTagNameNS):
        (WebCore::Node::getElementsByName):
        (WebCore::Node::getElementsByClassName):
        * dom/Node.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::labels):

2011-05-03  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Bundle trailingSpaceObject and trailingPositionedBoxes in findNextLineBreak as a class
        https://bugs.webkit.org/show_bug.cgi?id=60046

        Extracted TrailingObjects that encapsulates trailingSpaceObject and trailingPositionedBoxes.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::TrailingObjects::TrailingObjects):
        (WebCore::TrailingObjects::setTrailingWhitespace):
        (WebCore::TrailingObjects::clear):
        (WebCore::TrailingObjects::appendBoxIfNeeded):
        (WebCore::TrailingObjects::addMidpoints):
        (WebCore::RenderBlock::findNextLineBreak):

2011-05-03  Igor Oliveira  <igor.oliveira@openbossa.org>

        Reviewed by Eric Seidel.

        [Qt] Implement initial support to DataTransferItems
        https://bugs.webkit.org/show_bug.cgi?id=58448

        Implement initial support to DataTransferItems. DataTransferItems are used to 
        hold data for drag and drop operations. DataTransferItems hold a list of 
        DataTransferItem objects each of which holds an item being dragged.

        * WebCore.pro:
        * dom/DataTransferItems.idl:
        * editing/qt/EditorQt.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/chromium/DataTransferItemsChromium.h:
        * platform/qt/ClipboardQt.cpp:
        (WebCore::Clipboard::create):
        (WebCore::ClipboardQt::ClipboardQt):
        (WebCore::ClipboardQt::items):
        * platform/qt/ClipboardQt.h:
        (WebCore::ClipboardQt::create):
        * platform/qt/DataTransferItemQt.cpp: Added.
        (WebCore::DataTransferItem::create):
        (WebCore::DataTransferItemQt::createFromPasteboard):
        (WebCore::DataTransferItemQt::create):
        (WebCore::DataTransferItemQt::DataTransferItemQt):
        (WebCore::DataTransferItemQt::getAsString):
        (WebCore::DataTransferItemQt::getAsFile):
        * platform/qt/DataTransferItemQt.h: Added.
        * platform/qt/DataTransferItemsQt.cpp: Copied from Source/WebCore/editing/qt/EditorQt.cpp.
        (WebCore::DataTransferItemsQt::create):
        (WebCore::DataTransferItemsQt::DataTransferItemsQt):
        (WebCore::DataTransferItemsQt::addPasteboardItem):
        * platform/qt/DataTransferItemsQt.h: Copied from Source/WebCore/editing/qt/EditorQt.cpp.

2011-05-03  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by Dimitri Glazkov.

        Element:shadowRoot & Element::ensureShadowRoot should return ShadowRoot*
        https://bugs.webkit.org/show_bug.cgi?id=58703

        No new tests, refactoring only.

        * dom/Element.cpp:
        (WebCore::Element::copyNonAttributeProperties):
        (WebCore::Element::insertedIntoDocument):
        (WebCore::Element::removedFromDocument):
        (WebCore::Element::insertedIntoTree):
        (WebCore::Element::removedFromTree):
        (WebCore::Element::attach):
        (WebCore::Element::detach):
        (WebCore::Element::recalcStyle):
        (WebCore::Element::shadowRoot):
        (WebCore::Element::ensureShadowRoot):
        (WebCore::Element::childrenChanged):
        * dom/Node.cpp:
        (WebCore::Node::setTreeScopeRecursively):
        (WebCore::shadowRoot):
        (WebCore::Node::setDocumentRecursively):
        (WebCore::NodeRendererFactory::findVisualParent):
        Updated all the call sites for shadowRoot and ensureShadowRoot in the 2
        previous classes.

        * dom/Element.h: Updated 2 methods' signature to return a ShadowRoot*.

        * dom/ShadowRoot.h: Removed toShadowRoot as it is not used anymore.

        * html/HTMLDetailsElement.cpp:
        * html/HTMLSummaryElement.cpp:
        Added #include for ShadowRoot.h.

2011-05-03  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Implement mediaSliderTrack
        https://bugs.webkit.org/show_bug.cgi?id=59998

        Implement paintMediaSliderTrack.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::RenderThemeEfl):
        (WebCore::RenderThemeEfl::paintMediaSliderTrack):
        * platform/efl/RenderThemeEfl.h:

2011-05-03  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: [Chromium] Fix slowness of Summary view nodes expansion in detailed heap profiles.
        https://bugs.webkit.org/show_bug.cgi?id=60023

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotConstructorNode):
        (WebInspector.HeapSnapshotConstructorNode.prototype._createNodesProvider):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype.dispose):
        (WebInspector.HeapSnapshot.prototype.aggregates):
        (WebInspector.HeapSnapshot.prototype._buildAggregates):
        (WebInspector.HeapSnapshot.prototype._sortAggregateIndexes):
        (WebInspector.HeapSnapshot.prototype.createNodesProviderForClass):
        (WebInspector.HeapSnapshotFilteredOrderedIterator):
        (WebInspector.HeapSnapshotNodesProvider):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotProxy.prototype.aggregates):
        (WebInspector.HeapSnapshotProxy.prototype.createNodesProviderForClass):

2011-05-03  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: [Chromium] Hint user that to display retaining paths, an object entry must be clicked.
        https://bugs.webkit.org/show_bug.cgi?id=60029

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.reset):
        (WebInspector.DetailedHeapshotView.prototype._mouseClickInContainmentGrid):

2011-05-03  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=60045
        Scrollbar thumb sometimes leaves artifacts in the track after scrolling
        -and corresponding-
        <rdar://problem/9015376>

        When we're using WK_SCROLLBAR_PAINTER, the AppleScrollBarVariant default should 
        always be ignored.
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::updateArrowPlacement):

2011-05-03  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Links broken at iplanwebsites.com. Make sure that culledInlineAbsoluteQuads still does
        a translation of a 0,0 point to absolute coordinates so that the top left position is
        accurate.

        Added fast/inline/skipped-whitespace-client-rect.html
        
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::culledInlineAbsoluteQuads):

2011-05-03  Sam Weinig  <sam@webkit.org>

        Fix chromium build.

        * page/Settings.cpp:

2011-05-02  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 59974 - Update image map on the containing TreeScope rather than the Document
        https://bugs.webkit.org/show_bug.cgi?id=59974

        No new tests. (reefactoring)

        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::parseMappedAttribute):
        (WebCore::HTMLMapElement::insertedIntoDocument):
        (WebCore::HTMLMapElement::removedFromDocument):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageMap):

2011-05-03  Sam Weinig  <sam@webkit.org>

        Fix chromium build.

        * loader/HistoryController.cpp:

2011-05-02  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 59966 - Update ID hash on the containing TreeScope rather than the Document
        https://bugs.webkit.org/show_bug.cgi?id=59966

        No new tests. (refactoring)

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::elementsFromAttribute):
        (WebCore::AccessibilityRenderObject::activeDescendant):
        * accessibility/AccessibilityRenderObject.h:
        (WebCore::AccessibilityRenderObject::isAccessibilityRenderObject):
        * css/CSSCursorImageValue.cpp:
        (WebCore::resourceReferencedByCursorElement):
        (WebCore::CSSCursorImageValue::~CSSCursorImageValue):
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
        (WebCore::CSSCursorImageValue::cachedImage):
        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeList::itemWithName):
        * dom/Element.h:
        (WebCore::Element::updateId):
        * dom/Node.cpp:
        (WebCore::Node::querySelector):
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::insertedIntoTree):
        (WebCore::FormAssociatedElement::resetFormOwner):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::dataList):
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::control):
        * rendering/svg/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::layoutPath):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::glyphElement):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::requestImageResource):
        (WebCore::SVGFEImageElement::build):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::collectGradientAttributes):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::pathElement):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::collectPatternAttributes):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::collectGradientAttributes):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getElementById):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::updateReferencedText):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::insertedIntoDocument):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::hasCycleUseReferencing):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::viewTarget):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::eventBaseFor):
        (WebCore::SVGSMILElement::connectConditions):
        (WebCore::SVGSMILElement::targetElement):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunId::evaluate):

2011-05-03  Sam Weinig  <sam@webkit.org>

        Fix chromium build.

        * css/StyleMedia.cpp:

2011-05-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Prune #includes from FrameView.h (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=59957

        * page/FrameView.h:
        Prune #includes.

        * accessibility/chromium/AXObjectCacheChromium.cpp:
        * page/win/FrameCGWin.cpp:
        * platform/Scrollbar.cpp:
        Add not necessary #includes.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        Add now necessary forward declaration.

2011-05-03  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] toV8(Node*) will enter infinite recursion when called with a node of type SHADOW_ROOT_NODE
        https://bugs.webkit.org/show_bug.cgi?id=60026

        Return a wrapper for Node in toV8(Node*) when called with a node of type
        SHADOW_ROOT_NODE instead of entering infinite recursion.

        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):

2011-05-02  Adam Roben  <aroben@apple.com>

        Take advantage of implicit conversion from nullptr_t to PassOwnPtr

        Fixes <http://webkit.org/b/59964> Implicit conversion from std::nullptr_t to PassOwnPtr
        doesn't work, but should

        Reviewed by Adam Barth.

        * bindings/js/ScheduledAction.cpp:
        * css/CSSStyleSelector.cpp:
        * css/MediaList.cpp:
        * css/MediaQueryMatcher.cpp:
        * css/SVGCSSStyleSelector.cpp:
        * dom/MessagePort.cpp:
        * html/InputType.cpp:
        * html/canvas/WebGLRenderingContext.cpp:
        * inspector/InspectorStyleSheet.cpp:
        * page/ContextMenuController.cpp:
        * page/Page.cpp:
        * platform/PlatformGestureRecognizer.cpp:
        * platform/PurgeableBuffer.h:
        * platform/graphics/ImageBuffer.h:
        * platform/leveldb/LevelDBDatabase.cpp:
        * platform/mac/PurgeableBufferMac.cpp:
        * platform/text/RegularExpression.cpp:
        * rendering/RenderTheme.cpp:
        * rendering/RenderThemeMac.mm:
        * rendering/style/RenderStyle.h:
        * rendering/style/SVGRenderStyleDefs.cpp:
        * rendering/style/ShadowData.cpp:
        * rendering/style/StyleRareInheritedData.cpp:
        * rendering/style/StyleRareNonInheritedData.cpp:
        * rendering/svg/RenderSVGResourcePattern.cpp:

2011-05-03  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: fix inspector status bar image glyph reference in network panel.

        * inspector/front-end/networkPanel.css:
        (.network-larger-resources-status-bar-item .glyph):

2011-05-03  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: rename BrowserDebugger agent to DOMDebugger.
        https://bugs.webkit.org/show_bug.cgi?id=60019

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.json:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.XHRBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._removeBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._checkboxClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._removeBreakpoint):
        * inspector/generate-inspector-idl:

2011-05-03  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove special logic for type of document.__proto__
        https://bugs.webkit.org/show_bug.cgi?id=60014

        Test: inspector/console/console-log-document-proto.html

        * inspector/InjectedScriptSource.js: removed unnecessary check nodeType === undefined

2011-05-03  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: fixed typo in inspector style.

        * inspector/front-end/inspector.css:
        (.status-bar-item > .glyph):

2011-05-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: revision history storage is too slow.
        https://bugs.webkit.org/show_bug.cgi?id=59939

        It turns out that iterating localStorage keys is very
        expensive (results in slow inspector start), refactor revision
        history in order not to rely upon that operation.

        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource._resourceRevisionRegistry):
        (WebInspector.Resource.restoreRevisions.persist):
        (WebInspector.Resource.restoreRevisions):
        (WebInspector.Resource.persistRevision):
        (WebInspector.Resource.prototype._persistRevision):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._processCachedResources):
        (WebInspector.ResourceTreeModel.prototype._frameNavigated):

2011-05-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: combine toolbar icon images.
        https://bugs.webkit.org/show_bug.cgi?id=59931

        * WebCore.gypi:
        * inspector/front-end/Images/auditsIcon.png: Removed.
        * inspector/front-end/Images/consoleIcon.png: Removed.
        * inspector/front-end/Images/elementsIcon.png: Removed.
        * inspector/front-end/Images/networkIcon.png: Removed.
        * inspector/front-end/Images/profilesIcon.png: Removed.
        * inspector/front-end/Images/resourcesIcon.png: Removed.
        * inspector/front-end/Images/scriptsIcon.png: Removed.
        * inspector/front-end/Images/timelineIcon.png: Removed.
        * inspector/front-end/Images/toolbarIcons.png: Added.
        * inspector/front-end/Images/toolbarIconsSmall.png: Added.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.toolbar-icon):
        (#toolbar-dropdown .toolbar-icon):
        (.toolbar-item:active .toolbar-icon):
        (#toolbar-dropdown .toolbar-item:active .toolbar-icon):
        (.toolbar-item.elements .toolbar-icon):
        (.toolbar-item.resources .toolbar-icon):
        (#toolbar-dropdown .toolbar-item.resources .toolbar-icon):
        (.toolbar-item.network .toolbar-icon):
        (#toolbar-dropdown .toolbar-item.network .toolbar-icon):
        (.toolbar-item.scripts .toolbar-icon):
        (#toolbar-dropdown .toolbar-item.scripts .toolbar-icon):
        (.toolbar-item.timeline .toolbar-icon):
        (#toolbar-dropdown .toolbar-item.timeline .toolbar-icon):
        (.toolbar-item.profiles .toolbar-icon):
        (#toolbar-dropdown .toolbar-item.profiles .toolbar-icon):
        (.toolbar-item.audits .toolbar-icon):
        (#toolbar-dropdown .toolbar-item.audits .toolbar-icon):
        (.toolbar-item.console .toolbar-icon):
        (#toolbar-dropdown .toolbar-item.console .toolbar-icon):
        (.status-bar-item > .glyph):

2011-05-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: combine status bar button glyphs.
        https://bugs.webkit.org/show_bug.cgi?id=59885

        * WebCore.gypi:
        * inspector/front-end/Images/breakpointsActivateButtonGlyph.png: Removed.
        * inspector/front-end/Images/breakpointsDeactivateButtonGlyph.png: Removed.
        * inspector/front-end/Images/clearConsoleButtonGlyph.png: Removed.
        * inspector/front-end/Images/consoleButtonGlyph.png: Removed.
        * inspector/front-end/Images/dockButtonGlyph.png: Removed.
        * inspector/front-end/Images/enableOutlineButtonGlyph.png: Removed.
        * inspector/front-end/Images/enableSolidButtonGlyph.png: Removed.
        * inspector/front-end/Images/excludeButtonGlyph.png: Removed.
        * inspector/front-end/Images/focusButtonGlyph.png: Removed.
        * inspector/front-end/Images/garbageCollectButtonGlyph.png: Removed.
        * inspector/front-end/Images/gearButtonGlyph.png: Removed.
        * inspector/front-end/Images/helpButtonGlyph.png: Removed.
        * inspector/front-end/Images/largerResourcesButtonGlyph.png: Removed.
        * inspector/front-end/Images/nodeSearchButtonGlyph.png: Removed.
        * inspector/front-end/Images/pauseOnExceptionButtonGlyph.png: Removed.
        * inspector/front-end/Images/percentButtonGlyph.png: Removed.
        * inspector/front-end/Images/prettyPrintButtonGlyph.png: Removed.
        * inspector/front-end/Images/recordButtonGlyph.png: Removed.
        * inspector/front-end/Images/recordToggledButtonGlyph.png: Removed.
        * inspector/front-end/Images/reloadButtonGlyph.png: Removed.
        * inspector/front-end/Images/statusBarButtonGlyphs.png: Added.
        * inspector/front-end/Images/undockButtonGlyph.png: Removed.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.status-bar-item > .glyph):
        (#dock-status-bar-item .glyph):
        (body.detached #dock-status-bar-item .glyph):
        (#console-status-bar-item .glyph):
        (.clear-status-bar-item .glyph):
        (button.enable-toggle-status-bar-item .glyph):
        (button.enable-toggle-status-bar-item.toggled-on .glyph):
        (.scripts-pause-on-exceptions-status-bar-item .glyph):
        (.scripts-toggle-pretty-print-status-bar-item .glyph):
        (.toggle-breakpoints .glyph):
        (.toggle-breakpoints.toggled-on .glyph):
        (.resources-larger-resources-status-bar-item .glyph):
        (.timeline-filter-status-bar-item .glyph):
        (.garbage-collect-status-bar-item .glyph):
        (.record-profile-status-bar-item .glyph):
        (.record-profile-status-bar-item.toggled-on .glyph):
        (.heap-snapshot-status-bar-item .glyph):
        (.node-search-status-bar-item .glyph):
        (.percent-time-status-bar-item .glyph):
        (.focus-profile-node-status-bar-item .glyph):
        (.exclude-profile-node-status-bar-item .glyph):
        (.reset-profile-status-bar-item .glyph):
        (.delete-storage-status-bar-item .glyph):
        (.refresh-storage-status-bar-item .glyph):
        * inspector/front-end/inspector.js:

2011-05-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Possible crash when removing elements with reflections
        https://bugs.webkit.org/show_bug.cgi?id=60009
        
        RenderLayer's destructor deleted its z-order list Vector pointers
        before removing the reflection layer. However, the reflection cleanup
        code could call back into the RenderLayer to dirty z-order lists,
        so move reflection cleanup to before z-order vector deletion.
        
        The test crashes when run manually a few times with MallocScribble enabled,
        but I was not able to create a test that crashed reliably.

        Test: fast/reflections/remove-reflection-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer):

2011-05-02  Ian Henderson  <ianh@apple.com>

        Reviewed by Dan Bernstein.

        CSS !important not respected by JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=60007

        The addParsedProperty and addParsedProperties methods were subtly
        different.  The former did not check for !important before setting the
        given property.

        Change addParsedProperties to call addParsedProperty and move the
        relevant code.  The one other caller of this method, in
        editing/markup.cpp, probably wanted this behavior anyway.

        Test: fast/css/important-js-override.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::addParsedProperties):
        (WebCore::CSSMutableStyleDeclaration::addParsedProperty):

2011-05-02  Ben Wells  <benwells@chromium.org>

        Reviewed by Simon Fraser.

        Cleanup variable usage in RenderObject.cpp paintOutline()
        https://bugs.webkit.org/show_bug.cgi?id=59911

        No new tests for this, there should be no change in behaviour.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintOutline):

2011-05-02  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by James Robinson.

        REGRESSION(r84672): showTree doesn't work for input/textarea elements
        https://bugs.webkit.org/show_bug.cgi?id=60001

        When shadow is null, try retrieving the inner element of a render text control.

        * dom/Node.cpp:
        (WebCore::traverseTreeAndMark):

2011-05-02  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Respect fixed text-indent on ::-webkit-input-placeholder
        https://bugs.webkit.org/show_bug.cgi?id=59825

        Test: fast/forms/input-placeholder-text-indent.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::paintPlaceholder): indent by
        a fixed text-indent size specified on the placeholder style.

2011-05-02  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Eric Seidel.

        Some FileWriter progress events should be queued
        https://bugs.webkit.org/show_bug.cgi?id=50846

        * fileapi/FileWriter.cpp:
        * fileapi/FileWriter.h:
        Create a new asynchronous Task [FileWriterCompletionEventTask] that will set readyState to DONE and fire off the right events.

2011-05-02  Jia Pu  <jpu@apple.com>

        Reviewed by Alexey Proskuryakov.

        [Mac] Need to truncate the string sent to "Look Up … " menu item, if it's too long.
        https://bugs.webkit.org/show_bug.cgi?id=59836
        <rdar://problem/9275983>

        * platform/DefaultLocalizationStrategy.cpp:
        (WebCore::truncatedStringForLookupMenuItem):
        (WebCore::DefaultLocalizationStrategy::contextMenuItemTagLookUpInDictionary):

2011-05-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/9340945> and https://bugs.webkit.org/show_bug.cgi?id=59973
        In Aperture, a WebView might be dealloc'ed before it finishes loading.

        * WebCore.exp.in:
        * platform/RuntimeApplicationChecks.cpp:
        (WebCore::applicationIsAperture): Perform a com.apple.Aperture bundle check.
        * platform/RuntimeApplicationChecks.h:

2011-05-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Avoid wasted cycles updating paths when popping the context stack
        https://bugs.webkit.org/show_bug.cgi?id=59967

        CanvasRenderingContext2D has to map the current path through
        transforms whenever the context stack is popped, which creates
        a lot of platform path objects. Avoid extra work here when the
        path is empty, or when the transform is identity.

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::transform):

2011-05-02  Enrica Casucci  <enrica@apple.com>

        Reviewed by Dan Bernstein.

        Text does not split on white space when typing to the edge of window.
        https://bugs.webkit.org/show_bug.cgi?id=59968
        <rdar://problem/9112683>

        Test: editing/inserting/typing-at-end-of-line.html

        This is a regression introduced when we converted the line box tree to
        floating point in r78846. In findNextLineBreak, there was still one place where
        the character width was treated as int and truncated and we were inconsistent
        in the way we treated a character that did not fit entirely in the line.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2011-04-19  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Don't unnecessarily resize skia/cg canvases when painting in compositor
        https://bugs.webkit.org/show_bug.cgi?id=58907

        Additionally, move the context save/restore logic to a place where it
        will reset the translation added in LayerTilerChromium.

        Test: compositing/repaint/same-size-invalidation.html

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerPainter::paint):
        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::resize):
        (WebCore::PlatformCanvas::Painter::Painter):
        (WebCore::PlatformCanvas::Painter::~Painter):
        * platform/graphics/chromium/PlatformCanvas.h:

2011-05-02  Csaba Osztrogonác  <ossy@webkit.org>

        Enable strict OwnPtr for Qt
        https://bugs.webkit.org/show_bug.cgi?id=59667

        Unreviewed buildfix after r85343.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2011-05-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r85483.
        http://trac.webkit.org/changeset/85483
        https://bugs.webkit.org/show_bug.cgi?id=59958

        Causes media test failures. (Requested by eric_carlson on
        #webkit).

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::prepareForLoad):
        (WebCore::HTMLMediaElement::seek):
        (WebCore::HTMLMediaElement::updatePlayState):
        * html/HTMLMediaElement.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):
        (WebCore::MediaPlayerPrivateAVFoundation::resumeLoad):
        (WebCore::MediaPlayerPrivateAVFoundation::load):
        (WebCore::MediaPlayerPrivateAVFoundation::prepareToPlay):
        (WebCore::MediaPlayerPrivateAVFoundation::paint):
        (WebCore::MediaPlayerPrivateAVFoundation::duration):
        (WebCore::MediaPlayerPrivateAVFoundation::seeking):
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates):
        (WebCore::MediaPlayerPrivateAVFoundation::hasAvailableVideoFrame):
        (WebCore::MediaPlayerPrivateAVFoundation::metadataLoaded):
        (WebCore::MediaPlayerPrivateAVFoundation::loadedTimeRangesChanged):
        (WebCore::MediaPlayerPrivateAVFoundation::timeChanged):
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted):
        (WebCore::MediaPlayerPrivateAVFoundation::repaint):
        (WebCore::MediaPlayerPrivateAVFoundation::setPreload):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::videoLayerIsReadyToDisplay):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerForCacheResource):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playerItemStatus):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformDuration):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::assetStatus):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paint):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::sizeChanged):

2011-05-02  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        PLATFORM(MAC) should (almost!) build with strict PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59924

        * css/CSSGrammar.y:
        * platform/graphics/mac/SimpleFontDataMac.mm:
            - Memory management for the font cache is somewhat... complext.
              This will require some careful thought to sort out.

2011-05-02  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        showLineTree/showLineTreeForThis would make working with the line box tree easier
        https://bugs.webkit.org/show_bug.cgi?id=59662

        Adding a showLineTree/showLineTreeForThis method to help visualize and debug
        the line tree. Also adding a missing showRenderTreeForThis method to RenderObject.

        No new tests since this is a debugging feature only and not compiled in release.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::showLineTreeForThis):
        (WebCore::InlineBox::showLineTreeAndMark):
        (WebCore::InlineBox::showBox):
        (showLineTree):
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::showLineTreeAndMark):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::showBox):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::showLineTreeAndMark):
        * rendering/RenderBlock.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::showRenderTreeForThis):
        (WebCore::RenderObject::showLineTreeForThis):
        (showTree):
        (showLineTree):
        * rendering/RenderObject.h:

2011-05-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        REGRESSIONS (r71934): In standalone media documents, (double-)clicking the media element doesn’t play/pause
        https://bugs.webkit.org/show_bug.cgi?id=59917

        Since default event handlers are not retargeted, we should always attempt ancestor
        traversal to find out whether the event.

        * html/MediaDocument.cpp:
        (WebCore::ancestorVideoElement): Added ancestor-traversing helper.
        (WebCore::MediaDocument::defaultEventHandler): Changed to use ancestorVideoElement.

2011-05-02  Sam Weinig  <sam@webkit.org>

        Attempt to fix the Leopard build.

        * platform/graphics/FontPlatformData.h:
        * platform/graphics/mac/ComplexTextController.h:
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        * platform/mac/WebCoreSystemInterface.h:

2011-05-02  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        convert manual-tests/bugzilla-6821.html to a layout test
        https://bugs.webkit.org/show_bug.cgi?id=59404

        Test: fast/css/hover-update.html

        * manual-tests/bugzilla-6821.html: Removed.

2011-05-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Prune ApplicationServices.h out of the headers
        https://bugs.webkit.org/show_bug.cgi?id=59952

        More forward declares are better.

        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasRenderingContext2D.h:
        * platform/graphics/GlyphBuffer.h:
        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/mac/ComplexTextController.h:
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        * platform/mac/WebCoreNSStringExtras.h:
        * platform/mac/WebCoreSystemInterface.h:

2011-05-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7972529> Images with percentage based height/max-height are missing when they are inside blocks inside tables
        https://bugs.webkit.org/show_bug.cgi?id=58006

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing): Expanded the scope of the fix for
        <http://webkit.org/b/15359> from r29039 to cover not just the case of a auto-or-percent-height
        table cell as the immediate containing block, but any case where all containing block ancestors
        up to and including a table cell are auto-or-percent height.

2011-05-02  Daniel Bates  <dbates@webkit.org>

        Reviewed by Sam Weinig.

        Convert manual test onblur-remove.html to a DRT test; onblur-remove.html fails
        https://bugs.webkit.org/show_bug.cgi?id=59379

        Move manual test onblur-remove.html to LayoutTests/fast/events.

        Test: fast/events/onblur-remove.html

        * manual-tests/onblur-remove.html: Removed.

2011-05-02  Sailesh Agrawal  <sail@chromium.org>

        Reviewed by Dimitri Glazkov.

        Chromium Mac: Add scrollbar overlay drawing functions
        https://bugs.webkit.org/show_bug.cgi?id=59741

        These functions are simply copied from WebCoreSystemInterface. These will be used to implement overlay scrollbars for Chromium Mac.

        No new tests, since this code is only enabled on future versions of Mac OS X.

        * WebCore.gypi:
        * platform/chromium/ScrollbarOverlayUtilitiesMac.h: Added.
        * platform/chromium/ScrollbarOverlayUtilitiesMac.mm: Added.
        (LookUpNSScrollerImpClass):
        (LookUpNSScrollerImpPairClass):
        (ScrollbarControlSizeToNSControlSize):
        (wkScrollbarPainterUsesOverlayScrollers):
        (wkScrollbarPainterIsHorizontal):
        (wkScrollbarPainterKnobAlpha):
        (wkScrollbarPainterSetOverlayState):
        (wkScrollbarPainterPaint):
        (wkScrollbarMinimumThumbLength):
        (wkScrollbarPainterSetDelegate):
        (wkScrollbarPainterTrackAlpha):
        (wkMakeScrollbarPainter):
        (wkScrollbarThickness):
        (wkScrollbarMinimumTotalLengthNeededForThumb):
        (wkVerticalScrollbarPainterForController):
        (wkHorizontalScrollbarPainterForController):
        (wkMakeScrollbarReplacementPainter):
        (wkSetPainterForPainterController):
        (wkSetScrollbarPainterControllerStyle):
        (wkScrollbarPainterKnobRect):
        (wkSetScrollbarPainterKnobAlpha):
        (wkSetScrollbarPainterTrackAlpha):
        (wkSetScrollbarPainterKnobStyle):
        (wkMakeScrollbarPainterController):
        (wkContentAreaScrolled):
        (wkContentAreaWillPaint):
        (wkMouseEnteredContentArea):
        (wkMouseExitedContentArea):
        (wkMouseMovedInContentArea):
        (wkWillStartLiveResize):
        (wkContentAreaResized):
        (wkWillEndLiveResize):
        (wkContentAreaDidShow):
        (wkContentAreaDidHide):
        (wkDidBeginScrollGesture):
        (wkDidEndScrollGesture):
        (wkScrollbarPainterForceFlashScrollers):
        (IsScrollbarOverlayAPIAvailable):

2011-05-02  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement Length based CSS properties in CSSStyleApplyProperty
        https://bugs.webkit.org/show_bug.cgi?id=59314

        No new tests as no functionality changed.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyLength::ApplyPropertyLength):
        Added this class to handle all length types.
        Property specific behavior is handled through set of boolean parameters.
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Added calls to set up entries for the newly added length properties.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove property implementations mow implemented in CSSStyleApplyProperty.
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::rootElementStyle):
        Expose m_rootElementStyle via getter.

2011-05-02  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Eric Seidel.

        HTMLMediaElement should not seek to time 0 when readyState reaches HAVE_METADATA
        https://bugs.webkit.org/show_bug.cgi?id=59828

        No new tests required, no functional change because seeking to time zero before playback
        begins has no effect.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState): Don't seek to time 0 when readyState reaches
            HAVE_METADATA.

2011-05-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Fix extra whitespace in license in FocusDirection.h.

        * page/FocusDirection.h:

2011-05-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Barth.

        Prune some #includes from DOMWindow.h
        https://bugs.webkit.org/show_bug.cgi?id=59907

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setSecurityOrigin):
        * page/DOMWindow.h:
        Remove #includes of SecurityOrigin and MessagePort by forward declaring
        and moving the SecurityOrigin setter to the .cpp file. Also adds EventTarget
        #include that was getting added by MessagePort.h.

        * bindings/js/JSCustomVoidCallback.cpp:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/js/JSDOMWindowCustom.h:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/ScriptController.h:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLMediaElement.cpp:
        * html/parser/XSSFilter.cpp:
        * inspector/InspectorDOMStorageResource.cpp:
        * loader/MainResourceLoader.cpp:
        * page/DragController.cpp:
        * page/EventSource.cpp:
        * page/Location.cpp:
        * websockets/WebSocket.cpp:
        * xml/XSLTProcessorLibxslt.cpp:
        Add now missing SecurityOrigin.h #includes.

2011-05-02  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Brady Eidson.

        The preload attribute of the video tag is not completely implemented
        https://bugs.webkit.org/show_bug.cgi?id=43673
        <rdar://problem/7508322>

        Tested manually with manual-tests/media-elements/video-preload.html.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_havePreparedToPlay.
        (WebCore::HTMLMediaElement::prepareForLoad): Ditto.
        (WebCore::HTMLMediaElement::prepareToPlay): New, tell player to prepare to play.
        (WebCore::HTMLMediaElement::seek): Call prepareToPlay when preload is less than 'metadata'
            because we need to have media data loaded to seek.
        (WebCore::HTMLMediaElement::updatePlayState): Call prepareToPlay.
        * html/HTMLMediaElement.h:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):  Remove 
            m_videoFrameHasDrawn and m_delayingLoad as they are no longer used.
        (WebCore::MediaPlayerPrivateAVFoundation::resumeLoad): Removed.
        (WebCore::MediaPlayerPrivateAVFoundation::load): Don't initialize m_videoFrameHasDrawn. 
            Move all preload logic to setPreload, call it from here.
        (WebCore::MediaPlayerPrivateAVFoundation::prepareToPlay): Move all preload logic to 
            setPreload, call it.
        (WebCore::MediaPlayerPrivateAVFoundation::duration): Don't cache duration = 0, it is
            unlikely to be correct and isn't worth caching.
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates): Update for name change AVAssetStatus
            to AssetStatus. Create the AVPlayer once we know an asset is playable but preload is
            'metadata'. Set networkState to 'idle' when the playback buffer is full because that is
            a signal that AVFoundation won't do any more IO. Set readyState to 'HAVE_CURRENT_DATA' 
            when the first frame is available.
        (WebCore::MediaPlayerPrivateAVFoundation::metadataLoaded): Call tracksChanged so we cache
            width, height, hasVideo, etc.
        (WebCore::MediaPlayerPrivateAVFoundation::repaint): Don't set m_videoFrameHasDrawn, it is done
            in derived classes.
        (WebCore::MediaPlayerPrivateAVFoundation::setPreload): Centralize all logic about when to create
            AVAsset and AVPlayerItem here.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Initialize
            m_videoFrameHasDrawn.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasAvailableVideoFrame): New, renamed from
            videoLayerIsReadyToDisplay. Return true if we have a layer with frames available or
            if we have painted a frame to the context.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): New, create the AVAsset
            if necessary.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForCacheResource): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): Restructure logic.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem): New, create AVPlayerItem.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata): Correct logging.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playerItemStatus): Return "buffer full" when
            the buffer is full.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformDuration): Get the duration from the
            AVAsset when we haven't allocated the AVPlayerItem yet so that we can return duration
            when we only have metadata.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::assetStatus): Update for name change.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paint): Set m_videoFrameHasDrawn.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Get attributes from AVAsset
            when when we haven't allocated the AVPlayerItem yet so that we can report attributes
            when we only have metadata.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::sizeChanged): Guard against being called before
            we have allocated the AVPlayerItem.

2011-05-02  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] gdk_drawable_get_size() shouldn't be used with GTK+ >= 2.24
        https://bugs.webkit.org/show_bug.cgi?id=59932

        Use gdk_window_get_width() and gdk_window_get_height() if
        available, instead of the deprecated gdk_drawable_get_size().

        No new tests, build fix only.

        * platform/gtk/WidgetRenderingContext.cpp:
        (WebCore::WidgetRenderingContext::WidgetRenderingContext):

2011-05-02  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Brady Eidson.

        The preload attribute of the video tag is not completely implemented
        https://bugs.webkit.org/show_bug.cgi?id=43673
        <rdar://problem/7508322>

        Test manually with manual-tests/media-elements/video-preload.html.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::commonMovieAttributes): Add new "limit read-ahead"
            attribute when preload is not "auto".
        (WebCore::MediaPlayerPrivateQTKit::resumeLoad): Remove m_delayingLoad, we don't need it.
        (WebCore::MediaPlayerPrivateQTKit::load): Correct comment.
        (WebCore::MediaPlayerPrivateQTKit::prepareToPlay): Call setPreload('auto').
        (WebCore::MediaPlayerPrivateQTKit::setPreload): Set new attribue if we already have
            a QTMovie.

2011-05-02  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Brady Eidson.

        The preload attribute of the video tag is not completely implemented
        https://bugs.webkit.org/show_bug.cgi?id=43673
        <rdar://problem/7508322>

        Manual test manual-tests/media-elements/video-preload.html added.

        * manual-tests/media-elements/video-preload.html: Added. New manual test for media element 
            'preload' attribute because it is not possible to detect if a media engine supports 
            "preload=metadata" in a way that lets us have per-platform layout test results.

2011-05-01  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Eric Carlson.

        Regression(r74787): Media document mouse click and double-click
        events should be checked on target node only and not its descendants.
        https://bugs.webkit.org/show_bug.cgi?id=59886

        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::defaultEventHandler):

2011-05-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Polish CSP host and port matching
        https://bugs.webkit.org/show_bug.cgi?id=59899

        Finish last two details of host and port matching.  I don't think the
        default port handling is testable with our current testing
        infrastructure.

        Tests: http/tests/security/contentSecurityPolicy/image-full-host-wildcard-allowed.html
               http/tests/security/contentSecurityPolicy/image-host-wildcard-allowed.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPSource::hostMatches):
        (WebCore::CSPSource::portMatches):

2011-05-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP default-src is missing
        https://bugs.webkit.org/show_bug.cgi?id=58641

        Add support for default-src.  The default-src provides a default policy
        for every directive that sends in "-src".  If the more-specific
        directive is present, it takes precedence.  I also took this
        opportunity to refactor the internals of ContentSecurityPolicy a bit to
        reduce duplicate code.

        Tests: http/tests/security/contentSecurityPolicy/default-src-inline-allowed.html
               http/tests/security/contentSecurityPolicy/default-src-inline-blocked.html
               http/tests/security/contentSecurityPolicy/script-src-overrides-default-src.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        (WebCore::ContentSecurityPolicy::checkEval):
        (WebCore::ContentSecurityPolicy::operativeDirective):
        (WebCore::ContentSecurityPolicy::checkInlineAndReportViolation):
        (WebCore::ContentSecurityPolicy::checkEvalAndReportViolation):
        (WebCore::ContentSecurityPolicy::checkSourceAndReportViolation):
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs):
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers):
        (WebCore::ContentSecurityPolicy::allowInlineScript):
        (WebCore::ContentSecurityPolicy::allowInlineStyle):
        (WebCore::ContentSecurityPolicy::allowEval):
        (WebCore::ContentSecurityPolicy::allowScriptFromSource):
        (WebCore::ContentSecurityPolicy::allowObjectFromSource):
        (WebCore::ContentSecurityPolicy::allowChildFrameFromSource):
        (WebCore::ContentSecurityPolicy::allowImageFromSource):
        (WebCore::ContentSecurityPolicy::allowStyleFromSource):
        (WebCore::ContentSecurityPolicy::allowFontFromSource):
        (WebCore::ContentSecurityPolicy::allowMediaFromSource):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:

2011-05-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Prune some unnecessary #includes
        https://bugs.webkit.org/show_bug.cgi?id=59895

        Start getting rid of unnecessary #includes and forward declares.

        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/ScheduledAction.cpp:
        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptDebugServer.cpp:
        * editing/Editor.h:
        * inspector/InspectorClient.cpp:
        * loader/FrameLoader.h:
        * loader/NavigationScheduler.h:
        * page/Console.cpp:
        * xml/XMLTreeViewer.cpp:
        * xml/XMLTreeViewer.h:

2011-05-01  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Unreviewed buildfix after r85434.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::createLayerForMovie):

2011-05-01  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Unreviewed buildfix after r85434.

        * platform/graphics/win/QTMovieVisualContext.cpp:
        (QTMovieVisualContext::QTMovieVisualContext): Added missing header.

2011-05-01  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Adam Barth.

        History::stateObjectAdded should check origin via SecurityOrigin::canRequest
        https://bugs.webkit.org/show_bug.cgi?id=59840

        Tests: fast/loader/stateobjects/pushstate-in-data-url-denied.html
               http/tests/navigation/replacestate-base-illegal.html
               http/tests/navigation/replacestate-base-legal.html

        * page/History.cpp:
        (WebCore::History::stateObjectAdded):

2011-05-01  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Unreviewed buildfix after r85434.

        * platform/graphics/win/QTMovieVisualContext.cpp:
        (QTMovieVisualContext::QTMovieVisualContext):

2011-05-01  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        [WINCE] Fix OwnPtr strict issues
        https://bugs.webkit.org/show_bug.cgi?id=59898

        * page/wince/FrameWinCE.cpp:
        (WebCore::imageFromSelection):
        * platform/graphics/wince/FontPlatformData.cpp:
        (WebCore::FixedSizeFontData::create):
        (WebCore::FontPlatformPrivateData::FontPlatformData::hfont):
        (WebCore::FontPlatformPrivateData::FontPlatformData::getScaledFontHandle):
        (WebCore::FontPlatformPrivateData::FontPlatformData::discardFontHandle):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::drawRoundCorner):
        (WebCore::GraphicsContext::drawText):
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        * platform/graphics/wince/SharedBitmap.cpp:
        (WebCore::SharedBitmap::SharedBitmap):

2011-05-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Get rid of versions of sendContextMenuEvent and eventMayStartDrag that takes NSEvent
        https://bugs.webkit.org/show_bug.cgi?id=59837

        Removed EventHandler::sendContextMenuEvent(NSEvent*) and EventHandler::eventMayStartDrag(NSEvent*)

        * WebCore.exp.in:
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:

2011-05-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Move currentKeyboardEvent from EventHandlerMac.mm to WebHTMLView.mm
        https://bugs.webkit.org/show_bug.cgi?id=59835

        Moved currentKeyboardEvent.

        * WebCore.exp.in:
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:

2011-05-01  ojab  <ojab@ojab.ru>

        Reviewed by Eric Seidel.

        Fix build with --disable-video --enable-fullscreen-api
        https://bugs.webkit.org/show_bug.cgi?id=59698

        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::extraFullScreenStyleSheet):

2011-05-01  Jeff Timanus  <twiz@chromium.org>

        Reviewed by Eric Seidel.

        Add solid-color checking to BitmapImage::checkForSolidColour in the skia port.
        https://bugs.webkit.org/show_bug.cgi?id=59041

        Test:css2.1/t140201-c533-bgimage-00-a.html

        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled): Removal of macro exclusion of assert for Skia path.
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImage::checkForSolidColor):

2011-05-01  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Fix OwnPtr strict issues in windows build
        https://bugs.webkit.org/show_bug.cgi?id=59878

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::getDirtyRects):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::MediaPlayerPrivateQuickTimeVisualContext):
        * platform/graphics/win/WKCAImageQueue.cpp:
        (WebCore::WKCAImageQueue::WKCAImageQueue):
        * platform/win/CursorWin.cpp:
        (WebCore::createSharedCursor):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):

2011-05-01  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Use PassOwnPtr as return value of GraphicsContext::createWindowsBitmap
        https://bugs.webkit.org/show_bug.cgi?id=59876

        Also pass the size "as reference" instead of "as value".

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::drawGDIGlyphs):
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::WindowsBitmap::WindowsBitmap):
        (WebCore::GraphicsContext::createWindowsBitmap):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::paint):

2011-05-01  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        getComputedStyle() returns unitless values for some properties that require units
        https://bugs.webkit.org/show_bug.cgi?id=55111

        Change getComputedStyle to return value with unit for -webkit-column-width, -webkit-column-gap and -webkit-perspective

        Test: fast/css/getComputedStyle/getComputedStyle-length-unit.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2011-05-01  Young Han Lee  <joybro@company100.net>

        Reviewed by Eric Seidel.

        Change TEXMAP_OPENGL_ES2 to TEXMAP_OPENGL_ES_2
        https://bugs.webkit.org/show_bug.cgi?id=59608

        TEXMAP_OPENGL_ES2 is a wrong name. TEXMAP_OPENGL_ES_2 is already defined in TextureMapper.h

        No new functionality, no new tests.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::TextureMapperGL):

2011-05-01  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Eric Seidel.

        CSS3 nth-child(n) selector fails
        https://bugs.webkit.org/show_bug.cgi?id=56943

        Regression from r75158.
        "n" is a valid parameter to nth() and should be allowed.

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

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

2011-05-01  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: address stack frame scriptName -> url rename in timeline panel.

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):
        (WebInspector.TimelinePanel.PopupContentHelper.prototype._appendStackTrace):

2011-05-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Maciej Stachowiak.

        Crash in AccessibilityRenderObject while viewing PDFs in iframes
        https://bugs.webkit.org/show_bug.cgi?id=59629

        Could not reproduce this crash, but it's quite clear how it could happen.
 
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityHitTest):

2011-05-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        LEAK: SVGElement leaks when detaching it in a pending resource state
        https://bugs.webkit.org/show_bug.cgi?id=59072

        Make the pending resources set non-refcounted again. We made it refcounted a while ago
        to fix a security bug, as we had dangling pointers in the set in SVGDocumentExtensions.
        Fix the underlying problem, by removing all pending resources referencing to a particular
        SVGElement, upon its destruction or upon removing it from the document.

        Example: <rect fill="url(#foo)" id="rect">
        When we try to render the rect, the foo paint server can't be found and thus "foo" will be
        added to the pending resource set, with "rect" as client. When "foo" appears, it would remove
        itself from the pending resource set, and a ref count to the "rect" would be released.
        If "foo" never appears, SVGDocumentExtensions still holds a ref to the <rect>, thus keeping
        it and the associated document alive.

        Tests: svg/custom/pending-resource-leak-2.svg
               svg/custom/pending-resource-leak-3.svg
               svg/custom/pending-resource-leak.svg

        These tests cover several scenarios where we used to leak. Should fix several SVG*Element leaks on the bots.
        I manually tested reloading above testcases dozens of times, before the leak count was incremented by 2 nodes on every reload, that's gone now.

        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::registerResource):
        * rendering/svg/RenderSVGShadowTreeRootContainer.cpp:
        (WebCore::RenderSVGShadowTreeRootContainer::updateFromElement):
        * rendering/svg/SVGResources.cpp:
        (WebCore::registerPendingResource):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::hasPendingResources):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::removePendingResource):
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        * svg/SVGElement.h:
        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::SVGElementRareData):
        (WebCore::SVGElementRareData::hasPendingResources):
        (WebCore::SVGElementRareData::setHasPendingResources):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::~SVGStyledElement):
        (WebCore::SVGStyledElement::insertedIntoDocument):
        (WebCore::SVGStyledElement::removedFromDocument):
        (WebCore::SVGStyledElement::hasPendingResources):
        (WebCore::SVGStyledElement::setHasPendingResources):
        * svg/SVGStyledElement.h:
        (WebCore::SVGStyledElement::needsPendingResourceHandling):
        (WebCore::SVGStyledElement::buildPendingResource):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        (WebCore::SVGUseElement::insertedIntoDocument):
        (WebCore::SVGUseElement::svgAttributeChanged):
        (WebCore::SVGUseElement::buildPendingResource):
        * svg/SVGUseElement.h:

2011-05-01  Rafael Brandao  <rafael.lobo@openbossa.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] build-webkit warning Inspector.idl is missing
        https://bugs.webkit.org/show_bug.cgi?id=59047
        
        Added variable_out to pipe output from one compiler to another,
        and then forced the output to be added to the sources.

        * CodeGenerators.pri:

2011-05-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/9155067> REGRESSION (float-based line boxes): Gaps and overlaps in selection highlight
        https://bugs.webkit.org/show_bug.cgi?id=56658

        Test: fast/text/selection-rect-rounding.html

        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::selectionRectForSimpleText): Account for non-integral anchor point coordinates.
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::selectionRectForComplexText): Ditto.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect): Floor the horizontal sides of the clip rect.
        (WebCore::InlineTextBox::paintSelection): Pass the logical left location to Font::selectionRectForText(),
        since it affects rounding.

2011-04-30  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Dirk Schulze.

        Make RenderSVGResourceFilter take ownership of filter data when painting
        https://bugs.webkit.org/show_bug.cgi?id=51524

        Test: svg/custom/filter-on-svgimage.svg

        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::removeClientFromCache):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGResourceFilter.h:
        (WebCore::FilterData::FilterData):

2011-04-30  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Adam Barth.

        Enable strict mode for OwnPtr and PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59428

        Fix assignments and .set() calls with OwnPtr to use adoptPtr. Have GeolocationService
        factory methods return a PassOwnPtr.

        No new tests. This should not change functionality.

        * platform/GeolocationService.cpp:
        (WebCore::createGeolocationServiceNull):
        (WebCore::GeolocationService::create):
        * platform/GeolocationService.h:
        * platform/android/GeolocationServiceAndroid.cpp:
        (WebCore::GeolocationServiceAndroid::create):
        * platform/android/GeolocationServiceAndroid.h:
        * platform/efl/GeolocationServiceEfl.cpp:
        (WebCore::GeolocationServiceEfl::create):
        * platform/efl/GeolocationServiceEfl.h:
        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::appendPathToCairoContext):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::drawPathShadow):
        (WebCore::GraphicsContext::clip):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/cairo/OwnPtrCairo.h:
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::Path):
        (WebCore::Path::operator=):
        (WebCore::Path::apply):
        * platform/gtk/GeolocationServiceGtk.cpp:
        (WebCore::GeolocationServiceGtk::create):
        * platform/gtk/GeolocationServiceGtk.h:
        * platform/mock/GeolocationServiceMock.cpp:
        (WebCore::GeolocationServiceMock::create):
        * platform/mock/GeolocationServiceMock.h:

2011-04-30  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: inspector toolbar titles were 2px off.

        * inspector/front-end/inspector.css:
        (#toolbar-dropdown .toolbar-label):

2011-04-30  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Eric Seidel.

        V8Proxy.h shouldn't include SecurityOrigin.h
        https://bugs.webkit.org/show_bug.cgi?id=59859

        Remove SecurityOrigin.h #include from V8Proxy.h. Touching
        SecurityOrigin.h now rebuilds 234 targets instead of 638 (when building
        chromium's DumpRenderTree).

        * bindings/v8/NPV8Object.cpp:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8Proxy.h:
        * css/CSSStyleSelector.cpp:
        * dom/XMLDocumentParserLibxml2.cpp:
        * html/HTMLLinkElement.cpp:
        * loader/SubframeLoader.cpp:
        * page/History.cpp:
        * storage/IDBFactory.cpp:
        * storage/StorageAreaImpl.cpp:

2011-04-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP script-src should block eval
        https://bugs.webkit.org/show_bug.cgi?id=59850

        Rather than have JavaScriptCore call back into WebCore to learn whether
        eval is enabled, we push that bit of the policy into JavaScriptCore.

        Tests: http/tests/security/contentSecurityPolicy/eval-allowed.html
               http/tests/security/contentSecurityPolicy/eval-blocked.html

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::disableEval):
        * bindings/js/ScriptController.h:
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        (WebCore::ContentSecurityPolicy::internalAllowEval):
        (WebCore::ContentSecurityPolicy::allowEval):
        * page/ContentSecurityPolicy.h:

2011-04-29  Joseph Pecoraro  <joepeck@webkit.org>

        GTK build fix. Missed moving DateComponents and
        adding LocalizedDate files for their build file.

        * GNUmakefile.list.am:

2011-04-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        style-src should block @style
        https://bugs.webkit.org/show_bug.cgi?id=59293

        This patch blocks @style when style-src doesn't have the
        'unsafe-inline' token.  This patch blocks the parsing of the attribute
        itself.  That feels vaguely like too low a level to interpose the
        policy, but there didn't seem to be anywhere else natural to enforce
        the policy.

        Tests: http/tests/security/contentSecurityPolicy/inline-style-attribute-allowed.html
               http/tests/security/contentSecurityPolicy/inline-style-attribute-blocked.html
               http/tests/security/contentSecurityPolicy/inline-style-on-html.html

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::parseMappedAttribute):

2011-04-29  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kent Tamura.

        Allow Localized Date Strings for Date Input Fields
        https://bugs.webkit.org/show_bug.cgi?id=59752

        Test: fast/forms/date-input-visible-strings.html

        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj: update build files for
        moving DateComponents from WebCore/html to WebCore/platform
        and adding the LocalizedDate files.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::serialize):
        (WebCore::BaseDateAndTimeInputType::serializeWithComponents):
        (WebCore::BaseDateAndTimeInputType::serializeWithMilliseconds):
        InputType::serialize for a double value with date types is
        different for the month type because it assumes the incoming
        value is months instead of msecs (matching valueAsNumber in
        HTML5).  So provide a more general serialization function,
        serializeWithComponents, that will always serialize a string
        correctly for the current type but taking in a DateComponents
        object. The default serialize, and new serializeWithMilliseconds,
        can fall back to this and allows an override point for
        the month type.

        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::serializeWithMilliseconds): the month
        type is a case where the default serialize does not take msec,
        so provide an implementation for month which handles msec input.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::setValueAsDate): switch
        to serializeWithMilliseconds as the incoming date value is msec.
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::setValueAsDate): removed.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::visibleValue): allow
        localized formatting of a date value.
        (WebCore::BaseDateAndTimeInputType::convertFromVisibleValue):
        allow parsing for a formatted date value.

        * html/BaseDateAndTimeInputType.h:
        * platform/DateComponents.cpp: Renamed from Source/WebCore/html/DateComponents.cpp.
        Expose the Type enum so it can be used outside of the DateComponents class.
        * platform/text/LocalizedDate.h: Added.
        * platform/text/LocalizedDateNone.cpp: Added.
        (WebCore::formatLocalizedDate): Default implementation falls back to
        existing HTML5 date input value formatting.

        * html/BaseDateAndTimeInputType.h:
        * html/DateInputType.cpp:
        (WebCore::DateInputType::dateType):
        * html/DateInputType.h:
        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::dateType):
        * html/DateTimeInputType.h:
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::dateType):
        * html/DateTimeLocalInputType.h:
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::dateType):
        * html/MonthInputType.h:
        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::dateType):
        * html/TimeInputType.h:
        * html/WeekInputType.cpp:
        (WebCore::WeekInputType::dateType):
        * html/WeekInputType.h: Accessors for the desired date
        type of a date input type. This allows the base class
        to write a generic algorithm.

2011-04-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        style-src should block inline style from <style>
        https://bugs.webkit.org/show_bug.cgi?id=59292

        The spec has been updated to allow blocking of inline styles with
        style-src.  This will help folks defend against tricky CSS3 injections.

        This patch covers the <style> case.  The next patch will cover the
        @style case.

        Tests: http/tests/security/contentSecurityPolicy/inline-style-allowed.html
               http/tests/security/contentSecurityPolicy/inline-style-blocked.html

        * dom/StyleElement.cpp:
        (WebCore::StyleElement::createSheet):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowInlineStyle):
        * page/ContentSecurityPolicy.h:

2011-04-29  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Add WebCore::Setting to block displaying and/or running insecure content on secure pages
        https://bugs.webkit.org/show_bug.cgi?id=58378

        Test: To follow in subsequent patch, including the wiring to expose the new settings to LayoutTests.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkIfDisplayInsecureContent): Return whether or not the load should be blocked, and tweak the message upon blocking.
        (WebCore::FrameLoader::checkIfRunInsecureContent): Return whether or not the load should be blocked, and tweak the message upon blocking.
        * loader/FrameLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest): Check if the frame load is blocked due to mixed content and cancel it if so. The check was moved up so that it occurs before firing the load callbacks, to avoid any outgoing network hits or accounting. Redirects are handled because willSendRequest is called for each one in the chain.
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadMediaPlayerProxyPlugin): Handle the blocking of mixed-content plug-in loads.
        (WebCore::SubframeLoader::loadPlugin): Handle the blocking of mixed-content plug-in loads.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest): Handle the blocking of various loads due to mixed content conditions.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Permit mixed-content loads by default to avoid a change in behavior by default.
        * page/Settings.h: Add two new booleans to control blocking of mixed content (displaying and running thereof).
        (WebCore::Settings::setAllowDisplayOfInsecureContent):
        (WebCore::Settings::allowDisplayOfInsecureContent):
        (WebCore::Settings::setAllowRunningOfInsecureContent):
        (WebCore::Settings::allowRunningOfInsecureContent):

2011-04-29  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Extract a function to obtain VisiblePosition from RenderText::positionForPoint
        https://bugs.webkit.org/show_bug.cgi?id=59811

        Extracted lineDirectionPointFitsInBox from positionForPoint.

        * rendering/RenderText.cpp:
        (WebCore::lineDirectionPointFitsInBox):
        (WebCore::RenderText::positionForPoint):

2011-04-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Alexey Proskuryakov.

        REGRESSION: r83938 abandons GC memory
        https://bugs.webkit.org/show_bug.cgi?id=59604

        This bug was caused by script and image elements waiting indefinitely
        for their loads to finish.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isReachableFromDOM): Don't test for the load event firing,
        since the load event doesn't fire in cases of canceled or errored loads.
        Instead, test hasPendingActivity().
        
        Don't do this test at all for script elements because script elements
        can't load while outside the document. (fast/dom/script-element-gc.html
        verifies that this is correct.)

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::hasPendingActivity):
        * html/HTMLImageElement.h:
        * loader/ImageLoader.cpp:
        (WebCore::ImageEventSender::hasPendingEvents):
        (WebCore::ImageLoader::hasPendingLoadEvent):
        * loader/ImageLoader.h: Added API for finding out if an image element
        has pending activity.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::setRequest): All loads are supposed to end in
        data(allDataReceived = true) or error(), but in the edge case of a
        canceled load, all we get is a call to setRequest(0). Be sure to
        record that we're no longer loading in that case, otherwise our element
        will leak forever, waiting for its load to complete.

2011-04-29  Emil Eklund  <eae@chromium.org>

        Reviewed by Tony Chang.

        Setting outerHTML should merge text nodes
        https://bugs.webkit.org/show_bug.cgi?id=52686

        When setting outerHTML adjacent text nodes should be merged. This matches
        the behavior of outerText and the IE implementation of outerHTML.       

        Test: fast/dom/set-outer-html.html

        * html/HTMLElement.cpp:
        (WebCore::mergeWithNextTextNode): Move function to before setOuterHTML.
        (WebCore::HTMLElement::setOuterHTML): Merge adjacent text nodes after replacing the element.

2011-04-29  Emil A Eklund  <eae@chromium.org>

        Reviewed by Dimitri Glazkov.

        Onchange on text fields has an incoherent behavior
        https://bugs.webkit.org/show_bug.cgi?id=57330

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::insertedIntoDocument):
        Initialize m_textAsOfLastFormControlChangeEvent to empty string rather
        than null for empty fields.

2011-04-29  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix after r85343.

        Enable strict OwnPtr for Qt
        https://bugs.webkit.org/show_bug.cgi?id=59667

        * plugins/mac/PluginViewMac.mm:
        (WebCore::PluginView::platformStart):

2011-04-29  Jon Lee  <jonlee@apple.com>

        Reviewed by mitzpettel.

        REGRESSION (WebKit2): (Mac) Selection is gone after switching tabs (59721)
        <rdar://problem/9327332>
        https://bugs.webkit.org/show_bug.cgi?id=59721

        Removing shouldClearSelectionWhenLosingWebPageFocus().  Reverting changelist 83814.

        * WebCore.exp.in:
        * editing/EditingBehavior.h:

2011-04-29  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Allow only first table caption and destroy the remaining ones.
        https://bugs.webkit.org/show_bug.cgi?id=58249

        Previously, we were only laying out the first table caption.
        However Table::layout didn't mark the other ones as not needing
        layout. So after table layout completes, table is marked as not
        needing layout with its other table caption still needing layout.
        This causes incorrect layout root calculations and set it to a
        node which is already getting deleted.

        Tests: fast/table/dynamic-caption-add-before-child.xhtml
               fast/table/dynamic-caption-add-remove-before-child.xhtml
               fast/table/multiple-captions-crash.xhtml
               fast/table/multiple-captions-crash2.xhtml
               fast/table/multiple-captions-display.xhtml

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild): when new caption or a before
        child caption is added, we need to explicitly trigger section
        recalc or otherwise layout won't catch it.
        (WebCore::RenderTable::removeChild): when child to be removed is
        m_caption, make sure to trigger style recalc on the table.
        (WebCore::RenderTable::recalcCaption): code to destroy captions
        other than the first one.
        (WebCore::RenderTable::recalcSections): call recalcCaption
        helper. Store the next sibling early since child can get destroyed
        in recalcCaption.
        * rendering/RenderTable.h:

2011-04-29  David Kilzer  <ddkilzer@apple.com>

        Remove WML
        https://bugs.webkit.org/show_bug.cgi?id=59678

        * DerivedSources.make: Removed $(WebCore)/wml path in VPATH.

2011-04-29  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r85330.
        http://trac.webkit.org/changeset/85330
        https://bugs.webkit.org/show_bug.cgi?id=41311

        Caused unexpected border rendering change on 500 tests on chromium linux.

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

2011-04-29  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix after r85343.

        Enable strict OwnPtr for Qt
        https://bugs.webkit.org/show_bug.cgi?id=59667

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::wndProc):
        (WebCore::PluginView::snapshot):

2011-04-29  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Adam Barth.

        Enable strict OwnPtr for Qt
        https://bugs.webkit.org/show_bug.cgi?id=59667

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::setData):
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):

2011-04-29  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        Add ENABLE macro for WebKitAnimation
        https://bugs.webkit.org/show_bug.cgi?id=59729

        Add new feature to toggle WebKit Animation API.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * dom/Element.idl:
        * features.pri:
        * page/DOMWindow.idl:

2011-04-29  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=59149
        (Regression) Existing animations are not replaced when filling.

        Hardware animations that fill forwards were not being correctly
        replaced when the animation was removed. The actual animation
        logic was working correctly, but it wasn't deleting the
        CoreAnimation animation from the PlatformLayer. The fix was
        to explicitly call endAnimation when disconnecting the animation
        from its RenderObject.

        Test: animations/3d/replace-filling-transform.html

        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::clear): call endAnimation as the animation is cleared

2011-04-29  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Nikolas Zimmermann.

        When svg inline text is getting destroyed, make sure to mark
        its svg text ancestor as needing a positioning values update.
        This helps to recalculate layout attributes and makes sure
        that svg inline text is not used again.
        https://bugs.webkit.org/show_bug.cgi?id=59161

        Test: svg/text/inline-text-destroy-attributes-crash.xhtml

        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::destroy):
        * rendering/svg/RenderSVGInlineText.h:

2011-04-29  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Fix wxMSW trunk builds by adding include.

        * platform/graphics/wx/GraphicsContextWx.cpp:

2011-04-29  Mike Reed  <reed@google.com>

        Reviewed by Ojan Vafai.

        Skia: Need to implement GraphicsContext::clipConvexPolygon()
        https://bugs.webkit.org/show_bug.cgi?id=41311

        This does not (yet) enable HAVE_PATH_BASED_BORDER_RADIUS_DRAWING
        as that shows other issues/question unrelated to clipping.
        https://bugs.webkit.org/show_bug.cgi?id=41311

        No new tests. covered by existing layout tests

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::setPathFromConvexPoints):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::clipConvexPolygon):

2011-04-29  Mike Lawther  <mikelawther@chromium.org>

        Reviewed by Ojan Vafai.

        Fix IR->SR typo in enum value (and resulting style fails)
        https://bugs.webkit.org/show_bug.cgi?id=59779

        No functionality change, so no new tests

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EShapeRendering):

2011-04-29  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: CSS editing breaks when entering "color: rgb(1"
        https://bugs.webkit.org/show_bug.cgi?id=59789

        Tests: inspector/styles/styles-add-invalid-property.html
               inspector/styles/styles-cancel-editing.html
               inspector/styles/styles-commit-editing.html

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSProperty.prototype.setText.callback):
        (WebInspector.CSSProperty.prototype.setText):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.selectElement):
        (WebInspector.StylePropertyTreeElement.prototype):
        (WebInspector.StylePropertyTreeElement.prototype.styleText.updateInterface.majorChange.isRevert.originalPropertyText):
        * inspector/front-end/inspector.js:
        (WebInspector.startEditing.defaultFinishHandler):
        (WebInspector.startEditing.keyDownEventListener):
        (WebInspector.startEditing):

2011-04-29  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        ENABLE(QT_BEARER) -> USE(QT_BEARER)

        * WebCore.pri:
        * WebCore.pro:
        * features.pri:
        * platform/network/NetworkStateNotifier.h:
        * platform/network/qt/NetworkStateNotifierQt.cpp:

2011-04-29  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        ENABLE(QT_USERAGENT_DEVICEMODEL) -> USE(QT_MOBILITY_SYSTEMINFO)

        * WebCore.pri:
        * features.pri:

2011-04-29  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: breakpoints set in original and formatted scripts are messed up after navigation.
        https://bugs.webkit.org/show_bug.cgi?id=59476

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.setFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype._removeBreakpointFromDebugger):
        (WebInspector.PresentationBreakpoint.prototype.serialize):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect.optionCompare):
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect):
        (WebInspector.ScriptsPanel.prototype.reset):

2011-04-28  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: include script end line:column in scriptParsed parameters.
        https://bugs.webkit.org/show_bug.cgi?id=59717

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        * bindings/v8/DebuggerScript.js:
        ():
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        (WebCore::InspectorDebuggerAgent::Script::Script):
        * inspector/ScriptDebugListener.h:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerModel.prototype._failedToParseScriptSource):
        (WebInspector.DebuggerDispatcher.prototype.scriptParsed):
        * inspector/front-end/Script.js:
        (WebInspector.Script):

2011-04-28  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [protocol] Evaluate should expose thrown exception value
        https://bugs.webkit.org/show_bug.cgi?id=59000

        Each evaluation command may have either thrown or returned result. This is indicated
        by wasThrown property in the protocol.

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluate):
        (WebCore::InjectedScript::evaluateOn):
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::makeEvalCall):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.json: Removed "error" remote object type, added "wasThrown" property to
        the evaluation results.
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::evaluateOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions.evaluated):
        (WebInspector.ConsoleView.prototype.evalInInspectedWindow):
        (WebInspector.ConsoleView.prototype._enterKeyPressed.printResult):
        (WebInspector.ConsoleView.prototype._enterKeyPressed):
        (WebInspector.ConsoleCommandResult):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.PresenationCallFrame.prototype.evaluate):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode.setTooltip):
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionSidebarPane.prototype._onEvaluate):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.nodePrototypesReady):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._showPopup.showObjectPopup):
        (WebInspector.SourceFrame.prototype._showPopup):

2011-04-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r85315.
        http://trac.webkit.org/changeset/85315
        https://bugs.webkit.org/show_bug.cgi?id=59792

        Broke script-formatter.html test (Requested by podivilov on
        #webkit).

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.setFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype._removeBreakpointFromDebugger.didRemoveBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._removeBreakpointFromDebugger):
        (WebInspector.PresentationBreakpoint.prototype.serialize):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect.optionCompare):
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect):
        (WebInspector.ScriptsPanel.prototype.reset):

2011-04-29  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Hyperlink Auditing (ping) requests are not shown in network panel
        https://bugs.webkit.org/show_bug.cgi?id=58794

        Added ping requests to network panel.

        Test: http/tests/inspector/network/ping.html

        * English.lproj/localizedStrings.js:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::continueAfterPingLoaderImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::continueAfterPingLoader):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype.refreshResource):
        (WebInspector.NetworkDataGridNode.prototype._refreshStatusCell):
        (WebInspector.NetworkDataGridNode.prototype._refreshTypeCell):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.get formParameters):
        (WebInspector.Resource.prototype.requestContentType):
        (WebInspector.Resource.prototype.isPingRequest):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::PingLoader):
        * loader/PingLoader.h:

2011-04-28  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: breakpoints set in original and formatted scripts are messed up after navigation.
        https://bugs.webkit.org/show_bug.cgi?id=59476

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype._removeBreakpointFromDebugger):
        (WebInspector.PresentationBreakpoint.prototype.serialize):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect.optionCompare):
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect):
        (WebInspector.ScriptsPanel.prototype.reset):

2011-04-29  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add "open link in new tab" action into the network and resources panels.
        https://bugs.webkit.org/show_bug.cgi?id=59788

        This change also distinguishes context menu items case between platforms.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent):
        * inspector/front-end/DOMBreakpointsSidebarPane.js:
        (WebInspector.DOMBreakpointsSidebarPane):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._contextMenuEventFired):
        (WebInspector.ElementsPanel.prototype.populateHrefContextMenu):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        (WebInspector.ElementsTreeElement.prototype._populateTextContextMenu):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._contextMenu):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype._handleContextMenuEvent):
        (WebInspector.FrameResourceTreeElement.prototype._appendSaveAsAction):
        (WebInspector.ResourceRevisionTreeElement.prototype._handleContextMenuEvent):
        * inspector/front-end/Settings.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.populateLineGutterContextMenu):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._contextMenu):
        * inspector/front-end/inspector.js:
        (WebInspector.openLinkExternallyLabel):
        (WebInspector.openResource):
        (WebInspector.useLowerCaseMenuTitles):

2011-04-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Mask placement on composited layer is incorrect sometimes
        https://bugs.webkit.org/show_bug.cgi?id=59775
        
        The mask layer always has the same size as its owning GraphicsLayer,
        so it needs to share the same offsetFromRenderer as well. This fixes
        the offset at which the mask layer contents are painted in cases where
        that offset is non-zero, for example when outline style bloats all of
        the layer sizes.

        Test: compositing/masks/layer-mask-placement.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2011-04-28  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Mark Rowe.

        Reverted r81319.

        Fixes <rdar://problem/9331580> REGRESSION (r81319): Safari fails to display dropdown navigation on classics.berkeley.edu

        * page/NavigatorBase.cpp:

2011-04-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dirk Schulze.

        1px box-shadow looks ugly
        https://bugs.webkit.org/show_bug.cgi?id=58100
        and
        ShadowBlur incorrectly handles zero-sized blur radius in one axis
        https://bugs.webkit.org/show_bug.cgi?id=59710
        
        blurLayerImage() has issues at the edges if the blur radius
        is one, so in that case bump the buffer size out by a pixel.
        This results in a correct, symmetrical blur.
        
        Also fix an issue noticed during testing where a zero
        height or width radius would still blur on that axis,
        because we clamp the kernel size to a minimum of two.

        Test: fast/box-shadow/single-pixel-shadow.html

        * platform/graphics/ShadowBlur.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::blurLayerImage):
        Skip horizontal or vertial passes if the radius on that axis is zero.
        Move the "if (pass && m_blurRadius.width() != m_blurRadius.height())"
        clause to the end of the loop, since it only needs to execute once
        after the first pass.        
        (WebCore::ShadowBlur::blurredEdgeSize):
        New method to compute the width of the blurred edge (radius + extra
        pixel when necessary).
        (WebCore::ShadowBlur::calculateLayerBoundingRect):
        (WebCore::ShadowBlur::templateSize):
        (WebCore::ShadowBlur::drawRectShadow):
        (WebCore::ShadowBlur::drawInsetShadow):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawLayerPieces):
        Use the result of blurredEdgeSize() rather than recomputing.

2011-04-28  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Beth Dakin.

        CSS sibling selector (~) does not work with :target pseudo class
        https://bugs.webkit.org/show_bug.cgi?id=26539

        Allow style recalculation of forward siblings of elements with
        forward positional rules.

        Tests: fast/css/pseudo-target-indirect-sibling-001.html
               fast/css/pseudo-target-indirect-sibling-002.html

        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):

2011-04-28  Nat Duca  <nduca@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Add swapBuffersCompleteCallback to Extensions3DChromium
        https://bugs.webkit.org/show_bug.cgi?id=59626

        * platform/graphics/chromium/Extensions3DChromium.h:
        (WebCore::Extensions3DChromium::SwapBuffersCompleteCallbackCHROMIUM::~SwapBuffersCompleteCallbackCHROMIUM):

2011-04-28  Steve Lacey  <sjl@chromium.org>

        Reviewed by Eric Carlson.

        Change chromium media controls to use absolute positioning until bug 59644 is fixed.
        https://bugs.webkit.org/show_bug.cgi?id=59732

        * css/mediaControlsChromium.css:
        (audio::-webkit-media-controls-current-time-display, video::-webkit-media-controls-current-time-display):
        (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):

2011-04-28  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Implement CSS border width and related properties in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=59414

        No new tests as no functionality added.

        * css/CSSStyleApplyProperty.cpp:
        Separated ApplyPropertyDefault into parent and child so that other classes could inherit
        the applyInheritValue and applyInitialValue methods only.
        This was necessary to avoid casting from CSSPrimitiveValue to inappropriate types in ApplyPropertyDefault::applyValue().
        
        Added ApplyPropertyWidth class for handling width based CSS properties.
        * css/CSSStyleSelector.cpp:
        Removed no-longer-required code for handling width based CSS properties.
        * css/CSSStyleSelector.h:
        Added a getter for m_rootElementStyle.

2011-04-28  Kent Tamura  <tkent@chromium.org>

        Run sort-Xcode-project-file.

        * WebCore.xcodeproj/project.pbxproj:

2011-04-28  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Dirk Schulze.

        [Cairo] Text underline is not shadowed when text-shadow is enabled
        https://bugs.webkit.org/show_bug.cgi?id=48074

        Use ContextShadow to enable shadows for text underlines. Also remove quite a bit
        of duplicate code in GraphicsContext used for stroking lines. This code looks like it was
        originally copied from the CG GraphicsContext.

        * platform/graphics/GraphicsContext.h: Make adjustLineToPixelBoundaries so that we
          can call it from a static helper function.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::calculateStrokePatternOffset): Abstracted this code into a helper.
        (WebCore::drawLineOnCairoContext): Abstracted this code into a helper. We need to
        call it multiple times when shadowing text underlines.
        (WebCore::GraphicsContext::drawLine): Use drawLineOnCairoContext.
        (WebCore::GraphicsContext::strokeArc): Use calculateStrokePatternOffset.
        (WebCore::GraphicsContext::drawLineForText): Use drawLineOnCairoContext.

2011-04-28  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Mark Rowe.

        Cleanup WebCore.xcodeproj a bit.

        * WebCore.xcodeproj/project.pbxproj:
        Added CompilerVersion.xcconfig and moved some JS bindings files into the
        correct sub groups.

2011-04-28  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        Remove IMAGE_RESIZER related code.
        https://bugs.webkit.org/show_bug.cgi?id=59735

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * features.pri:
        * html/AsyncImageResizer.cpp: Removed.
        * html/AsyncImageResizer.h: Removed.
        * html/ImageResizerThread.cpp: Removed.
        * html/ImageResizerThread.h: Removed.

2011-04-28  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed trivial one-line fix inspired by wrong patch for https://bugs.webkit.org/show_bug.cgi?id=59630.

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

2011-04-28  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Sam Weinig.

        Rolling out revision 85258! I want to fix that bug a different way.
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):

2011-04-28  Chang Shu  <cshu@webkit.org>

        Reviewed by Eric Seidel.

        isContentEditable is not working properly with document.designMode
        https://bugs.webkit.org/show_bug.cgi?id=53031

        The specification (http://dev.w3.org/html5/spec/Overview.html#attr-contenteditable)
        indicates that the element.isContentEditable relies on document.designMode if its
        and its ancestors' contenteditable attributes are set to inherit.

        1. Sync document render style after document.designMode is changed.
        2. Removed the code that does unnecessary and incorrect handling for contenteditable
        attribute with "inherit" value.
        3. Ryosuke Niwa also helped to fix the code in ApplyStyleCommand that causes an assertion.

        Tests: fast/dom/HTMLElement/iscontenteditable-designmodeon-allinherit-subframe.html
               fast/dom/HTMLElement/iscontenteditable-designmodeon-allinherit.html
               fast/dom/HTMLElement/iscontenteditable-designmodeon-ancestor.html
               fast/dom/HTMLElement/iscontenteditable-designmodeon.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForDocument):
        * dom/Document.cpp:
        (WebCore::Document::setDesignMode):
        * dom/Node.cpp:
        (WebCore::Node::rendererIsEditable):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setContentEditable):

2011-04-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r85101.
        http://trac.webkit.org/changeset/85101
        https://bugs.webkit.org/show_bug.cgi?id=59757

         it'd be better to rollout the patch and do another one with
        another property name. Current one will bring us to a problem
        at first run after upgrade because it's type was changed from
        int to string. (Requested by loislo on #webkit).

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerWasEnabled):
        (WebInspector.ScriptsPanel.prototype._setPauseOnExceptions.callback):
        (WebInspector.ScriptsPanel.prototype._setPauseOnExceptions):

2011-04-28  Mike Reed  <reed@google.com>

        Reviewed by Eric Seidel.

        fix shadw behavior for both CSS and Canvas -- skia only
        https://bugs.webkit.org/show_bug.cgi?id=59700

        Test:
        canvas/philip/tests/2d.shadow.alpha.3.html
        canvas/philip/tests/2d.shadow.alpha.4.html
        canvas/philip/tests/2d.shadow.alpha.5.html
        fast/canvas/canvas-fillPath-alpha-shadow.html
        fast/canvas/canvas-strokePath-alpha-shadow.html
        fast/canvas/canvas-strokeRect-alpha-shadow.html
        fast/css/text-input-with-webkit-border-radius.html
        fast/repaint/shadow-multiple-horizontal.html
        fast/repaint/shadow-multiple-strict-horizontal.html
        fast/repaint/shadow-multiple-strict-vertical.html
        fast/repaint/shadow-multiple-vertical.html
        fast/canvas/canvas-getImageData.html

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):

2011-04-28  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/59755> AXObjectCache::attachWrapper() over-retains an AccessibilityObjectWrapper

        Reviewed by Chris Fleizach.

        Previously, AXObjectCache::attachWrapper over-retained each
        AccessibilityObjectWrapper it created, which is why
        AXObjectCache::detachWrapper() contained an extra -release.

        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::detachWrapper): Removed extra -release.
        (WebCore::AXObjectCache::attachWrapper): Because setWrapper()
        assigns to a RetainPtr<> instance variable, it doesn't need a +1
        retained object passed in.  Fix the leak by using a RetainPtr<>
        for the AccessibilityObjectWrapper.

2011-04-28  Nat Duca  <nduca@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Compute compositor fps value and history using the frameBegin timestamp
        https://bugs.webkit.org/show_bug.cgi?id=59668

        This change switches the compositor FPS meter to use the timestamp
        of the beginning of the frame rather than the time we call
        swapBuffers. When scheduling is correctly tied to vsync, we can
        have highly variable times when we finish vsync and still have
        stable frame rates.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::CCHeadsUpDisplay):
        (WebCore::CCHeadsUpDisplay::drawFPSCounter):
        (WebCore::CCHeadsUpDisplay::onFrameBegin):
        (WebCore::CCHeadsUpDisplay::onPresent):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h:

2011-04-28  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=59759
        Overflow:scroll regions with overlay scrollbars show full thumb instead of just a 
        track when there is nothing to scroll to
        <rdar://problem/9282066>

        Scrollbar::totalSize() and Scrollbar::visibleSize() are the same when there is 
        nothing to scroll to. Just dividing them to get a knob proportion yields 1, which 
        is not right. Set the proportion to 0 in this case instead.
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):

2011-04-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/9291132> Add support for -epub-prefixed properties

        Test: fast/css/epub-properties.html

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyName): Map "epub"-prefixed properties to "-epub"-prefixed ones.
        * css/CSSPropertyNames.in: Added -epub- aliases to caption-side, -webkit-hyphens, -webkit-text-combine,
        -webkit-text-emphasis, -webkit-text-emphasis-color, -webkit-text-emphasis-style, -webkit-text-orientation,
        text-transform, text-transform, word-break, and -webkit-writing-mode.

2011-04-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove WML
        https://bugs.webkit.org/show_bug.cgi?id=59678

        This patch removes WML from WebCore.  After removing WML, there's a
        bunch of twisted code that could be untwisted, but this patch contains
        only the purely mechanical part of removing the feature.

        There's been a lot of discussion on webkit-dev about whether we should
        remove WML.  In addition to those threads, we've had an informal poll
        of the reviewers as well as an in-person discussion at the WebKit
        contributor's meeting.  Removing any feature is likely to make some
        folks unhappy, but, on balance, removing WML appears to be the right
        thing for the project to do at this time.

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::linkAttribute):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * css/wml.css: Removed.
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::createElement):
        * dom/Document.h:
        (WebCore::Document::isMediaDocument):
        * dom/Document.idl:
        * dom/InputElement.h:
        * dom/Node.cpp:
        (WebCore::Node::toInputElement):
        * dom/Node.h:
        * dom/OptionElement.cpp:
        (WebCore::toOptionElement):
        (WebCore::isOptionElement):
        * dom/OptionElement.h:
        * dom/OptionGroupElement.cpp:
        (WebCore::toOptionGroupElement):
        (WebCore::isOptionGroupElement):
        * dom/SelectElement.cpp:
        (WebCore::toSelectElement):
        * dom/SelectElement.h:
        * dom/Text.cpp:
        (WebCore::Text::attach):
        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::insertErrorMessageBlock):
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::internalSubset):
        (WebCore::getEntityHandler):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parse):
        (WebCore::XMLDocumentParser::parseDtd):
        * editing/htmlediting.cpp:
        (WebCore::canHaveChildrenForEditing):
        * features.pri:
        * history/BackForwardList.h:
        * history/BackForwardListImpl.cpp:
        * history/BackForwardListImpl.h:
        * history/PageCache.cpp:
        (WebCore::PageCache::canCachePageContainingThisFrame):
        * html/HTMLAnchorElement.h:
        * inspector/ConsoleMessage.cpp:
        (WebCore::messageSourceValue):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype.toString):
        * loader/FrameLoader.cpp:
        (WebCore::isBackForwardLoadType):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::shouldReload):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        (WebCore::FrameLoader::loadItem):
        * loader/FrameLoaderTypes.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreDocumentState):
        * manual-tests/wml: Removed.
        * manual-tests/wml/StartTests.wml: Removed.
        * manual-tests/wml/a-br-element.wml: Removed.
        * manual-tests/wml/a-element.wml: Removed.
        * manual-tests/wml/a-img-element.wml: Removed.
        * manual-tests/wml/access-target.wml: Removed.
        * manual-tests/wml/anchor-br-element.wml: Removed.
        * manual-tests/wml/anchor-element.wml: Removed.
        * manual-tests/wml/anchor-img-element.wml: Removed.
        * manual-tests/wml/card-newcontext-attr.wml: Removed.
        * manual-tests/wml/card-onenterbackward.wml: Removed.
        * manual-tests/wml/card-onenterforward.wml: Removed.
        * manual-tests/wml/card-ontimer.wml: Removed.
        * manual-tests/wml/deck-access-control.wml: Removed.
        * manual-tests/wml/input-format.wml: Removed.
        * manual-tests/wml/onevent-go.wml: Removed.
        * manual-tests/wml/onevent-noop.wml: Removed.
        * manual-tests/wml/onevent-prev.wml: Removed.
        * manual-tests/wml/onevent-refresh.wml: Removed.
        * manual-tests/wml/onevent-shadow.wml: Removed.
        * manual-tests/wml/resources: Removed.
        * manual-tests/wml/resources/smiley.png: Removed.
        * manual-tests/wml/select-element.wml: Removed.
        * manual-tests/wml/select-onpick-event-crash.wml: Removed.
        * manual-tests/wml/select-onpick-event.wml: Removed.
        * manual-tests/wml/setvar-element.wml: Removed.
        * manual-tests/wml/targetdeck.wml: Removed.
        * manual-tests/wml/task-go-in-anchor.wml: Removed.
        * manual-tests/wml/task-prev-in-anchor.wml: Removed.
        * manual-tests/wml/task-refresh-in-anchor.wml: Removed.
        * manual-tests/wml/template-go.wml: Removed.
        * manual-tests/wml/template-ontimer.wml: Removed.
        * manual-tests/wml/timer.wml: Removed.
        * manual-tests/wml/variable-substitution.wml: Removed.
        * page/Console.cpp:
        (WebCore::printMessageSourceAndLevelPrefix):
        * page/Console.h:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/Page.cpp:
        * page/Page.h:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedNonImageMimeTypes):
        * platform/network/FormDataBuilder.h:
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        * platform/wince/MIMETypeRegistryWinCE.cpp:
        (WebCore::initMIMETypeEntensionMap):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::altDisplayString):
        (WebCore::HitTestResult::absoluteImageURL):
        (WebCore::HitTestResult::absoluteLinkURL):
        (WebCore::HitTestResult::isLiveLink):
        * rendering/RenderBox.cpp:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::updateFromElement):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::findLegend):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::updateAltText):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isLegend):
        (WebCore::RenderObject::offsetParent):
        * wml: Removed.
        * wml/WMLAElement.cpp: Removed.
        * wml/WMLAElement.h: Removed.
        * wml/WMLAccessElement.cpp: Removed.
        * wml/WMLAccessElement.h: Removed.
        * wml/WMLAnchorElement.cpp: Removed.
        * wml/WMLAnchorElement.h: Removed.
        * wml/WMLAttributeNames.in: Removed.
        * wml/WMLBRElement.cpp: Removed.
        * wml/WMLBRElement.h: Removed.
        * wml/WMLCardElement.cpp: Removed.
        * wml/WMLCardElement.h: Removed.
        * wml/WMLDoElement.cpp: Removed.
        * wml/WMLDoElement.h: Removed.
        * wml/WMLDocument.cpp: Removed.
        * wml/WMLDocument.h: Removed.
        * wml/WMLElement.cpp: Removed.
        * wml/WMLElement.h: Removed.
        * wml/WMLErrorHandling.cpp: Removed.
        * wml/WMLErrorHandling.h: Removed.
        * wml/WMLEventHandlingElement.cpp: Removed.
        * wml/WMLEventHandlingElement.h: Removed.
        * wml/WMLFieldSetElement.cpp: Removed.
        * wml/WMLFieldSetElement.h: Removed.
        * wml/WMLFormControlElement.cpp: Removed.
        * wml/WMLFormControlElement.h: Removed.
        * wml/WMLGoElement.cpp: Removed.
        * wml/WMLGoElement.h: Removed.
        * wml/WMLImageElement.cpp: Removed.
        * wml/WMLImageElement.h: Removed.
        * wml/WMLImageLoader.cpp: Removed.
        * wml/WMLImageLoader.h: Removed.
        * wml/WMLInputElement.cpp: Removed.
        * wml/WMLInputElement.h: Removed.
        * wml/WMLInsertedLegendElement.cpp: Removed.
        * wml/WMLInsertedLegendElement.h: Removed.
        * wml/WMLIntrinsicEvent.cpp: Removed.
        * wml/WMLIntrinsicEvent.h: Removed.
        * wml/WMLIntrinsicEventHandler.cpp: Removed.
        * wml/WMLIntrinsicEventHandler.h: Removed.
        * wml/WMLMetaElement.cpp: Removed.
        * wml/WMLMetaElement.h: Removed.
        * wml/WMLNoopElement.cpp: Removed.
        * wml/WMLNoopElement.h: Removed.
        * wml/WMLOnEventElement.cpp: Removed.
        * wml/WMLOnEventElement.h: Removed.
        * wml/WMLOptGroupElement.cpp: Removed.
        * wml/WMLOptGroupElement.h: Removed.
        * wml/WMLOptionElement.cpp: Removed.
        * wml/WMLOptionElement.h: Removed.
        * wml/WMLPElement.cpp: Removed.
        * wml/WMLPElement.h: Removed.
        * wml/WMLPageState.cpp: Removed.
        * wml/WMLPageState.h: Removed.
        * wml/WMLPostfieldElement.cpp: Removed.
        * wml/WMLPostfieldElement.h: Removed.
        * wml/WMLPrevElement.cpp: Removed.
        * wml/WMLPrevElement.h: Removed.
        * wml/WMLRefreshElement.cpp: Removed.
        * wml/WMLRefreshElement.h: Removed.
        * wml/WMLSelectElement.cpp: Removed.
        * wml/WMLSelectElement.h: Removed.
        * wml/WMLSetvarElement.cpp: Removed.
        * wml/WMLSetvarElement.h: Removed.
        * wml/WMLTableElement.cpp: Removed.
        * wml/WMLTableElement.h: Removed.
        * wml/WMLTagNames.in: Removed.
        * wml/WMLTaskElement.cpp: Removed.
        * wml/WMLTaskElement.h: Removed.
        * wml/WMLTemplateElement.cpp: Removed.
        * wml/WMLTemplateElement.h: Removed.
        * wml/WMLTimerElement.cpp: Removed.
        * wml/WMLTimerElement.h: Removed.
        * wml/WMLVariables.cpp: Removed.
        * wml/WMLVariables.h: Removed.

2011-04-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r85233 and r85235.
        http://trac.webkit.org/changeset/85233
        http://trac.webkit.org/changeset/85235
        https://bugs.webkit.org/show_bug.cgi?id=59754

        Causes issues with jsc. (Requested by dave_levin on #webkit).

        * ForwardingHeaders/wtf/ThreadRestrictionVerifier.h: Removed.
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultIcon):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::getOrCreateIconRecord):
        (WebCore::IconDatabase::readFromDatabase):

2011-04-28  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Adam Barth.

        Introducing a new class that allows serialization of a page back
        to HTML/XML with all its sub-frames and also retrieves the page's
        resources.
        Tests: unit-tests in chromium/tests/WebPageNewSerializerTest.cpp
        https://bugs.webkit.org/show_bug.cgi?id=58947

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * dom/Document.cpp:
        (WebCore::Document::suggestedMIMEType):
        * dom/Document.h:
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendCustomAttributes):
        (WebCore::MarkupAccumulator::appendElement):
        * editing/MarkupAccumulator.h:
        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::HTMLMetaCharsetParser::processMeta):
        (WebCore::HTMLMetaCharsetParser::encodingFromMetaAttributes):
        * html/parser/HTMLMetaCharsetParser.h:
        * page/PageSerializer.cpp: Added.
        * page/PageSerializer.h: Added.

2011-04-28  Mark Pilgrim  <pilgrim@chromium.org>

        Reviewed by Tony Chang.

        IndexedDB createIndex should fail if name arg is null
        https://bugs.webkit.org/show_bug.cgi?id=58365

        Test: storage/indexeddb/mozilla/create-index-null-name.html

        * storage/IDBObjectStore.idl:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::createIndex):

2011-04-28  Mark Pilgrim  <pilgrim@chromium.org>

        Reviewed by Tony Chang.

        IndexedDB put() should fail if second (key) parameter is null
        https://bugs.webkit.org/show_bug.cgi?id=58613

        If key arg is not specified, prpKey ends up as a null pointer in ::put().
        However, if the key arg is specified but is null, prpKey ends up as a
        valid IDBKey which has a null key type. As it happens, we need to be able
        to detect the difference between these cases (the key arg is optional but
        if specified must not be null).

        Test: storage/indexeddb/mozilla/key-requirements-put-null-key.html

        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):

2011-04-07  David Levin  <levin@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

        No new functionality exposed so no new tests. (The change is basically adding
        more testing.)

        * ForwardingHeaders/wtf/ThreadRestrictionVerifier.h: Added.
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultIcon): Set the mutex which does the guarding of the variable.
        (WebCore::IconDatabase::getOrCreateIconRecord): Ditto.
        (WebCore::IconDatabase::setIconDataForIconURL): Ditto.
        (WebCore::IconDatabase::readFromDatabase): Ditto.

2011-04-28  Kenneth Russell  <kbr@google.com>

        Unreviewed build fix for Web Audio with strict OwnPtr.

        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::HRTFDatabaseLoader):

2011-04-28  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Geoffrey Garen.

        Walk shadow hosts as well as parent nodes when finding opaque roots.
        https://bugs.webkit.org/show_bug.cgi?id=59571

        Test: fast/dom/shadow/gc-shadow.html

        * bindings/js/JSDOMBinding.h:
        (WebCore::root):

2011-04-28  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Click counting logic should be shared between WebKit1 and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=59715

        Added a GtkClickCounter class which is just the logic from WebKit1 pushed down
        into WebCore so that WebKit1 and WebKit2 can share the code.

        No new tests. This is covered by fast/events/click-count.html.

        * GNUmakefile.list.am: Added new files.
        * platform/gtk/GtkClickCounter.cpp: Added.
        (WebCore::GtkClickCounter::GtkClickCounter): Added.
        (WebCore::GtkClickCounter::reset): Added.
        (WebCore::GtkClickCounter::shouldProcessButtonEvent): Added.
        (WebCore::getEventTime): Added.
        (WebCore::GtkClickCounter::clickCountForGdkButtonEvent): Added.
        * platform/gtk/GtkClickCounter.h: Added.

2011-04-28  Dan Bernstein  <mitz@apple.com>

        Build fix.

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

2011-04-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Allow specifying CSS property aliases in CSSPropertyNames.in files
        https://bugs.webkit.org/show_bug.cgi?id=59712

        * css/CSSParser.cpp:
        (WebCore::cssPropertyID): Removed code to handle some aliases
        * css/CSSPropertyNames.in: Added aliases no longer handled in code.
        * css/makeprop.pl: Interpret lines of the form "alias-property-name = property-name" as
        defining an alias, and add an appropriate entry to the gperf file.

2011-04-28  Arno Renevier  <arno@renevier.net>

        Reviewed by Gustavo Noronha Silva.

        [Soup] does not load css stylesheets without content-type
        https://bugs.webkit.org/show_bug.cgi?id=59697

        When sniffing content type, do not replace http Content-Type header in
        soup message anymore, but keep sniffed content type in a separate
        variable.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::contentSniffedCallback):
        * platform/network/soup/ResourceResponse.h:
        (WebCore::ResourceResponse::sniffedContentType):
        (WebCore::ResourceResponse::setSniffedContentType):
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::updateFromSoupMessage):

2011-04-28  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        Remove flag ENABLE_SYMBIAN_DIALOG_PROVIDER
        https://bugs.webkit.org/show_bug.cgi?id=59704

        No new tests, just code cleanup.

        * WebCore.pri:

2011-04-28  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove "Pretty print" source frame context menu item.
        https://bugs.webkit.org/show_bug.cgi?id=59709

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.setFormatSourceFiles):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._toggleFormatSourceFiles):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.populateTextAreaContextMenu):

2011-04-28  Satish Sampath  <satish@chromium.org>

        Reviewed by Tony Gentilcore.

        Speech input button layout issues with padding and border.
        https://bugs.webkit.org/show_bug.cgi?id=59613

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        (WebCore::RenderTextControlSingleLine::nodeAtPoint):
        (WebCore::RenderTextControlSingleLine::forwardEvent):

2011-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Check whether to use native scrollbars at run time
        https://bugs.webkit.org/show_bug.cgi?id=59694

        It's currently decided at build time depending on whether webkit2
        build is enabled or not. That makes imposible to build both
        webkit1 and webkit2 using the same libWebCore.

        * GNUmakefile.am:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::createScrollbar):

2011-04-28  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add status bar button for pretty print.
        https://bugs.webkit.org/show_bug.cgi?id=59467

        * WebCore.gypi:
        * inspector/front-end/Images/prettyPrintButtonGlyph.png: Added.
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.get statusBarItems):
        (WebInspector.ScriptsPanel.prototype._toggleFormatSourceFiles):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.scripts-toggle-pretty-print-status-bar-item .glyph):
        (.scripts-toggle-pretty-print-status-bar-item.toggled .glyph):

2011-04-28  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add ResourceTreeModel tests.
        https://bugs.webkit.org/show_bug.cgi?id=59616

        Tests: http/tests/inspector/resource-tree/resource-tree-document-url.html
               http/tests/inspector/resource-tree/resource-tree-frame-navigate.html
               http/tests/inspector/resource-tree/resource-tree-reload.html

        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype.frontendReused):
        (WebInspector.ResourceTreeModel.prototype._addFrame):
        (WebInspector.ResourceTreeModel.prototype._frameNavigated):
        (WebInspector.ResourceTreeModel.prototype._frameDetached):
        (WebInspector.ResourceTreeModel.prototype._onResourceUpdated):
        (WebInspector.ResourceTreeModel.prototype.forAllResources):
        (WebInspector.ResourceTreeModel.prototype._clearChildFramesAndResources):
        (WebInspector.ResourceTreeModel.prototype._callForFrameResources):
        (WebInspector.ResourceTreeModel.prototype._addFramesRecursively):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._populateResourceTree):
        (WebInspector.ResourcesPanel.prototype._frameAdded):
        (WebInspector.ResourcesPanel.prototype._frameDetached):
        (WebInspector.ResourcesPanel.prototype._frameNavigated):
        (WebInspector.FrameTreeElement):
        (WebInspector.FrameTreeElement.prototype.frameNavigated):

2011-04-28  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: [Chromium] Implement retaining paths following in detailed heap snapshots.
        https://bugs.webkit.org/show_bug.cgi?id=59592

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype._populate):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren.childrenRetrieved):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren.callSerialize):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype._defaultPopulateCount.100.expandRoute.nextStep.else.afterExpand):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype._defaultPopulateCount.100.expandRoute):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.showNext.pathFound):
        (WebInspector.DetailedHeapshotView.prototype._mouseClickInRetainmentGrid.expandRoute):
        (WebInspector.DetailedHeapshotView.prototype._mouseClickInRetainmentGrid):
        (WebInspector.DetailedHeapshotView.prototype.changeView.sortingComplete):
        (WebInspector.DetailedHeapshotView.prototype.changeView):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotPathFinder.prototype.findNext):
        (WebInspector.HeapSnapshotPathFinder.prototype._nextEdgeIter):
        (WebInspector.HeapSnapshotPathFinder.prototype._buildNextPath):
        (WebInspector.HeapSnapshotPathFinder.prototype._pathToString):
        (WebInspector.HeapSnapshotPathFinder.prototype._pathToRoute):
        * inspector/front-end/heapProfiler.css:
        (div.retaining-paths-view td.path-column div:hover):

2011-04-28  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Chromium] Optimize detailed heap snapshots loading / parsing.
        https://bugs.webkit.org/show_bug.cgi?id=59454

        Test: inspector/profiler/heap-snapshot-loader.html

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotLoader):
        (WebInspector.HeapSnapshotLoader.prototype._findBalancedCurlyBrackets):
        (WebInspector.HeapSnapshotLoader.prototype.finishLoading):
        (WebInspector.HeapSnapshotLoader.prototype._parseNodes):
        (WebInspector.HeapSnapshotLoader.prototype._parseStringsArray):
        (WebInspector.HeapSnapshotLoader.prototype.pushJSONChunk):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotFakeWorker.prototype.postMessage):

2011-04-28  ojab  <ojab@ojab.ru>

        Reviewed by David Levin.

        Fix build with libpng-1.5.1
        https://bugs.webkit.org/show_bug.cgi?id=59607

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::readColorProfile):

2011-04-28  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Nikolas Zimmermann.

        Optimizing gaussian blur filter to ARM-neon SIMD instruction set
        https://bugs.webkit.org/show_bug.cgi?id=59447

        This patch contains two sub-routines, one for speeding up
        alpha channel only gaussian blur (by 2.5 times) and one
        for speeding up all channel blur (by 4 times).

        The common code is also redesigned to better fit for platform
        specific code. This means large chunks of code was moved to
        different files, and all platform specific files are added to
        all build systems.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplyGeneric):
        (WebCore::FEGaussianBlur::apply):
        * platform/graphics/filters/FEGaussianBlur.h:
        (WebCore::FEGaussianBlur::kernelPosition):
        (WebCore::FEGaussianBlur::platformApply):
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApplyGeneric):
        (WebCore::FELighting::drawLighting):
        * platform/graphics/filters/FELighting.h:
        (WebCore::FELighting::platformApply):
        * platform/graphics/filters/arm/FEGaussianBlurNEON.cpp: Added.
        (WebCore::WTF_ALIGNED):
        (WebCore::feGaussianBlurConstantsForNeon):
        * platform/graphics/filters/arm/FEGaussianBlurNEON.h: Added.
        (WebCore::FEGaussianBlur::platformApplyNeon):
        * platform/graphics/filters/arm/FELightingNEON.cpp:
        (WebCore::WTF_ALIGNED):
        (WebCore::FELighting::getPowerCoefficients):
        * platform/graphics/filters/arm/FELightingNEON.h:
        (WebCore::FELighting::platformApplyNeon):

2011-04-28  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: provide a hotkey for script pause
        https://bugs.webkit.org/show_bug.cgi?id=59593

        In fact, F8 works as a hotkey, but this fact was not reflected
        in the shortcut help popup.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._registerShortcuts):

2011-04-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        PluginStream should play nice with strict OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59675

        These failures appear when enabling strict OwnPtr on Qt.

        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::PluginStream):
        (WebCore::PluginStream::didReceiveData):

2011-04-26  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Use CachedResource to retrieve charset-decoded stylesheet text
        https://bugs.webkit.org/show_bug.cgi?id=59326

        Concrete CachedResource successors for stylesheets and scripts
        can decode their content better than the generic approach we use.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::decodeSharedBuffer):
        (WebCore::prepareCachedResourceBuffer):
        (WebCore::cachedResourceDecoded):
        (WebCore::InspectorPageAgent::resourceContent):
        (WebCore::InspectorPageAgent::resourceData):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::originalStyleSheetText):

2011-04-28  Jon Lee  <jonlee@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION: white overlay scrollbars on apple.com/startpage
        https://bugs.webkit.org/show_bug.cgi?id=59540
        <rdar://problem/9338653>

        Now we look at the document background in addition to the <body> element,
        and blend those colors in with the base background of the frame view to
        arrive at our aggregate color. This provides a better result to determine
        overlay scrollbar style.

        * page/Frame.cpp:
        (WebCore::Frame::getDocumentBackgroundColor): look up the colors on the html and body element, and properly composite them.
        * platform/graphics/Color.h: a short comment to note that blend() uses the Porter-Duff source-over equation

2011-04-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix OwnPtr issues in IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=59656

        This patch is an attempt to fix the clang build.  Clang can't seem to
        cope with OwnPtrs to classes declared in an anonymous namespace because
        OwnPtr's copy constructor isn't defined (but would need to be defined
        in this translation unit).

        * platform/leveldb/LevelDBDatabase.cpp:

2011-04-27  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Change cursor to LAZY_NATIVE_CURSOR
        https://bugs.webkit.org/show_bug.cgi?id=59411

        Enable LAZY_NATIVE_CURSOR on EFL build.

        No test added because functionality is unchanged.

        * CMakeListsEfl.txt: Add Cursor.cpp
        * platform/Cursor.h:
        (WebCore::Cursor::Cursor):
        * platform/efl/CursorEfl.cpp:
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::~Cursor):
        (WebCore::getCursorString):
        (WebCore::Cursor::ensurePlatformCursor):
        * platform/efl/WidgetEfl.cpp:
        (WebCore::Widget::setCursor):

2011-04-27  Adam Barth  <abarth@webkit.org>

        Build fix from the future.  Another trival strict OwnPtr fixes.  This
        is the last futuristic build fix I can detect with my time traveling
        abilities.

        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::initializeNewContext):

2011-04-27  Dmitry Lomov  <dslomov@google.com>

        Reviewed by David Levin.

        CrossThreadCopier should not have a default specialization for raw pointers
        https://bugs.webkit.org/show_bug.cgi?id=59234
        Removed the ablity to pass raw pointers cross-thread
        Added and applied annotations for doing that

        * fileapi/FileReader.cpp:
        (WebCore::FileReader::readInternal):
        (WebCore::FileReader::abort):
        * fileapi/FileStreamProxy.cpp:
        (WebCore::FileStreamProxy::startOnFileThread):
        (WebCore::FileStreamProxy::stopOnFileThread):
        (WebCore::FileStreamProxy::getSize):
        (WebCore::FileStreamProxy::getSizeOnFileThread):
        (WebCore::FileStreamProxy::openForRead):
        (WebCore::FileStreamProxy::openForReadOnFileThread):
        (WebCore::FileStreamProxy::openForWrite):
        (WebCore::FileStreamProxy::openForWriteOnFileThread):
        (WebCore::FileStreamProxy::close):
        (WebCore::FileStreamProxy::read):
        (WebCore::FileStreamProxy::readOnFileThread):
        (WebCore::FileStreamProxy::write):
        (WebCore::FileStreamProxy::writeOnFileThread):
        (WebCore::FileStreamProxy::truncate):
        (WebCore::FileStreamProxy::truncateOnFileThread):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::destroy):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::cancel):
        * page/GeolocationPositionCache.cpp:
        (WebCore::GeolocationPositionCache::triggerReadFromDatabase):
        (WebCore::GeolocationPositionCache::triggerWriteToDatabase):
        * platform/CrossThreadCopier.h:
        (WebCore::AllowCrossThreadAccessWrapper::AllowCrossThreadAccessWrapper):
        (WebCore::AllowCrossThreadAccessWrapper::value):
        (WebCore::AllowCrossThreadAccess):
        (WebCore::AllowExtendedLifetimeWrapper::AllowExtendedLifetimeWrapper):
        (WebCore::AllowExtendedLifetimeWrapper::value):
        (WebCore::AllowExtendedLifetime):
        * platform/graphics/chromium/cc/CCCompletionEvent.h:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::get):
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::deleteFunction):
        (WebCore::IDBObjectStoreBackendImpl::clear):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndex):
        (WebCore::IDBObjectStoreBackendImpl::openCursor):
        * storage/SQLCallbackWrapper.h:
        (WebCore::SQLCallbackWrapper::clear):
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::mainThreadCreateWebSocketChannel):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::Bridge):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::connect):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::bufferedAmount):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::close):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::disconnect):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::suspend):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::resume):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject):

2011-04-27  Adam Barth  <abarth@webkit.org>

        Two build fixes from the future.  (Trivial strict OwnPtr fixes.)

        * page/Frame.cpp:
        (WebCore::Frame::setTiledBackingStoreEnabled):
        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::ReverbConvolver):

2011-04-27  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Fix five strict PassOwnPtr violations in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=59640

        * css/MediaList.cpp:
        (WebCore::MediaList::deleteMedium):
        (WebCore::MediaList::setMediaText):
        (WebCore::MediaList::appendMedium):
        * css/MediaQuery.h:
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::disentanglePorts):
        (WebCore::MessagePort::entanglePorts):
        * inspector/InspectorStyleSheet.cpp:
        (ParsedStyleSheet::setText):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::adjustMeterStyle):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustMenuListStyle):
        (WebCore::RenderThemeMac::adjustSliderTrackStyle):
        (WebCore::RenderThemeMac::adjustSliderThumbStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsButtonStyle):

2011-04-27  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/9315254> ARIA role attribute implemented incorrectly; does not support token list with fallbacks
        https://bugs.webkit.org/show_bug.cgi?id=59648

        Test: accessibility/aria-fallback-roles.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::ariaRoleToWebCoreRole):

2011-04-27  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=59671
        Race condition with scrollbar animations and closing a page can cause a crash in 
        WebCore::FrameView::setVisibleScrollerThumbRect + 15
        -and corresponding-
        <rdar://problem/9329253>

        It is definitely possible for Page to be null here. So we should null-check it! 
        And we should not ASSERT.
        * page/FrameView.cpp:
        (WebCore::FrameView::didCompleteRubberBand):
        (WebCore::FrameView::scrollbarStyleChanged):
        (WebCore::FrameView::setVisibleScrollerThumbRect):

2011-04-27  Ryosuke Niwa  <rniwa@webkit.org>

        WinCE build fix after r85143.

        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::TextRunComponent::TextRunComponent):

2011-04-27  Mark Pilgrim  <pilgrim@chromium.org>

        Reviewed by Tony Chang.

        IndexedDB object store delete should fail if key is null
        https://bugs.webkit.org/show_bug.cgi?id=58614

        Test: storage/indexeddb/mozilla/key-requirements-delete-null-key.html

        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::deleteFunction):

2011-04-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Should have an easy way to construct starting BidiStatus for a paragraph root
        https://bugs.webkit.org/show_bug.cgi?id=59226

        Two places try to construct BidiStatuses for a paragraph root using copy/paste code.
        I've made this a constructor for BidiStatus instead.

        As part of this effort I added a direction() accessor for TextRun and got
        rid of the old m_rtl bool.  This is part of the generic effort in the
        Bidi code to replace old bool usage with the superior TextDirection enum
        (this generally makes the code cleaner).

        As part of this replacement effort I found several places which were
        assuming LTR (by passing rtl=false) when they probably want to use
        the current text direction.  I suspect that LTR vs. RTL may affect
        string width in the case of ligatures.  It's unclear.

        This is almost entirely a mechanical change.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawBidiText):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::direction):
        (WebCore::TextRun::rtl):
        (WebCore::TextRun::ltr):
        (WebCore::TextRun::setDirection):
        * platform/text/BidiResolver.h:
        (WebCore::BidiStatus::BidiStatus):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::selectionRect):
        (WebCore::EllipsisBox::paintSelection):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::determineStartPosition):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        (WebCore::RenderFileUploadControl::computePreferredLogicalWidths):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::getAvgCharWidth):
        (WebCore::RenderTextControl::paintPlaceholder):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::constructTextRun):
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::constructTextRun):

2011-04-27  Robert Hogan  <robert@webkit.org>

        Reviewed by Adam Barth.

        Allow shadowing of history object
        https://bugs.webkit.org/show_bug.cgi?id=55965

        Tests: http/tests/history/cross-origin-replace-history-object-child.html
               http/tests/history/cross-origin-replace-history-object.html

        * page/DOMWindow.idl:

2011-04-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Ensure compositing layers are up to date before entering doComposite
        https://bugs.webkit.org/show_bug.cgi?id=59159

        Adds some assertions to try to catch GraphicsLayer mutations at bad times (such as during
        GraphicsLayerClient::paintContents() implementations).

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::~LayerChromium):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateLayers):
        * platform/graphics/chromium/LayerRendererChromium.h:
          Add a set of assertions that we aren't creating or destroying LayerChromiums during paintContents

2011-04-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Fix OwnPtr strict issues in chromium linux build
        https://bugs.webkit.org/show_bug.cgi?id=59664

        * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
        (WebCore::ComplexTextController::getNormalizedTextRun):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::PlatformContextSkia):

2011-04-27  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Make sure to set sample-rate of created AudioBus in AudioBus::createBySampleRateConverting()
        https://bugs.webkit.org/show_bug.cgi?id=59641

        No new tests since audio API is not yet implemented.

        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::createBySampleRateConverting):
        (WebCore::AudioBus::createByMixingToMono):

2011-04-27  Geoffrey Garen  <ggaren@apple.com>

        Motivated by Alexey Proskuryakov.

        * bindings/scripts/CodeGeneratorJS.pm: Tried to make this comment more
        informative, since it confused Alexey and me.

2011-04-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Fixed a small leak related to CSSValues when deallocating a DOMWrapperWorld
        https://bugs.webkit.org/show_bug.cgi?id=59646

        Made the cssValueRoots map per-world, instead of a global. When we deallocate
        a world, we need to clear all entries in the map for that world, since
        the finalizers that would otherwise clear those entries don't run. The
        simplest way to do this is just to make the world own the map.
        
        * bindings/js/DOMWrapperWorld.h:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::getPropertyCSSValue):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::JSCSSValueOwner::isReachableFromOpaqueRoots):
        (WebCore::JSCSSValueOwner::finalize):
        * bindings/js/JSDOMBinding.h:

2011-04-27  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Fix OwnPtr issues in IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=59656

        I didn't do an exhaustive review of this code, but I fixed the problems
        caught by turning on strict OwnPtr and all their antecedents.  This
        patch is entirely tighter bookkeeping.  There shouldn't be any actual
        behavior change.

        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::LevelDBDatabase):
        (WebCore::LevelDBDatabase::open):
        (WebCore::LevelDBDatabase::createIterator):
        * platform/leveldb/LevelDBDatabase.h:
        * platform/leveldb/LevelDBIterator.cpp:
        (WebCore::LevelDBIterator::LevelDBIterator):
        * platform/leveldb/LevelDBIterator.h:
        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::IDBLevelDBBackingStore):
        (WebCore::IDBLevelDBBackingStore::open):
        (WebCore::getNewDatabaseId):
        (WebCore::IDBLevelDBBackingStore::getObjectStores):
        (WebCore::getNewObjectStoreId):
        (WebCore::deleteRange):
        (WebCore::IDBLevelDBBackingStore::nextAutoIncrementNumber):
        (WebCore::IDBLevelDBBackingStore::forEachObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::getIndexes):
        (WebCore::getNewIndexId):
        (WebCore::findGreatestKeyLessThan):
        (WebCore::IDBLevelDBBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBLevelDBBackingStore::keyExistsInIndex):
        (WebCore::findLastIndexKeyEqualTo):
        * storage/IDBLevelDBBackingStore.h:

2011-04-19  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        [Refactoring] DocumentMarkerController::MarkerMapVectorPair should be replaced with a list of some class.
        https://bugs.webkit.org/show_bug.cgi?id=58113

        * Introduced RenderedDocumentMarker, a subclass of DocumentMarker.
        * Eliminated Vector<IntRect> and move the IntRect into RenderedDocumentMarker
        * Now MarkerMapVectorPair is no longer used.
        
        No new tests, No behavior change.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DocumentMarker.h:
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::copyMarkers):
        (WebCore::DocumentMarkerController::removeMarkers):
        (WebCore::DocumentMarkerController::markerContainingPoint):
        (WebCore::DocumentMarkerController::markersForNode):
        (WebCore::DocumentMarkerController::renderedRectsForMarkers):
        (WebCore::DocumentMarkerController::removeMarkersFromList):
        (WebCore::DocumentMarkerController::repaintMarkers):
        (WebCore::DocumentMarkerController::setRenderedRectForMarker):
        (WebCore::DocumentMarkerController::invalidateRenderedRectsForMarkersInRect):
        (WebCore::DocumentMarkerController::shiftMarkers):
        (WebCore::DocumentMarkerController::setMarkersActive):
        (WebCore::DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange):
        (WebCore::DocumentMarkerController::showMarkers):
        * dom/DocumentMarkerController.h:
        * dom/RenderedDocumentMarker.h: Added.
        (WebCore::RenderedDocumentMarker::RenderedDocumentMarker):
        (WebCore::RenderedDocumentMarker::isRendered):
        (WebCore::RenderedDocumentMarker::contains):
        (WebCore::RenderedDocumentMarker::setRenderedRect):
        (WebCore::RenderedDocumentMarker::renderedRect):
        (WebCore::RenderedDocumentMarker::invalidate):
        (WebCore::RenderedDocumentMarker::invalidMarkerRect):

2011-04-27  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r85112.
        http://trac.webkit.org/changeset/85112
        https://bugs.webkit.org/show_bug.cgi?id=59159

        Broke mac compile

        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayers):
        * page/FrameView.h:
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::~LayerChromium):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateLayers):
        * platform/graphics/chromium/LayerRendererChromium.h:

2011-04-27  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * WebCore.xcodeproj/project.pbxproj: Make RenderLayerCompositor.h accessbile to WebKit and WebKit2.

2011-04-27  Pratik Solanki  <psolanki@apple.com>

        Unreviewed. Fix WinCE build. The include should be guarded inside USE(CFNETWORK).

        * platform/network/ResourceHandleClient.h:

2011-04-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Ensure compositing layers are up to date before entering doComposite
        https://bugs.webkit.org/show_bug.cgi?id=59159

        Adds some assertions to try to catch GraphicsLayer mutations at bad times (such as during
        GraphicsLayerClient::paintContents() implementations).

        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayers):
            Add an optional CompositingUpdateType parameter.
        * page/FrameView.h:
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::~LayerChromium):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateLayers):
        * platform/graphics/chromium/LayerRendererChromium.h:
          Add a set of assertions that we aren't creating or destroying LayerChromiums during paintContents
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::dirtyZOrderLists):
        (WebCore::RenderLayer::updateCompositingAndLayerListsIfNeeded):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        * rendering/RenderLayerCompositor.h:
          Fix a typo in CompositingUpdateType Pait->Paint

2011-04-27  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Antti Koivisto.

        Part of WebCore should use CFNetwork-based loader on Mac
        https://bugs.webkit.org/show_bug.cgi?id=51836

        Add willCacheResponse method when using CFNetwork on Mac. Also put appropriate ifdefs around
        willCacheResponse/shouldCacheResponse.

        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoader.h:
        * loader/cf/ResourceLoaderCFNet.cpp:
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willCacheResponse):
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::willCacheResponse):
        (WebCore::ResourceHandleClient::shouldCacheResponse):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willCacheResponse):

2011-04-27  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Brian Weinstein.

        Web Inspector: Stop on Exception state does not persist.

        A wrong property name was used when we persist PauseOnExceptionState property to Local Storage.
        https://bugs.webkit.org/show_bug.cgi?id=59630

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerWasEnabled):
        (WebInspector.ScriptsPanel.prototype._setPauseOnExceptions.callback):
        (WebInspector.ScriptsPanel.prototype._setPauseOnExceptions):

2011-04-27  Adrienne Walker  <enne@google.com>

        [chromium] Unreviewed, rollout r85075 (scissor rect changes)
        https://bugs.webkit.org/show_bug.cgi?id=59020

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):

2011-04-27  Darin Adler  <darin@apple.com>

        Reviewed by David Levin.

        Fix strict OwnPtr issues seen in about 30 more files
        https://bugs.webkit.org/show_bug.cgi?id=59615

        * bindings/js/JSCallbackData.h:
        (WebCore::DeleteCallbackDataTask::create): Use adoptPtr.
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::initMessageEvent): Use adoptPtr.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::updateSpecifiersWithElementName): Use OwnPtr,
        adoptPtr, and release.
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::initMessageEvent): Use OwnPtr, adoptPtr,
        and release.
        * dom/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::EventData::create): Use adoptPtr.
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ProcessMessagesSoonTask::create): Use adoptPtr.
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doEnd): Use adoptPtr.
        * dom/default/PlatformMessagePortChannel.cpp:
        (WebCore::MessagePortChannel::create): Use adoptPtr.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::detach): Use nullptr.
        * inspector/InspectorAgent.cpp:
        (WebCore::PostWorkerNotificationToFrontendTask::create): Use adoptPtr.
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addMessageToConsole): Use adoptPtr.
        (WebCore::InspectorConsoleAgent::didReceiveResponse): Use adoptPtr.
        (WebCore::InspectorConsoleAgent::didFailLoading): Use adoptPtr.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend): Use adoptPtr.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didInvalidateStyleAttr): Use adoptPtr.
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::InspectorResourceAgent): Use adoptPtr.
        * page/FrameActionScheduler.cpp:
        (WebCore::FrameActionScheduler::scheduleEvent): Use adoptPtr.
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::clearScratchBuffer): Use nullptr.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayer::create): Use adoptPtr.
        (WebCore::GraphicsLayerCA::ensureCloneLayers): Use adoptPtr.
        (WebCore::GraphicsLayerCA::removeCloneLayers): Use nullptr.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::setMaxMarginBeforeValues): Use adoptPtr.
        (WebCore::RenderBlock::setMaxMarginAfterValues): Use adoptPtr.
        (WebCore::RenderBlock::setPaginationStrut): Use adoptPtr.
        (WebCore::RenderBlock::setPageLogicalOffset): Use adoptPtr.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::destroyGraphicsLayer): Use nullptr.
        (WebCore::RenderLayerBacking::updateClippingLayers): Use nullptr.
        (WebCore::RenderLayerBacking::updateForegroundLayer): Use nullptr.
        (WebCore::RenderLayerBacking::updateMaskLayer): Use nullptr.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): Use nullptr.
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer): Use nullptr.
        (WebCore::RenderLayerCompositor::destroyRootPlatformLayer): Use nullptr.
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData): Removed
        explicit initializations of OwnPtr members to 0. Use adoptPtr.
        * workers/SharedWorkerContext.cpp:
        (WebCore::createConnectEvent): Use adoptPtr.
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished): Use nullptr.

2011-04-27  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r84311): Copy should preserve background color if specified in the body only if the entire content is selected.
        https://bugs.webkit.org/show_bug.cgi?id=59251
        <rdar://problem/9327044>

        When we are looking for wrapping elements that are presentational, we should
        include elements that have a non transparent background color only if they
        are not blocks.

        Test: editing/pasteboard/do-not-copy-body-color.html

        * editing/markup.cpp:
        (WebCore::isElementPresentational):

2011-04-20  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Antti Koivisto.

        Teach sub-selector chains about shadow descendants
        https://bugs.webkit.org/show_bug.cgi?id=58342

        The primary change is to the logic of parsing specifiers:
        1) The shadow descendant selectors (those specifiers that are unknown
        pseudo element selectors) are always kept at the top of the chain.
        2) The sub-selectors after shadow descendant selectors are stashed right
        behind the sub-selector, but not at the end of the chain.
        3) Other sub-selectors are appended at the end of the chain.

        * css/CSSGrammar.y: Changed specifier_list collection to use new
            CSSParser::updateSpecifier helper.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::updateSpecifiersWithElementName): Added logic to
            look for the last ShadowDescendant relation in the chain of selectors,
            because the next selector after it is the one that should get the
            element name.
        (WebCore::CSSParser::updateSpecifiers): Moved and modified the logic from
            CSSGrammar.y. The new logic adjusts the selector chain to allow
            shadow descendant selectors have sub-selectors (and have multiple shadow
            descendants in the chain).
        * css/CSSParser.h: Added decl.
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::insertTagHistory): Added.
        (WebCore::CSSParserSelector::appendTagHistory): Aded.
        * css/CSSParserValues.h: Added decls.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Added
            shadow descendant selector match check, since now there could be many
            of them in the selector chain.

2011-04-20  Adrienne Walker  <enne@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Fix incorrect scissor rect for layers that render into a rendersurface
        https://bugs.webkit.org/show_bug.cgi?id=59020

        mapRect is the incorrect transform here.  The parent scissor rect
        needs to be projected into layer space instead.

        Test: compositing/flat-with-transformed-child.html

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):

2011-04-27  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Antti Koivisto.

        Part of WebCore should use CFNetwork-based loader on Mac
        https://bugs.webkit.org/show_bug.cgi?id=51836

        * Configurations/WebCore.xcconfig: Add location of CFNetwork.framework.
        * platform/mac/SoftLinking.h:
        * platform/network/cf/CookieJarCFNet.cpp: Soft-link in CFNetwork functions on Mac.

2011-04-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Antti Koivisto.

        Cleanup CSSStyleApplyProperty.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59623

        As first step remove ApplyPropertyColorBase, merge it with ApplyPropertyColor, there's no need for two seperated classes.
        Use typedefs instead of repating the function pointer declarations in a few places.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyDefault::ApplyPropertyDefault):
        (WebCore::ApplyPropertyColor::ApplyPropertyColor):
        (WebCore::ApplyPropertyColor::applyInheritValue):
        (WebCore::ApplyPropertyColor::applyInitialValue):
        (WebCore::ApplyPropertyColor::applyValue):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):

2011-04-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/9335973> REGRESSION (r84341): Buttons in the Mac App store are rendered incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=59622

        Test: fast/borders/border-image-trumps-radius.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::determineBackgroundBleedAvoidance): If there is a renderable, loaded border
        image, then border radius is ignored, so no bleed avoidance is needed.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::borderImageIsLoadedAndCanBeRendered): Added. Moved some logic here from...
        (WebCore::RenderObject::mustRepaintBackgroundOrBorder): ...here.
        * rendering/RenderObject.h:

2011-02-03  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] editing/pasteboard/copy-standalone-image.html fails
        https://bugs.webkit.org/show_bug.cgi?id=53645

        When writing an image to the clipboard, also write the URL and title
        into the markup and URL portion. This change also abstracts a helper
        imageToMarkup into markup.{cpp/h} from several different locations
        throughout the platform layer.

        * editing/markup.h: Added new function definition.
        * editing/markup.cpp:
        (WebCore::imageToMarkup): Add this function which turns an image URL 
        and element into some markup representing that image, while preserving
        non-src attributes.
        * platform/chromium/ClipboardChromium.cpp: Move the imageToMarkup helper
        to markup.cpp.
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::getURLForImageNode): Add this helper which gets the appropriate
        image URL for a variety of image tag types.
        (WebCore::Pasteboard::writeImage): Write the image URL and title to the
        markup and URL portions of the clipboard. This will ensure that images
        paste properly back into WebKit.
        * platform/win/ClipboardWin.cpp: Remove the imageToMarkup helper and the
        one from markup.h

2011-04-27  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Remove Android build system
        https://bugs.webkit.org/show_bug.cgi?id=48111

        This is to avoid the maintenance burden until the Android port is
        fully upstreamed.

        No new tests, build change only.

        * Android.derived.jscbindings.mk: Removed.
        * Android.derived.mk: Removed.
        * Android.derived.v8bindings.mk: Removed.
        * Android.jscbindings.mk: Removed.
        * Android.mk: Removed.
        * Android.v8bindings.mk: Removed.

2011-04-27  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Somehow about:blank gets into the icon database
        https://bugs.webkit.org/show_bug.cgi?id=58067
        rdar://problem/6751446

        Implemented the policy Brady suggested, where only http and https URLs can
        be associated with and icon, guarding both on the way in to the database,
        and on the way out.

        * loader/icon/IconDatabase.cpp:
        (WebCore::pageCanHaveIcon): Added.
        (WebCore::IconDatabase::synchronousIconForPageURL): Call pageCanHaveIcon
        instead of just checking for an empty URL.
        (WebCore::IconDatabase::synchronousIconURLForPageURL): Ditto.
        (WebCore::IconDatabase::retainIconForPageURL): Ditto.
        (WebCore::IconDatabase::releaseIconForPageURL): Ditto.
        (WebCore::IconDatabase::setIconURLForPageURL): Ditto.
        (WebCore::IconDatabase::getOrCreatePageURLRecord): Ditto.
        (WebCore::IconDatabase::importIconURLForPageURL): Broke assertion into
        two separate assertions and added a third.
        (WebCore::IconDatabase::performURLImport): Call pageCanHaveIcon.

        * platform/KURL.cpp: Sorted includes. Moved a FIXME to the top of the file.
        (WebCore::isLetterMatchIgnoringCase): Renamed matchLetter to this name,
        overloaded it to work on both UChar and char, and added an assertion to it.
        Also moved this to the top of the file and made the UChar version usable
        in the shared code used even by Google.
        (WebCore::KURL::invalidate): Updated for name change.
        (WebCore::KURL::protocolIs): Use isLetterMatchIgnoringCase instead of
        toASCIILower since it's faster.
        (WebCore::KURL::parse): Updated for name changes.
        (WebCore::protocolIs):Use isLetterMatchIgnoringCase instead of toASCIILower
        since it's faster.
        (WebCore::protocolIsInHTTPFamily): Added.

        * platform/KURL.h: Tweaked formatting. Renamed protocolInHTTPFamily
        to protocolIsInHTTPFamily and added a version that works on a string.
        Kept the old name as an inline function so we don't have to rename
        all the cal sites now.

        * platform/KURLGoogle.cpp: Renamed as above.
        (WebCore::KURLGooglePrivate::KURLGooglePrivate): Updated for rename.
        (WebCore::KURLGooglePrivate::setUtf8): Ditto.
        (WebCore::KURLGooglePrivate::setAscii): Ditto.
        (WebCore::KURLGooglePrivate::initProtocolIsInHTTPFamily): Ditto.
        (WebCore::KURLGooglePrivate::copyTo): Ditto.
        (WebCore::KURL::KURL): Ditto.
        (WebCore::KURL::protocolIsInHTTPFamily): Ditto.
        (WebCore::KURL::invalidate): Ditto.
        * platform/KURLGooglePrivate.h: Ditto.

        * WebCore.exp.in: Updated for above changes.

2011-04-27  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: browser crash on evaluation of 'throw undefined'
        https://bugs.webkit.org/show_bug.cgi?id=59611

        Test: inspector/console/console-eval-throw-undefined.html

        * inspector/InjectedScriptSource.js: use try/catch to protect from
        exception during conversion of another exception to string.

2011-04-27  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: clicking bookmarklet multiplies resources panel entries.
        https://bugs.webkit.org/show_bug.cgi?id=59590

        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype._processCachedResources):
        (WebInspector.ResourceTreeModel.prototype._frameNavigated):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._populateResourceTree):
        (WebInspector.FrameTreeElement):
        (WebInspector.FrameTreeElement.prototype.appendResource):
        * inspector/front-end/inspector.js:
        (WebInspector.frontendReused):

2011-04-27  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: opening bookmarklet disconnects DOM agent.
        https://bugs.webkit.org/show_bug.cgi?id=59588

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setDocument):

2011-04-27  Hans Wennborg  <hans@chromium.org>

        Reviewed by Tony Gentilcore.

        IndexedDB: Fix compiler warnings about uninitialized variables
        https://bugs.webkit.org/show_bug.cgi?id=59599

        Build fix. No new tests.

        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::getNewObjectStoreId):
        (WebCore::getNewIndexId):

2011-04-26  Hans Wennborg  <hans@chromium.org>

        Reviewed by Tony Gentilcore.

        IndexedDB: Move LevelDB key coding routines to separate file
        https://bugs.webkit.org/show_bug.cgi?id=59452

        Move all routines concerned with encoding, decoding and comparison of
        LevelDB keys from IDBLevelDBBackingStore.cpp to a separate file:
        IDBLevelDBCoding.cpp.

        This makes IDBLevelDBBackingStore.cpp easier to work with, and will
        allow for unit testing of the coding routines.

        No new functionality, no new tests.

        * WebCore.gypi:
        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::getInt):
        (WebCore::putInt):
        (WebCore::getString):
        (WebCore::putString):
        (WebCore::compareKeys):
        (WebCore::compareIndexKeys):
        (WebCore::Comparator::compare):
        (WebCore::setUpMetadata):
        (WebCore::IDBLevelDBBackingStore::extractIDBDatabaseMetaData):
        (WebCore::getNewDatabaseId):
        (WebCore::IDBLevelDBBackingStore::setIDBDatabaseMetaData):
        (WebCore::IDBLevelDBBackingStore::getObjectStores):
        (WebCore::getNewObjectStoreId):
        (WebCore::IDBLevelDBBackingStore::createObjectStore):
        (WebCore::IDBLevelDBBackingStore::deleteObjectStore):
        (WebCore::IDBLevelDBBackingStore::getObjectStoreRecord):
        (WebCore::getNewVersionNumber):
        (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::clearObjectStore):
        (WebCore::IDBLevelDBBackingStore::deleteObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::nextAutoIncrementNumber):
        (WebCore::IDBLevelDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBLevelDBBackingStore::forEachObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::getIndexes):
        (WebCore::getNewIndexId):
        (WebCore::IDBLevelDBBackingStore::createIndex):
        (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord):
        (WebCore::versionExists):
        (WebCore::IDBLevelDBBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBLevelDBBackingStore::keyExistsInIndex):
        (WebCore::IDBLevelDBBackingStore::openObjectStoreCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexKeyCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexCursor):
        * storage/IDBLevelDBCoding.cpp: Added.
        (WebCore::IDBLevelDBCoding::encodeByte):
        (WebCore::IDBLevelDBCoding::maxIDBKey):
        (WebCore::IDBLevelDBCoding::minIDBKey):
        (WebCore::IDBLevelDBCoding::encodeInt):
        (WebCore::IDBLevelDBCoding::decodeInt):
        (WebCore::IDBLevelDBCoding::encodeVarInt):
        (WebCore::IDBLevelDBCoding::decodeVarInt):
        (WebCore::IDBLevelDBCoding::encodeString):
        (WebCore::IDBLevelDBCoding::decodeString):
        (WebCore::IDBLevelDBCoding::encodeStringWithLength):
        (WebCore::IDBLevelDBCoding::decodeStringWithLength):
        (WebCore::IDBLevelDBCoding::encodeDouble):
        (WebCore::IDBLevelDBCoding::decodeDouble):
        (WebCore::IDBLevelDBCoding::encodeIDBKey):
        (WebCore::IDBLevelDBCoding::decodeIDBKey):
        (WebCore::IDBLevelDBCoding::extractEncodedIDBKey):
        (WebCore::IDBLevelDBCoding::compareEncodedIDBKeys):
        (WebCore::IDBLevelDBCoding::compare):
        (WebCore::IDBLevelDBCoding::KeyPrefix::KeyPrefix):
        (WebCore::IDBLevelDBCoding::KeyPrefix::decode):
        (WebCore::IDBLevelDBCoding::KeyPrefix::encode):
        (WebCore::IDBLevelDBCoding::KeyPrefix::compare):
        (WebCore::IDBLevelDBCoding::KeyPrefix::type):
        (WebCore::IDBLevelDBCoding::SchemaVersionKey::encode):
        (WebCore::IDBLevelDBCoding::MaxDatabaseIdKey::encode):
        (WebCore::IDBLevelDBCoding::DatabaseFreeListKey::DatabaseFreeListKey):
        (WebCore::IDBLevelDBCoding::DatabaseFreeListKey::decode):
        (WebCore::IDBLevelDBCoding::DatabaseFreeListKey::encode):
        (WebCore::IDBLevelDBCoding::DatabaseFreeListKey::databaseId):
        (WebCore::IDBLevelDBCoding::DatabaseFreeListKey::compare):
        (WebCore::IDBLevelDBCoding::DatabaseNameKey::decode):
        (WebCore::IDBLevelDBCoding::DatabaseNameKey::encode):
        (WebCore::IDBLevelDBCoding::DatabaseNameKey::compare):
        (WebCore::IDBLevelDBCoding::DatabaseMetaDataKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::ObjectStoreMetaDataKey):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::decode):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::objectStoreId):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::metaDataType):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::compare):
        (WebCore::IDBLevelDBCoding::IndexMetaDataKey::IndexMetaDataKey):
        (WebCore::IDBLevelDBCoding::IndexMetaDataKey::decode):
        (WebCore::IDBLevelDBCoding::IndexMetaDataKey::encode):
        (WebCore::IDBLevelDBCoding::IndexMetaDataKey::compare):
        (WebCore::IDBLevelDBCoding::IndexMetaDataKey::indexId):
        (WebCore::IDBLevelDBCoding::ObjectStoreFreeListKey::ObjectStoreFreeListKey):
        (WebCore::IDBLevelDBCoding::ObjectStoreFreeListKey::decode):
        (WebCore::IDBLevelDBCoding::ObjectStoreFreeListKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreFreeListKey::objectStoreId):
        (WebCore::IDBLevelDBCoding::ObjectStoreFreeListKey::compare):
        (WebCore::IDBLevelDBCoding::IndexFreeListKey::IndexFreeListKey):
        (WebCore::IDBLevelDBCoding::IndexFreeListKey::decode):
        (WebCore::IDBLevelDBCoding::IndexFreeListKey::encode):
        (WebCore::IDBLevelDBCoding::IndexFreeListKey::compare):
        (WebCore::IDBLevelDBCoding::IndexFreeListKey::objectStoreId):
        (WebCore::IDBLevelDBCoding::IndexFreeListKey::indexId):
        (WebCore::IDBLevelDBCoding::ObjectStoreNamesKey::decode):
        (WebCore::IDBLevelDBCoding::ObjectStoreNamesKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreNamesKey::compare):
        (WebCore::IDBLevelDBCoding::IndexNamesKey::IndexNamesKey):
        (WebCore::IDBLevelDBCoding::IndexNamesKey::decode):
        (WebCore::IDBLevelDBCoding::IndexNamesKey::encode):
        (WebCore::IDBLevelDBCoding::IndexNamesKey::compare):
        (WebCore::IDBLevelDBCoding::ObjectStoreDataKey::decode):
        (WebCore::IDBLevelDBCoding::ObjectStoreDataKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreDataKey::compare):
        (WebCore::IDBLevelDBCoding::ObjectStoreDataKey::userKey):
        (WebCore::IDBLevelDBCoding::ExistsEntryKey::decode):
        (WebCore::IDBLevelDBCoding::ExistsEntryKey::encode):
        (WebCore::IDBLevelDBCoding::ExistsEntryKey::compare):
        (WebCore::IDBLevelDBCoding::ExistsEntryKey::userKey):
        (WebCore::IDBLevelDBCoding::IndexDataKey::IndexDataKey):
        (WebCore::IDBLevelDBCoding::IndexDataKey::decode):
        (WebCore::IDBLevelDBCoding::IndexDataKey::encode):
        (WebCore::IDBLevelDBCoding::IndexDataKey::encodeMaxKey):
        (WebCore::IDBLevelDBCoding::IndexDataKey::compare):
        (WebCore::IDBLevelDBCoding::IndexDataKey::databaseId):
        (WebCore::IDBLevelDBCoding::IndexDataKey::objectStoreId):
        (WebCore::IDBLevelDBCoding::IndexDataKey::indexId):
        (WebCore::IDBLevelDBCoding::IndexDataKey::userKey):
        * storage/IDBLevelDBCoding.h: Added.
        (WebCore::IDBLevelDBCoding::DatabaseNameKey::origin):
        (WebCore::IDBLevelDBCoding::DatabaseNameKey::databaseName):
        (WebCore::IDBLevelDBCoding::IndexMetaDataKey::metaDataType):
        (WebCore::IDBLevelDBCoding::ObjectStoreNamesKey::objectStoreName):
        (WebCore::IDBLevelDBCoding::IndexNamesKey::indexName):

2011-04-27  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: expose exception details when script is paused on exception
        https://bugs.webkit.org/show_bug.cgi?id=59591

        When script is paused on an exception, the exception value is added as <exception>
        property in the local scope and the breakpoint details message says
        "Paused on excepion: '<exception to strin value>'."

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerPaused.else.didGetSourceLocation):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):

2011-04-26  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [protocol] Paused event should expose exception value that caused it
        https://bugs.webkit.org/show_bug.cgi?id=58996

        Debug.pause event now contains an optional reference to the exception
        object in case script execution is paused on a JavaScript exception.

        Also JavaScript call frames are passed directly into the injected script when
        we need to wrap them for passing to the front-end. This change breaks cyclic
        dependency ScriptDebugServer->InspectorDebuggerAgent->InjectedScript->InjectedScriptHost->ScriptDebugServer

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidPause):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::breakProgram):
        (WebCore::ScriptDebugServer::editScriptSource):
        (WebCore::ScriptDebugServer::breakProgramCallback):
        (WebCore::ScriptDebugServer::handleV8DebugEvent):
        * bindings/v8/ScriptDebugServer.h:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::wrapCallFrames):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::init):
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        (WebCore::InspectorDebuggerAgent::wrapCallFrames):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::didContinue):
        (WebCore::InspectorDebuggerAgent::clear):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/ScriptDebugListener.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):

2011-04-27  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: implement incremental CSS editing in the structure view.
        https://bugs.webkit.org/show_bug.cgi?id=59455

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):

2011-04-27  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Eric Seidel.

        Frame.h shouldn't include Document.h
        https://bugs.webkit.org/show_bug.cgi?id=59560

        Frame can use a forward-declared Document if we move
        Frame::displayStringModifiedByEncoding's implementation out of the
        header.
                                Size  #includes  Size * #includes
        Before: page/Frame.h:   0.746       653           487.138
                dom/Document.h: 0.220      1306           287.320
        
        After:  page/Frame.h:   0.646       653           421.838
                dom/Document.h: 0.220      1189           261.580

        * WebCore.exp.in:
        * bindings/ScriptControllerBase.cpp:
        * bindings/generic/BindingSecurityBase.cpp:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        * dom/CharacterData.cpp:
        * dom/UserTypingGestureIndicator.cpp:
        * editing/chromium/SelectionControllerChromium.cpp:
        * inspector/InspectorDOMStorageResource.cpp:
        * inspector/InspectorInstrumentation.h:
        * loader/PingLoader.cpp:
        * loader/SubresourceLoader.cpp:
        * loader/appcache/DOMApplicationCache.cpp:
        * loader/cache/CachedResourceRequest.cpp:
        * page/Frame.cpp:
        (WebCore::Frame::displayStringModifiedByEncoding):
        * page/Frame.h:
        * page/Geolocation.cpp:
        * page/Location.cpp:
        * page/Navigator.cpp:
        * page/PageGroupLoadDeferrer.cpp:
        * page/PerformanceTiming.cpp:
        * xml/XSLTProcessorLibxslt.cpp:

2011-04-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Eric Seidel.

        Fix OwnPtr strict errors in RenderStyle and make StyleRareInheritedData::textShadow an OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59377

        This cleans up some strict OwnPtr<> violations around text and box shadow data.  ShadowData's linked list data
        structure now uses OwnPtr<>s to manage memory - each entry in the list has ownership of the next ShadowData.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):
        (WebCore::PropertyWrapperShadow::PropertyWrapperShadow):
        (WebCore::PropertyWrapperShadow::blend):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setTextShadow):
        (WebCore::RenderStyle::setBoxShadow):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::textShadow):
        * rendering/style/ShadowData.cpp:
        (WebCore::ShadowData::ShadowData):
        * rendering/style/ShadowData.h:
        (WebCore::ShadowData::ShadowData):
        (WebCore::ShadowData::next):
        (WebCore::ShadowData::setNext):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::~StyleRareInheritedData):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):

2011-04-26  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        Fix some strict PassOwnPtr issues in WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=59563

        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create):
        (WebCore::WebGLRenderingContext::~WebGLRenderingContext):
        * platform/text/TextCodecLatin1.cpp:
        (WebCore::newStreamingTextDecoderWindowsLatin1):
        * platform/text/TextCodecUTF16.cpp:
        (WebCore::newStreamingTextDecoderUTF16LE):
        (WebCore::newStreamingTextDecoderUTF16BE):
        * platform/text/TextCodecUserDefined.cpp:
        (WebCore::newStreamingTextDecoderUserDefined):
        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::newTextCodecMac):
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):

2011-04-26  Justin Novosad  <junov@chromium.org>

        Reviewed by Kenneth Russell.

        [Chromium] Expose skia gpu canvas rendering as a runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=58683
        Replace the SKIA_GPU compile flag by the pre-existing
        acceleratedDrawingEnabled flag. Most code changes are trivial:
        compile-time conditionals on SKIA_GPU were either replaced with
        a run-time check, or a compile time check on USE(SKIA) 

        No new tests. Covered by existing tests.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setGlobalCompositeOperation):
        * page/Page.cpp:
        (WebCore::Page::sharedGraphicsContext3D):
        Added check for the acceleratedDrawing flag.
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::publishToPlatformLayer):
        * platform/graphics/gpu/DrawingBuffer.h:
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):
        On Skia builds, this methos now receives a bool arg to turn on
        GPU-accelerated skia rendering
        (WebCore::SharedGraphicsContext3D::SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::~SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::grContext):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::computeResamplingMode):
        (WebCore::paintSkBitmap):
        (WebCore::Image::drawPattern):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::PlatformContextSkia):
        (WebCore::PlatformContextSkia::~PlatformContextSkia):
        (WebCore::PlatformContextSkia::isNativeFontRenderingAllowed):
        (WebCore::PlatformContextSkia::setSharedGraphicsContext3D):
        (WebCore::PlatformContextSkia::prepareForSoftwareDraw):
        (WebCore::PlatformContextSkia::prepareForHardwareDraw):
        (WebCore::PlatformContextSkia::syncSoftwareCanvas):
        (WebCore::PlatformContextSkia::markDirtyRect):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::accelerationMode):
        (WebCore::PlatformContextSkia::useGPU):
        (WebCore::PlatformContextSkia::useSkiaGPU):

2011-04-26  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: restore inspector test disabled in r84913.

        Test: http/tests/inspector-enabled/dom-storage-open.html

        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::clearFrontend):

2011-04-26  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed by Tony Chang.

        [Chromium] Vertical positions are off for some Arabic glyphs on Linux
        https://bugs.webkit.org/show_bug.cgi?id=59182

        Use vertical offsets of the shaping results.

        Test: platform/chromium-linux/fast/text/international/arabic-vertical-offset.html

        * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
        (WebCore::ComplexTextController::ComplexTextController):
        Added initialization of m_startingY.
        (WebCore::ComplexTextController::nextScriptRun):
        Followed the change in handling positions.
        (WebCore::ComplexTextController::deleteGlyphArrays): Ditto.
        (WebCore::ComplexTextController::createGlyphArrays): Ditto.
        (WebCore::ComplexTextController::resetGlyphArrays): Ditto.
        (WebCore::ComplexTextController::setGlyphPositions):
        Changed to use vertical offsets as same as horizontal offsets.
        * platform/graphics/chromium/ComplexTextControllerLinux.h:
        Removed m_xPositions and Added m_positions and m_startingY.
        (WebCore::ComplexTextController::positions): Added.
        * platform/graphics/chromium/FontLinux.cpp:
        Followed the change in ComplexTextController.
        (WebCore::Font::drawComplexText): Ditto.
        (WebCore::Font::floatWidthForComplexText): Ditto.
        (WebCore::glyphIndexForXPositionInScriptRun): Ditto.
        (WebCore::Font::offsetForPositionForComplexText): Ditto.
        (WebCore::Font::selectionRectForComplexText): Ditto.

2011-04-26  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Root element should establish a new block formatting context
        https://bugs.webkit.org/show_bug.cgi?id=54573

        Always expanding the root renderer to include overhanging floats.

        Test: fast/block/float/float-overhangs-root.html

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

2011-04-26  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Andreas Kling.

        [Qt] Improper rendering of <button> tag when it contains a <br>
        https://bugs.webkit.org/show_bug.cgi?id=50521

        Test: platform/qt/fast/forms/button-line-break.html

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQt::setButtonPadding):

2011-04-26  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Only reset tiles if the LayerRendererChromium is actually changing
        https://bugs.webkit.org/show_bug.cgi?id=59572

        http://trac.webkit.org/changeset/84981/ caused us to reset the tiles
        when LayerRendererChromium was set.  We set this pointer every frame
        and should only reset the tiles if the new LayerRendererChromium is
        different from the old one (indicating a context loss), not just reset
        on every frame.

        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::setLayerRenderer):
        * platform/graphics/chromium/LayerTilerChromium.h:

2011-04-26  Dinesh K Garg  <dineshg@codeaurora.org>

        Reviewed by Eric Seidel.

        beginElement broken by setAttribute
        https://bugs.webkit.org/show_bug.cgi?id=26019

        Test: svg/animations/animate-beginElementAt.svg

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::attributeChanged):
        Reset the animation state here as the rest of the code reads it and would still
        think we are animating when we are not.

        * svg/animation/SVGSMILElement.h:
        (WebCore::SVGSMILElement::setInactive): Helper function to reset the state.

2011-04-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84989.
        http://trac.webkit.org/changeset/84989
        https://bugs.webkit.org/show_bug.cgi?id=59566

        REGRESSION (r84989): Lots of vertical text tests failing on
        windows (Requested by weinig on #webkit).

        * platform/graphics/FontPlatformData.h:
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2011-04-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Eric Seidel.

        Try again:
            Remove JSDOMWrapperWithGlobalPointer now that all JSDOMWrappers have global objects
            https://bugs.webkit.org/show_bug.cgi?id=59310

        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::globalObject):
        (WebCore::JSDOMWrapper::scriptExecutionContext):
        (WebCore::JSDOMWrapper::createStructure):
        (WebCore::JSDOMWrapper::JSDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:

2011-04-26  Sam Weinig  <sam@webkit.org>

        Reviewed by David Hyatt.

        Remove Datagrid from the tree
        https://bugs.webkit.org/show_bug.cgi?id=59543

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * CMakeLists.txt:
        * CodeGenerators.pri:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDataGridColumnListCustom.cpp: Removed.
        * bindings/js/JSDataGridDataSource.cpp: Removed.
        * bindings/js/JSDataGridDataSource.h: Removed.
        * bindings/js/JSHTMLDataGridElementCustom.cpp: Removed.
        * bindings/v8/V8DataGridDataSource.cpp: Removed.
        * bindings/v8/V8DataGridDataSource.h: Removed.
        * bindings/v8/custom/V8DataGridColumnListCustom.cpp: Removed.
        * bindings/v8/custom/V8HTMLDataGridElementCustom.cpp: Removed.
        * css/CSSStyleSelector.cpp:
        * css/CSSStyleSelector.h:
        * css/html.css:
        (input, textarea, keygen, select, button, isindex):
        (select:disabled, keygen:disabled, optgroup:disabled, option:disabled):
        * editing/htmlediting.cpp:
        (WebCore::canHaveChildrenForEditing):
        * features.pri:
        * html/DOMDataGridDataSource.cpp: Removed.
        * html/DOMDataGridDataSource.h: Removed.
        * html/DataGridColumn.cpp: Removed.
        * html/DataGridColumn.h: Removed.
        * html/DataGridColumn.idl: Removed.
        * html/DataGridColumnList.cpp: Removed.
        * html/DataGridColumnList.h: Removed.
        * html/DataGridColumnList.idl: Removed.
        * html/DataGridDataSource.h: Removed.
        * html/HTMLDataGridCellElement.cpp: Removed.
        * html/HTMLDataGridCellElement.h: Removed.
        * html/HTMLDataGridCellElement.idl: Removed.
        * html/HTMLDataGridColElement.cpp: Removed.
        * html/HTMLDataGridColElement.h: Removed.
        * html/HTMLDataGridColElement.idl: Removed.
        * html/HTMLDataGridElement.cpp: Removed.
        * html/HTMLDataGridElement.h: Removed.
        * html/HTMLDataGridElement.idl: Removed.
        * html/HTMLDataGridRowElement.cpp: Removed.
        * html/HTMLDataGridRowElement.h: Removed.
        * html/HTMLDataGridRowElement.idl: Removed.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::ieForbidsInsertHTML):
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLTagNames.in:
        * page/DOMWindow.idl:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::sizesToIntrinsicLogicalWidth):
        * rendering/RenderDataGrid.cpp: Removed.
        * rendering/RenderDataGrid.h: Removed.
        * rendering/RenderingAllInOne.cpp:

2011-04-26  Chun-Lung Huang  <alvincl.huang@gmail.com>

        Reviewed by Adele Peterson.

        On WebKit (Windows), glyphs in vertical text tests are rotated 90
        degrees clockwise.  https://bugs.webkit.org/show_bug.cgi?id=48459

        This platform dependent patch makes WebKit (Windows) show the
        vertical writing text correctly.  Job was done by adding a prefix '@'
        in front of the font family name (Windows Only). No new tests added.
        Some layout tests images:
        http://www.flickr.com/photos/burorly/sets/72157625585506341/

        * platform/graphics/FontPlatformData.h:
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2011-04-26  Jer Noble  <jer.noble@apple.com>

        Reviewed by Brady Eidson.

        HTML5 video fullscreen transition causes an audio stutter
        https://bugs.webkit.org/show_bug.cgi?id=59544

        AVFoundation will momentarily stutter when you disconnect a AVPlayerLayer 
        from its AVPlayer.  Since you shouldn't necessarily have to destroy the
        layer to render it invisible, instead just set the layer as hidden.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::setVisible): Call through to platformSetVisible().
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformSetVisible): Added.

2011-04-26  Christian Dywan  <christian@lanedo.com>

        Reviewed by Eric Seidel.

        Extra separator after Select All in context menu
        https://bugs.webkit.org/show_bug.cgi?id=54092

        * page/ContextMenuController.cpp: Move separator to non-GTK+
            port guards since it is for the spelling options menu
            which the GTK+ port doesn't use.

2011-04-26  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Clear out LayerTilerChromium's tiles on lost context
        https://bugs.webkit.org/show_bug.cgi?id=59233

        Clears out the LayerTilerChromium's tile set when the LayerRendererChromium is reset.  In this case the tiles are
        no longer valid since they exist in the previous LayerRendererChromium.

        Will be tested by a chrome test since we don't have any way to exercise the context lost case in layout tests.

        * platform/graphics/chromium/LayerTilerChromium.h:
        (WebCore::LayerTilerChromium::setLayerRenderer):

2011-04-26  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Dirk Schulze.

        [GTK] Flash in divs with overflow: auto is not positioned and clipped properly
        https://bugs.webkit.org/show_bug.cgi?id=57644

        Manual test: plugins/windowed-in-iframe-2.html

        * manual-tests/plugins/windowed-in-iframe-2.html: Added.
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::setFrameRect): Like the Qt port, we notify the widget via frameRectsChanged.
        * plugins/PluginView.h: Added helper method to set the allocation and clip.
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):Call the helper method instead of setting
        the allocation immediately. Bring this method into sync with the implementation in
        the Qt port.
        (WebCore::PluginView::updateWidgetAllocationAndClip): Added.
        (WebCore::PluginView::plugAddedCallback): Call the new helper method.

2011-04-26  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK]  fast/block/float/overhanging-tall-block.html crashes in the bots
        https://bugs.webkit.org/show_bug.cgi?id=58818

        Prevent allocating scratch buffers larger than the target GdkDrawable
        when creating a WidgetRenderingContext. This prevents incredibly large
        widgets from crashing the X Server. This change also allowed greatly
        simplifying the way that the painting offset is calculated.

        * platform/gtk/WidgetRenderingContext.cpp:
        (WebCore::WidgetRenderingContext::WidgetRenderingContext): Never allocate a pixmap
        larger than the target GdkDrawable.
        (WebCore::WidgetRenderingContext::~WidgetRenderingContext): Calculate the offset of the
        blit by looking at the location of the target rect itself, rather than delaying the
        calculation up to this point.
        (WebCore::WidgetRenderingContext::calculateClipRect): Added.
        (WebCore::WidgetRenderingContext::gtkPaintBox): Use the new calculateClipRectHelper.
        (WebCore::WidgetRenderingContext::gtkPaintFlatBox): Ditto.
        (WebCore::WidgetRenderingContext::gtkPaintFocus): Ditto.
        (WebCore::WidgetRenderingContext::gtkPaintSlider): Ditto.
        (WebCore::WidgetRenderingContext::gtkPaintCheck): Ditto.
        (WebCore::WidgetRenderingContext::gtkPaintOption): Ditto.
        (WebCore::WidgetRenderingContext::gtkPaintShadow): Ditto.
        (WebCore::WidgetRenderingContext::gtkPaintArrow): Ditto.
        (WebCore::WidgetRenderingContext::gtkPaintVLine): Ditto.
        * platform/gtk/WidgetRenderingContext.h: Remove some now unused members. Add
        a member to store the IntSize mapping from the coordinates of the target to the coordinates
        of the scratch buffer.

2011-04-26  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Respect charset in handleDataURL
        https://bugs.webkit.org/show_bug.cgi?id=47746

        Original patch by Kwang Yul Seo <skyul@company100.net>

        We must use TextEncoding(charset) to encode data URL again. Otherwise TextEncoding::encode()
        returns an empty string because encoding name is not specified.

        Also use "US-ASCII" as fallback charset as extractCharsetFromMediaType can be empty.

        This change fixes over 130 layout tests when running GTK port with cURL network backend.

        * platform/network/DataURL.cpp:
        (WebCore::handleDataURL):

2011-04-26  Anders Carlsson  <andersca@apple.com>

        Fix clang++ build.

        You can never have too many casts!

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper position]):
        * editing/mac/SelectionControllerMac.mm:
        (WebCore::accessibilityConvertScreenRect):

2011-04-26  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Fix web audio build on mac port
        https://bugs.webkit.org/show_bug.cgi?id=59355

        No new tests since audio API is not yet implemented.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContext::visitChildren):
        * bindings/js/JSJavaScriptAudioNodeCustom.cpp:
        (WebCore::JSJavaScriptAudioNode::visitChildren):
        * webaudio/AudioContext.idl:

2011-04-26  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add FFTFrame implementation for FFmpeg
        https://bugs.webkit.org/show_bug.cgi?id=59408

        No new tests since audio API is not yet implemented.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/audio/FFTFrame.h:
        * platform/audio/FFTFrameStub.cpp:
        * platform/audio/ffmpeg: Added.
        * platform/audio/ffmpeg/FFTFrameFFMPEG.cpp: Added.
        (WebCore::FFTFrame::FFTFrame):
        (WebCore::FFTFrame::initialize):
        (WebCore::FFTFrame::cleanup):
        (WebCore::FFTFrame::~FFTFrame):
        (WebCore::FFTFrame::multiply):
        (WebCore::FFTFrame::doFFT):
        (WebCore::FFTFrame::doInverseFFT):
        (WebCore::FFTFrame::realData):
        (WebCore::FFTFrame::imagData):
        (WebCore::FFTFrame::getUpToDateComplexData):
        (WebCore::FFTFrame::contextForSize):
        * platform/audio/mac/FFTFrameMac.cpp:
        * webaudio/ConvolverNode.cpp:

2011-04-26  Jeff Miller  <jeffm@apple.com>

        Add a newline at the end of SVGFEDropShadowElement.idl.

        * svg/SVGFEDropShadowElement.idl:

2011-04-26  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Eric Seidel.

        InlineBox.h shouldn't include RenderBR.h
        https://bugs.webkit.org/show_bug.cgi?id=59480

        Per bug 59348 RenderBR.h is a "top header" by include * size, because
        InlineBox.h includes it. There's no reason why it has to.

        * rendering/InlineBox.h:
        * rendering/InlineTextBox.cpp:
        * rendering/RenderBlock.h:

2011-04-26  Sam Weinig  <sam@webkit.org>

        Nope, roll out r84950 and r84952. Working on a laptop is clearly not something
        I should do.

        * bindings/js/JSDOMBinding.h:
        (WebCore::JSDOMWrapperWithGlobalPointer::globalObject):
        (WebCore::JSDOMWrapperWithGlobalPointer::scriptExecutionContext):
        (WebCore::JSDOMWrapperWithGlobalPointer::createStructure):
        (WebCore::JSDOMWrapperWithGlobalPointer::JSDOMWrapperWithGlobalPointer):
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::JSDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:

2011-04-26  Sam Weinig  <sam@webkit.org>

        Fix build.

        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::globalObject):

2011-04-26  Sam Weinig  <sam@webkit.org>

        Roll r84945 back in with infinite recursion removed.

        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::globalObject):
        (WebCore::JSDOMWrapper::scriptExecutionContext):
        (WebCore::JSDOMWrapper::createStructure):
        (WebCore::JSDOMWrapper::JSDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:

2011-04-26  Sam Weinig  <sam@webkit.org>

        Rollout previous patch. It broke stuff.

        * bindings/js/JSDOMBinding.h:
        (WebCore::JSDOMWrapperWithGlobalPointer::globalObject):
        (WebCore::JSDOMWrapperWithGlobalPointer::scriptExecutionContext):
        (WebCore::JSDOMWrapperWithGlobalPointer::createStructure):
        (WebCore::JSDOMWrapperWithGlobalPointer::JSDOMWrapperWithGlobalPointer):
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::JSDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:

2011-04-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Remove JSDOMWrapperWithGlobalPointer now that all JSDOMWrappers have global objects
        https://bugs.webkit.org/show_bug.cgi?id=59310

        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::globalObject):
        (WebCore::JSDOMWrapper::scriptExecutionContext):
        (WebCore::JSDOMWrapper::createStructure):
        (WebCore::JSDOMWrapper::JSDOMWrapper):
        Merge JSDOMWrapperWithGlobalPointer with JSDOMWrapper.

        * bindings/scripts/CodeGeneratorJS.pm:
        Make JSDOMWrapper the base class.

2011-04-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        Choose the compiler based on the Xcode version for Snow Leopard debug builds.

        * Configurations/Base.xcconfig:
        * Configurations/CompilerVersion.xcconfig: Added.

2011-04-26  Adrienne Walker  <enne@google.com>

        Reviewed by Geoffrey Garen.

        Use OwnArrayPtr<T> instead of OwnPtr<T*> in ScopeTracer
        https://bugs.webkit.org/show_bug.cgi?id=59469

        * platform/chromium/TraceEvent.h:
        (WebCore::internal::ScopeTracer::ScopeTracer):

2011-04-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Nixed special finalizer handling for WebCore strings
        https://bugs.webkit.org/show_bug.cgi?id=59425

        Not needed anymore, since weak handles have finalizers.

        * WebCore.exp.in: Exports!

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::JSStringOwner::finalize):
        (WebCore::DOMWrapperWorld::DOMWrapperWorld): Use a weak handle finalizer,
        so we don't need special treatment anymore.

        * bindings/js/DOMWrapperWorld.h:
        (WebCore::JSStringOwner::JSStringOwner):
        (WebCore::DOMWrapperWorld::stringWrapperOwner): Use a HashMap of Weak<T>
        instead of a WeakGCMap, so we can specify a custom finalizer.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsStringSlowCase):
        * bindings/js/JSDOMBinding.h:
        (WebCore::jsString): Updated for string map change.

2011-04-26  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/59372> Restore user default for enabling HTTP pipelining

        Reviewed by Antti Koivisto.

        To enable HTTP pipelining post-SnowLeopard, use this command:

            defaults write BUNDLE.ID WebKitEnableHTTPPipelining -bool YES

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::readBooleanPreference): Re-added.  Originally added in
        r76756 and removed in r84120.
        (WebCore::initializeMaximumHTTPConnectionCountPerHost): Enable
        HTTP pipelining if use default is set to true.  Added macro
        guards to match those in ResourceRequestMac.mm.

2011-04-26  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele Peterson.

        Don't strip fragments from file: urls in memory cache
        https://bugs.webkit.org/show_bug.cgi?id=59463
        <rdar://problem/9231130>

        Some clients expect file: resources to be unique based on fragment identifier. 
        Limit the changes in http://trac.webkit.org/changeset/74107 to the HTTP protocol only

        Test: fast/loader/file-protocol-fragment.html

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

2011-04-26  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        Fix more strict OwnPtr in WebCore (round N).
        https://bugs.webkit.org/show_bug.cgi?id=59464

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::attach):
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::terminate):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::preflightFailure):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerConnectTask::create):
        (WebCore::SharedWorkerScriptLoader::load):

2011-04-26  Ruben  <chromium@hybridsource.org>

        Reviewed by Tony Chang.

        Change linux ifdefs for Chromium to Unix instead, allowing
        new Unix ports to be enabled by default
        https://bugs.webkit.org/show_bug.cgi?id=59297

        No new tests, just changing preprocessor defines.

        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        * dom/SelectElement.cpp:
        * loader/cache/CachedFont.cpp:
        * page/EventHandler.cpp:
        * page/chromium/EventHandlerChromium.cpp:
        * platform/Scrollbar.cpp:
        * platform/chromium/PlatformBridge.h:
        * platform/graphics/chromium/FontPlatformData.h:
        * platform/graphics/skia/FontCustomPlatformData.cpp:
        * platform/graphics/skia/FontCustomPlatformData.h:

2011-04-26  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Dan Bernstein.

        [RTL] Arabic/AB - after typing a date, cursors doesn't go back
        https://bugs.webkit.org/show_bug.cgi?id=49111

        Even when the offset corresponds to a position visually left of the box
        and there aren't any inline boxes on the left, the previous/next position
        may still correspond to some position in the same line.

        The bug was caused by our ignoring such cases. Fixed the bug by comparing
        previous/next position's inline box to the current box. If they match,
        then we stay on the same position because moving to the left visually at
        the left edge should not result in a position on the same line.

        Also fixed a bug that WebKit uses offsets that are not extrema when moved to
        the left edge or to the right edge, and a bug that WebKit could not move to
        the left from 12^3 CBA abc to 123 C^BA abc (there is no offset between 3 and C).

        Test cases are added to editing/selection/move-left-right.html

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate):

2011-04-26  Gabor Loki  <loki@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Speeding up SVG filters with multicore (SMP) support
        https://bugs.webkit.org/show_bug.cgi?id=43903

        Some SVG filters execute a huge number of pixel manipulations, which
        cannot be sped up by graphics accelerators, since their algorithm is
        too complex. Using the power of Symmetric Multi Processing (SMP) we
        can split up a task to smaller (data independent) tasks, which can be
        executed independently.

        The ParallelJobs framework provides a simple way for distributed
        programming. The framework is based on WebKit's threading infrastructure,
        Open Multi-Processing's (OpenMP) API, and libdispatch API.

        * ForwardingHeaders/wtf/ParallelJobs.h: Added.
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::PaintingData::PaintingData):
        (WebCore::FETurbulence::noise2D):
        (WebCore::FETurbulence::calculateTurbulenceValueForPoint):
        (WebCore::FETurbulence::fillRegion):
        (WebCore::FETurbulence::fillRegionWorker):
        (WebCore::FETurbulence::apply):
        * platform/graphics/filters/FETurbulence.h:

2011-04-26  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: close button is off in docked mode on a mac.
        https://bugs.webkit.org/show_bug.cgi?id=59453

        * inspector/front-end/inspector.css:
        (.toolbar-item.close-left):

2011-04-26  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: New Style is not working (UI glitch)
        https://bugs.webkit.org/show_bug.cgi?id=59451

        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::setFrontend):
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.getStyles):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.externalStylesheetsReceived):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.inlineStylesReceived):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.cssBeforeInlineReceived):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.lateStylesReceived):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector.callback):
        (WebInspector.CSSStyleModel.prototype.addRule):
        (WebInspector.CSSStyleModel.prototype.addRule.callback):
        (WebInspector.CSSStyleModel.prototype._documentElementId):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype._addAttribute):
        (WebInspector.DOMNode.prototype.documentElement):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.PageDispatcher.prototype.frameDetached):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._createNewRule):

2011-04-26  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: introduce DOMStorage::enable and disable.
        https://bugs.webkit.org/show_bug.cgi?id=59445

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::restore):
        (WebCore::InspectorDOMStorageAgent::enable):
        (WebCore::InspectorDOMStorageAgent::disable):
        * inspector/InspectorDOMStorageAgent.h:
        (WebCore::InspectorDOMStorageAgent::create):
        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorageDispatcher.prototype.addDOMStorage):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._reset):
        * inspector/front-end/inspector.js:

2011-04-26  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: extract Page agent dispatcher into the ResourceTreeModel.
        https://bugs.webkit.org/show_bug.cgi?id=59440

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::setFrontend):
        (WebCore::InspectorPageAgent::frameNavigated):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel):
        (WebInspector.AuditsPanel.prototype._onLoadEventFired):
        (WebInspector.AuditsPanel.prototype._domContentLoadedEventFired):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModelResourceBinding):
        (WebInspector.CSSStyleModelResourceBinding.prototype._inspectedURLChanged):
        * inspector/front-end/DOMBreakpointsSidebarPane.js:
        (WebInspector.DOMBreakpointsSidebarPane):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._inspectedURLChanged):
        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorageDispatcher.prototype.addDOMStorage):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._inspectedURLChanged):
        (WebInspector.ExtensionServer.prototype.initExtensions):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype._onLoadEventFired):
        (WebInspector.NetworkPanel.prototype._domContentLoadedEventFired):
        (WebInspector.NetworkPanel.prototype._frameNavigated):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype._processCachedResources):
        (WebInspector.ResourceTreeModel.prototype._dispatchInspectedURLChanged):
        (WebInspector.ResourceTreeModel.prototype._frameNavigated):
        (WebInspector.ResourceTreeModel.prototype._frameDetached):
        (WebInspector.ResourceTreeModel.prototype._clearChildFramesAndResources):
        (WebInspector.PageDispatcher):
        (WebInspector.PageDispatcher.prototype.domContentEventFired):
        (WebInspector.PageDispatcher.prototype.loadEventFired):
        (WebInspector.PageDispatcher.prototype.frameNavigated):
        (WebInspector.PageDispatcher.prototype.frameDetached):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype._onLoadEventFired):
        (WebInspector.ResourcesPanel.prototype._frameNavigated):
        * inspector/front-end/inspector.js:

2011-04-26  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed rollout r84877 and StyleRareInheritedData.cpp changes of r84892,
        because it broke transitions/multiple-text-shadow-transition.html

        Fix OwnPtr strict errors in RenderStyle and make StyleRareInheritedData::textShadow an OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59377

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/animation/AnimationBase.cpp:
        (WebCore::PropertyWrapperShadow::PropertyWrapperShadow):
        (WebCore::PropertyWrapperShadow::blend):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setTextShadow):
        (WebCore::RenderStyle::setBoxShadow):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::textShadow):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::~StyleRareInheritedData):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):

2011-04-26  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Turn off make built-in implicit rules for derived sources makefile
        https://bugs.webkit.org/show_bug.cgi?id=59418

        We don't use any of make's built-in implicit rules, turning them off
        speeds up parsing of the makefile.

        * WebCore.xcodeproj/project.pbxproj:
        * gyp/generate-derived-sources.sh:

2011-04-26  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Nikolas Zimmermann.

        ASSERT failure in SVGUseElement
        https://bugs.webkit.org/show_bug.cgi?id=59313

        In SVGUseElement::insertedIntoDocument(), ASSERT(!m_isPendingResource)
        was wrong because the document may not be well-formed.

        This patch asserts the element is not pending on resource or the
        document is not well-formed.

        Test: svg/custom/use-crash-in-non-wellformed-document.svg

        * svg/SVGUseElement.cpp:
        (WebCore::isWellFormedDocument):
        (WebCore::SVGUseElement::insertedIntoDocument):

2011-04-26  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Fix columns resizing in the detailed heap snapshot grids.
        https://bugs.webkit.org/show_bug.cgi?id=59438

        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype._changeView):

2011-04-26  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        Fix a few OwnPtr strict errors in WebCore headers.
        https://bugs.webkit.org/show_bug.cgi?id=59431

        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::prepareEvaluator):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::create):
        * dom/ScriptRunner.h:
        (WebCore::ScriptRunner::create):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::connectFrontend):
        * loader/icon/IconDatabase.h:
        (WebCore::IconDatabase::create):
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::verticalRightOrientationFontData):
        (WebCore::SimpleFontData::uprightOrientationFontData):
        (WebCore::SimpleFontData::brokenIdeographFontData):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        * rendering/svg/SVGResources.h:
        (WebCore::SVGResources::ClipperFilterMaskerData::create):
        (WebCore::SVGResources::MarkerData::create):
        (WebCore::SVGResources::FillStrokeData::create):
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::close):
        * workers/WorkerContext.cpp:
        (WebCore::CloseWorkerContextTask::create):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerContextTask::create):
        (WebCore::MessageWorkerTask::create):
        (WebCore::WorkerExceptionTask::create):
        (WebCore::WorkerContextDestroyedTask::create):
        (WebCore::WorkerTerminateTask::create):
        (WebCore::WorkerThreadActivityReportTask::create):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::Task::create):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::create):
        (WebCore::WorkerThreadShutdownFinishTask::create):
        (WebCore::WorkerThreadShutdownStartTask::create):

2011-04-26  Adam Klein  <adamk@chromium.org>

        Reviewed by Adam Barth.

        Fix last strict OwnPtr violation under svg/...
        https://bugs.webkit.org/show_bug.cgi?id=59429

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::removePendingResource):

2011-04-26  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Fix more strict OwnPtr violations in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=59433

        These manifest in the Chromium build.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::editScriptSource):
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::DOMDataStoreHandle::DOMDataStoreHandle):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::precompileScript):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::speechInput):
        * platform/PlatformGestureRecognizer.cpp:
        (WebCore::PlatformGestureRecognizer::create):
        * platform/PlatformGestureRecognizer.h:
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::create):
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::decodeHelper):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::decode):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::decodeAtIndex):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::decode):
        * storage/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::DatabaseTracker::addOpenDatabase):

2011-04-25  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        Fix OwnPtr strict errors in CrossThreadTask.h
        https://bugs.webkit.org/show_bug.cgi?id=59427

        * dom/CrossThreadTask.h:
        (WebCore::CrossThreadTask1::create):
        (WebCore::CrossThreadTask2::create):
        (WebCore::CrossThreadTask3::create):
        (WebCore::CrossThreadTask4::create):
        (WebCore::CrossThreadTask5::create):
        (WebCore::CrossThreadTask6::create):
        (WebCore::CrossThreadTask7::create):
        (WebCore::CrossThreadTask8::create):

2011-04-25  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/9330337> Leak of 'WebCore::ApplyPropertyFillLayer<WebCore::FillSize>'

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty): Don't initialize CSSPropertyWebkitMaskSize twice.
        * css/CSSStyleApplyProperty.h:
        (WebCore::CSSStyleApplyProperty::setPropertyValue): Add some asserts to catch this class of leak.

2011-04-25  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        REGRESSION: a character appears after tab span when typing immediately before the tab span
        https://bugs.webkit.org/show_bug.cgi?id=58132

        Correcting the order of operations we use to avoid inserting into invalid positions in
        ReplaceSelectionCommand to avoid inserting into tab-spans.

        Test: editing/pasteboard/paste-before-tab-span.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Moving positionOutsideTabSpan to after
        positionAvoidingPrecedingNodes, since that function could once again put our position
        inside a tab span.

2011-04-25  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        Fix OwnPtr strict error in ImageBuffer.h
        https://bugs.webkit.org/show_bug.cgi?id=59422

        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Fix strict OwnPtr violations and whitelist known-tricky files
        https://bugs.webkit.org/show_bug.cgi?id=59421

        With this patch, WebCore builds cleanly with strict OwnPtrs.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::MessagePort):
        * dom/XMLDocumentParserLibxml2.cpp:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::ContextMenuController):
        (WebCore::ContextMenuController::clearContextMenu):
        * page/PluginHalter.cpp:
        * platform/graphics/MediaPlayer.cpp:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::adopt):
        (WebCore::ResourceRequestBase::copyData):
        * svg/SVGDocumentExtensions.cpp:

2011-04-25  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        Fix OwnPtr strict errors in DatasetDOMStringMap.h.
        https://bugs.webkit.org/show_bug.cgi?id=59419

        * dom/DatasetDOMStringMap.h:
        (WebCore::DatasetDOMStringMap::create):

2011-04-25  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Eric Seidel.

        KeyboardEvent.cpp should work with strict OwnPtrs.
        https://bugs.webkit.org/show_bug.cgi?id=59403

        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):

2011-04-25  James Robinson  <jamesr@chromium.org>

        Reviewed by Eric Seidel.

        Fix OwnPtr strict errors in RenderStyle and make StyleRareInheritedData::textShadow an OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59377

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/animation/AnimationBase.cpp:
        (WebCore::PropertyWrapperShadow::PropertyWrapperShadow):
        (WebCore::PropertyWrapperShadow::blend):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setTextShadow):
        (WebCore::RenderStyle::setBoxShadow):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::textShadow):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::~StyleRareInheritedData):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):

2011-04-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84864.
        http://trac.webkit.org/changeset/84864
        https://bugs.webkit.org/show_bug.cgi?id=59413

        Expect result of use-crash-in-non-wellformed-document.svg is
        platform dependent (Requested by leoyang on #webkit).

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

2011-04-25  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Nikolas Zimmermann.

        ASSERT failure in SVGUseElement
        https://bugs.webkit.org/show_bug.cgi?id=59313

        In SVGUseElement::insertedIntoDocument(), ASSERT(!m_isPendingResource)
        was wrong because the document may not be well-formed.

        This patch asserts the element is not pending on resource or the
        document is not well-formed.

        Test: svg/custom/use-crash-in-non-wellformed-document.svg

        * svg/SVGUseElement.cpp:
        (WebCore::isWellFormedDocument):
        (WebCore::SVGUseElement::insertedIntoDocument):

2011-04-25  Igor Oliveira  <igor.oliveira@openbossa.org>

        Reviewed by Tony Chang.

        Move complexity from DataTransferItemsChromium and DataTransferItemChromium for base class
        https://bugs.webkit.org/show_bug.cgi?id=59028

        The DataTransferItemsChromium and DataTransferItemChromium code can be reused by other platforms.
        Moving the code for base class we can reduce the efforts to support DataTransferItems
        element in different platforms.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DataTransferItem.cpp:
        (WebCore::DataTransferItem::DataTransferItem):
        (WebCore::DataTransferItem::owner):
        (WebCore::DataTransferItem::kind):
        (WebCore::DataTransferItem::type):
        * dom/DataTransferItem.h:
        * dom/DataTransferItems.cpp: Copied from Source/WebCore/platform/chromium/DataTransferItemsChromium.cpp.
        (WebCore::DataTransferItems::DataTransferItems):
        (WebCore::DataTransferItems::length):
        (WebCore::DataTransferItems::item):
        (WebCore::DataTransferItems::deleteItem):
        (WebCore::DataTransferItems::clear):
        (WebCore::DataTransferItems::add):
        * dom/DataTransferItems.h:
        * platform/chromium/DataTransferItemChromium.cpp:
        (WebCore::DataTransferItem::create):
        (WebCore::DataTransferItemChromium::DataTransferItemChromium):
        (WebCore::DataTransferItemChromium::getAsString):
        (WebCore::DataTransferItemChromium::getAsFile):
        * platform/chromium/DataTransferItemChromium.h:
        * platform/chromium/DataTransferItemsChromium.cpp:
        (WebCore::DataTransferItemsChromium::DataTransferItemsChromium):
        * platform/chromium/DataTransferItemsChromium.h:

2011-04-25  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION(75137): directly composited images are double-drawn sometimes
        https://bugs.webkit.org/show_bug.cgi?id=58632

        Depending on the order of operations (layout, creating compositing 
        layers and creating simple image layers) a layer can have both image
        content and have m_drawsContent=true. In this case 2 copies of the image
        are drawn in the layer. If the image has alpha, it looks wrong.

        I added an updateDrawsContent() call after setting the image contents
        to make sure it's correct.

        I couldn't create a test case that shows the problem because layerTreeAsText()
        doesn't emit enough info to show this level of detail. I've opened
        https://bugs.webkit.org/show_bug.cgi?id=59352 to fix that.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateImageContents):

2011-04-25  Kenneth Russell  <kbr@google.com>

        Reviewed by David Levin.

        Fix OwnPtr strict errors in InlineFlowBox.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59392

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::setLayoutOverflow):
        (WebCore::InlineFlowBox::setVisualOverflow):

2011-04-25  Kenneth Russell  <kbr@google.com>

        Reviewed by David Levin.

        Fix OwnPtr strict errors in TransformState.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59380

        * rendering/TransformState.cpp:
        (WebCore::TransformState::applyTransform):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by James Robinson.

        DOMWindow.cpp should work with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59356

        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::fired):
        (WebCore::DOMWindow::postMessageTimerFired):
        * page/DOMWindow.h:

2011-04-25  Adam Klein  <adamk@chromium.org>

        Reviewed by James Robinson.

        Fix OwnPtr strict errors in some SVG classes.
        https://bugs.webkit.org/show_bug.cgi?id=59395

        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleShadowSVGData::StyleShadowSVGData):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::supplementalTransform):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::supplementalTransform):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Re-land changes to ValidationMessage.

        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessage):
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
        (WebCore::ValidationMessage::requestToHideMessage):

2011-04-25  Ojan Vafai  <ojan@chromium.org>

        Reviewed by James Robinson.

        fix OwnPtr strict error in FrameView.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59402

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

2011-04-25  Adam Klein  <adamk@chromium.org>

        Unreviewed, rolling out r84844.
        http://trac.webkit.org/changeset/84844
        https://bugs.webkit.org/show_bug.cgi?id=59395

        Checked in too much.

        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleShadowSVGData::StyleShadowSVGData):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::removePendingResource):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::supplementalTransform):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::supplementalTransform):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-04-25  Adrienne Walker  <enne@google.com>

        Reviewed by David Levin.

        Make ActiveDOMCallback play nice with OwnPtr strict mode
        https://bugs.webkit.org/show_bug.cgi?id=59398

        * bindings/generic/ActiveDOMCallback.cpp:
        (WebCore::ActiveDOMCallback::ActiveDOMCallback):

2011-04-25  Adam Klein  <adamk@chromium.org>

        Reviewed by James Robinson.

        Fix OwnPtr strict errors in some SVG classes.
        https://bugs.webkit.org/show_bug.cgi?id=59395

        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleShadowSVGData::StyleShadowSVGData):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::supplementalTransform):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::supplementalTransform):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-04-25  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r84835.
        http://trac.webkit.org/changeset/84835
        https://bugs.webkit.org/show_bug.cgi?id=59394

        Breaks compile because Deque<OwnPtr> doesn't work

        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::PendingCallbacks::~PendingCallbacks):
        (WebCore::PendingCallbacks::appendStartElementNSCallback):
        (WebCore::PendingCallbacks::appendEndElementNSCallback):
        (WebCore::PendingCallbacks::appendCharactersCallback):
        (WebCore::PendingCallbacks::appendProcessingInstructionCallback):
        (WebCore::PendingCallbacks::appendCDATABlockCallback):
        (WebCore::PendingCallbacks::appendCommentCallback):
        (WebCore::PendingCallbacks::appendInternalSubsetCallback):
        (WebCore::PendingCallbacks::appendErrorCallback):
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessage):
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
        (WebCore::ValidationMessage::requestToHideMessage):

2011-04-25  James Robinson  <jamesr@chromium.org>

        Reviewed by Sam Weinig.

        Fix OwnPtr strict mode violation in ImageBufferCG
        https://bugs.webkit.org/show_bug.cgi?id=59396

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2011-04-25  Huang Dongsung  <luxtella@company100.net>

        Reviewed by Dirk Schulze.

        [Skia] Remove an unused local variable in PlatformContextSkia::readbackHardwareToSoftware().
        https://bugs.webkit.org/show_bug.cgi?id=59308

        An unused local variable is created and even allocates heap memory.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::readbackHardwareToSoftware):

2011-04-25  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix: Updated files not used by other ports for rename.

        * bindings/js/JSTouchCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSTouchListCustom.cpp:
        (WebCore::toJSNewlyCreated):

2011-04-25  Adrienne Walker  <enne@google.com>

        Reviewed by David Levin.

        WebCore/css/CSS* files should play nice with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59382

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::addProperty):
        (WebCore::CSSParser::parseValue):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by James Robinson.

        ValidationMessage and XMLDocumentParserLibxml2 should play nice with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59394

        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::PendingCallbacks::PendingCallbacks):
        (WebCore::PendingCallbacks::appendStartElementNSCallback):
        (WebCore::PendingCallbacks::appendEndElementNSCallback):
        (WebCore::PendingCallbacks::appendCharactersCallback):
        (WebCore::PendingCallbacks::appendProcessingInstructionCallback):
        (WebCore::PendingCallbacks::appendCDATABlockCallback):
        (WebCore::PendingCallbacks::appendCommentCallback):
        (WebCore::PendingCallbacks::appendInternalSubsetCallback):
        (WebCore::PendingCallbacks::appendErrorCallback):
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessage):
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
        (WebCore::ValidationMessage::requestToHideMessage):

2011-04-25  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Fix OwnPtr strictness issues in WebCore/inspector/
        https://bugs.webkit.org/show_bug.cgi?id=59387

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::ensureSourceData):

2011-04-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Removed XPathNamespace because it was unused
        https://bugs.webkit.org/show_bug.cgi?id=59381
        
        This allows us to make Node::ownerDocument() non-virtual, though it has
        the unhappy side-effect of rebuilding the world.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj: Bye bye dead code.

        * dom/Node.h: Hello fast code!

        * xml/XPathNamespace.cpp: Removed.
        * xml/XPathNamespace.h: Removed.

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        HistoryItemMac should play nice with OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59388

        * history/mac/HistoryItemMac.mm:
        (WebCore::HistoryItem::setTransientProperty):

2011-04-25  David Levin  <levin@chromium.org>

        Reviewed by Kenneth Russell.

        Fix strict OwnPtrs in ContextMenuController.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59375

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::createContextMenu):
        (WebCore::separatorItem):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        CheckedRadioButton should play nice with strict OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59386

        * dom/CheckedRadioButtons.cpp:
        (WebCore::CheckedRadioButtons::addButton):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Resource*.cpp should play nice with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59383

        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::RuntimeMethod):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::copyData):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Page*.cpp and objc_runtime.mm should play nice with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59374

        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::initGroup):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserScriptToWorld):
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        * page/mac/PageMac.cpp:
        (WebCore::Page::addSchedulePair):

2011-04-25  Geoffrey Garen  <ggaren@apple.com>

        Build fix: This time for sure!
        
        * dom/make_names.pl:

2011-04-25  Geoffrey Garen  <ggaren@apple.com>

        Build fix: Let's edit the script instead of the autogenrated file. That
        way, our change will stand the test of time.

        * dom/make_names.pl:

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Fix strict OwnPtrs in HTMLMediaElement and HTTPHeaderMap
        https://bugs.webkit.org/show_bug.cgi?id=59368

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::copyData):

2011-04-25  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Fix strict OwnPtr violations in Render*.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59361

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::finishDelayUpdateScrollInfo):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::addVisualOverflow):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::styleDidChange):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateTransform):
        (WebCore::RenderLayer::paintChildLayerIntoColumns):
        (WebCore::RenderLayer::hitTestChildLayerColumns):
        (WebCore::RenderLayer::ensureBacking):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::styleDidChange):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::compositor):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::addCachedPseudoStyle):
        (WebCore::RenderStyle::accessCounterDirectives):
        (WebCore::RenderStyle::accessAnimations):
        (WebCore::RenderStyle::accessTransitions):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::SVGResources):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Attempt to fix the compile.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::loadWithNextMediaEngine):

2011-04-25  Geoffrey Garen  <ggaren@apple.com>

        Rubber-stamped by Beth Dakin.

        Merged CREATE_DOM_NODE_WRAPPER and CREATE_DOM_OBJECT_WRAPPER into 
        CREATE_DOM_WRAPPER because there's no meaningful difference between
        them anymore.

        * bindings/js/JSCDATASectionCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDocumentCustom.cpp:
        (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::createWrapperInline):
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSTextCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSWebKitCSSMatrixCustom.cpp:
        (WebCore::JSWebKitCSSMatrixConstructor::constructJSWebKitCSSMatrix):
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocketConstructor::constructJSWebSocket):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequestConstructor::constructJSXMLHttpRequest):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessorConstructor::constructJSXSLTProcessor):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by James Robinson.

        HTMLDocumentParser should play nice with OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59363

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by James Robinson.

        Frame.cpp should work with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59360

        * page/Frame.cpp:
        (WebCore::createRegExpForLabels):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Fix strict OwnPtr in Element.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59357

        * dom/NodeRareData.h:
        (WebCore::NodeRareData::ensureEventTargetData):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Fix strict OwnPtr issues in Media*.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59354

        There's still a tricky case in MediaPlayer.cpp, but we'll worry about
        that later.

        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::addListener):
        * dom/Document.cpp:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::createNullMediaPlayer):

2011-04-25  James Robinson  <jamesr@chromium.org>

        Reviewed by David Levin.

        Fix strict OwnPtr violations in ListHashSet and RenderLayerCompositor
        https://bugs.webkit.org/show_bug.cgi?id=59353

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by James Robinson.

        Worker*.cpp should work with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59346

        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::WorkerContext):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::WorkerRunLoop):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::createResourceRequest):

2011-04-25  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Remove bad use of OwnPtr::set() in IconDatabase.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59344

        Needed for strict OwnPtr compliance.

        * loader/icon/IconDatabase.cpp:
        (WebCore::readySQLiteStatement):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        ImageBuffer.h should work with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59341

        This patch is to prepare for the strict OwnPtr hack-a-thon.

        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create):

2011-04-25  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Brian Weinstein.

        WebCore build on Windows should include windows.h in its precompiled header to speed builds
        https://bugs.webkit.org/show_bug.cgi?id=59339

        windows.h is included by several of the underlying wtf headers, including Atomics.h and
        ThreadingPrimitives.h anyway, so include it in the WebCorePrefix.h to speed up compilation.
        
        On my 8 core Mac Pro, this reduces a clean rebuild of debug WebCore from 8 minutes to 7 minutes
        (a 12% speedup).

        * WebCorePrefix.h: Include windows.h

2011-04-25  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Crash in WebCore::FrameView::notifyPageThatContentAreaWillPaint()
        https://bugs.webkit.org/show_bug.cgi?id=59311

        * platform/gtk/MainFrameScrollbarGtk.cpp:
        (MainFrameScrollbarGtk::attachAdjustment): Before connecting an adjustment to a scrollbar
        disconnect any lingering signal handlers. This prevents an adjustment from controlling the
        active ScrollView and some zombie ScrollView.

2011-04-25  Geoffrey Garen  <ggaren@apple.com>

        Another shot at fixing the EFL build.

        * UseJSC.cmake:
        * bindings/js/JSDOMBinding.cpp:

2011-04-25  Geoffrey Garen  <ggaren@apple.com>

        Try to fix EFL build.

        * UseJSC.cmake: Added a missing file.

2011-04-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed a use of markDOMObjectWrapper: ActiveDOMObjects, Workers, and MessagePorts
        https://bugs.webkit.org/show_bug.cgi?id=59333

        * WebCore.xcodeproj/project.pbxproj: Added .idl files for easier editing.

        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::visitChildren): Removed now-unused functions.

        * bindings/scripts/CodeGeneratorJS.pm: Added support for ActiveDOMObject
        lifetime management.

        * dom/Document.idl: No need for a custom mark function anymore, since
        ActiveDOMObjets now manage their own lifetimes.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::hasPendingActivity): Correctly report that we
        have pending activity when we're remotely entangled, instead of relying
        on our clients to know this about us and do the check for us.

        * dom/MessagePort.h: FIXME!

        * dom/MessagePort.idl:
        * fileapi/DOMFileSystem.idl:
        * fileapi/FileReader.idl:
        * fileapi/FileWriter.idl:
        * notifications/Notification.idl:
        * notifications/NotificationCenter.idl:
        * page/EventSource.idl:
        * storage/IDBDatabase.idl:
        * storage/IDBRequest.idl:
        * storage/IDBTransaction.idl:
        * webaudio/AudioContext.idl:
        * websockets/WebSocket.idl:
        * workers/AbstractWorker.idl:
        * workers/SharedWorker.idl:
        * workers/Worker.idl: Opt in to ActiveDOMObject lifetime management.

        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::hasPendingActivity): No need to make up for
        MessagePort::hasPendingActivity being wrong anymore, since it's now right.

        * xml/XMLHttpRequest.idl: Opt in to ActiveDOMObject lifetime management.

2011-04-25  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: worker messages should be routed to corresponding worker front-end
        https://bugs.webkit.org/show_bug.cgi?id=59323

        Added WorkerManager which is responsible for routing messages between
        Page inspector front-end and Worker inspector front-ends.

        * WebCore.gypi:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/WorkerManager.js: Added.
        (WebInspector.WorkerManager):
        (WebInspector.WorkerManager.loaded.InspectorFrontendHost.sendMessageToBackend):
        (WebInspector.WorkerManager.loaded.InspectorFrontendHost.loaded):
        (WebInspector.WorkerManager.loaded):
        (WebInspector.WorkerFrontendStub):
        (WebInspector.WorkerFrontendStub.prototype._receiveMessage):
        (WebInspector.WorkerDispatcher):
        (WebInspector.WorkerDispatcher.prototype._receiveMessage):
        (WebInspector.WorkerDispatcher.prototype.workerCreated):
        (WebInspector.WorkerDispatcher.prototype.dispatchMessageFromWorker):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):

2011-04-25  Annie Sullivan  <sullivan@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Resources panel] Should be easy to copy data.
        https://bugs.webkit.org/show_bug.cgi?id=45662

        Adds context menu items to copy resource location, resource request headers, and resource response headers.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._contextMenu): Add new items to context menu.
        (WebInspector.NetworkPanel.prototype._exportLocation): Copy resource location to clipboard.
        (WebInspector.NetworkPanel.prototype._exportRequestHeaders): Copy resource request headers to clipboard.
        (WebInspector.NetworkPanel.prototype._exportResponseHeaders): Copy resource response headers to clipboard.
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.get requestHeadersText): If _requestHeadersText is undefined, generate it from requestHeaders.
        (WebInspector.Resource.prototype.get responseHeadersText): If _responseHeadersText is undefined, generate it form responseHeaders.

2011-04-25  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: CSS is parsed improperly when saved in UTF-8 with a BOM
        https://bugs.webkit.org/show_bug.cgi?id=59322

        Use TextResourceDecoder to determine external stylesheet charsets correctly.

        Test: inspector/styles/parse-utf8-bom.html

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

2011-04-25  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: Inspector.json cleanup.

        * inspector/Inspector.json:

2011-04-25  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: introduce InspectorWorkerAgent
        https://bugs.webkit.org/show_bug.cgi?id=59320

        InspectorWorkerAgent is responsible for routing inspector messages
        between worker context inspector agents and corresponding worker
        inspector front-end.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::workerAgent):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didStartWorkerContextImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willStartWorkerContext):
        (WebCore::InspectorInstrumentation::didStartWorkerContext):
        * inspector/InspectorWorkerAgent.cpp: Added.
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::WorkerFrontendChannel):
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::~WorkerFrontendChannel):
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::id):
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::inspectorProxy):
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::sendMessageToFrontend):
        (WebCore::InspectorWorkerAgent::create):
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::~InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::setFrontend):
        (WebCore::InspectorWorkerAgent::clearFrontend):
        (WebCore::InspectorWorkerAgent::dispatchMessageOnWorkerInspector):
        (WebCore::InspectorWorkerAgent::didStartWorkerContext):
        * inspector/InspectorWorkerAgent.h: Added.
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::inspectorWorkerAgent):
        (WebCore::InstrumentingAgents::setInspectorWorkerAgent):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::connectFrontend):
        * inspector/generate-inspector-idl:
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):
        * workers/WorkerContextInspectorProxy.h: Added. Platform-specific transport for inspector
        messages sent from the inspected page worker agent to the worker context inspector agents.
        (WebCore::WorkerContextInspectorProxy::connectFrontend):
        (WebCore::WorkerContextInspectorProxy::disconnectFrontend):
        (WebCore::WorkerContextInspectorProxy::sendMessageToWorkerContextInspector):
        (WebCore::WorkerContextInspectorProxy::~WorkerContextInspectorProxy):
        * workers/WorkerContextProxy.h:
        (WebCore::WorkerContextProxy::inspectorProxy):

2011-04-25  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move Frame and Resource Tree management into the Page agent.
        https://bugs.webkit.org/show_bug.cgi?id=59321

        Network agent should only handle network-related activities.
        Frame structure should be managed by the Page agent instead.

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::setFrontend):
        (WebCore::InspectorDOMAgent::restore):
        (WebCore::InspectorDOMAgent::highlightFrame):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl):
        (WebCore::InspectorInstrumentation::loadEventFiredImpl):
        (WebCore::InspectorInstrumentation::frameDetachedFromParentImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::create):
        (WebCore::InspectorPageAgent::resourceContent):
        (WebCore::InspectorPageAgent::resourceContentBase64):
        (WebCore::InspectorPageAgent::resourceData):
        (WebCore::InspectorPageAgent::cachedResource):
        (WebCore::InspectorPageAgent::resourceTypeString):
        (WebCore::InspectorPageAgent::cachedResourceType):
        (WebCore::InspectorPageAgent::cachedResourceTypeString):
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::setFrontend):
        (WebCore::InspectorPageAgent::reload):
        (WebCore::InspectorPageAgent::open):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::deleteCookie):
        (WebCore::InspectorPageAgent::getResourceTree):
        (WebCore::InspectorPageAgent::getResourceContent):
        (WebCore::InspectorPageAgent::restore):
        (WebCore::InspectorPageAgent::domContentEventFired):
        (WebCore::InspectorPageAgent::loadEventFired):
        (WebCore::InspectorPageAgent::frameNavigated):
        (WebCore::InspectorPageAgent::frameDetached):
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorPageAgent::mainFrame):
        (WebCore::pointerAsId):
        (WebCore::InspectorPageAgent::frameForId):
        (WebCore::InspectorPageAgent::frameId):
        (WebCore::InspectorPageAgent::loaderId):
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForCachedResource):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::setInitialScriptContent):
        (WebCore::InspectorResourceAgent::setInitialXHRContent):
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        (WebCore::InspectorResourceAgent::create):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::resourceStyleSheetText):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype.requestContent):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype.frameNavigated):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype.frontendReused):
        (WebInspector.ResourceTreeModel.prototype.frameNavigated):
        (WebInspector.ResourceTreeModel.prototype.frameDetached):
        * inspector/front-end/inspector.js:
        (WebInspector.domContentEventFired):
        (WebInspector.loadEventFired):
        (WebInspector.frameNavigated):
        (WebInspector.frameDetached):

2011-04-25  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: few protocol improvements.
        https://bugs.webkit.org/show_bug.cgi?id=59319

        - Page domain is documented
        - setUserAgentOverride is moved to the Network agent
        - setSearchingForNode -> setInspectModeEnabled
        - highlightDOMNode -> highlightNode
        - reloadPage -> reload
        - openInNewWindow -> open with optional parameter

        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setInspectModeEnabled):
        (WebCore::InspectorDOMAgent::highlightNode):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::hideNodeHighlight):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::applyUserAgentOverrideImpl):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::clearFrontend):
        (WebCore::InspectorPageAgent::reload):
        (WebCore::InspectorPageAgent::open):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::clearFrontend):
        (WebCore::InspectorResourceAgent::applyUserAgentOverride):
        (WebCore::InspectorResourceAgent::setUserAgentOverride):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype._reloadResources):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.setSearchingForNode):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onReload):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._openInNewTab):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype.ondblclick):
        * inspector/front-end/inspector.js:
        (WebInspector.highlightDOMNode):
        (WebInspector.openResource):
        (WebInspector.documentKeyDown):

2011-04-25  Jon Lee  <jonlee@apple.com>

        Reviewed by Maciej Stachowiak.

        Overlay scroller hard to see on pages with dark background (59183)
        https://bugs.webkit.org/show_bug.cgi?id=59183
        <rdar://problem/8975367>

        Switch the scrollbar's overlay style depending on its frame's background color.
        This refactors the getDocumentBackgroundColor method needed for gestures. The style
        is determined and set on every paint() call to the Mac scrollbar theme.

        * WebCore.exp.in: adding method to allow changing style
        * page/Frame.cpp:
        (WebCore::Frame::getDocumentBackgroundColor): moving code from WebFrame for reuse by FrameView
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::recommendedScrollbarOverlayStyle): overridden to suggest a style based on CSS background color
        * page/FrameView.h:
        * platform/ScrollTypes.h: new enum to represent different overlay scrollbar styles
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::recommendedScrollbarOverlayStyle): new virtual function to return a suggested overlay style
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2011-04-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9113516> REGRESSION (WK2): Holding down Option while dragging scrollbar thumb has no effect (should make scroll distance equal mouse translation)
        https://bugs.webkit.org/show_bug.cgi?id=59315

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar): Initialize new member variables.
        (WebCore::Scrollbar::moveThumb): Added a boolean draggingDocument parameter. When true, the document
        is scrolled a distance equal to the change in the mouse position.
        (WebCore::Scrollbar::mouseMoved): Check with the theme whether the mouse move event should drag
        the document rather than the thumb, and pass the result to moveThumb.
        (WebCore::Scrollbar::mouseUp): Reset m_draggingDocument.
        * platform/Scrollbar.h:
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::shouldDragDocumentInsteadOfThumb): Added. The base class implementation
        returns false.
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::shouldDragDocumentInsteadOfThumb): Overridden to return true if the
        Option key is down.

2011-04-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Removed a use of markDOMObjectWrapper: WebGL, XHR, workers; plus, more autogeneration
        https://bugs.webkit.org/show_bug.cgi?id=59307

        * WebCore.xcodeproj/project.pbxproj: Added Blob.idl, so it's easier to edit.

        * bindings/js/JSCSSRuleCustom.cpp:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        * bindings/js/JSDOMApplicationCacheCustom.cpp: Autogenerate these instead
        of hand-coding them.

        * bindings/js/JSDOMBinding.h:
        (WebCore::root): Moved some GC helpers here from JSNodeCustom.h, because
        they're reasonably generic.

        * bindings/js/JSDOMImplementationCustom.cpp:
        * bindings/js/JSDOMStringMapCustom.cpp:
        * bindings/js/JSDOMTokenListCustom.cpp:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        * bindings/js/JSMediaListCustom.cpp: Autogenerate these instead of
        hand-coding them.

        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::visitChildren):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::visitChildren): Use addOpaqueRoot instead of
        markDOMObjectWrapper. This is one of the few cases where a DOM object is
        considered a stand-alone root. It's not as efficient as the shared root
        case, but workers and message ports are very rare objects, so it's no
        big deal.

        * bindings/js/JSNamedNodeMapCustom.cpp: Autogenerate!

        * bindings/js/JSNodeCustom.h: Moved to JSDOMBinding.h.

        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::JSSharedWorker::visitChildren): Use addOpaqueRoot instead of
        markDOMObjectWrapper, as above. Once again, a stand-alone root.

        * bindings/js/JSStyleSheetCustom.cpp:
        * bindings/js/JSStyleSheetListCustom.cpp: Autogenerate!

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::visitChildren): Use the opaque roots
        system for marking WebGL contexts and their associated satellite objects.

        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::visitChildren):
        * bindings/js/JSXMLHttpRequestCustom.cpp: Use addOpaqueRoot instead of
        markDOMObjectWrapper, as above. Once again, stand-alone roots.

        (WebCore::JSXMLHttpRequest::visitChildren):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp: No need to mark our owner
        XHR because it is not reachable from us.

        * bindings/scripts/CodeGeneratorJS.pm: Added autogeneration support for a
        bunch of repetitive cases of isReachableFromOpaqueRoots callbacks.

        * css/CSSRule.idl:
        * css/CSSStyleDeclaration.idl:
        * css/MediaList.idl:
        * css/StyleMedia.idl:
        * css/StyleSheet.idl:
        * css/StyleSheetList.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMStringMap.idl:
        * dom/MessagePort.idl:
        * dom/NamedNodeMap.idl:
        * fileapi/Blob.idl:
        * html/DOMTokenList.idl: Opt in to autogeneration.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext): Standardized on PassOwnPtr/OwnPtr
        usage, to reduce human error and make ownership rules more obvious.

        * html/HTMLCollection.idl:
        * html/canvas/ArrayBuffer.idl: Opt in to autogeneration.

        * html/canvas/CanvasRenderingContext.cpp:
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::ref):
        (WebCore::CanvasRenderingContext::deref):
        * html/canvas/CanvasRenderingContext2D.h:
        (WebCore::CanvasRenderingContext2D::create):
        (WebCore::CanvasRenderingContext2D::state): Standardized on PassOwnPtr/OwnPtr
        usage, to reduce human error and make ownership rules more obvious.
        
        Inlined some functions to match our standard idiom and to make the code
        in the header document itself.

        * html/canvas/CanvasRenderingContext.idl: Opt in to autogeneration.

        * html/canvas/OESStandardDerivatives.cpp:
        (WebCore::OESStandardDerivatives::OESStandardDerivatives):
        (WebCore::OESStandardDerivatives::create):
        * html/canvas/OESStandardDerivatives.h:
        * html/canvas/OESStandardDerivatives.idl:
        * html/canvas/OESTextureFloat.cpp:
        (WebCore::OESTextureFloat::OESTextureFloat):
        (WebCore::OESTextureFloat::create):
        * html/canvas/OESTextureFloat.h:
        * html/canvas/OESTextureFloat.idl:
        * html/canvas/OESVertexArrayObject.cpp:
        (WebCore::OESVertexArrayObject::OESVertexArrayObject):
        (WebCore::OESVertexArrayObject::create):
        * html/canvas/OESVertexArrayObject.h:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/WebGLExtension.cpp:
        (WebCore::WebGLExtension::WebGLExtension):
        * html/canvas/WebGLExtension.h:
        (WebCore::WebGLExtension::ref):
        (WebCore::WebGLExtension::deref):
        (WebCore::WebGLExtension::context):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::~WebGLRenderingContext):
        (WebCore::WebGLRenderingContext::getExtension):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebKitLoseContext.cpp:
        (WebCore::WebKitLoseContext::WebKitLoseContext):
        (WebCore::WebKitLoseContext::create):
        (WebCore::WebKitLoseContext::loseContext):
        * html/canvas/WebKitLoseContext.h:
        * html/canvas/WebKitLoseContext.idl: Updated the ownership model for WebGL
        canavs rendering contexts to match the model for 2D canvas rendering
        contexts. This makes garbage collection a lot more straightforward, but
        it also makes the behavior of these objects more reliable. (Previously,
        satellite objects would magically stop working when the last reference
        to their owner object was dropped. Now, satellite objects keep their owner
        alive through reference counting.)

        * loader/appcache/DOMApplicationCache.idl:
        * page/BarInfo.idl:
        * page/Console.idl:
        * page/DOMSelection.idl:
        * page/Geolocation.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/Navigator.idl:
        * page/Screen.idl:
        * page/WorkerNavigator.idl:
        * plugins/DOMMimeTypeArray.h:
        (WebCore::DOMMimeTypeArray::frame):
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPluginArray.h:
        (WebCore::DOMPluginArray::frame):
        * plugins/DOMPluginArray.idl:
        * storage/Storage.idl:
        * workers/WorkerLocation.idl: Opt in to autogeneration.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::~XMLHttpRequest):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::scriptExecutionContext):
        * xml/XMLHttpRequestUpload.h:
        (WebCore::XMLHttpRequestUpload::create):
        (WebCore::XMLHttpRequestUpload::ref):
        (WebCore::XMLHttpRequestUpload::deref):
        (WebCore::XMLHttpRequestUpload::xmlHttpRequest):
        (WebCore::XMLHttpRequestUpload::toXMLHttpRequestUpload):
        * xml/XMLHttpRequestUpload.idl: Updated the ownership model for XHR and
        its associated upload object to match the model for canvas. This makes
        garbage collection a lot more straightforward, but it also makes the
        behavior of these objects more reliable.

2011-04-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84759.
        http://trac.webkit.org/changeset/84759
        https://bugs.webkit.org/show_bug.cgi?id=59306

        Caused gc-shadow.html to start crashing in V8. (Requested by
        dglazkov|away on #webkit).

        * dom/Node.cpp:
        (WebCore::NodeRendererFactory::createRendererAndStyle):
        (WebCore::Node::styleForRenderer):

2011-04-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by George Staikos.

        Handling of URLs like http:/example.com/ is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=59300
        <rdar://problem/9231956>

        URLs like http:/example.com/ or http:example.com/ are now correctly
        canonicalized as http://example.com/
        
        The code still doesn't quite match other browsers - at least some
        other browsers seem to base parsing behavior on whether they
        recongize a scheme from a fixed list, and ignore whether // is
        present in the URL or not.
        
        * platform/KURL.cpp:
        (WebCore::isNonFileHierarchicalScheme): New helper function.
        (WebCore::KURL::parse): For a particular list of whitelisted schemes,
        assume they are hierarchical and need an authority even if there is no //
        after the :/

2011-04-24  Dan Bernstein  <mitz@apple.com>

        LLVM Compiler build fix.

        * page/ContentSecurityPolicy.cpp: Removed an unused function.

2011-04-24  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        Crash when adding a text node to a shadow root
        https://bugs.webkit.org/show_bug.cgi?id=59304

        Text nodes need to consult their host element for style.

        Test: fast/dom/shadow/append-child-text.html

        * dom/Node.cpp:
        (WebCore::NodeRendererFactory::styleForRenderer):
        (WebCore::NodeRendererFactory::createRendererAndStyle):
        (WebCore::Node::styleForRenderer): forward to NodeRendererFactory

2011-04-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Update Content-Security-Policy syntax to match new version of spec
        https://bugs.webkit.org/show_bug.cgi?id=59291

        Brandon removed disable-xss-protection in favor of unsafe-inline and
        allow-eval in favor of unsafe-eval.  This change in syntax also means
        the options directive no longer exists.

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPSourceList::allowInline):
        (WebCore::CSPSourceList::allowEval):
        (WebCore::CSPSourceList::CSPSourceList):
        (WebCore::CSPSourceList::parseSource):
        (WebCore::CSPSourceList::addSourceUnsafeInline):
        (WebCore::CSPSourceList::addSourceUnsafeEval):
        (WebCore::CSPDirective::allowInline):
        (WebCore::CSPDirective::allowEval):
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs):
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers):
        (WebCore::ContentSecurityPolicy::allowInlineScript):
        (WebCore::ContentSecurityPolicy::allowEval):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:

2011-04-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        Manual test for <rdar://problem/9329741> Reproducible crash in WebChromeClient::invalidateContentsAndWindow() on simonscat.com
        https://bugs.webkit.org/show_bug.cgi?id=59299

        * manual-tests/back-from-document-with-scrollbar.html: Added.

2011-04-24  Rik Cabanier  <cabanier@adobe.com>

        Reviewed by Simon Fraser.

        Tables are not rendered correctly
        https://bugs.webkit.org/show_bug.cgi?id=59138

        Test: fast/table/auto-100-percent-width.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::computePreferredLogicalWidths):

2011-04-23  Simon Fraser  <simon.fraser@apple.com>

        Fix Windows build, which complains about unreachable code.

        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::hasLayerForHorizontalScrollbar):
        (WebCore::ScrollableArea::hasLayerForVerticalScrollbar):
        (WebCore::ScrollableArea::hasLayerForScrollCorner):

2011-04-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Area under composited scrollbars not repainted in WebKit2 on scrolling
        https://bugs.webkit.org/show_bug.cgi?id=59294
        <rdar://problem/9299062>
        
        When computing the rect that can be copied on scrolling, we normally
        exclude the areas occupied by overlay scrollbars to avoid smeared scrollbars;
        the assumption is that other code will repaint these areas. However, when
        scrollbars are in their own compositing layers, we can, and should
        copy the entire area.

        Not testable in DRT because it does not allow tests to use overlay scrollbars.

        * platform/ScrollView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::rectToCopyOnScroll):
        New method, with code moved from scrollContents and fixed to look
        for scrollbars in layers.
        (WebCore::ScrollView::scrollContents):
        Call rectToCopyOnScroll().
        
        * platform/ScrollableArea.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::hasLayerForHorizontalScrollbar):
        (WebCore::ScrollableArea::hasLayerForVerticalScrollbar):
        (WebCore::ScrollableArea::hasLayerForScrollCorner):
        Methods we can call outside of the ACCELERATED_COMPOSITING #ifdef.

2011-04-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84740.
        http://trac.webkit.org/changeset/84740
        https://bugs.webkit.org/show_bug.cgi?id=59290

        change breaks apple internal builds and is incorrect
        (Requested by smfr on #webkit).

        * WebCore.exp.in:
        * page/FrameView.cpp:
        * page/FrameView.h:
        * platform/ScrollTypes.h:
        * platform/ScrollableArea.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2011-04-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/8970549> WebFindOptionsAtWordStarts fails with Japanese words
        https://bugs.webkit.org/show_bug.cgi?id=59288

        * platform/text/mac/TextBoundaries.mm:
        (WebCore::wordStringTokenizer): Added this helper function.
        (WebCore::findNextWordFromIndex): Changed to use a CFStringTokenizer with kCFStringTokenizerUnitWord,
        whose behavior is not locale-dependent.

2011-04-23  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Nodes in shadow DOM should not be GCed while their hosts are alive
        https://bugs.webkit.org/show_bug.cgi?id=59284

        Test: fast/dom/shadow/gc-shadow.html

        * bindings/v8/V8GCController.cpp:
        (WebCore::calculateGroupId): group shadow nodes with their hosts

2011-04-23  MORITA Hajime <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        [Refactoring] NodeRenderParentDetector should be NodeRenderFactory
        https://bugs.webkit.org/show_bug.cgi?id=59280
        
        - Rename NodeRenderParentDetector to NodeRendererFactory
        - move createRendererAndStyle() and createRendererIfNeeded to
          NodeRendererFactory

        No new test, no behavioral change.
        
        * dom/Node.cpp:
        (WebCore::NodeRendererFactory::NodeRendererFactory):
        (WebCore::NodeRendererFactory::document):
        (WebCore::NodeRendererFactory::nextRenderer):
        (WebCore::NodeRendererFactory::findVisualParent):
        (WebCore::NodeRendererFactory::shouldCreateRenderer):
        (WebCore::NodeRendererFactory::createRendererAndStyle):
        (WebCore::NodeRendererFactory::createRendererIfNeeded):
        (WebCore::Node::parentNodeForRenderingAndStyle):
        (WebCore::Node::createRendererIfNeeded):
        * dom/Node.h:
        * html/HTMLDetailsElement.cpp:
        (WebCore::DetailsSummaryElement::detailsElement): Added const_cast due to the chage on parentNodeForRenderingAndStyle() 

2011-04-23  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        REGRESSION: (non-Mac) <meter>'s bar part isn't rendered for with -webkit-writing-mode: vertical-lr from r82899
        https://bugs.webkit.org/show_bug.cgi?id=59281

        Styles for -webkit-meter-bar and -webkit-progress-bar missed width property, which caused unexpected layout results
        for vertical writing modes. This fix added a width property for each of them.
        
        Tests: fast/dom/HTMLMeterElement/meter-writing-mode.html
               fast/dom/HTMLProgressElement/progress-writing-mode.html

        * css/html.css:
        (meter::-webkit-meter-bar):
        (progress::-webkit-progress-bar):

2011-04-23  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Added missing header.
        
        * platform/graphics/filters/FEDropShadow.h:

2011-04-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION (r80812): window.print();window.close() doesn't work in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=59241
        <rdar://problem/9150861>

        Covered by manual-tests/print-after-window-close.html.

        Re-fixing <https://bugs.webkit.org/show_bug.cgi?id=51357> in a way that doesn't cause the
        regression.

        * loader/MainResourceLoader.cpp: (WebCore::MainResourceLoader::didCancel): We shouldn't be
        doing complicated work while the loader is half-canceled.

        * manual-tests/print-after-window-close.html: Extended to actually print a non-empty page,
        thus being more practical.

        * page/Chrome.cpp: (WebCore::Chrome::print): Added a FIXME about a need for PageGroupLoadDeferrer.
        It's too scary for me to try now.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        (WebCore::DOMWindow::finishedLoading):
        * page/DOMWindow.h:
        Reverted the previous fix for <https://bugs.webkit.org/show_bug.cgi?id=51357>.

2011-04-19  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Adam Barth.

        [V8] Use implicit references for V8 listeners on DOM nodes.
        https://bugs.webkit.org/show_bug.cgi?id=58953

        Instead of allocating an auxiliary V8 array referencing V8
        listener objects associated with a DOM node and using an extra
        pointer in every DOM node wrapper, we can register implicit
        references between nodes and their listeners during GC. This also
        makes V8 bindings more aligned with JSC bindings.

        No new tests because this is a refactoring.

        * bindings/scripts/CodeGeneratorV8.pm: Stopped generating the
        listener cache internal field for DOM nodes.
        * bindings/v8/V8AbstractEventListener.h: Exposed the lister handle
        to the GC.
        (WebCore::V8AbstractEventListener::existingListenerObjectPeristentHandle):
        * bindings/v8/V8GCController.cpp: Started using implicit references.
        (WebCore::GrouperVisitor::visitDOMWrapper):
        * dom/EventTarget.h: Implemented an iterator over all listeners.
        (WebCore::EventListenerIterator):

2011-04-22  Jon Lee  <jonlee@apple.com>

        Reviewed by Beth Dakin.

        Overlay scroller hard to see on pages with dark background (59183)
        https://bugs.webkit.org/show_bug.cgi?id=59183
        <rdar://problem/8975367>

        * WebCore.exp.in: adding method to allow changing style
        * page/FrameView.cpp:
        (WebCore::FrameView::recommendedScrollbarOverlayStyle): overridden to suggest a style based on CSS background color
        * page/FrameView.h:
        * platform/ScrollTypes.h: new enum to represent different overlay scrollbar styles
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::recommendedScrollbarOverlayStyle): new virtual function to return a suggested overlay style
        * platform/ScrollableArea.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2011-04-22  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Upgrade CSS loads from mixed content warning (displayed) to mixed
        content error (ran)
        https://bugs.webkit.org/show_bug.cgi?id=59056

        Test: http/tests/security/mixedContent/insecure-css-in-iframe.html
        Test: http/tests/security/mixedContent/insecure-css-in-main-frame.html

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest): CSS loads are running rather than displaying content.

2011-04-22  Geoffrey Garen  <ggaren@apple.com>

        Fixed an upside-down conditional in my last check-in.

        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::isObservable):

2011-04-22  Geoffrey Garen  <ggaren@apple.com>
        
        Rolled back in r84725 and r84728 with appcache crash fixed.

        Reviewed by Oliver Hunt.

        Removed a use of markDOMObjectWrapper: DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=59260

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitChildren): No need to mark explicitly, since
        we use the opaque roots system now.

        * bindings/js/JSNavigatorCustom.cpp: Ditto.

        * bindings/scripts/CodeGeneratorJS.pm: Added autogeneration for objects
        whose opaque roots are frames.

        * css/StyleMedia.h:
        (WebCore::StyleMedia::frame): Added an accessor for the sake of GC.

        * css/StyleMedia.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/BarInfo.idl:
        * page/Console.idl:
        * page/DOMSelection.idl:
        * page/Geolocation.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/Navigator.idl:
        * page/Screen.idl:
        * storage/Storage.idl: Updated to use the opaque roots system.

2011-04-22  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Don't use XMLTreeViewer when script is disabled (it uses Javascript
        to build a prettified version of the xml document).
        https://bugs.webkit.org/show_bug.cgi?id=59113

        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):

2011-04-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84725 and r84728.
        http://trac.webkit.org/changeset/84725
        http://trac.webkit.org/changeset/84728
        https://bugs.webkit.org/show_bug.cgi?id=59270

        It broke http/tests/appcache tests (Requested by Ossy on
        #webkit).

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitChildren):
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::visitChildren):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/StyleMedia.h:
        * css/StyleMedia.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/BarInfo.idl:
        * page/Console.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalScreen):
        (WebCore::DOMWindow::optionalSelection):
        (WebCore::DOMWindow::optionalHistory):
        (WebCore::DOMWindow::optionalCrypto):
        (WebCore::DOMWindow::optionalLocationbar):
        (WebCore::DOMWindow::optionalMenubar):
        (WebCore::DOMWindow::optionalPersonalbar):
        (WebCore::DOMWindow::optionalScrollbars):
        (WebCore::DOMWindow::optionalStatusbar):
        (WebCore::DOMWindow::optionalToolbar):
        (WebCore::DOMWindow::optionalConsole):
        (WebCore::DOMWindow::optionalNavigator):
        (WebCore::DOMWindow::optionalLocation):
        (WebCore::DOMWindow::optionalMedia):
        (WebCore::DOMWindow::optionalSessionStorage):
        (WebCore::DOMWindow::optionalLocalStorage):
        (WebCore::DOMWindow::optionalPerformance):
        * page/Geolocation.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/Navigator.h:
        (WebCore::Navigator::optionalGeolocation):
        * page/Navigator.idl:
        * page/Screen.idl:
        * storage/Storage.idl:

2011-04-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        Change SVG-related shadow root checks to use isSVGShadowRoot.
        https://bugs.webkit.org/show_bug.cgi?id=59237

        Covered by existing tests, no behavior change.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector): Use isSVGShadowRoot.
        * svg/SVGUseElement.cpp:
        (WebCore::ShadowTreeUpdateBlocker::while): Ditto.
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::insertedIntoDocument): Ditto.

2011-04-22  Geoffrey Garen  <ggaren@apple.com>

        Mac build fix.

        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalApplicationCache): Restored this function,
        which is used after all.

2011-04-22  Geoffrey Garen  <ggaren@apple.com>

        Mac build fix.

        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalApplicationCache): Restored this function,
        which is used after all.

2011-04-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed a use of markDOMObjectWrapper: DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=59260

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitChildren): No need to mark explicitly, since
        we use the opaque roots system now.

        * bindings/js/JSNavigatorCustom.cpp: Ditto.

        * bindings/scripts/CodeGeneratorJS.pm: Added autogeneration for objects
        whose opaque roots are frames.

        * css/StyleMedia.h:
        (WebCore::StyleMedia::frame): Added an accessor for the sake of GC.

        * css/StyleMedia.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/BarInfo.idl:
        * page/Console.idl:
        * page/DOMSelection.idl:
        * page/Geolocation.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/Navigator.idl:
        * page/Screen.idl:
        * storage/Storage.idl: Updated to use the opaque roots system.

2011-04-22  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Ryosuke Niwa.

        move caret by word in visual order returns wrong result when caret itself is at word boundary.
        https://bugs.webkit.org/show_bug.cgi?id=58504.

        positionBeforeNextWord should take care that the current position is after current word.
        positionAfterPreviousWord should take care that the current positin is before current word.

        * editing/visible_units.cpp:
        (WebCore::positionBeforeNextWord):
        (WebCore::positionAfterPreviousWord):

2011-04-19  Jer Noble  <jer.noble@apple.com>

        Reviewed by Daniel Bates.

        Full Screen from within an <iframe> does not cause <iframe> to resize.
        https://bugs.webkit.org/show_bug.cgi?id=58638

        Tests: fullscreen/full-screen-frameset.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Add the 
            -webkit-full-screen pseudo class to frame elements which contain
            full screen elements.
        * css/fullscreen.css:
        (iframe:-webkit-full-screen): Add iframe-specific styling rules.
        * dom/Document.cpp:
        (WebCore::Document::setContainsFullScreenElementRecursively): Added.  Walk up each
            successive document owner element, calling setContainsFullScreenElement() if 
            owner is a frame element.
        (WebCore::Document::fullScreenIsAllowedForElement): Use the new Element::isFrameElementBase
            call instead of checking the element's tag name.
        (WebCore::Document::webkitWillEnterFullScreenForElement): Mark any containing
            iframes as containing a full screen element.
        (WebCore::Document::webkitWillExitFullScreenForElement): Ditto.
        * dom/Element.h:
        (WebCore::Element::isFrameElementBase): Added.
        * html/HTMLFrameElement.h:
        (WebCore::HTMLFrameElement::allowFullScreen): Disable full screen from within
            HTMLFrameElements.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::setContainsFullScreenElement): Added.
        * html/HTMLFrameElementBase.h:
        (WebCore::HTMLFrameElementBase::containsFullScreenElement): Added.
        (WebCore::HTMLFrameElementBase::isFrameElementBase): Added.

2011-04-22  Michael Saboff  <msaboff@apple.com>

        Reviewed by Maciej Stachowiak.

        Creating copy of ContainerNode's when inserting or removing is inefficient
        https://bugs.webkit.org/show_bug.cgi?id=58695

        Eliminated node copying in willRemove() and insertedIntoDocument().

        No new tests as this is a more efficient implementation of
        existing code that is covered by existing tests.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::willRemove): Changed method to use
        RefPtr<> to protect against modification during removal.
        (WebCore::ContainerNode::insertedIntoDocument): Changed method to use
        RefPtr<> and two other deletion checks to protect against 
        modification during insertion.

2011-04-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        We have an autogenerator, so use it
        https://bugs.webkit.org/show_bug.cgi?id=59247

        * bindings/js/JSCSSRuleCustom.cpp:
        * bindings/js/JSCSSRuleListCustom.cpp:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/js/JSCSSValueCustom.cpp:
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        * bindings/js/JSDOMImplementationCustom.cpp:
        * bindings/js/JSDOMStringMapCustom.cpp:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        * bindings/js/JSNamedNodeMapCustom.cpp:
        * bindings/js/JSNodeCustom.h:
        * bindings/js/JSNodeListCustom.cpp:
        * bindings/js/JSStyleSheetCustom.cpp:
        * bindings/js/JSStyleSheetListCustom.cpp: Removed repetitive hand-written code.

        * bindings/scripts/CodeGeneratorJS.pm: Augmented autogenerator to do the job.

        * css/CSSRule.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSValue.idl:
        * css/MediaList.idl:
        * css/StyleSheet.idl:
        * css/StyleSheetList.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMStringMap.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeList.idl:
        * html/DOMTokenList.idl:
        * html/HTMLCollection.idl:
        * html/canvas/CanvasRenderingContext.idl: Updated attributes to plug into
        the autogenerator.

2011-04-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=59223
        REGRESSION (r82185): iframe not displayed after navigation back to cached page

        Manual test added.
        * manual-tests/frame-layout-on-back.html: Added.
        * manual-tests/resources/empty-document-goes-back.html: Added.
        * manual-tests/resources/simple-iframe.html: Added.

2011-04-22  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Sam Weinig.

        HTMLFormControlElement::labels should allow custom attributes.
        https://bugs.webkit.org/show_bug.cgi?id=59128

        Cache the labels list when it is created and keep using it for future
        labels calls.

        Test: fast/forms/labels-custom-property.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::labels):

2011-04-22  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Remove minimum texture size for compositor tiling
        https://bugs.webkit.org/show_bug.cgi?id=59236

        This was mistakenly committed in r83915 and causes bad filtering
        on very small textures.

        Tests: compositing/images/content-image-change.html

        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::setTileSize):

2011-04-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=59223
        REGRESSION (r82185): iframe not displayed after navigation back to cached page
        -and corresponding-
        <rdar://problem/9323763>

        Cache the scroll position in Document::setInPageCache() instead of 
        FrameView::resetScrollbarsAndClearContentsSize(), and only clear the contents size 
        for the mainFrame(). Still resetScrollbars() for other frames, which matches pre-
        r82185 code.
        * dom/Document.cpp:
        (WebCore::Document::setInPageCache):
        * page/FrameView.cpp:
        (WebCore::FrameView::resetScrollbarsAndClearContentsSize):

2011-04-22  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kent Tamura.

        Let the RenderTheme decide if an input type should have a spinner
        https://bugs.webkit.org/show_bug.cgi?id=59246

        Whether an input should have a spinner or not should
        be a UI decision made by the RenderTheme. Remove
        WebCore's default hasSpinButton values and defer
        to the RenderTheme.

        No change in functionality, covered by existing tests.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isRangeControl): expose isRangeControl
        for possible RenderTheme queries.
        * html/HTMLInputElement.h:

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::createSubtreeIfNeeded):
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):
        For both of these ask the render theme if the input should
        have a spinner.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::shouldHaveSpinButtonForInputElement):
        Steppable inputs (number, date, and range) but not range
        should have spinners. This does not change existing behavior.
        * rendering/RenderTheme.h:

        * dom/InputElement.h:
        * html/BaseDateAndTimeInputType.cpp: remove hasSpinButton.
        * html/BaseDateAndTimeInputType.h: remove hasSpinButton.
        * html/InputType.cpp: remove hasSpinButton.
        * html/InputType.h: remove hasSpinButton.
        * html/NumberInputType.cpp: remove hasSpinButton.
        * html/NumberInputType.h: remove hasSpinButton.

2011-04-22  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kent Tamura.

        Don't rely on hasSpinButton to check if an input type can be stepped
        https://bugs.webkit.org/show_bug.cgi?id=59224

        Add isSteppable to know for certain if an input type can
        be stepped or not. Previously we were checking if the input
        has a spin control or is the range input type. These are UI
        details, but the step functionality does not require there
        to be a UI.

        No change in behavior, covered by existing tests.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::isSteppable):
        * html/BaseDateAndTimeInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isSteppable):
        (WebCore::HTMLInputElement::stepUpFromRenderer): remove the
        check for a spinner and range control and instead ASSERT
        that the type is steppable.
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        (WebCore::InputType::isSteppable):
        * html/InputType.h:
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::isSteppable):
        * html/NumberInputType.h:
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::isSteppable):
        * html/RangeInputType.h:

2011-04-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP frame-src is missing
        https://bugs.webkit.org/show_bug.cgi?id=58643

        In this patch, I've audited all the callers to
        SecurityOrigin::canDisplay to make sure they all the appropriate
        Content-Security-Policy method as well.  I'm not sure how to test all
        these cases, but making this changes fixed the frame-src test.

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadMediaPlayerProxyPlugin):
        (WebCore::SubframeLoader::createJavaAppletWidget):
        (WebCore::SubframeLoader::loadSubframe):
        (WebCore::SubframeLoader::loadPlugin):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::CachedResourceLoader::requestResource):
            - While I was understanding this code, I fixed the FIXME here.
        * loader/cache/CachedResourceLoader.h:

2011-04-22  Adrienne Walker  <enne@google.com>

        Reviewed by Simon Fraser.

        Clear shared graphics context when destroying CanvasRenderingContext2D.
        https://bugs.webkit.org/show_bug.cgi?id=59212

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

2011-04-22  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        End/Home keys do not work in a contentEditable element
        https://bugs.webkit.org/show_bug.cgi?id=50564

        Changing logical[Start/End]OfLine to return a valid VisiblePosition for for editable contexts that are
        inline and share a line with non-editable content.

        Test: editing/selection/modify-by-lineboundary-in-inline-editable-contexts.html

        * editing/visible_units.cpp:
        (WebCore::logicalStartOfLine):
        (WebCore::logicalEndOfLine):

2011-04-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        Make showTree/showTreeForThis aware of the shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=52965

        No new tests, because this code is only compiled in DEBUG.

        * dom/Node.cpp:
        (WebCore::traverseTreeAndMark): Moved tree traversal logic here, adding
            recursive sub-traversal of the shadow tree.
        (WebCore::Node::showTreeAndMark): Changed to use the new tree traversal function.

2011-04-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough and Oliver Hunt.

        Arrays should participate in global object forwarding fun
        https://bugs.webkit.org/show_bug.cgi?id=59215

        Change callers of constructArray to use the new variant that takes
        a global object.

        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::types):
        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::profiles):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeChain):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::ports):
        * bindings/js/JSScriptProfileNodeCustom.cpp:
        (WebCore::JSScriptProfileNode::children):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        (WebCore::JSWebGLRenderingContext::getAttachedShaders):
        (WebCore::JSWebGLRenderingContext::getSupportedExtensions):

2011-04-22  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed typo fix after r84522.

        * WebCore.pro:

2011-04-22  Daniel Bates  <dbates@rim.com>

        Fix misspelled word in comment; tagets => targets.

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

2011-04-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed a use of markDOMObjectWrapper: Element and Document
        https://bugs.webkit.org/show_bug.cgi?id=59178

        * GNUmakefile.list.am:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp: Build!

        * bindings/js/JSDOMImplementationCustom.cpp:
        (WebCore::JSDOMImplementationOwner::isReachableFromOpaqueRoots):
        (WebCore::JSDOMImplementationOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::toJS): Use the opaque roots system for DOMImplementation. Also,
        DOMImplementation does not need to keep its document wrapper alive, since
        there's no DOM API for getting a DOMImplementation's document.

        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMapOwner::isReachableFromOpaqueRoots):
        (WebCore::JSDOMStringMapOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::toJS): Use the opaque roots system for DOMStringMap.

        * bindings/js/JSDOMTokenListCustom.cpp: Added.
        (WebCore::JSDOMTokenListOwner::isReachableFromOpaqueRoots):
        (WebCore::JSDOMTokenListOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::toJS): Use the opaque roots system for DOMTokenList.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::visitChildren):
        * bindings/js/JSElementCustom.cpp: No more need for explicit marking.

        * bindings/scripts/CodeGeneratorV8.pm: Boo on whoever made this design decision.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::DOMImplementation):
        (WebCore::DOMImplementation::createDocument):
        (WebCore::DOMImplementation::createHTMLDocument):
        * dom/DOMImplementation.h:
        (WebCore::DOMImplementation::create):
        (WebCore::DOMImplementation::ref):
        (WebCore::DOMImplementation::deref):
        (WebCore::DOMImplementation::document): Fixed the DOMImplementation
        ownership model to match other satellite objects in the DOM. This was
        necessary to fix some crashes due to incorrect reference counting.

        * dom/DOMImplementation.idl:
        * dom/DOMStringMap.idl:
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * dom/Document.h:
        * dom/Element.cpp:
        * dom/Element.h:
        * dom/Element.idl:
        * html/DOMTokenList.idl: Updated to match changes above.

2011-04-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Rounded corners don't looks smooth when background-image is a gradient
        https://bugs.webkit.org/show_bug.cgi?id=59213
        
        Add the "shrink background" behavior to the slow background
        drawing code path.

        Test: fast/backgrounds/gradient-background-leakage.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::backgroundRectAdjustedForBleedAvoidance):
        Utility function that returns a shrunk border rect based
        on the context scale.
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        Use backgroundRectAdjustedForBleedAvoidance() in both the fast
        and slow paths.

2011-04-22  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Hyatt.

        Local caret rectangle calculation should be relative to its containing block.
        https://bugs.webkit.org/show_bug.cgi?id=49508.

        InlineBox and caret rectangle are positioned relative to its containing block.
        So its left and right edge value should be relative to its containing block as well. 

        Test: fast/forms/cursor-at-editable-content-boundary.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):

2011-04-22  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Darin Fisher.

        REGRESSION: left property broken with position:fixed elements in RTL documents
        https://bugs.webkit.org/show_bug.cgi?id=59204
        http://code.google.com/p/chromium/issues/detail?id=80216

        Test: fast/block/positioning/rtl-fixed-positioning.html
              fast/block/positioning/vertical-rl/fixed-positioning.html

        Returning the proper scroll offsets for fixed position content in RTL documents.
        We regressed to X and Y offsets not updating while scrolling when we clamped to zero,
        but RTL documents scroll in negative space.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollXForFixedPosition): Properly handling RTL documents where
        the scroll origin and offsets are negative.
        (WebCore::FrameView::scrollYForFixedPosition): Properly handling vertical writing-
        mode RTL documents, like above.
        * platform/ScrollView.h:
        (WebCore::ScrollView::scrollOrigin): Changing this accessor to const.

2011-04-22  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Eric Seidel.

        Should assert on invalid type in FEComponentTransfer::apply
        https://bugs.webkit.org/show_bug.cgi?id=57959

        No functional change. No new tests needed.

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

2011-04-22  MORITA Hajime  <morrita@google.com>

        Unreviewed crash fix.

        * html/HTMLDetailsElement.cpp:
        (WebCore::DetailsSummaryElement::shouldInclude):

2011-04-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Exclude scrollbars from the dirty rect passed to the document
        https://bugs.webkit.org/show_bug.cgi?id=59206

        No test added because functionality is unchanged.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paint): Compute a clip rectangle (analogous to the frame of the clip view
        in an NSScrollView) by subtracting non-overlay scrollbars, and intersect the document dirty rect
        with it. If the result is empty, avoid calling paintContents().

2011-04-22  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Disable MediaPlayerPrivateAVFoundation when using old full screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=59147

        Add a new isAVFoundationEnabled setting and check it before adding 
        MediaPlayerPrivateAVFoundationObjC to the media engine registry.

        * WebCore.exp.in:
        * page/Settings.cpp:
        * page/Settings.h:
        (WebCore::Settings::setAVFoundationEnabled): Added.
        (WebCore::Settings::isAVFoundationEnabled): Added.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines): Check the settings added above.

2011-04-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Remove remaining uses of deprecated version of toJS
        https://bugs.webkit.org/show_bug.cgi?id=59170

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toJS):
        (WebCore::JSCanvasRenderingContext2D::strokeStyle):
        (WebCore::JSCanvasRenderingContext2D::fillStyle):
        (WebCore::JSCanvasRenderingContext2D::createPattern):
        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::profiles):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMMimeTypeArrayCustom.cpp:
        (WebCore::JSDOMMimeTypeArray::nameGetter):
        * bindings/js/JSDOMPluginArrayCustom.cpp:
        (WebCore::JSDOMPluginArray::nameGetter):
        * bindings/js/JSDOMPluginCustom.cpp:
        (WebCore::JSDOMPlugin::nameGetter):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::namedItemGetter):
        (WebCore::JSDOMWindow::event):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        Propagate stored global object down access chain.

        (WebCore::InjectedScriptHost::nodeAsScriptValue):
        Replace use of deprecated toJS overload with explicit call to deprecatedGlobalObjectForPrototype.

        (WebCore::JSInjectedScriptHost::currentCallFrame):
        (WebCore::JSInjectedScriptHost::inspectedNode):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::callNodeList):
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSScriptProfileNodeCustom.cpp:
        (WebCore::JSScriptProfileNode::children):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessor::transformToFragment):
        (WebCore::JSXSLTProcessor::transformToDocument):
        * bindings/scripts/CodeGeneratorJS.pm:
        Propagate stored global object down access chain.

        * css/MediaQueryListListener.cpp:
        (WebCore::MediaQueryListListener::queryChanged):
        Replace use of deprecated toJS overload with explicit call to deprecatedGlobalObjectForPrototype,
        we will want refactor this to match other callbacks so we can remove this.

2011-04-22  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Eric Seidel.

        [Chromium]Mac UI polish to add left/right padding space for autofill popup window.
        https://bugs.webkit.org/show_bug.cgi?id=58960
        http://code.google.com/p/chromium/issues/detail?id=51077

        No new test because Chromium Autofill popup window doesn't have any test framework.
        This assumes only AutofillPopupMenuClient gives TexFieldPart appearance.
        Only if Autofill popup window has right/left padding.
        The code should be removed after Autofill popup window logic is separated from WebKit to Chromium.

        * rendering/RenderThemeChromiumMac.h: Add popupInternalPaddingRight() and popupInternalPaddingLeft().
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::popupInternalPaddingLeft): Return padding size only if TextFieldPart is specified.
        (WebCore::RenderThemeChromiumMac::popupInternalPaddingRight): Return padding size only if TextFieldPart is specified.

2011-04-21  Adam Roben  <aroben@apple.com>

        Add code to enumerate all the functions imported by a particular Windows binary

        PEImage is where all the logic starts. It represents a single Portable Executable (PE)
        binary. The various enumerator classes are used in conjunction with PEImage to enumerate the
        modules and functions imported by that image.

        I couldn't figure out how to write a test for this. :-(

        Part of <http://webkit.org/b/51063> <rdar://problem/8769281> REGRESSION (WebKit2): No
        context menu appears when right-clicking on windowless Flash plugin

        Reviewed by Sam Weinig, and given a good once-over by Jeff Miller.

        * WebCore.vcproj/WebCore.vcproj: Added the new files.

        * platform/win/PEImage.cpp: Added.
        (WebCore::PEImage::PEImage): Checks that the module contains the expected magic numbers,
        then initializes m_ntHeaders using the module.
        (WebCore::PEImage::convertRVAToAddress): Converts a relative virtual address (RVA) to a
        non-relative address, which can then be dereferenced. (The PE format uses RVAs in lots of
        places.)
        (WebCore::PEImage::dataDirectoryEntryAddress): Returns the address of the data associated
        with the given entry in the image's DataDirectory.

        * platform/win/PEImage.h: Added.
        (WebCore::PEImage::isValid): We're a valid image if the validation code in our constructor
        succeeded, in which case m_ntHeaders will be set.

        * platform/win/ImportedFunctionsEnumerator.cpp: Added. This class enumerates all the
        functions imported by the image from a single module by walking the Import Name Table (INT)
        and Import Address Table (IAT).
        (WebCore::ImportedFunctionsEnumerator::ImportedFunctionsEnumerator): Initialize our members.
        (WebCore::ImportedFunctionsEnumerator::isAtEnd): The INT and IAT are both 0-terminated
        arrays.
        (WebCore::ImportedFunctionsEnumerator::next): Step to the next entries in the INT and IAT.
        (WebCore::ImportedFunctionsEnumerator::currentFunctionName): Gets the address of the
        function's name, if possible, using the INT.
        (WebCore::ImportedFunctionsEnumerator::addressOfCurrentFunctionPointer): Returns the address
        of the function pointer for the current function. This function pointer is used whenever
        code in m_image calls the current function. (A future patch will take advantage of this by
        overwriting this function pointer with another, thereby redirecting calls to that function.)

        * platform/win/ImportedFunctionsEnumerator.h: Added.

        * platform/win/ImportedModulesEnumeratorBase.h: Added. This base class is used by
        ImportedModulesEnumerator and DelayLoadedModulesEnumerator, and allows code to be written
        that works with either one.

        * platform/win/ImportedModulesEnumerator.cpp: Added. This class enumerates all the
        non-delay-loaded modules imported by the image by walking the image's import array.
        (WebCore::ImportedModulesEnumerator::ImportedModulesEnumerator): Module import information
        is stored in the IMAGE_DIRECTORY_ENTRY_IMPORT entry of the image's DataDirectory.
        (WebCore::ImportedModulesEnumerator::isAtEnd): The import array is 0-terminated.
        (WebCore::ImportedModulesEnumerator::next): Steps along the import array.
        (WebCore::ImportedModulesEnumerator::currentModuleName): Gets the address of the module's
        name.
        (WebCore::ImportedModulesEnumerator::functionsEnumerator): Get's the addresses of the INT
        and IAT for this module and wraps them in an ImportedFunctionsEnumerator.

        * platform/win/ImportedModulesEnumerator.h: Added.

        * platform/win/DelayLoadedModulesEnumerator.cpp: Added. This class enumerates all the
        delay-loaded modules that are imported by the given PEImage by walking the image's
        ImageDelayDescr array.
        (WebCore::DelayLoadedModulesEnumerator::DelayLoadedModulesEnumerator): Delay-load
        information is stored in the IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT entry of the image's
        DataDirectory.
        (WebCore::DelayLoadedModulesEnumerator::isAtEnd): The delay-loaded modules array is
        0-terminated.
        (WebCore::DelayLoadedModulesEnumerator::next): Steps along the delay-loaded modules array.
        (WebCore::DelayLoadedModulesEnumerator::currentModuleName): Gets the address of the module's
        name out of the descriptor.
        (WebCore::DelayLoadedModulesEnumerator::functionsEnumerator): Gets the INT and IAT for the
        current module out of the descriptor and makes an ImportedFunctionsEnumerator from them.
        (WebCore::DelayLoadedModulesEnumerator::convertPotentialRVAToAddress): Pre-VC7.0 images
        stored non-relative addresses in the ImageDelayDescr structures, while VC7.0 and later
        images store RVAs. This function abstracts away the difference.

        * platform/win/DelayLoadedModulesEnumerator.h: Added.

2011-04-21  Adam Roben  <aroben@apple.com>

        Add a shared do-nothing window class that anyone can use

        Fixes <http://webkit.org/b/59102> WebKit has too many dummy window classes

        Reviewed by Anders Carlsson.

        * WebCore.vcproj/WebCore.vcproj: Added DefWndProcWindowClass.{cpp,h}. Moved Arena.cpp out of
        platform/win and into platform. Let VS reorder other files.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::acceleratedCompositingAvailable): Changed to use the shared
        dummy window class instead of creating our own.

        * platform/win/DefWndProcWindowClass.cpp: Added.
        (WebCore::registerClass): Register it!
        (WebCore::defWndProcWindowClassName): Register it and return it!

        * platform/win/DefWndProcWindowClass.h: Added.

2011-04-21  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.
        
        Content of <details> should be forwarded through the shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=59055

        - Made ShadowContentElement abstract and added shouldInclude() pure virtual method.
        - Added SummaryContentElement, DetailsContentElement, DetailsSummaryElement as
          subclasses of ShadowContentElement.
        - Gave two shadow children for HTMLDetailsElement. One is DetailsContentElement, that
          handles non-summary contents of <details>. Another is SummaryContentElement, that
          handles the main summary element.
        - Removed most of RenderDetails custom layout mechanism, which is replaced by
          ShadowContentElement subclasses.

        Tests: fast/html/details-add-child-1.html
               fast/html/details-add-child-2.html
               fast/html/details-remove-child-1.html
               fast/html/details-remove-child-2.html

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::contentContainerFor):
        (WebCore::ShadowRoot::hostChildrenChanged):
        (WebCore::ShadowRoot::hasContentElement):
        * dom/ShadowRoot.h:
        * html/HTMLDetailsElement.cpp:
        (WebCore::DetailsContentElement::DetailsContentElement):
        (WebCore::DetailsContentElement::create):
        (WebCore::DetailsContentElement::shouldInclude):
        (WebCore::DetailsSummaryElement::DetailsSummaryElement):
        (WebCore::DetailsSummaryElement::create):
        (WebCore::DetailsSummaryElement::shouldInclude):
        (WebCore::HTMLDetailsElement::create):
        (WebCore::HTMLDetailsElement::HTMLDetailsElement):
        (WebCore::HTMLDetailsElement::ensureShadowSubtreeOf):
        (WebCore::findSummaryFor):
        (WebCore::HTMLDetailsElement::ensureMainSummary):
        (WebCore::HTMLDetailsElement::refreshMainSummary):
        (WebCore::HTMLDetailsElement::createShadowSubtree):
        * html/HTMLDetailsElement.h:
        * html/HTMLSummaryElement.cpp:
        (WebCore::SummaryContentElement::SummaryContentElement):
        (WebCore::SummaryContentElement::shouldInclude):
        (WebCore::SummaryContentElement::create):
        (WebCore::HTMLSummaryElement::createShadowSubtree):
        * html/shadow/ShadowContentElement.h:
        * rendering/RenderDetails.cpp:
        (WebCore::RenderDetails::RenderDetails):
        (WebCore::RenderDetails::addChild):
        * rendering/RenderDetails.h:
        * rendering/RenderSummary.cpp:
        * rendering/RenderSummary.h:

2011-04-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Extra GraphicsContext::save() in InlineTextBox::paintDecoration()
        https://bugs.webkit.org/show_bug.cgi?id=59109
        
        Remove an extraneous GraphicsContext::save() in InlineTextBox::paintDecoration().
        
        Add an assertion that fires when a GraphicsContext() is destroyed with a non-
        empty state stack. Fix canvas to avoid this assertion, since bad content might
        trigger it.
        
        Also add an assertion that fires for mismatched begin/endTransparencyLayers.

        Test: fast/text/multiple-text-shadow-alpha.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::~HTMLCanvasElement):
        Make sure that the CanvasRenderingContext goes away before the ImageBuffer,
        so that CanvasRenderingContext2D has a chance to unwind the state stack in
        the ImageBuffer's GraphicsContext.
        
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::~CanvasRenderingContext2D):
        Balance unmatched state saves in the canvas context.
        
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::~GraphicsContext):
        Assert that the stack is empty.
        
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::beginTransparencyLayer):
        (WebCore::GraphicsContextPlatformPrivate::endTransparencyLayer):
        Changes to allow for asserting for unmatched transparency layer begin/ends.
        
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):
        Remove an unbalanced save().

2011-04-22  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add Save As context menu item to the TextViewer.
        https://bugs.webkit.org/show_bug.cgi?id=59196

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceSourceFrame.prototype.requestContent):
        (WebInspector.ResourceSourceFrame.prototype.suggestedFileName):
        (WebInspector.RevisionSourceFrame.prototype.requestContent):
        (WebInspector.RevisionSourceFrame.prototype.suggestedFileName):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        (WebInspector.SourceFrameDelegateForScriptsPanel):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.formatSourceFilesToggled):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.suggestedFileName):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._initializeTextViewer):
        (WebInspector.SourceFrame.prototype.populateTextAreaContextMenu):
        (WebInspector.SourceFrame.prototype.suggestedFileName):
        (WebInspector.SourceFrameDelegate.prototype.formatSourceFilesToggled):
        (WebInspector.SourceFrameDelegate.prototype.suggestedFileName):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._contextMenu):
        (WebInspector.TextViewerDelegate.prototype.cancelEditing):
        (WebInspector.TextViewerDelegate.prototype.populateLineGutterContextMenu):
        (WebInspector.TextViewerDelegate.prototype.populateTextAreaContextMenu):
        (WebInspector.TextViewerDelegate.prototype.suggestedFileName):

2011-04-22  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Move detailed heap snapshots storage and processing into workers.
        https://bugs.webkit.org/show_bug.cgi?id=59094

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * gyp/streamline-inspector-source.sh:
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype.dispose):
        (WebInspector.HeapSnapshotObjectNode.prototype._createProvider):
        (WebInspector.HeapSnapshotInstanceNode.prototype._createProvider):
        (WebInspector.HeapSnapshotConstructorNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotIteratorsTuple.prototype.dispose):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff.diffCalculated):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider.createProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._createProvider):
        (MixInSnapshotNodeFunctions):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.dispose):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.resetSortingCache):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.dispose):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype._resetPaths):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.setDataSource):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.showNext):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.searchCancelled):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype._setRootChildrenForFinder):
        (WebInspector.DetailedHeapshotView.prototype.dispose):
        (WebInspector.DetailedHeapshotView.prototype.get profileWrapper):
        (WebInspector.DetailedHeapshotView.prototype.get baseProfileWrapper):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotLoader):
        (WebInspector.HeapSnapshotLoader.prototype.finishLoading):
        (WebInspector.HeapSnapshotLoader.prototype.pushJSONChunk):
        (WebInspector.HeapSnapshot.prototype.pushBaseIds):
        (WebInspector.HeapSnapshot.prototype.createDiff):
        (WebInspector.HeapSnapshot.prototype._parseFilter):
        (WebInspector.HeapSnapshot.prototype.createEdgesProvider):
        (WebInspector.HeapSnapshot.prototype.createNodesProvider):
        (WebInspector.HeapSnapshot.prototype.createPathFinder):
        (WebInspector.HeapSnapshot.prototype.updateStaticData):
        (WebInspector.HeapSnapshotPathFinder):
        (WebInspector.HeapSnapshotPathFinder.prototype.updateRoots):
        (WebInspector.HeapSnapshotPathFinder.prototype._reset):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotRealWorker):
        (WebInspector.HeapSnapshotRealWorker.prototype._messageReceived):
        (WebInspector.HeapSnapshotRealWorker.prototype.postMessage):
        (WebInspector.HeapSnapshotRealWorker.prototype.terminate):
        (WebInspector.HeapSnapshotFakeWorker):
        (WebInspector.HeapSnapshotFakeWorker.prototype.postMessage):
        (WebInspector.HeapSnapshotFakeWorker.prototype.terminate):
        (WebInspector.HeapSnapshotFakeWorker.prototype._postMessageFromWorker):
        (WebInspector.HeapSnapshotWorker):
        (WebInspector.HeapSnapshotWorker.prototype.createObject):
        (WebInspector.HeapSnapshotWorker.prototype.dispose):
        (WebInspector.HeapSnapshotWorker.prototype.disposeObject):
        (WebInspector.HeapSnapshotWorker.prototype.callGetter):
        (WebInspector.HeapSnapshotWorker.prototype.callFactoryMethod.wrapCallback):
        (WebInspector.HeapSnapshotWorker.prototype.callFactoryMethod):
        (WebInspector.HeapSnapshotWorker.prototype.callMethod):
        (WebInspector.HeapSnapshotWorker.prototype._findFunction):
        (WebInspector.HeapSnapshotWorker.prototype._messageReceived):
        (WebInspector.HeapSnapshotWorker.prototype._postMessage):
        (WebInspector.HeapSnapshotProxyObject):
        (WebInspector.HeapSnapshotProxyObject.prototype._callWorker):
        (WebInspector.HeapSnapshotProxyObject.prototype.dispose):
        (WebInspector.HeapSnapshotProxyObject.prototype.disposeWorker):
        (WebInspector.HeapSnapshotProxyObject.prototype.callFactoryMethod):
        (WebInspector.HeapSnapshotProxyObject.prototype.callGetter):
        (WebInspector.HeapSnapshotProxyObject.prototype.callMethod):
        (WebInspector.HeapSnapshotLoaderProxy):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.finishLoading.callLoadCallbacks):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.finishLoading.updateStaticData):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.finishLoading):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.get loaded):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.startLoading):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.pushJSONChunk):
        (WebInspector.HeapSnapshotProxy):
        (WebInspector.HeapSnapshotProxy.prototype.aggregates):
        (WebInspector.HeapSnapshotProxy.prototype.createDiff):
        (WebInspector.HeapSnapshotProxy.prototype.createEdgesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.createNodesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.createPathFinder):
        (WebInspector.HeapSnapshotProxy.prototype.dispose):
        (WebInspector.HeapSnapshotProxy.prototype.finishLoading):
        (WebInspector.HeapSnapshotProxy.prototype.get loaded):
        (WebInspector.HeapSnapshotProxy.prototype.get nodeCount):
        (WebInspector.HeapSnapshotProxy.prototype.nodeFieldValuesByIndex):
        (WebInspector.HeapSnapshotProxy.prototype.pushBaseIds):
        (WebInspector.HeapSnapshotProxy.prototype.get rootNodeIndex):
        (WebInspector.HeapSnapshotProxy.prototype.updateStaticData):
        (WebInspector.HeapSnapshotProxy.prototype.startLoading):
        (WebInspector.HeapSnapshotProxy.prototype.get totalSize):
        (WebInspector.HeapSnapshotProxy.prototype.get uid):
        (WebInspector.HeapSnapshotProviderProxy):
        (WebInspector.HeapSnapshotProviderProxy.prototype.isEmpty):
        (WebInspector.HeapSnapshotProviderProxy.prototype.serializeNextItems):
        (WebInspector.HeapSnapshotProviderProxy.prototype.sortAndRewind):
        (WebInspector.HeapSnapshotPathFinderProxy):
        (WebInspector.HeapSnapshotPathFinderProxy.prototype.findNext):
        (WebInspector.HeapSnapshotPathFinderProxy.prototype.updateRoots):
        (WebInspector.HeapSnapshotsDiffProxy):
        (WebInspector.HeapSnapshotsDiffProxy.prototype.calculate):
        (WebInspector.HeapSnapshotsDiffProxy.prototype.pushBaseIds):
        (WebInspector.HeapSnapshotsDiffProxy.prototype.pushBaseSelfSizes):
        * inspector/front-end/HeapSnapshotWorker.js: Added.
        (WebInspector.UIString):
        (postMessageWrapper):
        * inspector/front-end/HeapSnapshotWorkerDispatcher.js: Added.
        (WebInspector.HeapSnapshotWorkerDispatcher):
        (WebInspector.HeapSnapshotWorkerDispatcher.prototype._findFunction):
        (WebInspector.HeapSnapshotWorkerDispatcher.prototype.dispatchMessage):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.loadHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot.else.parsed):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-04-22  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: fix de-obfuscation of scripts inlined in html.
        https://bugs.webkit.org/show_bug.cgi?id=58538

        Use html tokenizer to find script boundaries instead of relying on scriptParsed events.

        Test: inspector/debugger/script-formatter.html

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/JavaScriptFormatter.js: Renamed from Source/WebCore/inspector/front-end/UglifyJS/JavaScriptFormatter.js.
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter):
        (WebInspector.ScriptFormatter.prototype.formatContent):
        (WebInspector.ScriptFormatter.prototype._didFormatContent):
        * inspector/front-end/ScriptFormatterWorker.js:
        (onmessage):
        (formatScript):
        (HTMLScriptFormatter):
        (HTMLScriptFormatter.prototype.format):
        (HTMLScriptFormatter.prototype.scriptStarted):
        (HTMLScriptFormatter.prototype.scriptEnded):
        (HTMLScriptFormatter.prototype.styleSheetStarted):
        (HTMLScriptFormatter.prototype.styleSheetEnded):
        * inspector/front-end/SourceFile.js:
        (WebInspector.FormattedSourceFile.prototype._didRequestContent):
        * inspector/front-end/SourceHTMLTokenizer.js:
        (WebInspector.SourceHTMLTokenizer.prototype.scriptStarted):
        (WebInspector.SourceHTMLTokenizer.prototype.scriptEnded):
        (WebInspector.SourceHTMLTokenizer.prototype.styleSheetStarted):
        (WebInspector.SourceHTMLTokenizer.prototype.styleSheetEnded):
        (WebInspector.SourceHTMLTokenizer.prototype.nextToken):
        * inspector/front-end/SourceHTMLTokenizer.re2js:
        * inspector/front-end/WebKit.qrc:

2011-04-22  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Extensions API] misc API cleanup
        https://bugs.webkit.org/show_bug.cgi?id=59194

        * inspector/front-end/ExtensionAPISchema.json:
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionSidebarPane.prototype._setObject):

2011-04-21  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: group content scripts in the scripts panel drop down.
        https://bugs.webkit.org/show_bug.cgi?id=59108

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect.optionCompare):
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect):

2011-04-22  Mike West  <mkwst@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Tiny improvement to UI for adding an XHR breakpoint
        https://bugs.webkit.org/show_bug.cgi?id=59100

        Improve web inspector UI around adding XHR breakpoints by adding
        a textual label to the input-like `span` used to specify which
        XHR requests the breakpoint ought to target.

        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.XHRBreakpointsSidebarPane.prototype._addButtonClicked.finishEditing):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._addButtonClicked):
        * inspector/front-end/inspector.css:
        (#breakpoint-condition-input):

2011-04-22  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: js formatter should never insert new tokens or remove existing tokens and comments.
        https://bugs.webkit.org/show_bug.cgi?id=59191

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter.prototype.formatContent.didFormatChunks):
        (WebInspector.ScriptFormatter.prototype.formatContent):
        * inspector/front-end/ScriptFormatterWorker.js:
        (onmessage):
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile.prototype._loadResourceContent):
        (WebInspector.FormattedSourceFile.prototype._didRequestContent):
        (WebInspector.FormattedSourceMapping):
        (WebInspector.FormattedSourceMapping.prototype.scriptLocationToSourceLine):
        (WebInspector.FormattedSourceMapping.prototype.sourceLineToScriptLocation):
        (WebInspector.FormattedSourceMapping.prototype._convertPosition):
        * inspector/front-end/UglifyJS/JavaScriptFormatter.js: Added.
        (FormattedContentBuilder): Helper class for building formatted script content.
        (FormattedContentBuilder.prototype.addToken):
        (FormattedContentBuilder.prototype.addSpace):
        (FormattedContentBuilder.prototype.addNewLine):
        (FormattedContentBuilder.prototype.increaseNestingLevel):
        (FormattedContentBuilder.prototype.decreaseNestingLevel):
        (FormattedContentBuilder.prototype.content):
        (FormattedContentBuilder.prototype.mapping):
        (Tokenizer): Wrapper class for UglifyJS tokenizer.
        (Tokenizer.prototype.content):
        (Tokenizer.prototype.next):
        (Tokenizer.prototype._convertUglifyToken):
        (JavaScriptFormatter): New formatter based on UglifyJS tokenizer.
        (JavaScriptFormatter.prototype.format):
        * inspector/front-end/UglifyJS/process.js: Removed.
        * inspector/front-end/WebKit.qrc:

2011-04-22  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Refactor code prior to moving detailed heap snapshots into workers.
        https://bugs.webkit.org/show_bug.cgi?id=59189

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/BinarySearch.js: Added.
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype._populate.sorted):
        (WebInspector.HeapSnapshotGridNode.prototype._populate):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.afterSort.afterPopulate):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.afterSort):
        (WebInspector.HeapSnapshotGridNode.prototype.sort):
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype._enhanceData):
        (WebInspector.HeapSnapshotInstanceNode.prototype.get isDeletedNode):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff.diffCalculated):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff.baseIdsReceived):
        (WebInspector.HeapSnapshotDiffNode.prototype.get data):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.sortingChanged.sort):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.sortingChanged):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype._performSorting):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.recursiveSortingEnter):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.recursiveSortingLeave):
        (WebInspector.HeapSnapshotContainmentDataGrid):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype._defaultPopulateCount.100.setDataSource):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype.sortingChanged):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren.baseAggregatesReceived.aggregatesReceived.addNodeIfNonZeroDiff):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren.baseAggregatesReceived.aggregatesReceived):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren):
        (WebInspector.HeapSnapshotDominatorsDataGrid):
        (WebInspector.HeapSnapshotDominatorsDataGrid.prototype._defaultPopulateCount.25.setDataSource):
        (WebInspector.HeapSnapshotDominatorsDataGrid.prototype.sortingChanged):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype._performSorting):
        (WebInspector.DetailedHeapshotView.prototype._changeBase.baseProfileLoaded):
        (WebInspector.DetailedHeapshotView.prototype._changeBase):
        (WebInspector.DetailedHeapshotView.prototype._changeView):
        (WebInspector.DetailedHeapshotView.prototype._showStringContentPopup.displayString):
        (WebInspector.DetailedHeapshotView.prototype._showStringContentPopup):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype.dispose):
        (WebInspector.HeapSnapshot.prototype.pushBaseNodeIds):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.serializeNextItems):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.sortAndRewind):
        (WebInspector.HeapSnapshotEdgesProvider.prototype._serialize):
        (WebInspector.HeapSnapshotNodesProvider.prototype._serialize):
        (WebInspector.HeapSnapshotsDiff.prototype.calculate):
        (WebInspector.HeapSnapshotsDiff.prototype.pushBaseIds):
        (WebInspector.HeapSnapshotsDiff.prototype.pushBaseSelfSizes):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotProxy.prototype.createEdgesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.createNodesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.pushBaseIds):
        (WebInspector.HeapSnapshotProviderProxy):
        (WebInspector.HeapSnapshotProviderProxy.prototype.serializeNextItems):
        (WebInspector.HeapSnapshotProviderProxy.prototype.sortAndRewind):
        (WebInspector.HeapSnapshotsDiffProxy.prototype.pushBaseIds):
        (WebInspector.HeapSnapshotsDiffProxy.prototype.pushBaseSelfSizes):
        * inspector/front-end/PleaseWaitMessage.js:
        (WebInspector.PleaseWaitMessage.prototype.showAndWaitFor):
        (WebInspector.PleaseWaitMessage.prototype.unlistenAndHide):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/utilities.js:

2011-04-22  Mikhail Naganov  <mnaganov@chromium.org>

        Unreviewed fix after r84484 -- conditional statement was inverted incorrectly.

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.handleShortcut):

2011-04-22  Annie Sullivan  <sullivan@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Timeline is too narrow
        https://bugs.webkit.org/show_bug.cgi?id=58399

        Changed Network Panel widths so that Timeline is 50%.
        Added titles to the values in the other columns, so that a tooltip will show the value if the column is too narrow.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._createTable):  Changed column widths.
        (WebInspector.NetworkPanel.prototype._toggleGridMode): Changed column widths.
        (WebInspector.NetworkDataGridNode.prototype.refreshResource): Added titles to column values.
        (WebInspector.NetworkDataGridNode.prototype._refreshStatusCell): Ditto
        (WebInspector.NetworkDataGridNode.prototype._refreshSizeCell): Ditto
        (WebInspector.NetworkDataGridNode.prototype._refreshTimeCell): Ditto
        * inspector/front-end/utilities.js:
        (Element.prototype.setTextAndTitle): Added new method to set the textContent and title of an Element at the same time, so that it can have a tooltip.

2011-04-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9322486> REGRESSION (r83397): Default controls fade out when playing audio-only media
        https://bugs.webkit.org/show_bug.cgi?id=59180

        Test: media/audio-controls-do-not-fade-out.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playbackProgressTimerFired): Only start fading out the controls if there is
        a video track.

2011-04-22  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Add FontItalics and FontSmallCaps enums to be used instead of boolean values.
        https://bugs.webkit.org/show_bug.cgi?id=59080

        No new tests as no new functionality added.

        * css/CSSPrimitiveValueMappings.h:
        Add casts to/from FontItalics and FontSmallCaps
        * css/CSSStyleSelector.cpp:
        Use new casts defined in PrimitiveValueMappings.h
        * platform/graphics/Font.h:
        Use FontItalics enum.
        * platform/graphics/FontDescription.h:
        Define and use FontItalics and FontSmallCaps enums.

2011-04-21  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: exception in front-end when user selects resource info for resource that does not have response headers yet
        https://bugs.webkit.org/show_bug.cgi?id=59123

        * inspector/front-end/ResourceCookiesView.js:
        (WebInspector.ResourceCookiesView):
        (WebInspector.ResourceCookiesView.prototype.show):
        (WebInspector.ResourceCookiesView.prototype.get _gotCookies):
        (WebInspector.ResourceCookiesView.prototype._buildCookiesTable):

2011-04-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=57898
        REGRESSION (r82185): Scroll position not restored on navigation back to a page in 
        the page cache
        -and corresponding-
        <rdar://problem/9226652>

        The original fix for this change broke scroll-position restore for pages that are 
        *not* in the page cache. This patch fixes both cached and non-cached pages by 
        using the cachedScrollPosition() only for cached pages.
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::saveScrollPositionAndViewStateToItem):

2011-04-21  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Remove redundant calls to RenderStyle::setDisplay()
        https://bugs.webkit.org/show_bug.cgi?id=59060

        No new tests / no new functionality added.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove redundant calls to RenderStyle::setDisplay()

2011-04-21  John Bauman  <jbauman@chromium.org>

        Reviewed by Kenneth Russell.

        WebGL context drawing buffer may not be cleared if FBO bound
        https://bugs.webkit.org/show_bug.cgi?id=58956

        Clear the drawing buffer even if it's not currently bound, by
        switching between FBOs around the clear. Also, make sure that we
        handle depth and stencil masks properly.

        No new tests, because testing this under DRT doesn't work.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::initializeNewContext):
        (WebCore::WebGLRenderingContext::clearIfComposited):
        (WebCore::WebGLRenderingContext::depthMask):
        * html/canvas/WebGLRenderingContext.h:
        *
2011-04-21  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        WebKit is erroneously modifying the DOM; adding 'aria-selected' to tables
        https://bugs.webkit.org/show_bug.cgi?id=59140

        WebKit should not modify the DOM when the screen reader requests certain things be set. There is no
        specification that allows this behavior yet, but we are working on something for the future.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setARIAGrabbed):
        (WebCore::AccessibilityRenderObject::setIsExpanded):
        (WebCore::AccessibilityRenderObject::setSelected):
        (WebCore::AccessibilityRenderObject::setValue):

2011-04-21  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: order AccessibilityRole alphabetically
        https://bugs.webkit.org/show_bug.cgi?id=31524

        * accessibility/AccessibilityObject.h:

2011-04-21  Jia Pu  <jpu@apple.com>

        Reviewed by Maciej Stachowiak.

        [Mac] correctionPanelTimerFired() crashes due to rangeToBeReplaced being cleared.
        https://bugs.webkit.org/show_bug.cgi?id=59155
        <rdar://problem/9261698>

        Make sure the range isn't cleared before calling windowRectForRange() on it. Also removed unused functions in Editor.h,
        and fixed a typo in function name.

        * editing/Editor.h:
        * editing/SpellingCorrectionController.cpp:
        (WebCore::SpellingCorrectionController::correctionPanelTimerFired):
        (WebCore::SpellingCorrectionController::respondToChangedSelection):
        * editing/SpellingCorrectionController.h:
        (WebCore::SpellingCorrectionController::shouldStartTimerFor):

2011-04-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Roben.

        Add a feature define to allow <details> and <summary> to be disabled
        https://bugs.webkit.org/show_bug.cgi?id=59118
        <rdar://problem/9257045>

        No new tests; no behavior change.

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * features.pri:
        * html/HTMLDetailsElement.cpp:
        * html/HTMLSummaryElement.cpp:
        * html/HTMLTagNames.in:
        * html/shadow/DetailsMarkerControl.cpp:
        * rendering/RenderBlock.cpp:
        (WebCore::canMergeContiguousAnonymousBlocks):
        * rendering/RenderDetails.cpp:
        * rendering/RenderDetails.h:
        * rendering/RenderDetailsMarker.cpp:
        * rendering/RenderDetailsMarker.h:
        * rendering/RenderObject.h:
        * rendering/RenderSummary.cpp:
        * rendering/RenderSummary.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):

2011-04-21  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adele Peterson.

        REGRESSION (r83386): Typing in WSJ.com search field doesn't clear placeholder text
        https://bugs.webkit.org/show_bug.cgi?id=59053

        Turns out, the relatedTarget of an event could be also an ancestor of an event,
        not just its parent. Duh.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::adjustToShadowBoundaries): Changed to use shadowHost
            explicitly.

2011-04-21  Michael Saboff  <msaboff@apple.com>

        Reviewed by Maciej Stachowiak.

        Qualified names used for all TagName access, yet namespace usage is rare
        https://bugs.webkit.org/show_bug.cgi?id=58997

        The methods getElementsByTagName and getElementsByTagNameNS where
        always creating and using QualifiedNames.  QualifiedName::init
        was consistently in the top 3 routines when running the Dromaeo
        DOM-query benchmark.  Split out the functionality so that
        getElementsByTagName uses just the local name, an implied "*"
        namespace and a separate TagNodeListCache keyed by an atomic name
        instead of a QualifiedName.  Access to elements via
        getElementsByTagNameNS that have "*" namespace are forwarded to
        getElementsByTagName as well.  This provides ~10% speed up in that
        Dromaeo test.

        No new tests added, existing tests have coverage.  The changes are
        an optimization of existing functionality.

        * dom/Node.cpp:
        (WebCore::Node::removeCachedTagNodeList):
        (WebCore::Node::getElementsByTagName):
        (WebCore::Node::getElementsByTagNameNS):
        (WebCore::NodeListsNodeData::invalidateCaches):
        (WebCore::NodeListsNodeData::isEmpty):
        * dom/Node.h:
        * dom/NodeRareData.h:
        * dom/TagNodeList.cpp:
        (WebCore::TagNodeList::~TagNodeList):

2011-04-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed a use of markDOMObjectWrapper: more style- and node-related stuff
        https://bugs.webkit.org/show_bug.cgi?id=59127

        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        (WebCore::JSCanvasRenderingContextOwner::isReachableFromOpaqueRoots):
        (WebCore::JSCanvasRenderingContextOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext): Use opaque roots for marking canvas rendering
        contexts, so JSNode isn't responsible for it.

        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::markChildren):
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        * bindings/js/JSHTMLLinkElementCustom.cpp:
        * bindings/js/JSHTMLStyleElementCustom.cpp: Removed obsolete marking code.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isObservable):
        (WebCore::isReachableFromDOM):
        (WebCore::JSNodeOwner::isReachableFromOpaqueRoots): Removed a bunch of
        CSS object model related special cases, since the CSS object model
        now tracks its own lifetime through the opaque roots system. Removed
        canvas special case, covered above.

        * bindings/js/JSProcessingInstructionCustom.cpp:
        * bindings/js/JSWebKitAnimationListCustom.cpp:
        * dom/ProcessingInstruction.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLStyleElement.idl:
        * page/WebKitAnimationList.idl: Removed obsolete marking code.

2011-04-21  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by James Robinson.

        [chromium] Only update the contents of layers that are going to
        be drawn. Remove individual texture unreserves that happen
        after the layer draw calls with a single unreserve for all the
        textures in the texture manager.
        https://bugs.webkit.org/show_bug.cgi?id=59129

        Tests: No new functionality.  Covered by existing layout tests.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        (WebCore::ImageLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawRootLayer):
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        (WebCore::LayerRendererChromium::updateLayers):
        (WebCore::LayerRendererChromium::paintLayerContents):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/LayerTexture.cpp:
        * platform/graphics/chromium/LayerTexture.h:
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        * platform/graphics/chromium/LayerTilerChromium.h:
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::drawSurface):
        * platform/graphics/chromium/TextureManager.cpp:
        (WebCore::TextureManager::unprotectAllTextures):
        * platform/graphics/chromium/TextureManager.h:
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::draw):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::owner):

2011-04-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Sam Weinig.

        Add Frame* to the argument lists of canCopyCut and canPaste
        https://bugs.webkit.org/show_bug.cgi?id=59153

        canCopyCut and canPaste now takes Frame* for which supportedCopyCut and supportedPaste are called.
        This allows editor client to grant copy/cut and paste permissions per origin.

        * editing/EditorCommand.cpp:
        (WebCore::supportedCopyCut):
        (WebCore::supportedPaste):
        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::canCopyCut):
        (WebCore::EmptyEditorClient::canPaste):
        * page/EditorClient.h:

2011-04-21  Oliver Hunt  <oliver@apple.com>

        Whoops, change lost during merge

        * bindings/js/JSEventListener.h:

2011-04-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Fixed a failure seen in fast/dom/prototype-inheritance-2.html due to
        wrong global object use.

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        (WebCore::JSHTMLDocument::all):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter): Use the right global object.

2011-04-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Start moving to a general visitor pattern for GC traversal
        https://bugs.webkit.org/show_bug.cgi?id=59141

        This is just a rename:
            markChildren -> visitChildren
            markAggregate -> visitAggregate
            markStack -> visitor
            MarkStack -> typedef'd to SlotVisitor

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::visitChildren):
        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::constructAudio):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::JSCSSRule::visitChildren):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::visitChildren):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::visitActiveObjectsForContext):
        (WebCore::markDOMObjectWrapper):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::visitChildren):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMImplementationCustom.cpp:
        (WebCore::JSDOMImplementation::visitChildren):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitChildren):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::visitChildren):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::visitChildren):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::visitChildren):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::markJSFunction):
        * bindings/js/JSEventListener.h:
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::visitChildren):
        * bindings/js/JSHTMLLinkElementCustom.cpp:
        (WebCore::JSHTMLLinkElement::visitChildren):
        * bindings/js/JSHTMLStyleElementCustom.cpp:
        (WebCore::JSHTMLStyleElement::visitChildren):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::constructImage):
        * bindings/js/JSJavaScriptAudioNodeCustom.cpp:
        (WebCore::JSJavaScriptAudioNode::visitChildren):
        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::visitChildren):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::visitChildren):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMapOwner::isReachableFromOpaqueRoots):
        (WebCore::JSNamedNodeMap::visitChildren):
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::visitChildren):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isObservable):
        (WebCore::isReachableFromDOM):
        (WebCore::JSNodeOwner::isReachableFromOpaqueRoots):
        (WebCore::JSNode::visitChildren):
        * bindings/js/JSNodeCustom.h:
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::WeakOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::visitChildren):
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::visitChildren):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeListOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSProcessingInstructionCustom.cpp:
        (WebCore::JSProcessingInstruction::visitChildren):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::visitChildren):
        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::JSSharedWorker::visitChildren):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::JSStyleSheet::visitChildren):
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::visitChildren):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::visitChildren):
        * bindings/js/JSWebKitAnimationListCustom.cpp:
        (WebCore::JSWebKitAnimationList::visitChildren):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::visitChildren):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::visitChildren):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::visitChildren):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObject::visitChildren):
        (JSC::Bindings::QtInstance::markAggregate):
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_pixmapruntime.cpp:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::visitChildren):
        * bridge/qt/qt_runtime.h:
        * dom/EventListener.h:
        (WebCore::EventListener::visitJSFunction):
        * dom/EventTarget.h:
        (WebCore::EventTarget::visitJSEventListeners):
        * dom/Node.h:
        * dom/NodeFilterCondition.h:
        (WebCore::NodeFilterCondition::visitAggregate):
        * page/DOMWindow.h:
        * workers/WorkerContext.h:

2011-04-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=59048
        Need to track whether overlay scrollbar is currently visible and in lower-
        righthand corner
        -and corresponding-
        <rdar://problem/9211232>

        Whenever we start a new ScrollbarPartAnimation, check if the scrollbar is vertical 
        and showing (alpha of 1), and if so, call setVisibleScrollerThumbRect with the 
        knob rect, otherwise with an empty rect. ScrollAnimatorMac has a local rect to 
        track this value so that it can avoid sending messages across the ChromeClient to 
        the UIProcess if the rect has not changed.
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPainterDelegate setUpAnimation:scrollerPainter:part:WebCore::animateAlphaTo:duration:]):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::setVisibleScrollerThumbRect):

        Plumbing for the chrome client.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::notifyScrollerThumbIsVisibleInRect):
        * page/FrameView.cpp:
        (WebCore::FrameView::setVisibleScrollerThumbRect):
        * page/FrameView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::setVisibleScrollerThumbRect):

        New WebCoreSystemInterface function to get the knob rect.
        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2011-04-21  Nat Duca  <nduca@chromium.org>

        Reviewed by James Robinson.

        [chromium] Fix artefacts in compositor HUD when resizing
        https://bugs.webkit.org/show_bug.cgi?id=58969

        HUD was using the tiler program and not setting the texture
        transform. The HUD would thus draw with a texture transform based
        on the last tile drawn, leading sometimes to distortion.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::headsUpDisplayProgram):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::draw):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h:

2011-04-21  Mike Reed  <reed@google.com>

        Reviewed by Kenneth Russell.

        only return false if we actually in a skia-gpu accelerated canvas for isNativeFontRenderingAllowed
        https://bugs.webkit.org/show_bug.cgi?id=59024

        No new tests. The bug (and fix) depend on enabling SKIA_GPU. When that is enabled, the bug
        shows all text w/o lcd rendering. This is a regression from a recent CL when we switch to
        calling skia::SupportsPlatformPaint. This CL fixes that.
        There should be no change for the default builds when SKIA_GPU is not enabled.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::isNativeFontRenderingAllowed):

2011-04-21  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Don't upload partially drawn tiles in the compositor
        https://bugs.webkit.org/show_bug.cgi?id=59112

        Use the same set of tiles for painting as is used for updating.
        Before, a larger set of tiles were being uploaded, causing some to
        only be partially undirtied because they were not fully painted.
        As tiles are clear their dirty rect after being unpainted, this caused
        artifacts to appear when scrolling.

        Unfortunately, no layout test can test this behavior yet because
        scrolling invalidations are done differently in test shell.

        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::uploadCanvas):
        (WebCore::LayerTilerChromium::updateFromPixels):
        * platform/graphics/chromium/LayerTilerChromium.h:

2011-04-21  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Alexey Proskuryakov.

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

        Fix a compile issue on Solaris 10 with Sun Studio 12,
        ternary operators (?:) must have the same types

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::popArchiveForSubframe):
        * loader/archive/ArchiveFactory.cpp:
        (WebCore::ArchiveFactory::create):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::setIconDataForIconURL):
        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollCornerStyle):
        (WebCore::RenderLayer::updateResizerStyle):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::updateScrollbarPart):
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::RenderTextFragment):

2011-04-21  Mike Reed  <reed@google.com>

        Reviewed by Kenneth Russell.

        [chromium, win] Multiple failures of shadow rendering layout tests
        https://bugs.webkit.org/show_bug.cgi?id=58772

        No new tests. This CL fixes a regression in the following tests
        fast/multicol/shadow-breaking.html
        fast/repaint/shadow-multiple-horizontal.html
        fast/repaint/shadow-multiple-strict-horizontal.html
        fast/repaint/shadow-multiple-strict-vertical.html
        fast/repaint/shadow-multiple-vertical.html
        fast/text/shadow-translucent-fill.html
        fast/transforms/shadows.html
        svg/css/group-with-shadow.svg
        svg/css/shadow-changes.svg
        svg/css/text-shadow-multiple.xhtml
        transitions/svg-text-shadow-transition.html
        svg/css/composite-shadow-text.svg
 

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

2011-04-21  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the Qt build.

        * UseJSC.cmake:
        * WebCore.pro: Use correct file name.

2011-04-21  Dirk Schulze  <krit@webkit.org>

        Unreviewed Qt build fix.

        SVG feDropShadow implementation of SVG Filters 1.2
        https://bugs.webkit.org/show_bug.cgi?id=52513

        * CodeGenerators.pri:

2011-04-21  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Clamp dirty regions on content layers to layer bounds
        https://bugs.webkit.org/show_bug.cgi?id=58933

        This prevents garbage being rendered when layers are resized and a
        previous invalidation (now off-layer) is no longer valid.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::paintContentsIfDirty):

2011-04-21  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Kent Tamura.

        Bug 59012 - Shadows should be imported along with their host nodes
        https://bugs.webkit.org/show_bug.cgi?id=59012

        Copy the shadow tree of an element (even on a shallow copy!).

        Test: fast/dom/shadow/import-shadowroot.html

        * dom/Element.cpp:
        (WebCore::Element::copyNonAttributeProperties):
        * dom/Element.h:

2011-04-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed a use of markDOMObjectWrapper: CSS Object Model
        https://bugs.webkit.org/show_bug.cgi?id=59057

        This is 24 hours of my life I will never get back. Thank you, W3C.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj: Build!

        * bindings/js/JSCSSFontFaceRuleCustom.cpp:
        * bindings/js/JSCSSImportRuleCustom.cpp:
        * bindings/js/JSCSSMediaRuleCustom.cpp:
        * bindings/js/JSCSSPageRuleCustom.cpp:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::JSCSSRuleOwner::isReachableFromOpaqueRoots):
        (WebCore::JSCSSRuleOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::JSCSSRule::markChildren):
        * bindings/js/JSCSSRuleListCustom.cpp:
        (WebCore::JSCSSRuleListOwner::isReachableFromOpaqueRoots):
        (WebCore::JSCSSRuleListOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::toJS):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclarationOwner::isReachableFromOpaqueRoots):
        (WebCore::JSCSSStyleDeclarationOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::JSCSSStyleDeclaration::markChildren): Removed custom mark functions,
        and replaced with use of the opaque roots system. This has the nice benefit
        of allowing us to eagerly recycle far more CSS wrappers and their associated
        DOM wrappers.

        (WebCore::JSCSSStyleDeclaration::getPropertyCSSValue): Made this function
        custom because it must maintain the sorrowful invariant that primitive
        values can be mapped back to objects that are reachable through the DOM.
        We maintain this invariant through an external hash table because
        making all primitive values bigger would be a too-large memory use
        penalty. Luckily, nobody uses this feature, so the cost of the hash table
        is no big deal.

        (WebCore::toJS): We need a custom toJS so we can specify our own WeakHandleOwner.

        * bindings/js/JSCSSStyleRuleCustom.cpp: Removed custom mark, as above.

        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::cssValueRoots):
        (WebCore::JSCSSValueOwner::isReachableFromOpaqueRoots):
        (WebCore::JSCSSValueOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext): Use the opaque roots system. Piggy-back on
        the external hash table filled by JSCSSStyleDeclaration::getPropertyCSSValue.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::markChildren): No need to mark our stylesheet list,
        since all style-related objects can use our opaque root to determine
        liveness.

        * bindings/js/JSMediaListCustom.cpp: Added.
        (WebCore::JSMediaListOwner::isReachableFromOpaqueRoots):
        (WebCore::JSMediaListOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::toJS): Use the opaque roots system.

        * bindings/js/JSNodeCustom.h:
        (WebCore::root): Added helpers for computing style-related roots.

        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::JSStyleSheetOwner::isReachableFromOpaqueRoots):
        (WebCore::JSStyleSheetOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::JSStyleSheet::markChildren): Use the opaque roots system instead
        of direct marking.
        
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetListOwner::isReachableFromOpaqueRoots):
        (WebCore::JSStyleSheetListOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::toJS): Ditto.

        * bindings/js/JSWebKitCSSKeyframeRuleCustom.cpp:
        * bindings/js/JSWebKitCSSKeyframesRuleCustom.cpp:
        * css/CSSFontFaceRule.idl:
        * css/CSSImportRule.idl: No more custom mark, since we use the opaque
        roots system instead.

        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::CSSMediaRule): Fixed a bug where a media rule
        would incorrectly have no parent, since this got in the way of correctly
        computing the media rule's root.

        * css/CSSMediaRule.idl:
        * css/CSSPageRule.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleRule.idl:
        * css/MediaList.idl: Match behavior changes above.

        * css/StyleBase.cpp:
        (WebCore::StyleBase::node): Helper function for computing roots of the
        style system. This object model is pretty weird and not very well factored,
        but I'm pretty sure this covers all the relevant cases.

        * css/StyleBase.h:
        * css/StyleSheetList.idl:
        * css/WebKitCSSKeyframeRule.idl:
        * css/WebKitCSSKeyframesRule.idl: Updated to match the behavior changes above.

2011-04-21  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG feDropShadow implementation of SVG Filters 1.2
        https://bugs.webkit.org/show_bug.cgi?id=52513

        This is the implementation of feDropShadow, a shorthand filter and a combination of feGaussianBlur,
        feOffset, feFlood and feComposite to create a drop shadow of an input effect.
        Creating this new filter effect makes it possible to optimize the often used workflow. ShadowBlur, with its
        fast blurring algorithm, is used to blur the shadow and composite operators are responsible for combining the
        source with different colored shadows.
        Shadow color and opacity can be set with the properties flood-color and flood-opacity.

        Tests: svg/dynamic-updates/SVGFEDropShadowElement-dom-dx-attr.html
               svg/dynamic-updates/SVGFEDropShadowElement-dom-dy-attr.html
               svg/dynamic-updates/SVGFEDropShadowElement-dom-in-attr.html
               svg/dynamic-updates/SVGFEDropShadowElement-dom-shadow-color-attr.html
               svg/dynamic-updates/SVGFEDropShadowElement-dom-shadow-opacity-attr.html
               svg/dynamic-updates/SVGFEDropShadowElement-dom-stdDeviation-attr.html
               svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dx-prop.html
               svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dy-prop.html
               svg/dynamic-updates/SVGFEDropShadowElement-svgdom-in-prop.html
               svg/dynamic-updates/SVGFEDropShadowElement-svgdom-shadow-color-prop.html
               svg/dynamic-updates/SVGFEDropShadowElement-svgdom-shadow-opacity-prop.html
               svg/dynamic-updates/SVGFEDropShadowElement-svgdom-stdDeviation-prop.html
               svg/filters/feDropShadow.svg

        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        * bindings/objc/DOMSVG.h:
        * page/DOMWindow.idl:
        * platform/graphics/ShadowBlur.cpp: Added missing copyright after r84410.
        * platform/graphics/ShadowBlur.h: Made blurLayerImage public.
        * platform/graphics/filters/FEDropShadow.cpp: Added.
        (WebCore::FEDropShadow::FEDropShadow):
        (WebCore::FEDropShadow::create):
        (WebCore::FEDropShadow::determineAbsolutePaintRect):
        (WebCore::FEDropShadow::apply):
        (WebCore::FEDropShadow::dump):
        (WebCore::FEDropShadow::externalRepresentation):
        * platform/graphics/filters/FEDropShadow.h: Added.
        (WebCore::FEDropShadow::stdDeviationX):
        (WebCore::FEDropShadow::setStdDeviationX):
        (WebCore::FEDropShadow::stdDeviationY):
        (WebCore::FEDropShadow::setStdDeviationY):
        (WebCore::FEDropShadow::dx):
        (WebCore::FEDropShadow::setDx):
        (WebCore::FEDropShadow::dy):
        (WebCore::FEDropShadow::setDy):
        (WebCore::FEDropShadow::shadowColor):
        (WebCore::FEDropShadow::setShadowColor):
        (WebCore::FEDropShadow::shadowOpacity):
        (WebCore::FEDropShadow::setShadowOpacity):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::calculateKernelSize): Make kernel calculations accessible for feDropShadow.
        * platform/graphics/filters/FEGaussianBlur.h:
        * svg/SVGAllInOne.cpp:
        * svg/SVGFEDropShadowElement.cpp: Added.
        (WebCore::SVGFEDropShadowElement::SVGFEDropShadowElement):
        (WebCore::SVGFEDropShadowElement::create):
        (WebCore::SVGFEDropShadowElement::stdDeviationXIdentifier):
        (WebCore::SVGFEDropShadowElement::stdDeviationYIdentifier):
        (WebCore::SVGFEDropShadowElement::setStdDeviation):
        (WebCore::SVGFEDropShadowElement::parseMappedAttribute):
        (WebCore::SVGFEDropShadowElement::svgAttributeChanged):
        (WebCore::SVGFEDropShadowElement::synchronizeProperty):
        (WebCore::SVGFEDropShadowElement::build):
        * svg/SVGFEDropShadowElement.h: Added.
        * svg/SVGFEDropShadowElement.idl: Added.
        * svg/svgtags.in:

2011-04-21  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 58704 - Decide on node type for ShadowRoot
        https://bugs.webkit.org/show_bug.cgi?id=58704

        Add a new node type SHADOW_ROOT_NODE.
        Adapt all calling sites of nodeType(). 

        Test: fast/dom/shadow/nodetype.html

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/objc/DOM.mm:
        (kitClass):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):
        * dom/Document.cpp:
        (WebCore::Document::importNode):
        (WebCore::Document::childTypeAllowed):
        (WebCore::Document::canReplaceChild):
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):
        (WebCore::Node::isDefaultNamespace):
        (WebCore::Node::lookupPrefix):
        (WebCore::Node::lookupNamespaceURI):
        (WebCore::appendTextContent):
        (WebCore::Node::setTextContent):
        * dom/Node.h:
        * dom/Range.cpp:
        (WebCore::lengthOfContentsInNode):
        (WebCore::Range::processContentsBetweenOffsets):
        (WebCore::Range::insertNode):
        (WebCore::Range::checkNodeWOffset):
        (WebCore::Range::checkNodeBA):
        (WebCore::Range::selectNode):
        (WebCore::Range::selectNodeContents):
        (WebCore::Range::surroundContents):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::nodeType):
        * dom/Traversal.cpp:
        (WebCore::Traversal::acceptNode):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendStartMarkup):
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isRootNode):
        (WebCore::HTMLElementStack::pushRootNode):
        * html/parser/HTMLElementStack.h:
        (WebCore::isInHTMLNamespace):
        * xml/XPathUtil.cpp:
        (WebCore::XPath::isValidContextNode):

2011-04-20  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        REGRESSION (r75543): Styles bleed into new shadow DOM (like slider and video)
        https://bugs.webkit.org/show_bug.cgi?id=52917

        In order to determine whether a rule should apply inside of a shadow DOM subtree,
        we collect three pieces of information:

        1) Are we parsing UA sheets?
        2) Does the current tree scope allows applying author sheets?
        3) Does the rule explicitly reach into shadow DOM (using pseudo-elements, for example)?

        If the answer to all of these is no, we ignore the rule.

        Test: fast/css/shadow-dom-scope.html

        * css/CSSStyleSelector.cpp:
        (WebCore::MatchingUARulesScope::MatchingUARulesScope): Added a scope helper to
            track whether we are currently matching UA rules.
        (WebCore::CSSStyleSelector::matchRulesForList): Added the check for three
            conditions mentioned above.
        (WebCore::CSSStyleSelector::SelectorChecker::SelectorChecker): Added
            initializer for the flag, which helps us determine whether the rule
            explicitly reaches into shadow DOM.
        (WebCore::CSSStyleSelector::matchUARules): Started using the scope helper.
        (WebCore::CSSStyleSelector::checkSelector): Added initializing of the
            flag.
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Added setting
            of the flag when we encounter unknown pseudo-elements.
        * css/CSSStyleSelector.h: Adjusted decls.
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::applyAuthorSheets): Added.
        * dom/ShadowRoot.h: Adjusted decls.
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::applyAuthorSheets): Added.
        * dom/TreeScope.h: Adjusted decls.

2011-04-21  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Simon Fraser.

        position fixed element does not render properly when dynamically updated via javascript
        https://bugs.webkit.org/show_bug.cgi?id=54297

        Disabling the LayoutState fast-path for fixed-position content.

        Tests: fast/repaint/fixed-contents-changed-after-scroll.html
               fast/repaint/transformed-contents-changed-after-scroll.html

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

2011-04-20  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Maciej Stachowiak.

        arc() should add a circle to the path when start and end angles are far enough apart
        https://bugs.webkit.org/show_bug.cgi?id=58934

        Test: fast/canvas/canvas_arc_largeangles.html

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

2011-04-20  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        Content of <summary> should be forwarded through the shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=58914

        - Introduced ShadowContentElement which hosts forwarded children of <summary>
        - Encapsulated Node::parentNodeForRenderingAndStyle() and shouldCreateRendererFor()
          into NodeVisualParentLookupResult class.
        - The parent lookup is also aware of node forwarding. If the visual parent node has
          a shadow root, the node is possibly forwarded to ShadowContentElement
        - ShadowContentElement lookup is implemented inside ShadowRoot.
        
        Tests: fast/html/details-add-summary-child-1.html
               fast/html/details-add-summary-child-2.html
               fast/html/details-remove-summary-child-1.html
               fast/html/details-remove-summary-child-2.html

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.cpp:
        (WebCore::Element::childrenChanged):
        * dom/Node.cpp:
        (WebCore::NodeRenderParentDetector::NodeRenderParentDetector):
        (WebCore::NodeRenderParentDetector::parentNodeForRenderingAndStyle):
        (WebCore::NodeRenderParentDetector::findVisualParent):
        (WebCore::NodeRenderParentDetector::shouldCreateRenderer):
        (WebCore::Node::parentNodeForRenderingAndStyle):
        (WebCore::Node::createRendererAndStyle):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::contentContainerFor):
        (WebCore::ShadowRoot::hostChildrenChanged):
        (WebCore::ShadowRoot::firstContentElement):
        * dom/ShadowRoot.h:
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::createShadowSubtree):
        * html/HTMLSummaryElement.h:
        * html/shadow/ShadowContentElement.h: Copied from Source/WebCore/dom/ShadowRoot.h.
        (WebCore::ShadowContentElement::ShadowContentElement):
        (WebCore::ShadowContentElement::isShadowBoundary):
        (WebCore::ShadowContentElement::createRenderer):
        (WebCore::ShadowContentElement::create):

2011-04-21  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: fix calls to WebInspector.ObjectPropertiesSection constructor
        https://bugs.webkit.org/show_bug.cgi?id=59105

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._formatobject):
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionSidebarPane.prototype._setObject):
        * inspector/front-end/ResourceJSONView.js:
        (WebInspector.ResourceJSONView.parseJSON.WebInspector.ResourceJSONView.prototype._initialize):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._showPopup.showObjectPopup):
        (WebInspector.SourceFrame.prototype._showPopup):

2011-04-21  Adam Barth  <abarth@webkit.org>

        Remove support for CSP's frame-src.  This approach causes too many
        extra console messages to be logged.  I'm leaving in the test (which
        now shows failure).

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed):

2011-04-21  Eunsol Park  <eunsol47.park@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Scroll doesn't work on tiled backing store.
        https://bugs.webkit.org/show_bug.cgi?id=55021

        It was added from Changeset 72242, but it worked wrong in EFL port.
        The visible rect should not be returned as content rect for scrolling in EFL tiled backing store, 
        because it works differently from QT.

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

2011-04-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel.

        Create RIAA class for GraphicsContext::save() and restore()
        https://bugs.webkit.org/show_bug.cgi?id=58807

        Use GraphicsContextStateSaver in a lot more places.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/graphics/GeneratedImage.cpp:
        (WebCore::GeneratedImage::draw):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextStateSaver::save):
        (WebCore::GraphicsContextStateSaver::restore):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::drawShadowBuffer):
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawLayerPieces):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paint):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::draw):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::apply):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::apply):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::paint):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mac/ThemeMac.mm:
        (WebCore::paintCheckbox):
        (WebCore::paintRadio):
        (WebCore::paintStepper):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paintSelection):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumnContents):
        (WebCore::RenderBlock::paintSelection):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorationsWithSize):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::paintBorder):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintReplaced):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintChildLayerIntoColumns):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::paintPlaceholder):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::paintMeter):
        (WebCore::RenderThemeMac::paintProgressBar):
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintMenuListButton):
        (WebCore::RenderThemeMac::paintSliderTrack):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::paintSearchField):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):
        (WebCore::RenderThemeMac::paintMediaSliderTrack):
        (WebCore::RenderThemeMac::paintMediaCurrentTime):
        (WebCore::RenderThemeMac::paintMediaTimeRemaining):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::paint):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::paint):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::paint):
        * rendering/mathml/RenderMathMLSquareRoot.cpp:
        (WebCore::RenderMathMLSquareRoot::paint):
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::paint):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::fillAndStrokePath):
        (WebCore::RenderSVGPath::paint):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::draw):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::paint):
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paint):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintSelectionBackground):
        (WebCore::SVGInlineTextBox::paint):
        (WebCore::SVGInlineTextBox::paintDecorationWithStyle):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint):
        * svg/SVGFont.cpp:
        (WebCore::Font::drawTextUsingSVGFont):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):

2011-04-20  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Extensions API] console API is not exposed to code evaluated by sidebar.setExpression()
        https://bugs.webkit.org/show_bug.cgi?id=59006

        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionSidebarPane.prototype.setExpression):

2011-04-21  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Split SVGGlyphIdentifier class out of SVGGlyphElement.h
        https://bugs.webkit.org/show_bug.cgi?id=59101

        Move SVGGlyphIdentifier class out of SVGGlyphElement.h, place it in platform/graphics/SVGGlyph.h
        and rename the contained struct to SVGGlyph. It will be used in follow-up patches that will integrate SVGGlyph & GlyphPage.

        Several utility functions are moved from SVGFont.cpp to SVGGlyph.cpp, as that's the place where they really belong to.
        Renamed nameLength to unicodeStringLength in the SVGGlyph struct for clarity.

        * Android.mk: Add SVGGlyph.cpp/h to build.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.list.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * platform/graphics/SVGGlyph.cpp: Copied from svg/SVGFont.cpp. Removed everything except the methods listed below, that belong here.
        (WebCore::processArabicFormDetection):
        (WebCore::charactersWithArabicForm):
        (WebCore::isCompatibleArabicForm):
        (WebCore::isCompatibleGlyph):
        * platform/graphics/SVGGlyph.h: Copied from svg/SVGGlyphElement.h. Renamed SVGGlyphIdentifier to SVGGlyph.
        (WebCore::SVGGlyph::SVGGlyph):
        (WebCore::SVGGlyph::operator==):
        * platform/graphics/SimpleFontData.cpp: Adapt for SVGGlyphIdentifier -> SVGGlyph and nameLength -> unicodeStringLength rename.
        (WebCore::SimpleFontData::SimpleFontData):
        * svg/SVGFont.cpp: Ditto. Remove helper functions that are now living in SVGGlyph.cpp
        (WebCore::SVGTextRunWalker::walk):
        (WebCore::floatWidthUsingSVGFontCallback):
        (WebCore::drawTextUsingSVGFontCallback):
        (WebCore::drawTextMissingGlyphCallback):
        (WebCore::Font::drawTextUsingSVGFont):
        * svg/SVGFontElement.cpp: Ditto.
        (WebCore::SVGFontElement::getGlyphIdentifiersForString):
        * svg/SVGFontElement.h: Ditto.
        * svg/SVGGlyphElement.cpp: Ditto.
        (WebCore::parseArabicForm):
        (WebCore::parseOrientation):
        (WebCore::SVGGlyphElement::inheritUnspecifiedAttributes):
        (WebCore::parseSVGGlyphAttribute):
        (WebCore::SVGGlyphElement::buildGenericGlyphIdentifier):
        (WebCore::SVGGlyphElement::buildGlyphIdentifier):
        * svg/SVGGlyphElement.h: Ditto.
        * svg/SVGGlyphMap.h: Ditto.
        (WebCore::SVGGlyphMap::add):
        (WebCore::SVGGlyphMap::compareGlyphPriority):
        (WebCore::SVGGlyphMap::get):

2011-04-21  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        Live streams won't play with AVFoundation backend
        https://bugs.webkit.org/show_bug.cgi?id=58961
        rdar://problem/9284748

        Tested manually because we don't have any live streams to test in DRT.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::seek): Do nothing when asked to seek to the
            current time.
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates): If the readyState is HaveEnoughData,
            don't revert when the new state is "ready to play" or "buffer full".
        (WebCore::MediaPlayerPrivateAVFoundation::movieLoadType): Use new convenience function isLiveStream.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::isLiveStream): New.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Don't use AVAsset's
            tracksWithMediaCharacteristic because it doesn't give us what we need with live
            streams.

2011-04-21  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Cookies section in empty on page re-launch.
        https://bugs.webkit.org/show_bug.cgi?id=59095

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

2011-04-21  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: rename De-obfuscate to Pretty print.
        https://bugs.webkit.org/show_bug.cgi?id=59093

        * English.lproj/localizedStrings.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._populateTextAreaContextMenu):

2011-04-21  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: following Image URL link in the network panel does nothing.
        https://bugs.webkit.org/show_bug.cgi?id=59092

        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView.prototype._createContentIfNeeded.onImageLoad):
        (WebInspector.ImageView.prototype._createContentIfNeeded):
        * inspector/front-end/inspector.js:
        (WebInspector.linkifyURLAsNode):

2011-04-21  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: implement Go To Line for network panel.
        https://bugs.webkit.org/show_bug.cgi?id=59090

        * inspector/front-end/GoToLineDialog.js:
        (WebInspector.GoToLineDialog.prototype._highlightSelectedLine):
        * inspector/front-end/NetworkItemView.js:
        (WebInspector.NetworkItemView.prototype._tabSelected):
        (WebInspector.NetworkItemView.prototype._installHighlightSupport):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane.prototype.appendTab):
        (WebInspector.TabbedPane.prototype.selectTab):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.highlightLine):

2011-04-21  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Split GlyphPage from GlyphPageTreeNode.h into its own header
        https://bugs.webkit.org/show_bug.cgi?id=59096

        * GNUmakefile.list.am: Add GlyphPage.h to build.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * platform/graphics/GlyphPage.h: Copied from platform/graphics/GlyphPageTreeNode.h. Removed GlyphPageTreeNode class, leaving only GlyphPage.
        * platform/graphics/GlyphPageTreeNode.h: Removed GlyphPage class.

2011-04-21  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Centralize typedef unsigned short Glyph in Glyph.h
        https://bugs.webkit.org/show_bug.cgi?id=59087

        * GNUmakefile.list.am: Add Glyph.h to build.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * platform/graphics/Glyph.h: Added.
        * platform/graphics/GlyphBuffer.h: Include Glyph.h instead of duplicating the Glyph typedef.
        * platform/graphics/GlyphMetricsMap.h: Ditto.
        * platform/graphics/GlyphPageTreeNode.h: Ditto.

2011-04-21  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: toolbar background is blank on Mac Chromium port.
        https://bugs.webkit.org/show_bug.cgi?id=59089

        * inspector/front-end/inspector.css:
        (body.detached.platform-mac-snowleopard:not(.remote) #toolbar):

2011-04-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add support for Go To Line in Resources panel.
        https://bugs.webkit.org/show_bug.cgi?id=59077

        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.registerShortcuts):
        * inspector/front-end/GoToLineDialog.js:
        (WebInspector.GoToLineDialog.show):
        (WebInspector.GoToLineDialog.createShortcut):
        (WebInspector.GoToLineDialog.prototype._onKeyDown):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype.handleShortcut):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel):
        (WebInspector.Panel.prototype._restoreScrollPositions):
        (WebInspector.Panel.prototype.handleShortcut):
        (WebInspector.Panel.prototype.registerShortcuts):
        (WebInspector.Panel.prototype._showGoToLineDialog):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.handleShortcut):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._registerShortcuts):
        (WebInspector.ScriptsPanel.prototype.jumpToPreviousSearchResult):
        * inspector/front-end/inspector.js:
        (WebInspector._registerShortcuts):
        (WebInspector.documentKeyDown):

2011-04-21  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: persist local resource history between inspector / browser launches.
        https://bugs.webkit.org/show_bug.cgi?id=58993

        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._restoreRevisions):

2011-04-20  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Metrics pane editing and visual feedback improvements
        https://bugs.webkit.org/show_bug.cgi?id=58992

        Added visual feedback when hovering over the box model components of the Metrics pane
        and handling of the [Page]Up/Down keys when editing the box model values.

        * inspector/DOMNodeHighlighter.cpp:
        (WebCore::DOMNodeHighlighter::DrawNodeHighlight):
        * inspector/DOMNodeHighlighter.h:
        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::mouseDidMoveOverElement):
        (WebCore::InspectorDOMAgent::highlight):
        (WebCore::InspectorDOMAgent::highlightDOMNode):
        (WebCore::InspectorDOMAgent::highlightFrame):
        (WebCore::InspectorDOMAgent::drawNodeHighlight):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSProperty.prototype.setText.callback):
        (WebInspector.CSSProperty.prototype.setText):
        (WebInspector.CSSProperty.prototype.setValue):
        (WebInspector.CSSProperty.prototype.setDisabled.callback):
        (WebInspector.CSSProperty.prototype.setDisabled):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.startEditingStyle):
        (WebInspector.ElementsPanel.prototype.endEditingStyle):
        (WebInspector.ElementsPanel.prototype._attributesUpdated):
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane):
        (WebInspector.MetricsSidebarPane.prototype._highlightDOMNode):
        (WebInspector.MetricsSidebarPane.prototype._highlightDOMNode.getBoxRectangleElement):
        (WebInspector.MetricsSidebarPane.prototype._update.createBoxPartElement):
        (WebInspector.MetricsSidebarPane.prototype._update):
        (WebInspector.MetricsSidebarPane.prototype.startEditing):
        (WebInspector.MetricsSidebarPane.prototype._handleKeyDown):
        (WebInspector.MetricsSidebarPane.prototype.editingEnded):
        (WebInspector.MetricsSidebarPane.prototype.editingCancelled):
        (WebInspector.MetricsSidebarPane.prototype._applyUserInput.callback):
        (WebInspector.MetricsSidebarPane.prototype._applyUserInput):
        (WebInspector.MetricsSidebarPane.prototype.editingCommitted):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.alteredFloatNumber):
        (WebInspector.StylesSidebarPane.alteredHexNumber):
        (WebInspector.StylePropertyTreeElement.prototype):
        (WebInspector.StylePropertyTreeElement.prototype.element.userInput.previousContent.context.moveDirection):
        * inspector/front-end/inspector.css:
        (.metrics .hovered > .label):
        (.metrics .position):
        (.metrics .margin):
        (.metrics .margin.hovered):
        (.metrics .border):
        (.metrics .border.hovered):
        (.metrics .padding):
        (.metrics .padding.hovered):
        (.metrics .content):
        (.metrics .content.hovered):
        * inspector/front-end/inspector.js:
        (WebInspector.highlightDOMNode):

2011-04-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP report-uri is missing
        https://bugs.webkit.org/show_bug.cgi?id=58639

        Our implementation of report-uri differs from what's currently in the
        spec.  I sent the working group an email explaining why.  Generally,
        we're using normal form encoding instead of JSON and we're sending less
        information to a wider set of URLs.  Specifically, we send the current
        document's URL as well as the directive that was violated.  The spec
        (currently) tells us to send the raw HTTP headers and the URL that
        caused the violation, but both of these pieces of data could contain
        information that's sensitive, so we omit them for now.

        Test: http/tests/security/contentSecurityPolicy/report-uri.html

        * loader/PingLoader.cpp:
        (WebCore::PingLoader::reportContentSecurityPolicyViolation):
        * loader/PingLoader.h:
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirective::CSPDirective):
        (WebCore::CSPDirective::text):
        (WebCore::ContentSecurityPolicy::reportViolation):
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs):
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers):
        (WebCore::ContentSecurityPolicy::allowInlineScript):
        (WebCore::ContentSecurityPolicy::allowEval):
        (WebCore::ContentSecurityPolicy::allowScriptFromSource):
        (WebCore::ContentSecurityPolicy::allowObjectFromSource):
        (WebCore::ContentSecurityPolicy::allowChildFrameFromSource):
        (WebCore::ContentSecurityPolicy::allowImageFromSource):
        (WebCore::ContentSecurityPolicy::allowStyleFromSource):
        (WebCore::ContentSecurityPolicy::allowFontFromSource):
        (WebCore::ContentSecurityPolicy::allowMediaFromSource):
        (WebCore::ContentSecurityPolicy::parseReportURI):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:

2011-04-21  Jon Lee  <jonlee@apple.com>

        Reviewed by Maciej Stachowiak.

        remove unneeded function from graphicscontext3d.cpp (59076)
        https://bugs.webkit.org/show_bug.cgi?id=59076
        <rdar://problem/9315681>

        * platform/graphics/GraphicsContext3D.cpp: removing unused function unpackOneRowOfRGBA8ToRGBA8

2011-04-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION: Korean encoding alias KSC5601 does not work
        https://bugs.webkit.org/show_bug.cgi?id=59075
        <rdar://problem/9303233>

        * platform/text/TextCodecICU.cpp: (WebCore::TextCodecICU::registerEncodingNames): Added a
        KSC5601 alias for KSC_5601, which effectively makes it windows-949.

2011-04-20  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        layoutTestController can create and destroy shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=59058

        Test: fast/dom/shadow/layout-tests-can-access-shadow.html

        * WebCore.exp.in: Mac DRT needs to see Element::ensure/removeShadowRoot

2011-04-20  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Ryosuke Niwa.

        Follow on fix for https://bugs.webkit.org/show_bug.cgi?id=58926

        Fix assertions in Chromium builds.

        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled): Skia and Wx do not have proper implementations of
        BitmapImage::checkForSolidColor() so we shouldn't assert on those platforms.

2011-04-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Eric Seidel.

        [EFL] Add timeline to mediaControlsEfl.css
        https://bugs.webkit.org/show_bug.cgi?id=58865

        Add timeline to mediaControlsEfl.css in order to show playing time of media
        content.

        * css/mediaControlsEfl.css:
        (audio):
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-timeline-container, video::-webkit-media-controls-timeline-container):
        (audio::-webkit-media-controls-current-time-display, video::-webkit-media-controls-current-time-display):
        (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-seek-back-button, video::-webkit-media-controls-seek-back-button):
        (audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls-seek-forward-button):
        (audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):

2011-04-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel.

        Create RIAA class for GraphicsContext::save() and restore()
        https://bugs.webkit.org/show_bug.cgi?id=58807
        
        Make a stack-based class that can be used to save and restore
        the graphics state. It has conditional behavior to deal with the many cases
        where we decide to save/restore based on some runtime condition.

        Change RenderBoxModelObject to use it for now; it can be used more widely
        once committed.

        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextStateSaver::GraphicsContextStateSaver):
        (WebCore::GraphicsContextStateSaver::~GraphicsContextStateSaver):
        (WebCore::GraphicsContextStateSaver::saveState):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        (WebCore::RenderBoxModelObject::paintBoxShadow):

2011-04-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP frame-src is missing
        https://bugs.webkit.org/show_bug.cgi?id=58643

        This is a first cut at an implementation of frame-src.  There are a
        couple things that will need to be improved:

          1) I don't think we're handling in-frame navigation properly.  This
             patch only covers setting the src attribute of the frame, but I
             think the intent of the spec is to cover navigation as well.

          2) The console message is printed twice, once when we try to load the
             frame and again when we attach the frame to the render tree.

        I'll file bugs about these issues (blocking
        https://bugs.webkit.org/show_bug.cgi?id=53572) once this patch lands.

        Tests: http/tests/security/contentSecurityPolicy/frame-src-allowed.html
               http/tests/security/contentSecurityPolicy/frame-src-blocked.html

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowChildFrameFromSource):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:

2011-04-20  Jia Pu  <jpu@apple.com>

        Reviewed by Maciej Stachowiak.

        [Mac] Correction panel shows up at incorrect location after webpage is scrolled.
        https://bugs.webkit.org/show_bug.cgi?id=59052
        <rdar://problem/9312513>
        
        Fixed a regression caused by interaction between patch for bug 57353 and patch for bug 55571.
        See bug webpage for detail.

        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartHasMarkerFor):
        * editing/SpellingCorrectionController.cpp:
        (WebCore::SpellingCorrectionController::windowRectForRange):

2011-04-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP policy violations should log to the console
        https://bugs.webkit.org/show_bug.cgi?id=58646

        We now log policy violations to the JavaScript console to help
        developers debug what's going on with their Content-Security-Policy.

        Tests: http/tests/security/contentSecurityPolicy/inline-script-blocked-javascript-url.html
               http/tests/security/contentSecurityPolicy/javascript-url-allowed.html
               http/tests/security/contentSecurityPolicy/javascript-url-blocked.html
               http/tests/security/contentSecurityPolicy/object-src-none-allowed.html
               http/tests/security/contentSecurityPolicy/object-src-none-blocked.html
               http/tests/security/contentSecurityPolicy/script-src-self-blocked-01.html
               http/tests/security/contentSecurityPolicy/script-src-self-blocked-02.html
               http/tests/security/contentSecurityPolicy/script-src-self-blocked-03.html

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::ContentSecurityPolicy):
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs):
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers):
        (WebCore::ContentSecurityPolicy::allowInlineScript):
        (WebCore::ContentSecurityPolicy::allowEval):
        (WebCore::ContentSecurityPolicy::allowScriptFromSource):
        (WebCore::ContentSecurityPolicy::allowObjectFromSource):
        (WebCore::ContentSecurityPolicy::allowImageFromSource):
        (WebCore::ContentSecurityPolicy::allowStyleFromSource):
        (WebCore::ContentSecurityPolicy::allowFontFromSource):
        (WebCore::ContentSecurityPolicy::allowMediaFromSource):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:
        (WebCore::ContentSecurityPolicy::create):

2011-04-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9095366> With a non-1 page scale, scrolling to reveal selection fails
        https://bugs.webkit.org/show_bug.cgi?id=59046

        Test: fast/transforms/selection-bounds-in-transformed-view.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintUsingContainer): If the repaint container is the RenderView, and
        it has a composited layer that paints straight to the window, then translate from view coordinates
        to window coordinates here.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::mapLocalToContainer): Do not apply our transform if we are the painting root.
        (WebCore::RenderView::computeRectForRepaint): Ditto. Applying the transform here was compensating
        for not applying it in RenderObject::repaintUsingContainer(), but for purposes other than repainting,
        such as computing selection bounds, this function was returning the wrong results.

2011-04-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Eric Carlson.

        <rdar://problem/9304956> media/broken-video.html crashes

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::nextMediaEngine): Fixed an off-by-one error.

2011-04-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Split out isIteratorTarget from bidiNext and bidiFirst
        https://bugs.webkit.org/show_bug.cgi?id=59033

        This is the first (tiny) step of many.  When I tried to
        make larger changes to this function I broke stuff, so
        doing this in tiny pieces so we know it's right.

        * rendering/InlineIterator.h:
        (WebCore::isIteratorTarget):
        (WebCore::bidiNext):
        (WebCore::bidiFirstSkippingInlines):
        (WebCore::bidiFirstNotSkippingInlines):

2011-04-20  Alexey Marinichev  <amarinichev@chromium.org>

        Reviewed by Kenneth Russell.

        Check for null m_context in WebGLLayerChromium and add resetting platform layer's context in the destructor of GraphicsContext3D.
        https://bugs.webkit.org/show_bug.cgi?id=59045

        Lose context extension test might not catch this bug, more reliable
        way is forcing the crash of the GPU process, which is done by Chromium
        browser tests.

        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::updateCompositorResources):
        (WebCore::WebGLLayerChromium::setContext):
        * platform/graphics/chromium/WebGLLayerChromium.h:

2011-04-20  Jia Pu  <jpu@apple.com>

        Reviewed by Maciej Stachowiak.

        [Mac]Regression: extending word that is already marked misspelled doesn't remove misspelling underline.
        https://bugs.webkit.org/show_bug.cgi?id=59032
        <rdar://problem/9312444>

        This fixes a regression introduced in recent refactoring work in Editor. See bug webpage for detail.

        manual test: Source/WebCore/manual-tests/autocorrection/remove-misspelling-marker-after-appending-letter.html

        * editing/Editor.cpp:
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        * manual-tests/autocorrection/remove-misspelling-marker-after-appending-letter.html: Added.

2011-04-20  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        CrashTracer: 301 crashes in Safari at com.apple.WebCore: WebCore::AccessibilityRenderObject::visiblePositionForPoint const + 297
        https://bugs.webkit.org/show_bug.cgi?id=57405

        The offending line in this crash was a null pointer access in
           m_renderer->document()->topDocument()->renderer()->view()->frameView();
        It seems likely that one of those calls was invalid. I could not reproduce and there was no
        information on reproducible steps, hence the absence of a layout test.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::topRenderer):
        (WebCore::AccessibilityRenderObject::topDocument):
        (WebCore::AccessibilityRenderObject::topDocumentFrameView):
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
        * accessibility/AccessibilityRenderObject.h:

2011-04-20  Andy Estes  <aestes@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION (WK2): Animated GIF stops when navigating forward, back
        https://bugs.webkit.org/show_bug.cgi?id=59042
        
        When loading the page from the b/f cache,
        document()->view()->isOffscreen() returns true in
        RenderObject::willRenderImage(), so BitmapImage::startAnimation()
        returns without actually kicking off the animation.
        
        In WebKit1, the ScrollView is a platform widget, so
        ScrollView::isOffscreen() calls [NSWindow isVisible]. In WebKit2, the
        ScrollView isn't a platform widget so it asks the WebCore Widget
        whether or not it is visible. It always returns false since
        setParentVisible(false) was called on the old ScrollView before
        navigating to a new page, but setParentVisible(true) is never called
        when restoring it from the back/forward cache. This is probably a
        long-standing bug.
        
        Fix this by calling setParentVisible(true) when a cached main frame is
        being restored.

        Test: fast/images/animated-gif-restored-from-bfcache.html

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore): If the cached frame is the main
        frame, call setParentVisible(true) on the frame's view.

2011-04-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2: Can't scroll page after printing on Yahoo.com and other sites
        <rdar://problem/9233291>
        https://bugs.webkit.org/show_bug.cgi?id=59049

        * page/Frame.cpp:
        (WebCore::Frame::setPrinting): Match Mac WebKit1 code when ending printing,
        and call forceLayout() instead of forceLayoutForPagination().

2011-04-20  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Reduce size of GraphicsContext3D's compiled code
        https://bugs.webkit.org/show_bug.cgi?id=59029

        Changed format conversion operations to work line-by-line instead
        of pixel-by-pixel, and passed them as function pointers rather
        than template parameters. Simplified computation of source
        increment, since elements per row is now all that is needed.

        These changes reduce the size of GraphicsContext3D.o in release
        mode on Linux from 299 KB to 53 KB.

        No new tests. Existing layout tests cover these format conversions
        well, and caught one typo in the restructuring. Also ran WebGL
        conformance suite and other demos.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::doUnpackingAndPacking):
        (WebCore::computeSourceElementsPerRow):
        (WebCore::doPacking):
        (WebCore::doFloatingPointPacking):
        (WebCore::GraphicsContext3D::packPixels):

2011-04-20  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        REGRESSION(r82376): Clicking on a label, associated with a disabled input element changes state of the element.
        https://bugs.webkit.org/show_bug.cgi?id=59037

        Test: fast/events/simulated-click-disabled.html

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchSimulatedClick): Added check for disabled element.

2011-04-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Split bidiFirst into two functions
        https://bugs.webkit.org/show_bug.cgi?id=59025

        I don't have a full understanding of the skipInlines case yet
        (hence it's not as pretty as the non-skipping case), but
        this is clearly a win, as both functions are much simpler
        than their combined version.

        Both of these functions still have bad names.  However the
        bidiNext/bidiFirst names date all the way back to revision 1
        of the WebKit repository. :)  So I don't feel too bad keeping
        them for the moment.

        * rendering/InlineIterator.h:
        (WebCore::bidiNext):
        (WebCore::bidiFirstSkippingInlines):
        (WebCore::bidiFirstNotSkippingInlines):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedNormalFlowLayout):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::determineStartPosition):

2011-04-20  Jia Pu  <jpu@apple.com>

        Reviewed by Adele Peterson.
    
        [Mac] Like autocorrection, other types of substitution need to respect undo.
        https://bugs.webkit.org/show_bug.cgi?id=59009
        <rdar://problem/8601537>

        Similar to autocorrection, we use SpellingCorrectionCommand to carry out other types of text substitution, so that
        if user undoes the substitution, it will not be applied again. For CreateLinkCommand,  we add marker when it's undone
        so that we won't automatically add link again.

        * editing/CreateLinkCommand.h:
        (WebCore::CreateLinkCommand::isCreateLinkCommand):
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::isCreateLinkCommand):
        * editing/EditCommand.h:
        * editing/Editor.cpp:
        (WebCore::Editor::unappliedEditing):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        * editing/SpellingCorrectionController.cpp:
        (WebCore::SpellingCorrectionController::respondToAppliedEditing):
        (WebCore::SpellingCorrectionController::respondToUnappliedEditing):
        * editing/SpellingCorrectionController.h:
        (WebCore::SpellingCorrectionController::UNLESS_ENABLED):

2011-04-20  Steve Lacey  <sjl@chromium.org>

        Reviewed by Eric Carlson.

        [chromium] Move Chromium media controls into own root element.
        https://bugs.webkit.org/show_bug.cgi?id=59018

        No new tests as there is no functional change

        * WebCore.gypi:
        * css/mediaControlsChromium.css:
        (audio::-webkit-media-controls-timeline-container, video::-webkit-media-controls-timeline-container):
        * html/shadow/MediaControlRootElementChromium.cpp: Added.
        Clone of html/shadow/MediaControlRootElement.cpp with all unused code removed.
        * html/shadow/MediaControlRootElementChromium.h: Added.

2011-04-20  Charlie Lee  <chocobo@chromium.org>

        Reviewed by Dirk Schulze.

        LEFilter change doesn't compile on ARM neon targets
        https://bugs.webkit.org/show_bug.cgi?id=58671

        Build fix for Chromium ARM/NEON platform. Added platform/graphics/filters/arm directory to build system.

        * WebCore.gyp/WebCore.gyp:

2011-04-20  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Ryosuke Niwa.

        Continue (3rd) experiment with moving caret by word in visual order.
        https://bugs.webkit.org/show_bug.cgi?id=58294

        This patch along with r82588 and r83483 implements moving caret by
        word in visual order.
        
        The overall algorithm is:
        1. First get the InlineBox and offset of the pass-in VisiblePosition.
        2. Based on the position (left boundary, middle, right boundary) of the offset and the
           direction of the movement, look for visually adjacent word breaks.
        2.1 If the offset is the minimum offset of the box,
            return the rightmost word boundary in previous boxes if moving left.
            return the leftmost word boundary in box and next boxes if moving right.
        2.2 Similar for the case when offset is at the maximum offset of the box.
        2.3 When offset is inside the box (not at boundaries), first find the previousWordPosition 
            or nextWordPosition based on the directionality of the box. If this word break position 
            is also inside the same box, return it. Otherwise (the nextWordPosition or 
            previousWordPosition is not in the same box or is at the box boundary), collect all the 
            word breaks in the box and search for the one closest to the input "offset" based on 
            box directionality, block directionality, and movement direction. Continue search in 
            adjacent boxes if needed.

        Notes:
        1. Word boundaries are collected one box at a time. Only when a boundary that is closest to 
           the input position (in the moving direction) is not available in current box, word 
           boundaries in adjacent box will be collected. So, there is no need to save InlineBox in 
           word boundaries. Instead, the word boundaries are saved as a pair 
           (VisiblePosition, offset) to avoid recomputing VisiblePosition.
 
        2. We only collect boundaries of the right kind (i.e. left boundary of a word in LTR block
           and right boundary of a word in RTL block). And word boundaries are collected using 
           previousWordPosition() and nextWordPosition(). So when box directionality is the same as 
           block directionality, word boundaries are collected from right to left visually in a LTR 
           box, and word boundaries are collected from left to right visually in a RTL box. It is
           the other way around when box directionality is different from block directionality.

        3. To find the right kinds of word boundaries, we must move back and forth between words
           in some situations. For example, if we're moving to the right in a LTR box in LTR block,
           we cannot simply return nextWordPosition() because it would return the right boundary
           of a word. Instead, we return nextWordPosition()'s nextWordPosition()'s previousWordPosition().

        4. When collecting word breaks inside a box, it first computes a start position, then
           collect the right kind of word breaks until it reaches the end of (or beyond) the box.
           In the meanwhile, it might need special handling on the rightmost or leftmost position 
           based on the directionality of the box and block. These computations do not consider the 
           box's bidi level.

        * editing/visible_units.cpp:
        (WebCore::nextWordBreakInBoxInsideBlockWithDifferentDirectionality):
        (WebCore::collectWordBreaksInBox):
        (WebCore::previousWordBoundaryInBox):
        (WebCore::nextWordBoundaryInBox):
        (WebCore::visuallyLastWordBoundaryInBox):
        (WebCore::leftWordBoundary):
        (WebCore::rightWordBoundary):
        (WebCore::leftWordPosition):
        (WebCore::rightWordPosition):

2011-04-20  Cris Neckar  <cdn@chromium.org>

        Reviewed by Dirk Schulze.

        Return early when the paint rect and the source rect do not overlap as no bytes need to be copied.
        https://bugs.webkit.org/show_bug.cgi?id=57885

        Test: svg/filters/svg-transform-blur-crash.xhtml

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::copyImageBytes):

2011-04-20  Jian Li  <jianli@chromium.org>

        Reviewed by Kenneth Russell.

        Support DataView in workers
        https://bugs.webkit.org/show_bug.cgi?id=59014

        Test: fast/canvas/webgl/worker-data-view-test.html

        * workers/WorkerContext.idl: Expose DataView constructor.

2011-04-20  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        REGRESSION (WebKit2): CSS animations on pages that use accelerated compositing stop after switching tabs
        https://bugs.webkit.org/show_bug.cgi?id=57868
        
        Running CACFAnimations aren't remembered when layer tree is unparented and 
        then reparented. Added a new ensureAnimationsSubmitted function to 
        PlatformCALayer to traverse the tree and resubmit animations, setting the 
        beginTime to the original start time of the animation. This is called in WK2
        when layer tree is newly parented.
        
        I also consolidated currentTimeToMediaTime into PlatformCALayer so it can be shared
        between PlatformCALayer and GraphicsLayerCA.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        * platform/graphics/ca/PlatformCAAnimation.h:
            Remember actual animation start time in CACFAnimation beginTime property
        * platform/graphics/ca/PlatformCALayer.h:
            New ensureAnimationsSubmitted function which traverses layers and resubmits all animations
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:

2011-04-20  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        Adopt QTKit API for listing and deleting file in its media cache.
        <rdar://problem/9130029> 
        https://bugs.webkit.org/show_bug.cgi?id=58795

        Not possible to test automatically, verified manually.

        * WebCore.exp.in: Export new media download cache functions.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::registerMediaEngine): Register cache management functions.
        (WebCore::MediaPlayerPrivateQTKit::getSitesInMediaCache): New, return cache origins.
        (WebCore::MediaPlayerPrivateQTKit::clearMediaCache): New, empty the media cache.
        (WebCore::MediaPlayerPrivateQTKit::clearMediaCacheForSite): New, delete files in the media
            cache for one origin.

        * platform/mac/WebCoreSystemInterface.h: Add new WKSI functions.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2011-04-20  Dirk Schulze  <krit@webkit.org>

        Reviewed by Simon Fraser.

        SVG feDropShadow implementation of SVG Filters 1.2
        https://bugs.webkit.org/show_bug.cgi?id=52513

        Support different radii for horizontal and vertical blurring in ShadowBlur. This is a preperation for feDropShadow.
        feDropShadow is a new shorthand filter effect for the up-comming Filter 1.0 specification and will use ShadowBlur.
        feGaussianBlur might make use of ShadowBlur as well later (on SourceAlpha input).
        Added ShadowBlur to remaining platforms.

        The changes can't be tested before the changes in feGaussianBlur or feDropShadow. Current behavior is not affected.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.pro:
        * platform/graphics/FloatSize.h:
        (WebCore::FloatSize::scale):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::ScratchBuffer):
        (WebCore::ScratchBuffer::setLastShadowValues):
        (WebCore::ScratchBuffer::setLastInsetShadowValues):
        (WebCore::ScratchBuffer::matchesLastShadow):
        (WebCore::ScratchBuffer::matchesLastInsetShadow):
        (WebCore::ScratchBuffer::clearScratchBuffer):
        (WebCore::ShadowBlur::ShadowBlur):
        (WebCore::calculateLobes):
        (WebCore::ShadowBlur::blurLayerImage):
        (WebCore::ShadowBlur::adjustBlurRadius):
        (WebCore::ShadowBlur::calculateLayerBoundingRect):
        (WebCore::computeSliceSizesFromRadii):
        (WebCore::ShadowBlur::templateSize):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawLayerPieces):
        * platform/graphics/ShadowBlur.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):

2011-04-19  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 52963 - Enable O(1) access to root from any node in shadow DOM subtree
        https://bugs.webkit.org/show_bug.cgi?id=52963

        .) Change base class of ShadowRoot from DocumentFragment to TreeScope.
        .) Re-enable tree scope handling in Node (had ASSERT_NOT_REACHED, etc.).
        .) Merged setTreeScope() with setTreeScopeRecursively()
        .) Call setTreeScopeRecursively in DOM manipulation functions where applicable.
        .) Adapt JavaScript Node wrappers (temporary code - see https://bugs.webkit.org/show_bug.cgi?id=58704).

        No new tests. (refactoring)

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::ContainerNode::removeBetween):
        (WebCore::ContainerNode::removeChildren):
        (WebCore::ContainerNode::parserAddChild):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::setDocType):
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::treeScope):
        (WebCore::Node::setTreeScopeRecursively):
        * dom/Node.h:
        (WebCore::Node::document):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::~ShadowRoot):
        (WebCore::ShadowRoot::nodeType):
        (WebCore::ShadowRoot::cloneNode):
        (WebCore::ShadowRoot::childTypeAllowed):
        * dom/ShadowRoot.h:
        (WebCore::toShadowRoot):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::setParentTreeScope):
        * dom/TreeScope.h:
        * rendering/RenderSlider.cpp:

2011-04-20  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Update front-end files list in WebCore.vcproj
        https://bugs.webkit.org/show_bug.cgi?id=58896

        * WebCore.vcproj/WebCore.vcproj:

2011-04-20  Dimitri Glazkov  <dglazkov@chromium.org>

        Qt build fix after r84380.

        * css/CSSPrimitiveValueMappings.h: Moved EBorderCollapse-related casts from under ENABLE(SVG) guard.

2011-04-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Build libWebCore with the gtk sources too
        https://bugs.webkit.org/show_bug.cgi?id=58968

        In some cases webcore files are compiled twice, so it improves the
        build time.

        * GNUmakefile.am: Add webcore gtk sources to libWebCore sources.

2011-04-20  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Allow casting between CSSPrimitiveValue and EBorderCollapse to remove special-case logic from CSSStyleSelector.
        https://bugs.webkit.org/show_bug.cgi?id=58964

        No new tests as no new functionality added.

        * css/CSSPrimitiveValueMappings.h:
        Support casting to/from EBorderCollapse.
        * css/CSSStyleSelector.cpp:
        Use new casting ability to simplify code.
        * rendering/style/RenderStyle.h:
        Use EBorderCollapse instead of a bool for representing border collapse member variable.
        * rendering/style/RenderStyleConstants.h:
        Added EBorderCollapse enum.

2011-04-19  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Move and rename GLES2Canvas.
        https://bugs.webkit.org/show_bug.cgi?id=58927

        Move GLES2Canvas to platform/graphcs/gpu, where all the other
        gpu-related files live, and rename it to GraphicsContextGPU to better
        reflect its purpose.

        Covered by existing tests.

        * WebCore.gypi:
        * platform/graphics/chromium/GLES2Canvas.cpp:
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::drawBitmapGLES2):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::setSharedGraphicsContext3D):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::gpuCanvas):

2011-04-20  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Clean the style of our cookie methods
        https://bugs.webkit.org/show_bug.cgi?id=58987

        Got rid of the variables named "u" in favor just converting the url when needed.

        * platform/qt/CookieJarQt.cpp:
        (WebCore::setCookies): The variable p was unused.
        The ::toAscii() depends on the default codec, use toLatin1() instead.
        (WebCore::cookies): foreach() should use const reference.
        (WebCore::cookieRequestHeaderFieldValue):

2011-04-19  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        ScriptController.h is included in too many places
        https://bugs.webkit.org/show_bug.cgi?id=58963

        Remove ScriptController.h #includes from a bunch of .cpp files where it
        doesn't appear to be necessary.

        * bindings/js/JSCustomPositionCallback.cpp:
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        * bindings/js/JSCustomVoidCallback.cpp:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/ScriptDebugServer.cpp:
        * bindings/v8/NPV8Object.cpp:
        * bindings/v8/ScriptCachedFrameData.cpp:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8IsolatedContext.cpp:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/custom/V8LocationCustom.cpp:
        * dom/Node.cpp:
        * dom/ScriptElement.cpp:
        * dom/XMLDocumentParser.cpp:
        * dom/XMLDocumentParserQt.cpp:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLObjectElement.cpp:
        * html/HTMLPlugInElement.cpp:
        * html/parser/HTMLConstructionSite.cpp:
        * html/parser/HTMLTreeBuilder.cpp:
        * inspector/InspectorProfilerAgent.cpp:
        * loader/icon/IconDatabase.cpp:
        * page/Chrome.cpp:
        * page/Navigator.cpp:
        * page/Page.cpp:
        * plugins/PluginView.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/symbian/PluginViewSymbian.cpp:
        * plugins/win/PluginViewWin.cpp:
        * svg/SVGDocumentExtensions.cpp:
        * xml/XMLTreeViewer.cpp:

2011-04-20  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add Save As to the Resources panel context menu.
        https://bugs.webkit.org/show_bug.cgi?id=58983

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype.onattach):
        (WebInspector.FrameResourceTreeElement.prototype._handleContextMenuEvent.save):
        (WebInspector.FrameResourceTreeElement.prototype._handleContextMenuEvent):
        (WebInspector.ResourceRevisionTreeElement.prototype._handleContextMenuEvent.save):
        (WebInspector.ResourceRevisionTreeElement.prototype._handleContextMenuEvent):

2011-04-20  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Cleanup includepath adjustment for generated files
        https://bugs.webkit.org/show_bug.cgi?id=58869

        Build cleanup, no new tests.

        * WebCore.pri: Add the directory of generated files to the include path
        with absolute path to make it valid in the final build step. Remove
        unnecessary logic.

2011-04-20  Mariusz Grzegorczyk  <mariusz.g@samsung.com>

        Reviewed by Andreas Kling.

        [EFL] Initializing m_window member field in PluginView.cpp for efl port
        https://bugs.webkit.org/show_bug.cgi?id=58311

        No new tests needed: only initializing class member.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):

2011-04-20  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: fix Leopard compile.

        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendClientLocal.h:
        (WebCore::InspectorFrontendClientLocal::saveAs):

2011-04-20  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add saveAs into the InspectorFrontendHost binding.
        https://bugs.webkit.org/show_bug.cgi?id=58979

        * English.lproj/localizedStrings.js:
        * inspector/InspectorFrontendClient.h:
        (WebCore::InspectorFrontendClient::saveAs):
        (WebCore::InspectorFrontendClient::saveSessionSetting):
        (WebCore::InspectorFrontendClient::loadSessionSetting):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::saveAs):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.saveAs.fr.onload):
        (.WebInspector.InspectorFrontendHostStub.prototype.saveAs):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._contextMenu):
        (WebInspector.NetworkPanel.prototype._copyAll):
        (WebInspector.NetworkPanel.prototype._copyResource):
        (WebInspector.NetworkPanel.prototype._exportAll):
        (WebInspector.NetworkPanel.prototype._exportResource):
        * inspector/front-end/Settings.js:
        * inspector/front-end/utilities.js:
        ():

2011-04-20  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Tony Gentilcore.

        Error event in <script> element shouldn't bubble
        https://bugs.webkit.org/show_bug.cgi?id=51040

        Test: svg/dom/SVGScriptElement/script-onerror-bubbling.svg

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::dispatchErrorEvent): the method now has same implementation for all script
        elements, script load error event doesn' bubble.
        * dom/ScriptElement.h:
        * html/HTMLScriptElement.cpp:
        * html/HTMLScriptElement.h:
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::parseMappedAttribute): SVG script element now supports onerror
        hanlder which behaves the same way as onerror in HTML script element: it's invoked when
        script loading fails and the event doesn't bubble.
        * svg/SVGScriptElement.h:

2011-04-20  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: minor protocol cleanups (refined types).
        https://bugs.webkit.org/show_bug.cgi?id=58970

        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.json:

2011-04-20  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Eric Seidel.

        Leaks beneath RenderSVGShadowTreeRootContainer::updateFromElement seen on SnowLeopard Intel Leaks
        https://bugs.webkit.org/show_bug.cgi?id=56672

        ~RenderSVGShadowTreeRootContainer() cleared shadow host only if
        the shadow root is attached. This is wrong because it will
        leak shadow root when the root is not attached. For example, it
        leaks shadow root of <use> element which is pending on resource.

        This patch is clearing shadow host if m_shadowRoot is valid to
        prevent leaking.

        Fixing leaking, no new tests.

        * rendering/svg/RenderSVGShadowTreeRootContainer.cpp:
        (WebCore::RenderSVGShadowTreeRootContainer::~RenderSVGShadowTreeRootContainer):

2011-04-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Antti Koivisto.

        Reproducible crash two-finger zooming at multiple sites in WebCore::RenderLayer::isTransparent
        https://bugs.webkit.org/show_bug.cgi?id=58868

        I could not figure out how to make a test.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer): Check for existence of a
        parent before calling a method on it.

2011-04-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Daniel Bates.

        [EFL] Add current time to media control panel.
        https://bugs.webkit.org/show_bug.cgi?id=58866

        Implement paintMediaCurrentTime() to show playing time of media content.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::RenderThemeEfl):
        (WebCore::RenderThemeEfl::formatMediaControlsCurrentTime):
        (WebCore::RenderThemeEfl::paintMediaCurrentTime):
        * platform/efl/RenderThemeEfl.h:

2011-04-19  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Adam Barth

        Update the list of Unicode blocks to treat as complex scripts
        per Unicode 6.0. Also, make [U+02E5..U+02E9] (IPA tone marks)
        go through the complex script code path.

        Test: fast/text/ipa-tone-letters.html

        http://bugs.webkit.org/show_bug.cgi?id=39799

        * platform/graphics/Font.cpp:
        (WebCore::Font::codePath):

2011-04-19  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Simon Fraser.

        Follow on fix for https://bugs.webkit.org/show_bug.cgi?id=58926

        Move the assert from Image::drawPattern() to Image::drawTiled() so we don't hit it when
        trying to paint GeneratedImages.

        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern):

2011-04-19  Simon Fraser  <simon.fraser@apple.com>

        Fix 32-bit builds.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::determineBackgroundBleedAvoidance):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):

2011-04-19  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Kent Tamura.

        [Chromium]UI polishes and tweaks to Autofill dropdown menu.
        https://bugs.webkit.org/show_bug.cgi?id=58505
        http://code.google.com/p/chromium/issues/detail?id=51077

        No new tests. Because this is autofill looking problem in Chromium.
        Add m_menuType as PopupMenuStyle to change popup style change.
        Put kLinePaddingHeight at the top and bottom of each line if m_menuType is AutofillPopup.
        Change separator color to #dcdcdc and remove sparatorPadding at the edge if m_menuType is AutofillPopup.
        Change the line height of separator as only the piece if m_menuType is AutofillPopup.
        Change the label font size 0.9 time smaller than regular font size if m_menuType is AutofillPopup.

        * platform/PopupMenuStyle.h: Add enum PopupMenuType;
        (WebCore::PopupMenuStyle::PopupMenuStyle): Add m_menuType.
        (WebCore::PopupMenuStyle::menuType): Add to change the style according to the return value.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::paintRow):Change the separator color to #dcdcdc.
        Change the edge padding according to menuStyle().
        (WebCore::PopupListBox::getRowHeight): Add kLineHeightMargin*2 for each line height.

2011-04-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        background color of elements with border-radius shows around outer edge of border at corners
        https://bugs.webkit.org/show_bug.cgi?id=21819
        
        When drawing a background followed by a border with the same rounded
        clip, some border color leaks out because of antialiasing.
        
        Fix this by using two different strategies depending on the colors.
        If the border is opaque on all sides, we can inset the background by
        a device pixel. If not, then we have to draw the unclipped background
        and border into a transparency layer, and then clip that.
        
        A futher possible solution is mentioned in a comment in
        determineBackgroundBleedAvoidance() but not yet implemented.
        
        Also don't try to paint shadows with zero offset, spread and blur.

        Test: fast/backgrounds/background-leakage.html,
              fast/backgrounds/background-leakage-transforms.html

        * rendering/RenderBoxModelObject.h:
        Add a BackgroundBleedAvoidance enum with a value for each
        strategy.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        Pass BackgroundBleedAvoidance, bail early if the border rect is empty.
        If using the transparency layer solution, don't bother to clip
        to the rounded rect for the background. If the strategy is to
        shrink the background, do that.
        (WebCore::BorderEdge::BorderEdge):
        (WebCore::BorderEdge::obscuresBackgroundEdge):
        Helper method to determine if this border side will totally
        obscured by the border edge, allowing us to inset it.
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        Pass BackgroundBleedAvoidance through.
        (WebCore::RenderBoxModelObject::paintBorderSides):
        Ditto.
        (WebCore::RenderBoxModelObject::paintTranslucentBorderSides):
        Ditto.
        (WebCore::RenderBoxModelObject::paintBorder):
        Fill BorderEdges using getBorderEdgeInfo now.
        Don't clip to the rounded border if we are using the
        transparency layer solution.
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        Pass bleedAvoidance through, and use it for double borders.
        (WebCore::RenderBoxModelObject::getBorderEdgeInfo):
        Helper to fill in the BorderEdge array.
        (WebCore::RenderBoxModelObject::borderObscuresBackgroundEdge):
        Used to determine if we can use the background shrinkage solution.
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        Don't paint shadows that should not be visible.

        * rendering/RenderBox.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxFillLayers):
        Pass BackgroundBleedNone for the root box.
        
        (WebCore::RenderBox::determineBackgroundBleedAvoidance):
        Determine which bleed strategy we can use.
        
        (WebCore::RenderBox::paintBoxDecorationsWithSize):
        Based on the bleedAvoidance, make a transparency layer
        which will be clipped to the rounded border outside edge,
        and pass bleedAvoidance to the background and border-painting
        methods.        
        (WebCore::RenderBox::paintMaskImages):
        Use BackgroundBleedNone.
        (WebCore::RenderBox::paintFillLayers):
        (WebCore::RenderBox::paintFillLayer):
        Pass bleedAvoidance through.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        Pass BackgroundBleedNone. At some point we may want to do the right
        thing for split inlines.

        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        Pass BackgroundBleedNone.

2011-04-19  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket: Add assertion for SocketStreamError::failingURL.
        https://bugs.webkit.org/show_bug.cgi?id=58765

        No new tests, because an existing test http/tests/inspector/console-websocket-error.html should cover this.

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didFail): If error.failingURL() is provided, it must be the same as
        m_handshake.url(). failingURL may be null if SocketStreamHandle has created a SocketStreamError
        using zero- or one-argument constructor (which is old version but some ports are still using it).
        In that case, m_handshake.url() is passed to addMessage().

2011-04-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dimitri Glazkov.

        Media controls status display should not be hidden for live streams
        https://bugs.webkit.org/show_bug.cgi?id=58952

        Tested manually because we don't have any live streams to test in DRT.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlStatusDisplayElement::update): Set the status to "Loading" only until
            there is something to display (readyState exceeds HAVE_METADATA).
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::loadedMetadata): Don't hide the status display for
            live streams.

2011-04-19  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=45425
        HTMLLinkElement.disabled does not forward value to the Stylesheet's disabled attribute on setting

        Test: fast/html/htmllink-disable.html
        Test: fast/dom/HTMLLinkElement/disabled-attribute.html

        Match the HTML5 specification by forwarding the 'disabled' attribute to our stylesheet.

        Based on previous work by Bijan Amirzada <bijana@codeaurora.org>.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::disabled): Return our stylesheet's 'disabled' value or
        false if we don't have a stylesheet.
        (WebCore::HTMLLinkElement::setDisabled): Set our stylesheet's 'disabled' value or
        ignore the call if we don't have a stylesheet.
        * html/HTMLLinkElement.h:
        * html/HTMLLinkElement.idl: Remove 'Reflect' as it is not a reflected attribute anymore in HTML5.
        This matches the way FF4, Opera and IE9 handle the attribute.

2011-04-19  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Remove calls to deprecatedOffset and deprecatedNode in TypingCommand
        https://bugs.webkit.org/show_bug.cgi?id=58569

        Removed all calls to deprecatedOffset and deprecatedNode.

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):

2011-04-19  Adrienne Walker  <enne@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Initialize depth mask to known value before getBooleanv call
        https://bugs.webkit.org/show_bug.cgi?id=58948

        This trips an assert in the GPU command buffer client code if the
        pointed-to value is not initialized to 0 or -1.

        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::clearFramebuffer):

2011-04-19  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Simon Fraser.

        BitmapImage::destroyMetadataAndNotify should clear m_checkedForSolidColor
        https://bugs.webkit.org/show_bug.cgi?id=58926

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyMetadataAndNotify): Set m_checkedForSolidColor to false.
        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::assertNotSolidColor):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern): Add assert to make sure this is not called for a 1x1 image.

2011-04-19  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Ojan Vafai.

        REGRESSION(r83967): Crash in selectionExtentRespectingEditingBoundary
        https://bugs.webkit.org/show_bug.cgi?id=58910

        The crash was caused by selectionExtentRespectingEditingBoundary's incorrectly assuming that
        targetNode always have renderer when there selection has an editable root and the target node
        is outside of the editable root.
        
        Fixed the bug by adding an early exit when the target node is null.

        No new tests are added since we don't have a reduction for this crash.

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

2011-04-19  Geoffrey Garen  <ggaren@apple.com>

        Try to fix v8 build.

        * bindings/scripts/CodeGeneratorV8.pm: This is a pretty bad system.

2011-04-19  Enrica Casucci  <enrica@apple.com>

        Reviewed by Ryosuke Niwa.

        REGRESSION(r55762): Highlight color can't be copied in gmail.
        https://bugs.webkit.org/show_bug.cgi?id=58925
        <rdar://problem/9253057>

        Test: editing/pasteboard/copy-text-with-backgroundcolor.html

        The changes of r55762 uncovered the underlying issue here. The markup fragment
        placed in the pasteboard does not contain the background color style.
        This occurs only if the selection is limited to a single text node, whereas if the
        selection spans across multiple nodes, the style is preserved correctly.
        The fix consists in changing the logic that decides whether we should include the wrapping
        node in the markup. That logic is based on the code in highestAncestorToWrapMarkup which relies
        on isElementPresentational to choose candidates to be the wrapping node.
        I've extended it to accept nodes that have non fully transparent background colors.

        * editing/Editor.cpp:
        (WebCore::Editor::hasTransparentBackgroundColor): Now is a static method of the class.
        * editing/Editor.h:
        * editing/markup.cpp:
        (WebCore::isElementPresentational): Modified to use hasTransparentBackgroundColor.

2011-04-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed a use of markDOMObjectWrapper: NodeLists
        https://bugs.webkit.org/show_bug.cgi?id=58939

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::markChildren): No need to mark node lists, because
        now they use the opaque roots system to decide their lifetimes.

        * bindings/js/JSNamedNodeMapCustom.cpp: Removed stray newline.

        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeListOwner::isReachableFromOpaqueRoots):
        (WebCore::JSNodeListOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::toJS): Use the opaque roots system to avoid relying on
        markDOMObjectWrapper.

        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeList::isDynamicNodeList):
        * dom/DynamicNodeList.h:
        (WebCore::DynamicNodeList::rootNode): Added the ability to get the node
        backing a NodeList, for use in the opaque roots system.

        * dom/Node.cpp:
        * dom/Node.h:
        * dom/NodeList.h:
        (WebCore::NodeList::isDynamicNodeList): Ditto. Removed cruft related
        to the old way of marking NodeLists.

        * dom/NodeList.idl: We need a custom toJS so we can specify a custom
        WeakHandleOwner at construction time.

2011-04-19  Antoine Labour  <piman@chromium.org>

        Reviewed by James Robinson.

        For invisible iframes, propagate compositing to parent instead of setting self
        as root.
        https://bugs.webkit.org/show_bug.cgi?id=58414

        Tests: compositing/iframes/invisible-iframe.html
               compositing/iframes/invisible-nested-iframe-hide.html
               compositing/iframes/invisible-nested-iframe-show.html
               compositing/iframes/invisible-nested-iframe.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingFrame):
        Propagate compositing to parent even if frame owner has no renderer.

2011-04-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/9271848> Crash when the document element is removed

        Test: fast/events/overflow-viewport-renderer-deleted.html

        * page/FrameView.cpp:
        (WebCore::FrameView::calculateScrollbarModesForLayout): Reset m_viewportRenderer, in case this
        function takes a code path that doesn’t call applyOverflowToViewport().
        (WebCore::FrameView::layout): Whitespace change.

2011-04-19  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=57898
        REGRESSION (r82185): Scroll position not restored on navigation back to a page in 
        the page cache
        -and corresponding-
        <rdar://problem/9226652>

        Setting the contentsSize of a ScrollView to (0, 0) necessarily causes the scroll 
        position to be lost. (The scroll position is computed based on the 
        visibleContentSize.) This patch provides a mechanism to cache the current scroll 
        position, and then the HistoryController accesses only the cached position rather 
        than calling scrollPosition() which does a computation based on the 
        visibleContentSize. 

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::saveScrollPositionAndViewStateToItem):
        * page/FrameView.cpp:
        (WebCore::FrameView::resetScrollbarsAndClearContentsSize):
        * platform/ScrollView.h:
        (WebCore::ScrollView::cacheCurrentScrollPosition):
        (WebCore::ScrollView::cachedScrollPosition):

2011-04-19  Renata Hodovan  <reni@webkit.org>

        Reviewed by Eric Seidel.

        Move the alignment related macros in Vector.h to new Alignment.h.
        https://bugs.webkit.org/show_bug.cgi?id=56000

        Adding the new file to the forwarding headers of WebCore.

        * ForwardingHeaders/wtf/Alignment.h: Added.

2011-04-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Andreas Kling.

        [Qt] QtInstance method cache ownership rules are unclear
        https://bugs.webkit.org/show_bug.cgi?id=58820

        Make the QtInstance method cache use WriteBarrier, and handle
        ownership properly.

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fallbackObject):
        (JSC::Bindings::QtClass::fieldNamed):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::~QtInstance):
        (JSC::Bindings::QtInstance::removeCachedMethod):
        (JSC::Bindings::QtInstance::newRuntimeObject):
        (JSC::Bindings::QtInstance::markAggregate):
        * bridge/qt/qt_instance.h:

2011-04-19  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/57867> Re-order enum ResourceLoadPriority to make Unresolved value less important

        Reviewed by Antti Koivisto.

        * platform/network/ResourceLoadPriority.h:
        (enum ResourceLoadPriority): Moved Unresolved enum to the top of
        the list and set to -1 to emphasize the fact that this is an
        unresolved priority (rather than one higher than the highest
        priority).  Removed whitespace from the end of all enum lines.

2011-04-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by David Hyatt.

        Background radius is wrong for split inline
        https://bugs.webkit.org/show_bug.cgi?id=58843
        
        When computing the radii for a segment of a split inline, we have to
        constrain those radii for the current segment, while still drawing
        using the entire logical width.

        Tests: fast/backgrounds/border-radius-split-background-image.html
               fast/backgrounds/border-radius-split-background.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintFillLayer):
        Pass height and width for this box only to paintFillLayer()
        
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintFillLayer):
        Pass 0 for unused inlineBox height and width.

        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::getBackgroundRoundedRect):
        When computing the rounded background rect, we have to take the size of
        this segment of the inline box into account for radius constraining.
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        Call getBackgroundRoundedRect() in two places.

2011-04-19  Simon Fraser  <simon.fraser@apple.com>

        Build fix. For some reason RenderBoxModelObject.cpp
        was missing from my last commit.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::borderWillArcInnerEdge):
        (WebCore::edgeFlagForSide):
        (WebCore::includesEdge):
        (WebCore::BorderEdge::BorderEdge):
        (WebCore::BorderEdge::hasVisibleColorAndStyle):
        (WebCore::BorderEdge::shouldRender):
        (WebCore::BorderEdge::presentButInvisible):
        (WebCore::BorderEdge::usedWidth):
        (WebCore::BorderEdge::getDoubleBorderStripeWidths):
        (WebCore::edgesShareColor):
        (WebCore::styleRequiresClipPolygon):
        (WebCore::borderStyleFillsBorderArea):
        (WebCore::borderStyleHasInnerDetail):
        (WebCore::borderStyleIsDottedOrDashed):
        (WebCore::borderStyleHasUnmatchedColorsAtCorner):
        (WebCore::colorsMatchAtCorner):
        (WebCore::willBeOverdrawn):
        (WebCore::borderStylesRequireMitre):
        (WebCore::joinRequiresMitre):
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        (WebCore::RenderBoxModelObject::paintBorderSides):
        (WebCore::RenderBoxModelObject::paintTranslucentBorderSides):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        (WebCore::findInnerVertex):
        (WebCore::RenderBoxModelObject::clipBorderSidePolygon):
        (WebCore::RenderBoxModelObject::paintBoxShadow):

2011-04-19  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Refactor GLES2Canvas state application out into its own function.
        https://bugs.webkit.org/show_bug.cgi?id=58906

        Covered by existing tests in fast/canvas and canvas/philip.

        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::applyState):
        New function to apply compositing and clipping state.
        (WebCore::GLES2Canvas::fillPath):
        (WebCore::GLES2Canvas::fillRect):
        (WebCore::GLES2Canvas::beginShadowDraw):
        (WebCore::GLES2Canvas::endShadowDraw):
        Refactor calls to applyState().
        * platform/graphics/chromium/GLES2Canvas.h:

2011-04-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Fix multiple border rendering issues
        https://bugs.webkit.org/show_bug.cgi?id=58761
        
        Fix various border-drawing bugs, and optimize some common cases.
        Also refactors a lot of the border-drawing code to be more maintainable.
        
            Rounded border rendering with different border widths looks strange
            https://bugs.webkit.org/show_bug.cgi?id=17468
            
            paintBorder in RenderObject paint two times the corners
            https://bugs.webkit.org/show_bug.cgi?id=20495
            
            Overdraw at box corners when using RGBA colors with alpha
            https://bugs.webkit.org/show_bug.cgi?id=21835
            
            Enable antialiasing for border drawing, when transformed
            https://bugs.webkit.org/show_bug.cgi?id=22746
            
            Drawing border-radius from path sometimes fails to round outer border in the double style when it should
            https://bugs.webkit.org/show_bug.cgi?id=41301
            
            Drawing border-radius from path doesn't appear to always match up border edges correctly
            https://bugs.webkit.org/show_bug.cgi?id=41302
            
        Also fixes
            Should be able to create Path from RoundedIntRect
            https://bugs.webkit.org/show_bug.cgi?id=58809

        Tests: fast/borders/border-radius-different-width-001.html
               fast/borders/border-radius-inset-outset.html
               fast/borders/table-borders.html

        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatPoint.cpp:
        (WebCore::findSlope):
        (WebCore::findIntersection):
        New geometry helper functions (should eventually move into a new
        GeometryUtilities file).
        
        * platform/graphics/Path.h:
        * platform/graphics/Path.cpp:
        (WebCore::Path::addRoundedRect):
        Add an overload of addRoundedRect() that takes a RoundedIntRect.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::addRoundedRectClip):
        (WebCore::GraphicsContext::clipOutRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        Can now add a RoundedIntRect to a Path directly.
        
        * platform/graphics/IntRect.h:
        (WebCore::IntRect::minXMinYCorner):
        (WebCore::IntRect::maxXMinYCorner):
        (WebCore::IntRect::minXMaxYCorner):
        (WebCore::IntRect::maxXMaxYCorner):
        Convenience functions to get the rect corners, in a writing-mode-
        friendly way.

        * platform/graphics/RoundedIntRect.h:
        * platform/graphics/RoundedIntRect.cpp:
        (WebCore::RoundedIntRect::isRenderable):
        We need to know when Path::addRoundedRect() will fail because
        the sum of the radii exceed the height or width. This method tells
        us that.
        
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        Can now add a RoundedIntRect to a Path directly.

        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::borderWillArcInnerEdge):
        This can just to see if there are inner radii now.
        
        (WebCore::edgeFlagForSide):
        (WebCore::includesEdge):
        Convenience functions for the BorderEdgeFlags bitmask.
        
        (WebCore::BorderEdge::BorderEdge):
        (WebCore::BorderEdge::hasVisibleColorAndStyle):
        (WebCore::BorderEdge::shouldRender):
        (WebCore::BorderEdge::presentButInvisible):
        (WebCore::BorderEdge::usedWidth):
        (WebCore::BorderEdge::getDoubleBorderStripeWidths):
        Convenience class to hold data about how a single edge
        is drawn, and to contain some commonly used width-related methods.
        
        (WebCore::edgesShareColor):
        (WebCore::styleRequiresClipPolygon):
        (WebCore::borderStyleFillsBorderArea):
        (WebCore::borderStyleHasInnerDetail):
        (WebCore::borderStyleIsDottedOrDashed):
        (WebCore::borderStyleHasUnmatchedColorsAtCorner):
        (WebCore::colorsMatchAtCorner):
        (WebCore::willBeOverdrawn):
        (WebCore::borderStylesRequireMitre):
        (WebCore::joinRequiresMitre):
        Functions used to make the border drawing code more readable,
        which are used to determine when corners need a mitre, and
        need antialiasing.
        
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        Code to paint one side of a border, either via the path, or
        using rects/polygons, the appropriate mitres and antialiasing
        at the corners. includeLogicalLeftEdge and includeLogicalRightEdge need
        to be passed all the way down here so that when we recompute the
        path for double and ridge/groove borders, we correctly handle split box
        borders.
        
        (WebCore::RenderBoxModelObject::paintBorderSides):
        Paints the 4 border sides (if present).
        
        (WebCore::RenderBoxModelObject::paintTranslucentBorderSides):
        Called when one or more of the borders has a non-opaque color,
        and uses a transparency layer for each set of same-colored
        sides to avoid overdraw at the corners.
        
        (WebCore::RenderBoxModelObject::paintBorder):
        Builds an array of BorderEdge so we can iterate over them to 
        detect different border compbinations, and optimizations. Has
        a fast path for all-solid borders.
        
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        Moved from RenderObject, since all callers are in RenderBoxModelObject.
        Has the following changes:
          * Don't attempt to draw dashes if there is only space for a few,
            since it looks bad.
          * Handle double and groove borders on split inlines correctly,
            making use of includeLogicalLeftEdge, includeLogicalRightEdge

        (WebCore::findInnerVertex):
        For borders with a radiused inner edge, the per-side clip polygon
        has to project inside the padding box to avoid clipping the inner edge.
        This function computes a reasonable inner corner for the clipping
        polygon.
        (WebCore::RenderBoxModelObject::clipBorderSidePolygon):
        Have the corner joins pass through the corners of the inner and outer
        border rectangles, ensure we don't clip the inside if necessary,
        and handle antialiasing on the two mitres.
        
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        Use RenderStyle::getRoundedInnerBorderFor() rather than computeBorderInnerRect()
        etc.

        * rendering/RenderObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        Moved to RenderBoxModelObject.
        
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getRoundedBorderFor):
        (WebCore::RenderStyle::getRoundedInnerBorderFor):
        There was some very clumsy code that computed a rounded rect
        given the border rect and side widths. Cleaned this up by moving
        some code into RenderStyle. The overloaded getRoundedInnerBorderFor()
        which takes the border widths is used by the double and groove drawing
        code.

2011-04-19  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION(r74228-75294): removing nodes is 200+ times slower when selection is inside a shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=57061

        The bug was caused by Range::compareNode's incorrectly returning NODE_INSIDE when the selection is inside
        a shadow DOM and the node is outside of the shadow DOM. This caused respondToNodeModification to call
        RenderView::clearSelection every time a node is removed when selection is in a shadow DOM and resulted in
        a significant performance regression.

        Fixed Ranged::compareNode by making Range::compareBoundaryPoints throw a WRONG_DOCUMENT_ERR when there are
        no common ancestors between containerA and containerB. This will force compareNode to also throw an exception
        and prevents respondToNodeModification from clearing selection.

        No new tests because this is a performance improvement and the fix in Range cannot be tested since shadow DOM
        isn't exposed to JavaScript.

        * dom/Range.cpp:
        (WebCore::Range::setStart): Calls compareBoundaryPoints; since we ensures that the root container noes of
        start and end nodes are same, we should never get an exception from compareBoundaryPoints.
        (WebCore::Range::setEnd): Ditto.
        (WebCore::Range::isPointInRange): Calls compareBoundaryPoints; returns false when compareBoundaryPoints
        throws an exception.
        (WebCore::Range::comparePoint): Calls compareBoundaryPoints; exit early when an exception is thrown by
        compareBoundaryPoints.
        (WebCore::Range::compareBoundaryPoints): Throws an exception when two containers do not have a common ancestor.
        (WebCore::Range::boundaryPointsValid): Calls compareBoundaryPoints and checks that it didn't throw an exception.
        * dom/Range.h:
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::respondToNodeModification):
        * editing/htmlediting.cpp:
        (WebCore::comparePositions): Calls compareBoundaryPoints.
        * editing/markup.cpp:
        (WebCore::createMarkup): Calls compareBoundaryPoints; since startNode and pastEnd are both in the same document
        and neither are in a shadow DOM, it should never throw an exception.
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::containsNode): Calls compareBoundaryPoints; node is fully selected only if no exception
        was thrown.

2011-04-19  Jungshik Shin  <jshin@chromium.org>

        Reviewed by David Levin

        Make U+FEFF be treated as a zero-width character in both
        simple script and complex script code paths. In Chromium
        Windows, UniscribeHelper needs a rather extensive changes
        summarized below.  Other ports need minor changes.

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

        Test: fast/text/zero-width-characters-complex-script.html

        * platform/graphics/Font.h:
        (WebCore::Font::treatAsZeroWidthSpace): U+FEFF is added to the list
        (WebCore::Font::treatAsZeroWidthSpaceInComplexScript): Added. Same as the above except that ZWNJ and ZWJ are excluded.
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage): U+FEFF is made to have zero-width characters in simple script (fast) code path.
        * platform/graphics/chromium/FontUtilsChromiumWin.cpp:
        (WebCore::FontMap::getSpaceGlyph): Added to get the gid for space glyph to use in adjustSpaceAdvance when zero-width glyph character has a non-zero width and potentially 'visible' glyph.
        (WebCore::FontMap::FontData::FontData): spaceGlyph member added.
        (WebCore::getDerivedFontData): spaceGlyph is retrieved as well.
        * platform/graphics/chromium/FontUtilsChromiumWin.h:
        * platform/graphics/chromium/UniscribeHelper.cpp:
        (WebCore::UniscribeHelper::UniscribeHelper): m_spaceGlyph added.
        (WebCore::UniscribeHelper::shape): spaceGlyph is obtained stored for a font tried for each item.
        (WebCore::UniscribeHelper::adjustSpaceAdvances): For zero-width complex script characters, set the advance width to zero and replace a non-zero-width/visible glyph with a space glyph.
        (WebCore::UniscribeHelper::applySpacing):
        (WebCore::UniscribeHelper::containsMissingGlyphs): turned to a member function because it cannot work on glyphs alone any more but need to take into account a character corresponding to a glyph
        * platform/graphics/chromium/UniscribeHelper.h: 
        (WebCore::UniscribeHelper::Shaping::Shaping): m_spaceGlyph is added
        * platform/graphics/chromium/UniscribeHelperTextRun.cpp:
        (WebCore::UniscribeHelperTextRun::UniscribeHelperTextRun): When calling UniscriberHelper, add a new argument for spaceGlyph.

2011-04-19  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Extend the DIBPixelData class with the facility for writing the
        bitmap representation to disk for debugging purposes.
        https://bugs.webkit.org/show_bug.cgi?id=58862.

        * platform/graphics/win/DIBPixelData.cpp:
        (WebCore::DIBPixelData::writeToFile): New function.
        * platform/graphics/win/DIBPixelData.h:

2011-04-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Rename lengthReceived to encodedDataLength/dataLength
        https://bugs.webkit.org/show_bug.cgi?id=58883

        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::didReceiveData):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didReceiveContentLengthImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didReceiveContentLength):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didReceiveContentLength):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype.dataReceived):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveData):
        (WebCore::DocumentThreadableLoader::didReceiveCachedMetadata):
        * loader/DocumentThreadableLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveData):
        * loader/MainResourceLoader.h:
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didReceiveData):
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didReceiveData):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveContentLength):
        (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages):
        * loader/ResourceLoadNotifier.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveData):
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveData):
        * loader/SubresourceLoader.h:
        * loader/SubresourceLoaderClient.h:
        (WebCore::SubresourceLoaderClient::didReceiveData):
        (WebCore::SubresourceLoaderClient::didReceiveCachedMetadata):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveCachedMetadata):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveData):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/ApplicationCacheHost.h:
        * notifications/Notification.cpp:
        (WebCore::Notification::didReceiveData):
        * notifications/Notification.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::didReceiveData):
        * platform/network/BlobResourceHandle.cpp:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didReceiveData):
        * platform/network/android/ResourceHandleAndroid.cpp:
        (WebCore::SyncLoader::didReceiveData):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::WebCoreSynchronousLoaderClient::didReceiveData):
        * platform/network/curl/ResourceHandleCurl.cpp:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCoreSynchronousLoaderClient::didReceiveData):
        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/network/win/ResourceHandleWin.cpp:
        * workers/WorkerScriptLoader.h:
        * xml/XMLHttpRequest.h:

2011-04-19  Stephen White  <senorblanco@chromium.org>

        Reviewed by Eric Seidel.

        Pull framebuffer clearing out into its own function.
        https://bugs.webkit.org/show_bug.cgi?id=58897

        Covered by fast/canvas and canvas/philip tests.

        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::clearFramebuffer):
        (WebCore::DrawingBuffer::reset):
        * platform/graphics/gpu/DrawingBuffer.h:

2011-04-19 Brian Salomon <bsalomon@google.com>

        Reviewed by Eric Seidel.

        When flushing GrContext in ~PlatformContextSkia be sure correct GL context is set
        https://bugs.webkit.org/show_bug.cgi?id=58788

        Chromium browser test will be added that loads canvas page and then an 
        acclerated-composited page. Test must trigger ~PlatformContextSkia() 
        followed by invocation of GL compositor.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::~PlatformContextSkia):

2011-04-19  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] REGRESSION(84176): http/tests/xmlhttprequest/event-listener-gc.html fails
        https://bugs.webkit.org/show_bug.cgi?id=58871

        Unreviewed, rolling out r84176, r84178, r84186, r84212 and r84231.
        http://trac.webkit.org/changeset/84176 (original patch)
        http://trac.webkit.org/changeset/84178 (original patch - part 2)
        http://trac.webkit.org/changeset/84186 (build fix)
        http://trac.webkit.org/changeset/84212
        http://trac.webkit.org/changeset/84231 (skip failing test)

        original bugs:
         - https://bugs.webkit.org/show_bug.cgi?id=58718
         - https://bugs.webkit.org/show_bug.cgi?id=58853

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fallbackObject):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::removeCachedMethod):
        (JSC::Bindings::QtInstance::markAggregate):
        * bridge/qt/qt_instance.h:

2011-04-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84050.
        http://trac.webkit.org/changeset/84050
        https://bugs.webkit.org/show_bug.cgi?id=58892

        fast/dom/HTMLKeygenElement/keygen.html is crashing on Chromium
        (Requested by jknotten on #webkit).

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::ContainerNode::removeBetween):
        (WebCore::ContainerNode::removeChildren):
        (WebCore::ContainerNode::parserAddChild):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::setDocType):
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::treeScope):
        (WebCore::Node::setTreeScope):
        (WebCore::Node::setTreeScopeRecursively):
        * dom/Node.h:
        (WebCore::Node::document):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        * dom/ShadowRoot.h:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::setParentTreeScope):
        * dom/TreeScope.h:
        * rendering/RenderSlider.cpp:

2011-04-19  Kinuko Yasuda  <kinuko@chromium.org>

        Not reviewed; windows build fix attempt.

        * storage/StorageInfo.cpp:
        (WebCore::StorageInfo::~StorageInfo):
        * storage/StorageInfo.h:

2011-04-19  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        [Chromium] Enable QUOTA API at runtime if enable-quota flag is given
        https://bugs.webkit.org/show_bug.cgi?id=58784

        No new tests as this does not change any functionality.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::quotaEnabled):
        (WebCore::RuntimeEnabledFeatures::setQuotaEnabled):
        * page/DOMWindow.idl:

2011-04-19  John Gregg  <johnnyg@google.com>

        Reviewed by Darin Fisher.

        Enable folder drag-n-drop when using a "webkitdirectory" file input
        https://bugs.webkit.org/show_bug.cgi?id=58401

        This uses a new ChromeClient API to enumerate the directory and 
        return all the files, as if the user had selected that directory
        by clicking the control in the normal way.

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::enumerateChosenDirectory):
        * page/Chrome.cpp:
        (WebCore::Chrome::enumerateChosenDirectory):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/network/FormData.cpp:
        (WebCore::FormData::appendKeyValuePairItems):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::receiveDropForDirectoryUpload):
        (WebCore::RenderFileUploadControl::receiveDroppedFiles):
        * rendering/RenderFileUploadControl.h:

2011-04-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84150.
        http://trac.webkit.org/changeset/84150
        https://bugs.webkit.org/show_bug.cgi?id=58875

        Broken backspace in Search box of Web Inspector (Requested by
        apavlov on #webkit).

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

2011-04-19  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: NPE in TextEditorModel
        https://bugs.webkit.org/show_bug.cgi?id=58870

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._frameAdded):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel.prototype.setText):

2011-04-19  Hans Wennborg  <hans@chromium.org>

        Reviewed by Tony Gentilcore.

        IndexedDB: Remove accidental header include directive from LevelDB backend.
        https://bugs.webkit.org/show_bug.cgi?id=58872

        No new functionality, no new tests.

        * storage/IDBLevelDBBackingStore.cpp:

2011-04-19  Herczeg Zoltan  <zherczeg@webkit.org>

        Build fix.

        LEFilter change doesn't compile on ARM neon targets
        https://bugs.webkit.org/show_bug.cgi?id=58671

        Thanks for Charlie Lee to fixing this.

        * WebCore.gypi:

2011-04-19  Daniel Bates  <dbates@webkit.org>

        Attempt to fix the Qt Linux Release Minimal build after changeset 84225
        <http://trac.webkit.org/changeset/84225> (https://bugs.webkit.org/show_bug.cgi?id=52788).

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::ensureEventAncestors): Add ENABLE(SVG) guards around call
        to Node::svgShadowHost() since this method is only defined when building with SVG enabled.

2011-04-18  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        Makes SVG shadow roots and DOM shadow roots distinct.
        https://bugs.webkit.org/show_bug.cgi?id=52788

        Not a functional change. Covered by existing SVG tests.

        * dom/EventDispatcher.cpp:
        (WebCore::findElementInstance):
        (WebCore::EventDispatcher::adjustToShadowBoundaries):
        (WebCore::EventDispatcher::adjustRelatedTarget):
        (WebCore::EventDispatcher::ensureEventAncestors):
        * dom/Node.cpp:
        (WebCore::Node::setShadowHost):
        (WebCore::Node::svgShadowHost):
        (WebCore::Node::shadowTreeRootNode):
        * dom/Node.h:
        (WebCore::Node::isSVGShadowRoot):
        (WebCore::Node::parentNode):
        (WebCore::Node::parentNodeGuaranteedHostFree):
        * rendering/svg/RenderSVGShadowTreeRootContainer.cpp:
        (WebCore::RenderSVGShadowTreeRootContainer::~RenderSVGShadowTreeRootContainer):
        (WebCore::RenderSVGShadowTreeRootContainer::updateFromElement):
        * rendering/svg/SVGShadowTreeElements.cpp:
        (WebCore::SVGShadowTreeRootElement::SVGShadowTreeRootElement):
        (WebCore::SVGShadowTreeRootElement::create):
        (WebCore::SVGShadowTreeRootElement::attachElement):
        (WebCore::SVGShadowTreeRootElement::clearSVGShadowHost):
        * rendering/svg/SVGShadowTreeElements.h:
        (WebCore::SVGShadowTreeRootElement::isSVGShadowRoot):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::title):

2011-04-18  Taiju TSUIKI  <develop@tzik.jp>

        Reviewed by Darin Fisher.

        Vendor-prefix requestFileSystem in FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=58517

        Prefix from:
        - window.requestFileSystem to window.webkitRequestFileSystem
        - window.resolveLocalFileSystemURL to window.webkitResolveLocalFileSystemURL
        - window.Flags to window.WebKitFlags
        - WorkerContext.requestFileSystem to WorkerContext.webkitRequestFileSystem
        - WorkerContext.resolveLocalFileSystemURL to WorkerContext.webkitResolveLocalFileSystemURL
        - WorkerContext.Flags to WorkerContext.WebKitFlags

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDirectoryEntryCustom.cpp:
        (WebCore::JSDirectoryEntry::getFile):
        (WebCore::JSDirectoryEntry::getDirectory):
        * bindings/js/JSDirectoryEntrySyncCustom.cpp:
        (WebCore::getFlags):
        (WebCore::JSDirectoryEntrySync::getFile):
        (WebCore::JSDirectoryEntrySync::getDirectory):
        * bindings/v8/custom/V8DirectoryEntryCustom.cpp:
        (WebCore::V8DirectoryEntry::getDirectoryCallback):
        (WebCore::V8DirectoryEntry::getFileCallback):
        * bindings/v8/custom/V8DirectoryEntrySyncCustom.cpp:
        (WebCore::getFlags):
        (WebCore::V8DirectoryEntrySync::getDirectoryCallback):
        (WebCore::V8DirectoryEntrySync::getFileCallback):
        * fileapi/DOMFileSystemBase.cpp:
        (WebCore::DOMFileSystemBase::getFile):
        (WebCore::DOMFileSystemBase::getDirectory):
        * fileapi/DOMFileSystemBase.h:
        * fileapi/DirectoryEntry.cpp:
        (WebCore::DirectoryEntry::getFile):
        (WebCore::DirectoryEntry::getDirectory):
        * fileapi/DirectoryEntry.h:
        * fileapi/DirectoryEntry.idl:
        * fileapi/DirectoryEntrySync.cpp:
        (WebCore::DirectoryEntrySync::getFile):
        (WebCore::DirectoryEntrySync::getDirectory):
        * fileapi/DirectoryEntrySync.h:
        * fileapi/DirectoryEntrySync.idl:
        * fileapi/WebKitFlags.h: Renamed from Source/WebCore/fileapi/Flags.h.
        (WebCore::WebKitFlags::create):
        (WebCore::WebKitFlags::isCreate):
        (WebCore::WebKitFlags::setCreate):
        (WebCore::WebKitFlags::isExclusive):
        (WebCore::WebKitFlags::setExclusive):
        (WebCore::WebKitFlags::WebKitFlags):
        * fileapi/WebKitFlags.idl: Renamed from Source/WebCore/fileapi/Flags.idl.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitRequestFileSystem):
        (WebCore::DOMWindow::webkitResolveLocalFileSystemURL):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::webkitRequestFileSystem):
        (WebCore::WorkerContext::webkitRequestFileSystemSync):
        (WebCore::WorkerContext::webkitResolveLocalFileSystemURL):
        (WebCore::WorkerContext::webkitResolveLocalFileSystemSyncURL):
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:

2011-04-18  Steve Lacey  <sjl@chromium.org>

        Reviewed by Dimitri Glazkov.

        Decouple media controls usage from implementation.
        This allows each port to implement thier own controls in a different
        manner to the default webkit implementation.

        Convert media controls hooks to a client interface
        https://bugs.webkit.org/show_bug.cgi?id=58346

        No new tests as there is no functional change.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaControls):
        (WebCore::HTMLMediaElement::ensureMediaControls):
        (WebCore::HTMLMediaElement::preDispatchEventHandler):
        * html/HTMLMediaElement.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelMuteButtonElement::MediaControlPanelMuteButtonElement):
        (WebCore::MediaControlPanelMuteButtonElement::create):
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement):
        (WebCore::MediaControlTimelineElement::create):
        (WebCore::MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement):
        (WebCore::MediaControlFullscreenButtonElement::create):
        * html/shadow/MediaControlElements.h:
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::MediaControlRootElement):
        (WebCore::MediaControls::create):
        * html/shadow/MediaControlRootElement.h:
        * html/shadow/MediaControls.cpp: Added.
        (WebCore::MediaControls::MediaControls):
        * html/shadow/MediaControls.h: Added.
        (WebCore::MediaControls::~MediaControls):

2011-04-18  Pascal Massimino  <pascal.massimino@gmail.com>

        Reviewed by Adam Barth.

        Add incremental decoding to WebP decoder
        https://bugs.webkit.org/show_bug.cgi?id=58851

        No new tests, as it's not possible for the layout test framework to
        force the decoders to decode incrementally.

        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::WEBPImageDecoder):
        (WebCore::WEBPImageDecoder::decode):
        * platform/image-decoders/webp/WEBPImageDecoder.h:

2011-04-18  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Roben.

        With PAN_SCROLLING, mousedown events for a mouse button aren't dispatched while
        pressing-and-holding another mouse button
        https://bugs.webkit.org/show_bug.cgi?id=58700

        Fixes an issue where mousedown events weren't dispatched when pressing a mouse button A
        while pressing and holding a mouse button B, where A != B. This issue only affects builds
        that enable PAN_SCROLLING.

        On mouse press with autoscroll in progress (m_autoscrollInProgress == true) we stopped
        the autoscroll timer, invalidated the click, and swallowed the mouse press. Instead, we
        should only stop the autoscroll timer.

        Test: fast/events/fire-mousedown-while-pressing-mouse-button.html

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

2011-04-18  Jon Lee  <jonlee@apple.com>

        Reviewed by Maciej Stachowiak.

        With overlay scrollbars, textarea resize corner gains borders when the textarea becomes scrollable
        https://bugs.webkit.org/show_bug.cgi?id=58617
        <rdar://problem/9048012>

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintResizer): Check for overlay scrollbars first, and then if the bars were created, before displaying the borders

2011-04-18  Jon Lee  <jonlee@apple.com>

        Reviewed by Maciej Stachowiak.

        Selected item background in list box gets rendered on top of overlay scrollbar knob (58824)
        https://bugs.webkit.org/show_bug.cgi?id=58824
        <rdar://problem/9292680>

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintObject): Moving the stage of painting the scrollbars to the foreground if using overlay scrollbars

2011-04-18  John Bauman  <jbauman@chromium.org>

        Reviewed by Kenneth Russell.

        Don't cast BitmapImageSingleFrameSkia to BitmapImage
        https://bugs.webkit.org/show_bug.cgi?id=58821

        BitmapImageSingleFrameSkia has isBitmap return true, but
        can't be cast to a BitmapImage. Instead of using BitmapImage,
        use isOpaque from SkBitmap to determine if the image has alpha.

        No new tests.

        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2011-04-18  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Steve Falkenburg.

        If deleting the StorageTracker.db file fails, local storage is left in a strange state.
        https://bugs.webkit.org/show_bug.cgi?id=58805

        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::syncFileSystemAndTrackerDatabase):
        When cleaning up the StorageTracker.db file, is not enough to call syncDeleteOrigin.
        deleteOrigin itself must be called to update the data structures that syncDeleteOrigin
        depends on and to prevent clashes between a theoretical web page editing local storage
        at the same time this method is called.
        (WebCore::StorageTracker::syncDeleteAllOrigins):
        If it is not possible to delete the StorageTracker.db file, empty it.
        (WebCore::StorageTracker::deleteOriginOnMainThread):
        Wrapper for deleteOrigin.
        * storage/StorageTracker.h:

2011-04-18  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        Added back missing #include.

        * bindings/js/DOMWrapperWorld.cpp:

2011-04-18  Enrica Casucci  <enrica@apple.com>

        Reviewed by Maciej Stachowiak.

        Dropping a file in a WKView (WebKit2) doesn't load the file.
        https://bugs.webkit.org/show_bug.cgi?id=58842
        <rdar://problem/8514409>
        
        The URL string for the file contains an extra %00 at the end
        that causes the network framework to fail to load the file.
        
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::getURL):

2011-04-18  Geoffrey Garen  <ggaren@apple.com>

        Discovered and rubber-stamped by Stephanie Lewis.

        Restored some code I accidentally deleted in <http://trac.webkit.org/changeset/83990>

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::clearWrappers): Do clear / destroy all our
        window shells when clearing / destroying ourselves. r83990 removed this
        behavior for documents since there are no per-document maps anymore,
        but removing this behavior for window shells too was a typo.

2011-04-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Made DOM handle ownership customizable, and customized it for Nodes and NamedAttrMaps
        https://bugs.webkit.org/show_bug.cgi?id=58828

        * WebCore.exp.in: Blah.

        * bindings/js/DOMWrapperWorld.cpp: Moved code related to JSNode ownership
        to JSNodeCustom, where other custom JSNode-related code goes.

        (WebCore::JSDOMWrapperOwner::finalize):
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        * bindings/js/DOMWrapperWorld.h:
        (WebCore::JSDOMWrapperOwner::JSDOMWrapperOwner):
        (WebCore::DOMWrapperWorld::defaultWrapperOwner): Renamed DOMObjectHandleOwner
        to JSDOMWrapperOwner, to match the name of JSDOMWrapper.

        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::toJSArrayBufferView):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        (WebCore::toJS): Removed "DOMObject" and "Node" from the names of wrapper-
        related functions, since there is no meaningful distinction between the
        two anymore -- they both use the same extensible interface.
        
        * bindings/js/JSDOMBinding.cpp: Removed some now-unused functions.

        * bindings/js/JSDOMBinding.h:
        (WebCore::getInlineCachedWrapper):
        (WebCore::setInlineCachedWrapper):
        (WebCore::clearInlineCachedWrapper):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::getCachedWrapper):
        (WebCore::cacheWrapper):
        (WebCore::uncacheWrapper):
        (WebCore::createWrapper):
        (WebCore::wrap): Created a generic, extensible mechanism for creating,
        caching, retrieving, marking, and destroying DOM wrappers. This eliminates
        the difference between DOM object wrappers and DOM node wrappers, and
        lays the groundwork for getting rid of MarkStack::deprecatedAppend usage
        for marking the remainder of our DOM objects.
        
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::history):
        (WebCore::JSDOMWindow::location):
        * bindings/js/JSDataViewCustom.cpp:
        (WebCore::toJS):
        * 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): Updated for renames mentioned above.

        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMapOwner::isReachableFromOpaqueRoots):
        (WebCore::JSNamedNodeMapOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::JSNamedNodeMap::markChildren):
        (WebCore::toJS): Updated to use our new interface for customizing wrapper
        lifetime management through function overloading without using
        MarkStack::deprecatedAppend.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isObservable):
        (WebCore::isReachableFromDOM):
        (WebCore::JSNodeOwner::isReachableFromOpaqueRoots):
        (WebCore::JSNodeOwner::finalize):
        (WebCore::createWrapperInline): Moved node-related code from JSDOMBinding
        to here. Removed special case marking code for JSNamedNodeMap because
        JSNamedNodeMap now knows how to maintain its own lifetime invariants.

        * bindings/js/JSNodeCustom.h:
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::getInlineCachedWrapper):
        (WebCore::setInlineCachedWrapper):
        (WebCore::clearInlineCachedWrapper):
        (WebCore::toJS): Updated to use our new interface for customizing wrapper
        lifetime management through function overloading without using
        MarkStack::deprecatedAppend or special-case code for nodes.
        
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS): Updated for renames mentioned above.

        * bindings/scripts/CodeGeneratorJS.pm: Fixed up newlines. Updated for
        renames mentioned above.

        * dom/NamedNodeMap.idl: NamedNodeMap needs a custom toJS function now
        because it needs to provide a custom WeakHandleOwner at wrapper creation time.

2011-04-18  Jessie Berlin  <jberlin@apple.com>

        Rubber-stamped by Sam Weinig.

        REGRESSION (r84094): Many tests failing assertions in WebCore::localizedString on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=58747

        Copy the WebCore Localizable.strings file into the output directory.

        * WebCore.vcproj/WebCoreGenerated.vcproj:
        * WebCore.vcproj/WebCoreGeneratedCairo.vsprops:
        * WebCore.vcproj/WebCoreGeneratedCommon.vsprops:
        * WebCore.vcproj/copyInspectorFiles.cmd: Removed.
        * WebCore.vcproj/copyWebCoreResourceFiles.cmd: Copied from Source/WebCore/WebCore.vcproj/copyInspectorFiles.cmd.

2011-04-18  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] PluginViewQt needs to update geometry of plugin widget before scheduling a repaint

        When scheduling a repaint for the plugin's widget, PluginViewQt
        needs to make sure the widget's geometry is up to date. Otherwise
        the paint event happens on the widget's old location.

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

        Added a manual test. 

        * manual-tests/qt/plugin-painting.html: Added.
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::invalidateRect):

2011-04-18  Oliver Hunt  <oliver@apple.com>

        Fix Qt build

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fallbackObject):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::removeCachedMethod):
        * bridge/qt/qt_instance.h:

2011-04-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Remove DeprecatedPtr
        https://bugs.webkit.org/show_bug.cgi?id=58718

        Replace use of DeprecatedPtr<> with Global<> as ownership rules
        aren't obvious, have filed bug #58820 on seeing if this is safe.

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fallbackObject):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::removeCachedMethod):
        (JSC::Bindings::QtInstance::markAggregate):
        * bridge/qt/qt_instance.h:

2011-04-14  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        [CG] Use vImage (un)premultiplyImageData functions for get/putImageData with IOSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=58088

        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::convertScanline): un/premultiplies and converts a scanline of image data from/to BGRA to/from RGBA
        (WebCore::unpremultitplyScanline):
        (WebCore::premultitplyScanline):
        (WebCore::ImageBufferData::getData):
        (WebCore::ImageBufferData::putData):

2011-04-18  Jeff Miller  <jeffm@apple.com>

        Reviewed by Dan Bernstein.

        Allow all log channels to be initialized from WebCoreLogLevel Windows environment variable
        https://bugs.webkit.org/show_bug.cgi?id=58811

        * platform/win/LoggingWin.cpp:
        (WebCore::InitializeLoggingChannelsIfNecessary): Support initializing LogResourceLoading, LogProgress, and LogFileAPI from WebCoreLogLevel Windows environment variable.

2011-04-18  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Seidel.

        Reset fullscreen element reference when leaving fullscreen mode and some other cleanup.

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

        Test: fullscreen/full-screen-cancel.html

        * dom/Document.cpp:
        (WebCore::Document::Document): Remove m_isFullscreen.
        (WebCore::Document::webkitWillEnterFullScreenForElement):
        (WebCore::Document::webkitWillExitFullScreenForElement): Remove duplicate call to setAnimating().
        (WebCore::Document::webkitDidExitFullScreenForElement): Reset m_fullScreenElement reference.
        * dom/Document.h:
        (WebCore::Document::webkitIsFullScreen): Use m_fullScreenElement instead of m_isFullscreen.
        (WebCore::Document::webkitFullScreenKeyboardInputAllowed): Ditto.

2011-04-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Eric Seidel.

        <rdar://problem/9282486> REGRESSION (r81992): Facebook photo tags can get cut off when moving the mouse.
        https://bugs.webkit.org/show_bug.cgi?id=58500

        Test: fast/repaint/text-in-relative-positioned-inline.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::clippedOverflowRectForRepaint): Use the container’s repaint rect, not
        the containing block’s. This matters when the containing block is outside the RenderText’s
        enclosing layer, as is the case here.

2011-04-15  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Speed up DrawingBuffer::reset().
        https://bugs.webkit.org/show_bug.cgi?id=58706

        When DrawingBuffer::reset() is called, it should not reallocate
        the FBOs if the size has not changed.  It should just do a glClear().

        Covered by tests in fast/canvas and canvas/philip.

        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        Initialize the size to -1, -1, so the size change check will work on
        first reset.
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::reset):
        If the size hasn't changed, don't resize the FBOs.  Just clear the
        relevant buffers.

2011-04-18  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: group resources by type in the resources panel.
        https://bugs.webkit.org/show_bug.cgi?id=58796

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._frameAdded):
        (WebInspector.ResourcesPanel.prototype._resourceAdded):
        (WebInspector.BaseStorageTreeElement):
        (WebInspector.BaseStorageTreeElement.prototype.onattach):
        (WebInspector.StorageCategoryTreeElement):
        (WebInspector.FrameTreeElement):
        (WebInspector.FrameTreeElement.prototype.setTitles):
        (WebInspector.FrameTreeElement.prototype.set hovered):
        (WebInspector.FrameTreeElement.prototype.appendResource):
        (WebInspector.FrameTreeElement.prototype.appendChild):
        (WebInspector.FrameTreeElement.prototype._insertInPresentationOrder):
        (WebInspector.FrameTreeElement.prototype._insertInPresentationOrder.compare):

2011-04-18  Timothy Hatcher  <timothy@apple.com>

        Make update-webkit-localizable-strings put WebKit/win strings in WebCore
        now that all localized strings in WebKit/win use WEB_UI_STRING.

        https://webkit.org/b/58747

        Reviewed by Dan Bernstein.

        * English.lproj/Localizable.strings: Updated with strings from WebKit/win.

2011-04-15  MORITA Hajime  <morrita@google.com>

        Reviewed by Adam Barth.

        REGRESSION: <progress> doesn't animate if it doesn't have value
        https://bugs.webkit.org/show_bug.cgi?id=58693

        The initial value of RenderProgress::m_position is accidentally same as
        the indeterminate value, that makes update code on updateFromElement() skipped.
        This change set unique invalid value for the initial value of m_position.
        
        No new tests. Testing animated bar is not possible with DRT.

        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::position):
        * html/HTMLProgressElement.h:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::RenderProgress):
        (WebCore::RenderProgress::isDeterminate):

2011-04-18  MORITA Hajime  <morrita@google.com>

        Reviewed by Eric Seidel.

        REGRESSION: [Chromium Win] details-add-summary-1.html start crashing after r84039
        https://bugs.webkit.org/show_bug.cgi?id=58791
        
        On refreshMainSummary(), findMainSummary() possibly releases oldSummary.
        We should guard it again RefPtr.

        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::refreshMainSummary):

2011-04-18  Antti Koivisto  <antti@apple.com>

        Reviewed by Simon Fraser.

        CSSSelector double frees
        https://bugs.webkit.org/show_bug.cgi?id=56124
        <rdar://problem/9119036>

        In all stacks this is occuring when the document is kept alive by the guard ref only
        and the node holding it is deleted.

        As a speculative fix, clear the document stylesheets when it turns into a guard ref zombie.
        This has a pretty good chance of fixing the actual bug. At minimum it will move the
        crash to an earlier, more easily traceble point.

        No tests, crash stacks only, no idea how to reproduce.

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):

2011-04-18  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Backspace in the Console is broken
        https://bugs.webkit.org/show_bug.cgi?id=58764

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

2011-04-18  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        LevelDB backend for IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=57372

        Only available behind a run-time flag. Covered by existing layout
        tests.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/leveldb/LevelDBComparator.h: Added.
        (WebCore::LevelDBComparator::~LevelDBComparator):
        * platform/leveldb/LevelDBDatabase.cpp: Added.
        (WebCore::makeSlice):
        (WebCore::makeLevelDBSlice):
        (WebCore::makeVector):
        (WebCore::LevelDBDatabase::LevelDBDatabase):
        (WebCore::LevelDBDatabase::~LevelDBDatabase):
        (WebCore::LevelDBDatabase::open):
        (WebCore::LevelDBDatabase::put):
        (WebCore::LevelDBDatabase::remove):
        (WebCore::LevelDBDatabase::get):
        (WebCore::LevelDBDatabase::newIterator):
        * platform/leveldb/LevelDBDatabase.h: Added.
        * platform/leveldb/LevelDBIterator.cpp: Added.
        (WebCore::LevelDBIterator::~LevelDBIterator):
        (WebCore::LevelDBIterator::LevelDBIterator):
        (WebCore::makeSlice):
        (WebCore::makeLevelDBSlice):
        (WebCore::LevelDBIterator::isValid):
        (WebCore::LevelDBIterator::seekToLast):
        (WebCore::LevelDBIterator::seek):
        (WebCore::LevelDBIterator::next):
        (WebCore::LevelDBIterator::prev):
        (WebCore::LevelDBIterator::key):
        (WebCore::LevelDBIterator::value):
        * platform/leveldb/LevelDBIterator.h: Added.
        * platform/leveldb/LevelDBSlice.h: Added.
        (WebCore::LevelDBSlice::LevelDBSlice):
        (WebCore::LevelDBSlice::~LevelDBSlice):
        (WebCore::LevelDBSlice::begin):
        (WebCore::LevelDBSlice::end):
        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::encodeByte):
        (WebCore::maxIDBKey):
        (WebCore::minIDBKey):
        (WebCore::encodeInt):
        (WebCore::decodeInt):
        (WebCore::encodeVarInt):
        (WebCore::decodeVarInt):
        (WebCore::encodeString):
        (WebCore::decodeString):
        (WebCore::encodeStringWithLength):
        (WebCore::decodeStringWithLength):
        (WebCore::encodeDouble):
        (WebCore::decodeDouble):
        (WebCore::encodeIDBKey):
        (WebCore::decodeIDBKey):
        (WebCore::extractEncodedIDBKey):
        (WebCore::compareEncodedIDBKeys):
        (WebCore::getInt):
        (WebCore::putInt):
        (WebCore::getString):
        (WebCore::putString):
        (WebCore::KeyPrefix::SchemaVersionKey::encode):
        (WebCore::KeyPrefix::MaxDatabaseIdKey::encode):
        (WebCore::KeyPrefix::DatabaseFreeListKey::DatabaseFreeListKey):
        (WebCore::KeyPrefix::DatabaseFreeListKey::decode):
        (WebCore::KeyPrefix::DatabaseFreeListKey::encode):
        (WebCore::KeyPrefix::DatabaseFreeListKey::databaseId):
        (WebCore::KeyPrefix::DatabaseFreeListKey::compare):
        (WebCore::KeyPrefix::DatabaseNameKey::decode):
        (WebCore::KeyPrefix::DatabaseNameKey::encode):
        (WebCore::KeyPrefix::DatabaseNameKey::origin):
        (WebCore::KeyPrefix::DatabaseNameKey::databaseName):
        (WebCore::KeyPrefix::DatabaseNameKey::compare):
        (WebCore::KeyPrefix::DatabaseMetaDataKey::encode):
        (WebCore::KeyPrefix::ObjectStoreMetaDataKey::ObjectStoreMetaDataKey):
        (WebCore::KeyPrefix::ObjectStoreMetaDataKey::decode):
        (WebCore::KeyPrefix::ObjectStoreMetaDataKey::encode):
        (WebCore::KeyPrefix::ObjectStoreMetaDataKey::objectStoreId):
        (WebCore::KeyPrefix::ObjectStoreMetaDataKey::metaDataType):
        (WebCore::KeyPrefix::ObjectStoreMetaDataKey::compare):
        (WebCore::KeyPrefix::IndexMetaDataKey::IndexMetaDataKey):
        (WebCore::KeyPrefix::IndexMetaDataKey::decode):
        (WebCore::KeyPrefix::IndexMetaDataKey::encode):
        (WebCore::KeyPrefix::IndexMetaDataKey::compare):
        (WebCore::KeyPrefix::IndexMetaDataKey::indexId):
        (WebCore::KeyPrefix::IndexMetaDataKey::metaDataType):
        (WebCore::KeyPrefix::ObjectStoreFreeListKey::ObjectStoreFreeListKey):
        (WebCore::KeyPrefix::ObjectStoreFreeListKey::decode):
        (WebCore::KeyPrefix::ObjectStoreFreeListKey::encode):
        (WebCore::KeyPrefix::ObjectStoreFreeListKey::objectStoreId):
        (WebCore::KeyPrefix::ObjectStoreFreeListKey::compare):
        (WebCore::KeyPrefix::IndexFreeListKey::IndexFreeListKey):
        (WebCore::KeyPrefix::IndexFreeListKey::decode):
        (WebCore::KeyPrefix::IndexFreeListKey::encode):
        (WebCore::KeyPrefix::IndexFreeListKey::compare):
        (WebCore::KeyPrefix::IndexFreeListKey::objectStoreId):
        (WebCore::KeyPrefix::IndexFreeListKey::indexId):
        (WebCore::KeyPrefix::ObjectStoreNamesKey::decode):
        (WebCore::KeyPrefix::ObjectStoreNamesKey::encode):
        (WebCore::KeyPrefix::ObjectStoreNamesKey::compare):
        (WebCore::KeyPrefix::ObjectStoreNamesKey::objectStoreName):
        (WebCore::KeyPrefix::IndexNamesKey::IndexNamesKey):
        (WebCore::KeyPrefix::IndexNamesKey::decode):
        (WebCore::KeyPrefix::IndexNamesKey::encode):
        (WebCore::KeyPrefix::IndexNamesKey::compare):
        (WebCore::KeyPrefix::IndexNamesKey::indexName):
        (WebCore::KeyPrefix::ObjectStoreDataKey::decode):
        (WebCore::KeyPrefix::ObjectStoreDataKey::encode):
        (WebCore::KeyPrefix::ObjectStoreDataKey::compare):
        (WebCore::KeyPrefix::ObjectStoreDataKey::userKey):
        (WebCore::KeyPrefix::ExistsEntryKey::decode):
        (WebCore::KeyPrefix::ExistsEntryKey::encode):
        (WebCore::KeyPrefix::ExistsEntryKey::compare):
        (WebCore::KeyPrefix::ExistsEntryKey::userKey):
        (WebCore::KeyPrefix::IndexDataKey::IndexDataKey):
        (WebCore::KeyPrefix::IndexDataKey::decode):
        (WebCore::KeyPrefix::IndexDataKey::encode):
        (WebCore::KeyPrefix::IndexDataKey::encodeMaxKey):
        (WebCore::KeyPrefix::IndexDataKey::compare):
        (WebCore::KeyPrefix::IndexDataKey::databaseId):
        (WebCore::KeyPrefix::IndexDataKey::objectStoreId):
        (WebCore::KeyPrefix::IndexDataKey::indexId):
        (WebCore::KeyPrefix::IndexDataKey::userKey):
        (WebCore::KeyPrefix::realCompare):
        (WebCore::KeyPrefix::compareKeys):
        (WebCore::KeyPrefix::compareIndexKeys):
        (WebCore::KeyPrefix::Comparator::compare):
        (WebCore::KeyPrefix::Comparator::name):
        (WebCore::setUpMetadata):
        (WebCore::IDBLevelDBBackingStore::IDBLevelDBBackingStore):
        (WebCore::IDBLevelDBBackingStore::open):
        (WebCore::IDBLevelDBBackingStore::extractIDBDatabaseMetaData):
        (WebCore::getNewDatabaseId):
        (WebCore::IDBLevelDBBackingStore::setIDBDatabaseMetaData):
        (WebCore::IDBLevelDBBackingStore::getObjectStores):
        (WebCore::getNewObjectStoreId):
        (WebCore::IDBLevelDBBackingStore::createObjectStore):
        (WebCore::deleteRange):
        (WebCore::IDBLevelDBBackingStore::deleteObjectStore):
        (WebCore::IDBLevelDBBackingStore::getObjectStoreRecord):
        (WebCore::getNewVersionNumber):
        (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::clearObjectStore):
        (WebCore::IDBLevelDBBackingStore::createInvalidRecordIdentifier):
        (WebCore::IDBLevelDBBackingStore::deleteObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::nextAutoIncrementNumber):
        (WebCore::IDBLevelDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBLevelDBBackingStore::forEachObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::getIndexes):
        (WebCore::getNewIndexId):
        (WebCore::IDBLevelDBBackingStore::createIndex):
        (WebCore::IDBLevelDBBackingStore::deleteIndex):
        (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord):
        (WebCore::findGreatestKeyLessThan):
        (WebCore::IDBLevelDBBackingStore::deleteIndexDataForRecord):
        (WebCore::IDBLevelDBBackingStore::getObjectViaIndex):
        (WebCore::versionExists):
        (WebCore::IDBLevelDBBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBLevelDBBackingStore::keyExistsInIndex):
        (WebCore::findLastIndexKeyEqualTo):
        (WebCore::IDBLevelDBBackingStore::openObjectStoreCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexKeyCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexCursor):
        (WebCore::IDBLevelDBBackingStore::createTransaction):
        * storage/IDBLevelDBBackingStore.h:

2011-04-18  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add test for CSS-resource binding.
        https://bugs.webkit.org/show_bug.cgi?id=58786

        Test: inspector/styles/styles-history.html

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::setPropertyText):
        (WebCore::InspectorStyle::toggleProperty):
        (WebCore::InspectorStyleSheet::setPropertyText):
        (WebCore::InspectorStyleSheet::toggleProperty):
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._fireStyleSheetChanged.if):
        (WebInspector.CSSStyleModel.prototype._fireStyleSheetChanged.mycallback):
        (WebInspector.CSSStyleModel.prototype._fireStyleSheetChanged):
        (WebInspector.CSSStyleModel.prototype.setStyleSheetText):
        (WebInspector.CSSStyleDeclaration.prototype.insertPropertyAt):
        (WebInspector.CSSProperty.prototype.setText.callback):
        (WebInspector.CSSProperty.prototype.setText):

2011-04-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r83996.
        http://trac.webkit.org/changeset/83996
        https://bugs.webkit.org/show_bug.cgi?id=58790

        layout test editing/selection/move-by-word-visually.html is
        failing (Requested by jknotten on #webkit).

        * editing/visible_units.cpp:
        (WebCore::nextWordBreakInBoxInsideBlockWithDifferentDirectionality):
        (WebCore::collectWordBreaksInBoxInsideBlockWithDifferntDirectionality):
        (WebCore::previousWordBreakInBox):
        (WebCore::leftWordBoundary):
        (WebCore::rightWordBoundary):
        (WebCore::leftWordPosition):
        (WebCore::rightWordPosition):

2011-04-18  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Reviewed by Daniel Bates.

        Modify make_names.pl to not include conditional includes unconditionally
        https://bugs.webkit.org/show_bug.cgi?id=53672

        Fixed conditional includes being unconditionally included.

        No new tests (no change in functionality)

        * dom/make_names.pl:
            - Modified printJSElementIncludes() to only print unconditional element includes.
            - Modified printElementIncludes() to only print unconditional element includes.
            - Added printConditionalElementIncludes() which takes care of printing conditional element includes.

2011-04-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r83803.
        http://trac.webkit.org/changeset/83803
        https://bugs.webkit.org/show_bug.cgi?id=58782

        Caused focus rings to appear in youtube videos (Requested by
        inferno-sec on #webkit).

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):

2011-04-18  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Need a workaround for bug 58422
        https://bugs.webkit.org/show_bug.cgi?id=58780

        Instead of the A:before content, the link text is displayed as the A tag content.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.linkifyUncopyable):
        (WebInspector.StylePropertiesSection):
        * inspector/front-end/inspector.css:

2011-04-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK build after 82465.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::localizedString):

2011-04-18  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: TAB should not move focus from the text editor while live editing
        https://bugs.webkit.org/show_bug.cgi?id=58537

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._registerShortcuts):
        (WebInspector.TextViewer.prototype._cancelEditing):
        (WebInspector.TextEditorMainPanel.prototype.handleUndoRedo):
        (WebInspector.TextEditorMainPanel.prototype.handleTabKeyPress):
        (WebInspector.TextEditorMainPanel.prototype._setCaretLocation):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._setText):

2011-04-18  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Incorrect content area dimensions in Metrics pane for box-sizing: border-box
        https://bugs.webkit.org/show_bug.cgi?id=58551

        Test: inspector/styles/metrics-box-sizing.html

        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype._getPropertyValueAsPx):
        (WebInspector.MetricsSidebarPane.prototype._getBox):
        (WebInspector.MetricsSidebarPane.prototype._update.getContentAreaWidthPx):
        (WebInspector.MetricsSidebarPane.prototype._update.getContentAreaHeightPx):
        (WebInspector.MetricsSidebarPane.prototype._update):
        (WebInspector.MetricsSidebarPane.prototype.startEditing):
        (WebInspector.MetricsSidebarPane.prototype.editingCommitted.setEnabledValueCallback):
        (WebInspector.MetricsSidebarPane.prototype.editingCommitted):

2011-04-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Database agent stops to propagate it's events after navigation.
        https://bugs.webkit.org/show_bug.cgi?id=58776

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::clearFrontend):
        (WebCore::InspectorDatabaseAgent::enable):
        (WebCore::InspectorDatabaseAgent::disable):
        (WebCore::InspectorDatabaseAgent::restore):
        * inspector/InspectorDatabaseAgent.h:
        (WebCore::InspectorDatabaseAgent::create):

2011-04-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r83968.
        http://trac.webkit.org/changeset/83968
        https://bugs.webkit.org/show_bug.cgi?id=58769

        Breaks Backspace in Web Inspector console (Requested by
        apavlov on #webkit).

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

2011-04-15  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: introduce WorkerInspectorController
        https://bugs.webkit.org/show_bug.cgi?id=58668

        WorkerInspectorController will be owned by WorkerContext and will hold all inspector
        agents and will also manage connection to the inspector frontend.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptState.cpp:
        (WebCore::scriptStateFromWorkerContext):
        * bindings/js/ScriptState.h:
        * bindings/v8/ScriptState.cpp:
        (WebCore::scriptStateFromWorkerContext):
        * bindings/v8/ScriptState.h:
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::updateCookie):
        * inspector/WorkerInspectorController.cpp: Added.
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::~WorkerInspectorController):
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        (WebCore::WorkerInspectorController::dispatchMessageFromFrontend):
        * inspector/WorkerInspectorController.h: Copied from Source/WebCore/bindings/js/ScriptState.h.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::WorkerContext):
        * workers/WorkerContext.h:
        (WebCore::WorkerContext::workerInspectorController):

2011-04-17  Thierry Reding  <thierry.reding@avionic-design.de>

        Reviewed by Adam Barth.

        Fix build with GCC 4.6.

        * dom/make_names.pl: Execute preprocessor without the -P option. The
        preprocessor in GCC 4.6 eats empty lines, effectively breaking the
        parsing performed by this script. Dropping the -P option when invoking
        the preprocessor keeps the empty lines but as a side-effect also adds
        additional linemarkers.

        From the cpp manpage:

          -P  Inhibit generation of linemarkers in the output from the
              preprocessor. This might be useful when running the preprocessor
              on something that is not C code, and will be sent to a program
              which might be confused by the linemarkers.

        The linemarkers are not problematic, however, because the script
        properly handles them by ignoring all lines starting with a #.

2011-04-17  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/58463> Switch HTTP pipelining from user default to private setting
        <rdar://problem/9268729>

        Reviewed by Dan Bernstein.

        This replaces support for the WebKitEnableHTTPPipelining user
        default with methods on the WebCore::ResourceRequest class in
        WebCore, the WebView class in WebKit1, and the WebContext class
        in WebKit2.  It also removes support for the
        WebKitForceHTTPPipeliningPriorityHigh user default which was not
        needed.

        Run these commands if you set the user defaults previously,
        replacing "BUNDLE.ID" with your application's bundle ID:

            defaults delete BUNDLE.ID WebKitEnableHTTPPipelining
            defaults delete BUNDLE.ID WebKitForceHTTPPipeliningPriorityHigh

        * WebCore.exp.in: Export ResourceRequest::httpPipeliningEnabled()
        and ResourceRequest::setHTTPPipeliningEnabled().

        * platform/network/ResourceRequestBase.h:
        (WebCore::isHTTPPipeliningEnabled): Removed declaration.
        (WebCore::shouldForceHTTPPipeliningPriorityHigh): Removed declaration.

        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::httpPipeliningEnabled): Added declaration.
        (WebCore::ResourceRequest::setHTTPPipeliningEnabled): Added declaration.
        (WebCore::ResourceRequest::s_httpPipeliningEnabled): Added declaration.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::s_httpPipeliningEnabled): Added.
        (WebCore::ResourceRequest::httpPipeliningEnabled): Added.
        (WebCore::ResourceRequest::setHTTPPipeliningEnabled): Added.
        (WebCore::initializeMaximumHTTPConnectionCountPerHost): Switched
        to use ResourceRequest::httpPipeliningEnabled().
        (WebCore::readBooleanPreference): Removed.
        (WebCore::isHTTPPipeliningEnabled): Removed.
        (WebCore::shouldForceHTTPPipeliningPriorityHigh): Removed.

        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest): Switched to
        use ResourceRequest::httpPipeliningEnabled().  Removed check for
        shouldForceHTTPPipeliningPriorityHigh().
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Ditto.

2011-04-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION (r84096): <br> moved to the right in fast/block/float/032.html
        https://bugs.webkit.org/show_bug.cgi?id=58736

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::appendFloatingObjectToLastLine): It is enough to extend the float so
        that it touches the bottom of the previous line, since RenderBlock::markLinesDirtyInBlockRange()
        always dirties the line after the last one in the range.

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed. Add missing include to fix build without precompiled header.

        * rendering/RenderMediaControls.cpp:

2011-04-17  Daniel Bates  <dbates@webkit.org>

        Attempt to fix the Chromium build after changeset 84110 <http://trac.webkit.org/changeset/84110>
        (https://bugs.webkit.org/show_bug.cgi?id=57842).

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest): Rename CachedResource::LinkPrefetch to CachedResource::LinkResource.

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Remove pthread dependency of GCController
        https://bugs.webkit.org/show_bug.cgi?id=54833

        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectOnAlternateThreadForDebugging):

2011-04-17  Gavin Peters  <gavinp@chromium.org>

        Reviewed by Adam Barth.

        Add support for link rel type "subresource"
        https://bugs.webkit.org/show_bug.cgi?id=57842

        Link rel=prefetch is great for cache warming for resources on
        subsequent pages, but it launches requests at too low a priority
        to use for subresources of the current page.

        Particularly after https://bugs.webkit.org/show_bug.cgi?id=51940
        is implemented, a rel type that launches requests at an higher
        priority is going to be very useful.  This rel type is in the
        HTML5 spec at http://wiki.whatwg.org/wiki/RelExtensions .  An
        expected use case will be for servers to provide subresource hints
        in link headers, which will allow servers to help make the web
        faster.

        This feature continues my implementation of the Link header, which
        we've talked about in WebKit-dev in
        https://lists.webkit.org/pipermail/webkit-dev/2011-February/016034.html.

        Tests: fast/dom/HTMLLinkElement/subresource.html
               http/tests/misc/link-rel-prefetch-and-subresource.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::~HTMLLinkElement):
        (WebCore::HTMLLinkElement::tokenizeRelAttribute):
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::onloadTimerFired):
        (WebCore::HTMLLinkElement::notifyFinished):
        * html/HTMLLinkElement.h:
        (WebCore::HTMLLinkElement::RelAttribute::RelAttribute):
        * loader/cache/CachedResource.cpp:
        (WebCore::defaultPriorityForResourceType):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::isLinkResource):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestLinkResource):
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::CachedResourceLoader::incrementRequestCount):
        (WebCore::CachedResourceLoader::decrementRequestCount):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::cachedResourceTypeToTargetType):
        (WebCore::CachedResourceRequest::load):

2011-04-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Joseph Pecoraro.

        <rdar://problem/9296211> REGRESSION (r83514): Failing fast/repaint/trailing-floats-root-line-box-overflow.html
        https://bugs.webkit.org/show_bug.cgi?id=58745

        This is really a regression from r82611, but it went unnoticed due to a mistake in r73385,
        which was fixed in r83514.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Actually assign the bottom visual overflow to the
        variable so named, not the top layout overflow.

2011-04-17  Geoffrey Garen  <ggaren@apple.com>

        Strongly suggested, but not necessarily reviewed, by
        Sam Weinig and Maciej Stachowiak.

        Renamed DOMObject* => JSDOMWrapper*.

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::isObservable):
        (WebCore::DOMObjectHandleOwner::finalize):
        * bindings/js/DOMWrapperWorld.h:
        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::toJSArrayBufferView):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSDOMBinding.h:
        (WebCore::JSDOMWrapperWithGlobalPointer::globalObject):
        (WebCore::JSDOMWrapperWithGlobalPointer::JSDOMWrapperWithGlobalPointer):
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        (WebCore::createDOMObjectWrapper):
        (WebCore::getDOMObjectWrapper):
        * bindings/js/JSDOMWrapper.cpp:
        (WebCore::JSDOMWrapper::~JSDOMWrapper):
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::JSDOMWrapper):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::location):
        (WebCore::toJS):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS):
        * bindings/js/ScriptWrappable.h:
        (WebCore::ScriptWrappable::wrapper):
        (WebCore::ScriptWrappable::setWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Rename PLATFORM(CA) to USE(CA)
        https://bugs.webkit.org/show_bug.cgi?id=58742

        * config.h:
        * platform/graphics/ca/TransformationMatrixCA.cpp:
        * platform/graphics/cg/ImageBufferDataCG.h:
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/mac/WebCoreSystemInterface.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::containsPaintedContent):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):

2011-04-17  Young Han Lee  <joybro@company100.net>

        Reviewed by Benjamin Poulain.

        [Texmap] [Qt] Improve readability by using gInVertexAttributeIndex instead of 0.
        https://bugs.webkit.org/show_bug.cgi?id=58739

        gInVertexAttributeIndex is a constant variable to point the location of
        "InVertex" attribute of the vertex shaders.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::paintToTarget):

2011-04-17  Kinuko Yasuda  <kinuko@chromium.org>

        Not reviewed: Fix copyright (I had submitted the file with wrong
        copyright line).

        * storage/StorageInfo.idl:

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Rename PLATFORM(CG) to USE(CG)
        https://bugs.webkit.org/show_bug.cgi?id=58729

        * config.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toDataURL):
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setShadow):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        * loader/cache/CachedFont.cpp:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::createImage):
        * platform/FloatConversion.h:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Color.h:
        * platform/graphics/DashArray.h:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.h:
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hash):
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::advanceAt):
        (WebCore::GlyphBuffer::add):
        (WebCore::GlyphBuffer::expandLastAdvance):
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setLegacyShadow):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/Image.cpp:
        * platform/graphics/Image.h:
        * platform/graphics/ImageBuffer.cpp:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageBufferData.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.h:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/cg/ColorCG.cpp:
        * platform/graphics/cg/FloatPointCG.cpp:
        * platform/graphics/cg/FloatRectCG.cpp:
        * platform/graphics/cg/FloatSizeCG.cpp:
        * platform/graphics/cg/ImageCG.cpp:
        * platform/graphics/cg/ImageSourceCG.cpp:
        * platform/graphics/cg/IntPointCG.cpp:
        * platform/graphics/cg/IntRectCG.cpp:
        * platform/graphics/cg/IntSizeCG.cpp:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/cg/TransformationMatrixCG.cpp:
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::resize):
        (WebCore::PlatformCanvas::AutoLocker::AutoLocker):
        (WebCore::PlatformCanvas::Painter::Painter):
        * platform/graphics/chromium/PlatformCanvas.h:
        * platform/graphics/chromium/PlatformImage.cpp:
        (WebCore::PlatformImage::updateFromImage):
        * platform/graphics/opentype/OpenTypeUtilities.cpp:
        * platform/graphics/transforms/AffineTransform.h:
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/graphics/win/DIBPixelData.h:
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::platformInit):
        (WebCore::createGDIFont):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/win/GraphicsContextWin.cpp:
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        * platform/graphics/win/SimpleFontDataWin.cpp:
        * platform/image-decoders/ImageDecoder.cpp:
        * platform/image-decoders/ImageDecoder.h:
        * rendering/RenderObject.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::RenderSVGResourceGradient):
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource):

2011-04-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        about:blank documents in new tabs can XHR anywhere
        https://bugs.webkit.org/show_bug.cgi?id=58712

        Empty security origins have supposed to be low-privilege, we should
        mark them as having a unique origin.

        * manual-tests/about-blank-xhr.html: Added.
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        * page/SecurityOrigin.h:

2011-04-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/9190108> Crash when hiding a float

        Test: fast/block/float/overhanging-tall-block.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverhangingFloats): Moved the call to childLogicalTop() out of the loop.
        Capped the logical bottom so that we get the correct maximum.
        * rendering/RenderBlock.h: Decleared appendFloatingObjectToLastLine().
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::appendFloatingObjectToLastLine): Added. Ensures correct bookkeeping by
        extending the float if needed so that it touches the line.
        (WebCore::RenderBlock::layoutInlineChildren): Changed to call appendFloatingObjectToLastLine().
        (WebCore::RenderBlock::checkFloatsInCleanLine): Capped the float height so the we mark the right
        range of lines as dirty.
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::appendFloat): Replaced the floats() accessor with this function, which
        allows the creation of the vector to be combined with appending the first float.

2011-04-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Simon Fraser.

        Pages in the PageCache don't have the correct visited link coloring after being restored
        https://bugs.webkit.org/show_bug.cgi?id=58721

        * WebCore.exp.in:
        Add export of markPagesForVistedLinkStyleRecalc for use by WebKit2.

        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        (WebCore::CachedPage::clear):
        * history/CachedPage.h:
        (WebCore::CachedPage::markForVistedLinkStyleRecalc):
        Add bit, set by calling markForVistedLinkStyleRecalc, which forces a visited link
        style recalc when being restored.

        * history/PageCache.h:
        * history/PageCache.cpp:
        (WebCore::PageCache::markPagesForVistedLinkStyleRecalc):
        Mark all pages in the page cache as requiring visited link style recalc.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::addVisitedLink):
        (WebCore::PageGroup::removeVisitedLinks):
        (WebCore::PageGroup::removeAllVisitedLinks):
        Set dirty bit when changing any visited link information.
        

2011-04-16  Leo Yang  <leoyang.webkit@gmail.com>

        Reviewed by Nikolas Zimmermann.

        ASSERT failure when svg <use> element changes href
        https://bugs.webkit.org/show_bug.cgi?id=58726

        m_resourceId was not empty after the pending resource
        becomes available. This will trigger the assertion at
        line 509 of SVGUseElement.cpp when the <use> element's
        href becomes empty or invalid.

        This patch makes m_resourceId be empty after the pending
        resource becomes available to avoid assertion failure.

        Test: svg/custom/use-crash-when-href-change.svg

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

2011-04-16  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Rename PLATFORM(CAIRO) to USE(CAIRO)
        https://bugs.webkit.org/show_bug.cgi?id=55192

        * CMakeListsEfl.txt:
        * config.h:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/graphics/ContextShadow.h:
        * platform/graphics/DashArray.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::glyphAt):
        (WebCore::GlyphBuffer::add):
        * platform/graphics/Gradient.cpp:
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/ImageBufferData.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.h:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/cairo/DrawErrorUnderline.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cairo/ImageCairo.cpp:
        * platform/graphics/gstreamer/ImageGStreamer.h:
        * platform/graphics/transforms/AffineTransform.h:
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::createGDIFont):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/win/GraphicsContextWin.cpp:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::paintWindowedPluginIntoContext):
        * rendering/RenderObject.h:

2011-04-16  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r84033.

        * platform/win/LocalizedStringsWin.cpp:
        (WebCore::localizedString):

2011-04-16  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Only allow inline child for SVG text since we cannot
        handle block childs.
        https://bugs.webkit.org/show_bug.cgi?id=58678

        Test: svg/text/text-block-child-crash.xhtml

        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::isChildAllowed):
        * rendering/svg/RenderSVGText.h:

2011-04-15  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: The list of Database entries is empty if the page opens a database just before Web Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=57833

        * inspector/Inspector.json:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didOpenDatabase):
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::setFrontend):
        (WebCore::InspectorDatabaseAgent::clearFrontend):
        (WebCore::InspectorDatabaseAgent::enable):
        (WebCore::InspectorDatabaseAgent::disable):
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        (WebCore::InspectorDatabaseAgent::executeSQL):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/front-end/inspector.js:

2011-04-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP media-src is missing
        https://bugs.webkit.org/show_bug.cgi?id=58642

        Yay HTMLMediaElement for having the exact hook we need!

        Tests: http/tests/security/contentSecurityPolicy/media-src-allowed.html
               http/tests/security/contentSecurityPolicy/media-src-blocked.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isSafeToLoadURL):
            - Although it's tempting to add this branch to the previous
              if-block, that results in the wrong error message being logged to
              the console (covered by the "blocked" test).
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowMediaFromSource):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:
            - These changes are routine.

2011-04-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP should block string arguments to setTimeout and setInterval unless options eval-script
        https://bugs.webkit.org/show_bug.cgi?id=58610

        It's somewhat sadness that the JSC and V8 code for setTimeout and
        setInterval are so different.  I struggled for a while with how to
        handle the worker case, but I decided to punt on it for now.

        Tests: http/tests/security/contentSecurityPolicy/eval-scripts-setInterval-allowed.html
               http/tests/security/contentSecurityPolicy/eval-scripts-setInterval-blocked.html
               http/tests/security/contentSecurityPolicy/eval-scripts-setTimeout-allowed.html
               http/tests/security/contentSecurityPolicy/eval-scripts-setTimeout-blocked.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::setTimeout):
        (WebCore::JSWorkerContext::setInterval):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        * bindings/js/ScheduledAction.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::WindowSetTimeoutImpl):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowEval):
        * page/ContentSecurityPolicy.h:

2011-04-15  Shishir Agrawal  <shishir@chromium.org>

        Reviewed by James Robinson.

        Add a flag to guard Page Visibility API changes.
        https://bugs.webkit.org/show_bug.cgi?id=58464

        * Configurations/FeatureDefines.xcconfig:

2011-04-15  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Martin Robinson.

        Make plugins compile during WebKit GTK Windows build.
        Ifdef properly relevant parts so that the PluginViewGtk compiles on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=58580

        * plugins/PluginView.cpp:
        (WebCore::PluginView::stop):
        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::platformGetValue):
        (WebCore::PluginView::platformStart):

2011-04-15  MORITA Hajime  <morrita@google.com>

        Reviewed by Simon Fraser.

        Calls to WebCore::Document::mayCauseFlashOfUnstyledContent make frequently-run drawing methods slower
        https://bugs.webkit.org/show_bug.cgi?id=58512
        
        Manually rolled out r72367 at which mayCauseFlashOfUnstyledContent() was introduced.
        This change keeps an small refactoring on
        FrameView::shouldUpdate(), which doesn't affect on the behavior.

        * dom/Document.cpp:
        * dom/Document.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::invalidateRect):
        (WebCore::FrameView::shouldUpdate):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintContents):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):

2011-04-15  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Reduce default kernel size of SincResampler to favor better speed over quality
        https://bugs.webkit.org/show_bug.cgi?id=58710

        No new tests since audio API is not yet implemented.

        * platform/audio/SincResampler.h:

2011-04-15  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Martin Robinson.

        Expand the ntohs, ntohl, htons and htonl defines for OS(WINDOWS)
        These have to be defined for Windows in general, since win32 API
        does not provide them.
        https://bugs.webkit.org/show_bug.cgi?id=58582

        * platform/graphics/WOFFFileFormat.cpp:

2011-04-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Adam Barth.

        Show a console message when X-Frame-Options blocks a load
        https://bugs.webkit.org/show_bug.cgi?id=39087

        Added console message when X-Frame-Options headers block resource loading

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):

2011-04-15  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Martin Robinson.

        Evaluate PLATFORM(GTK) before the all-encompassing OS(WINDOWS)
        test. This allows Windows build of WebKit GTK to chose the right
        path.
        https://bugs.webkit.org/show_bug.cgi?id=58576

        * platform/FileSystem.h:

2011-04-08  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QWebPage MIME type handling inconsistency with other web browsers
        https://bugs.webkit.org/show_bug.cgi?id=46968

        Implementing mime type sniffing based on
        http://tools.ietf.org/html/draft-abarth-mime-sniff-06.

        * WebCore.pro:
        * platform/network/MIMESniffing.cpp: Added.
        (MagicNumbers::dataSizeNeededForImageSniffing):
        (MagicNumbers::maskedCompare):
        (MagicNumbers::checkSpaceOrBracket):
        (MagicNumbers::compare):
        (MagicNumbers::findMIMEType):
        (MagicNumbers::findSimpleMIMEType):
        (MagicNumbers::textOrBinaryTypeSniffingProcedure):
        (MagicNumbers::unknownTypeSniffingProcedure):
        (MagicNumbers::imageTypeSniffingProcedure):
        (MagicNumbers::checkText):
        (MagicNumbers::checkRDF):
        (MagicNumbers::skipTag):
        (MagicNumbers::feedTypeSniffingProcedure):
        (MIMESniffer::MIMESniffer):
        * platform/network/MIMESniffing.h: Added.
        (MIMESniffer::dataSize):
        (MIMESniffer::sniff):
        (MIMESniffer::isValid):
        * platform/network/NetworkingContext.h:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::release):
        (WebCore::QNetworkReplyWrapper::receiveMetaData):
        (WebCore::QNetworkReplyWrapper::receiveSniffedMIMEType):
        (WebCore::QNetworkReplyWrapper::emitMetaDataChanged):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::sendNetworkRequest):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyWrapper::advertisedMIMEType):
        (WebCore::QNetworkReplyWrapper::mimeType):
        * platform/network/qt/QtMIMETypeSniffer.cpp: Added.
        (QtMIMETypeSniffer::QtMIMETypeSniffer):
        (QtMIMETypeSniffer::sniff):
        (QtMIMETypeSniffer::trySniffing):
        * platform/network/qt/QtMIMETypeSniffer.h: Added.
        (QtMIMETypeSniffer::mimeType):
        (QtMIMETypeSniffer::isFinished):

2011-04-15  Emil A Eklund  <eae@chromium.org>

        Reviewed by Dimitri Glazkov.

        input field with focus makes appendChild operation ~42x slower
        https://bugs.webkit.org/show_bug.cgi?id=57059

        Change ContainerNode::cloneChildNodes to only disable the
        deleteButtonController if the container itself (or any of its children)
        is being edited. Thus avoiding a reflow in cases where it's not.

        Test: perf/clone-with-focus.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::cloneChildNodes):

2011-04-15  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        Expose unified Quota API if QUOTA build flag is enabled
        https://bugs.webkit.org/show_bug.cgi?id=58648

        Test: storage/storageinfo-query-usage.html

        * CMakeLists.txt: Added new file entries.
        * DerivedSources.cpp: Added new file entries.
        * DerivedSources.make: Added new file entries.
        * GNUmakefile.am: Added new file entries.
        * WebCore.gypi: Added new file entries.
        * WebCore.vcproj/WebCore.vcproj: Added new file entries.
        * WebCore.xcodeproj/project.pbxproj: Added new file entries.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitStorageInfo): Added.
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * storage/StorageInfo.h: Added storage type enum.
        * storage/StorageInfo.idl: Added.
        * storage/StorageInfoErrorCallback.idl: Added.
        * storage/StorageInfoUsageCallback.idl: Added.

2011-04-15  Oliver Hunt  <oliver@apple.com>

        GC allocate Structure
        https://bugs.webkit.org/show_bug.cgi?id=58483

        Rolling r83894 r83827 r83810 r83809 r83808 back in with
        a workaround for the gcc bug seen by the gtk bots

        * WebCore.exp.in:
        * bindings/js/JSAudioConstructor.h:
        (WebCore::JSAudioConstructor::createStructure):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::cacheDOMStructure):
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWithGlobalPointer::createStructure):
        (WebCore::DOMObjectWithGlobalPointer::DOMObjectWithGlobalPointer):
        (WebCore::DOMConstructorObject::createStructure):
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        (WebCore::DOMConstructorWithDocument::DOMConstructorWithDocument):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObject):
        (WebCore::JSDOMGlobalObject::markChildren):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::JSDOMGlobalObject::createStructure):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        * bindings/js/JSDOMWindowBase.h:
        (WebCore::JSDOMWindowBase::createStructure):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::createStructure):
        * bindings/js/JSDOMWrapper.h:
        (WebCore::DOMObject::DOMObject):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        * bindings/js/JSImageConstructor.h:
        (WebCore::JSImageConstructor::createStructure):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSOptionConstructor.h:
        (WebCore::JSOptionConstructor::createStructure):
        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore::JSWorkerContextBase::JSWorkerContextBase):
        * bindings/js/JSWorkerContextBase.h:
        (WebCore::JSWorkerContextBase::createStructure):
        * bindings/js/ScriptCachedFrameData.h:
        * bindings/js/SerializedScriptValue.h:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::~WorkerScriptController):
        (WebCore::WorkerScriptController::initScript):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/CRuntimeObject.h:
        (JSC::Bindings::CRuntimeObject::createStructure):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CRuntimeMethod::createStructure):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaRuntimeMethod::createStructure):
        * bridge/jni/jsc/JavaRuntimeObject.h:
        (JSC::Bindings::JavaRuntimeObject::createStructure):
        * bridge/objc/ObjCRuntimeObject.h:
        (JSC::Bindings::ObjCRuntimeObject::createStructure):
        * bridge/objc/objc_instance.mm:
        (ObjCRuntimeMethod::createStructure):
        * bridge/objc/objc_runtime.h:
        (JSC::Bindings::ObjcFallbackObjectImp::createStructure):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObject::createStructure):
        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapRuntimeObject::createStructure):
        * bridge/qt/qt_runtime.h:
        (JSC::Bindings::QtRuntimeMethod::createStructure):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::RuntimeArray):
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::createStructure):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::RuntimeMethod):
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::createStructure):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::RuntimeObject):
        * bridge/runtime_object.h:
        (JSC::Bindings::RuntimeObject::createStructure):
        * history/HistoryItem.h:

2011-04-15  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Brian Weinstein.

        Hang underneath ApplicationCacheStorage::writeDataToUniqueFileInDirectory when loading
        http://www.webkit.org/demos/calendar.
        https://bugs.webkit.org/show_bug.cgi?id=58698

        * platform/win/FileSystemWin.cpp:
        (WebCore::openFile):
        Add breaks to the case statement.
        (WebCore::directoryName):
        Remove any trailing slash in directoryName. After closer inspection of all callers, it
        appears the that callers do not need the trailing slash, and those that use the length do
        so only to change the direction of the slashes throughout the length of the path.

2011-04-15  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 52963 - Enable O(1) access to root from any node in shadow DOM subtree
        https://bugs.webkit.org/show_bug.cgi?id=52963

        .) Change base class of ShadowRoot from DocumentFragment to TreeScope.
        .) Re-enable tree scope handling in Node (had ASSERT_NOT_REACHED, etc.).
        .) Merged setTreeScope() with setTreeScopeRecursively()
        .) Call setTreeScopeRecursively in DOM manipulation functions where applicable.

        No new tests. (refactoring)

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::ContainerNode::removeBetween):
        (WebCore::ContainerNode::removeChildren):
        (WebCore::ContainerNode::parserAddChild):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::setDocType):
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::treeScope):
        (WebCore::Node::setTreeScopeRecursively):
        * dom/Node.h:
        (WebCore::Node::document):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::~ShadowRoot):
        (WebCore::ShadowRoot::nodeType):
        (WebCore::ShadowRoot::cloneNode):
        (WebCore::ShadowRoot::childTypeAllowed):
        * dom/ShadowRoot.h:
        (WebCore::toShadowRoot):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::setParentTreeScope):
        * dom/TreeScope.h:
        * rendering/RenderSlider.cpp:

2011-04-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        DOM object handles are never removed from cache
        https://bugs.webkit.org/show_bug.cgi?id=58707

        We were trying to remove hash table items by value instead of by key.

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::JSNodeHandleOwner::finalize): Changed to work more like
        DOMObjectHandleOwner::finalize because I'm going to merge them.

        (WebCore::DOMObjectHandleOwner::finalize): Remove hash table items
        by key, not value. (Oops!) Use a helper function to make sure we get
        this right.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::cacheDOMObjectWrapper): Store the hash table key as our weak
        handle context, so we can use it at destruction time.

        * bindings/js/JSDOMBinding.h: Removed unnecessary include.

        * bindings/js/JSNodeCustom.h:
        (WebCore::cacheDOMNodeWrapper): Store the hash table key as our weak
        handle context, so we can use it at destruction time.

        * bindings/js/ScriptWrappable.h:
        (WebCore::ScriptWrappable::setWrapper): Forward context parameter, to
        support the above.

2011-04-15  Kenneth Russell  <kbr@google.com>

        Unreviewed. Chromium Linux Release build fix due to unused variables.

        * platform/audio/mkl/FFTFrameMKL.cpp:
        (WebCore::FFTFrame::doFFT):
        (WebCore::FFTFrame::doInverseFFT):
        (WebCore::FFTFrame::cleanup):

2011-04-15  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build change after r83945.

        New 'PlatformPathCairo.cpp' was not added to the WinCairo build.

        * WebCore.vcproj/WebCore.vcproj: Add missing file to WinCairo
          build.  Exclude for standard Apple build.

2011-04-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Fade the find page overlay
        https://bugs.webkit.org/show_bug.cgi?id=58697

        Add a symbol that WebKit2 needs.

        * WebCore.exp.in:

2011-04-15  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        RenderDetailsMarker should belong to shadow element.
        https://bugs.webkit.org/show_bug.cgi?id=58591

        - Introduced DetailsMarkerControl element, which is a shadow element of <summary>, creates RenderDetailsMarker.
        - Removed custom layout code from RenderDetails, RenderDetailsMarker, which is now done by usual CSS layout.
          Note that marker size is given via style for -webkit-details-marker pseudo class.
        - Converted default summary implementation from pure-renderer style to shadow of HTMLDetailsElement.
          Now RenderDetails knows nothing about default summary.
        - Moved event handling code from HTMLDetailsElement to HTMLSummaryElement because now the marker is always child of 
          <summary>, and the clickable area is now <summary> itself.

        - Note that the rendering result is changed due to the conversion from custom layout code to usual CSS styling.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/html.css:
        (summary::-webkit-details-marker):
        * dom/Element.cpp:
        (WebCore::Element::attach):
        * dom/Node.cpp:
        (WebCore::shouldCreateRendererFor):
        * dom/Node.h:
        (WebCore::Node::canHaveLightChildRendererWithShadow):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::findSummaryFor):
        (WebCore::HTMLDetailsElement::findMainSummary):
        (WebCore::HTMLDetailsElement::refreshMainSummary):
        (WebCore::HTMLDetailsElement::createShadowSubtree):
        (WebCore::HTMLDetailsElement::childrenChanged):
        (WebCore::HTMLDetailsElement::finishParsingChildren):
        (WebCore::HTMLDetailsElement::toggleOpen):
        * html/HTMLDetailsElement.h:
        (WebCore::HTMLDetailsElement::canHaveLightChildRendererWithShadow):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::create):
        (WebCore::HTMLSummaryElement::createShadowSubtree):
        (WebCore::HTMLSummaryElement::detailsElement):
        (WebCore::HTMLSummaryElement::isMainSummary):
        (WebCore::HTMLSummaryElement::defaultEventHandler):
        * html/HTMLSummaryElement.h:
        (WebCore::HTMLSummaryElement::canHaveLightChildRendererWithShadow):
        * html/shadow/DetailsMarkerControl.cpp: Added.
        (WebCore::DetailsMarkerControl::DetailsMarkerControl):
        (WebCore::DetailsMarkerControl::createRenderer):
        (WebCore::DetailsMarkerControl::rendererIsNeeded):
        (WebCore::DetailsMarkerControl::shadowPseudoId):
        (WebCore::DetailsMarkerControl::summaryElement):
        * html/shadow/DetailsMarkerControl.h: Added.
        (WebCore::DetailsMarkerControl::create):
        * rendering/RenderDetails.cpp:
        (WebCore::RenderDetails::RenderDetails):
        (WebCore::RenderDetails::styleDidChange):
        (WebCore::RenderDetails::moveSummaryToContents):
        (WebCore::RenderDetails::checkMainSummary):
        (WebCore::RenderDetails::layout):
        * rendering/RenderDetails.h:
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::RenderDetailsMarker):
        (WebCore::RenderDetailsMarker::isOpen):
        (WebCore::RenderDetailsMarker::getPath):
        (WebCore::RenderDetailsMarker::paint):
        (WebCore::RenderDetailsMarker::details):
        * rendering/RenderDetailsMarker.h:

2011-04-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Implement localize strings for windows WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=58688

        * platform/win/LocalizedStringsWin.cpp:
        (WebCore::createWebKitBundle):
        (WebCore::webKitBundle):
        (WebCore::localizedString):
        Add implementation of localizedString for Windows.

2011-04-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Some mechanical DOM wrapper cleanup
        https://bugs.webkit.org/show_bug.cgi?id=58689

        * WebCore.exp.in: Export!

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::isReachableFromDOM): Inverted the inDocument test to make the
        relationship of the special cases to the normal case clearer.

        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::toJSArrayBufferView):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::getCachedDOMObjectWrapper):
        (WebCore::cacheDOMObjectWrapper):
        * bindings/js/JSDOMBinding.h:
        (WebCore::createDOMObjectWrapper):
        (WebCore::getDOMObjectWrapper):
        (WebCore::createDOMNodeWrapper):
        (WebCore::getDOMNodeWrapper): Changed DOM wrapper functions to operate
        in terms of DOMWrapperWorlds instead of ExecStates. This is clearer,
        and ever-so-slightly faster.
        
        Removed hasCachedXXX functions, now that they're unused.

        * 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::createWrapperInline):
        * bindings/js/JSNodeCustom.h:
        (WebCore::getCachedDOMNodeWrapper):
        (WebCore::cacheDOMNodeWrapper):
        (WebCore::toJS):
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS): Updated for changes above.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dropProtection): Removed use of hasCachedDOMObjectWrapper
        because XHR is almost always created and used by JavaScript, so it's
        simpler to just always report extra cost.

2011-04-15  Andreas Kling  <kling@webkit.org>

        Rolling out accidental part of r84010.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQt::setButtonPadding):

2011-04-15  Oliver Hunt  <oliver@apple.com>

        Forgot windows build fix.

        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::WeakOwner::isReachableFromOpaqueRoots):

2011-04-15  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Yury Semikhatsky.

        Frontend Part of Web Inspector: Remote Web Inspector - Cross Platform InspectorServer
        https://bugs.webkit.org/show_bug.cgi?id=51364

        The front end should not use a transparent background when
        loaded as a web page (remote debugging) but should when loaded
        regularly in a custom window. This adds a "remote" style class
        onto the document body when the page is loaded remotely.

        * inspector/front-end/inspector.css:
        (body.detached.platform-mac-snowleopard:not(.remote) #toolbar): respect the "remote" class.
        * inspector/front-end/inspector.js: add a "remote" class on the body when loaded remotely.

2011-04-15  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        JSLock ASSERT seen often when using the inspector for long
        periods of time. We should take the JSLock whenever we
        might allocate memory in the JavaScript Heap.

        JSC InjectedScriptHost::nodeAsScriptValue should take JSLock before possible JavaScript Allocations
        https://bugs.webkit.org/show_bug.cgi?id=58674

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::nodeAsScriptValue): take the JSLock.

2011-04-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make JSNodeFilterCondition handle its lifetime correctly
        https://bugs.webkit.org/show_bug.cgi?id=58622

        Switch over to a WeakHandle and external roots to keep the
        condition value live.

        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::JSNodeFilterCondition):
        (WebCore::JSNodeFilterCondition::markAggregate):
        (WebCore::JSNodeFilterCondition::acceptNode):
        (WebCore::JSNodeFilterCondition::WeakOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSNodeFilterCondition.h:
        (WebCore::JSNodeFilterCondition::create):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::toNodeFilter):
        * bindings/scripts/CodeGeneratorJS.pm:

2011-04-13  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] QNetworkReplyHandler refactoring: some adjustments
        https://bugs.webkit.org/show_bug.cgi?id=57092

        - Removing flag m_redirected from QNetworkReplyHandler and using m_redirectionTargetUrl.isValid() instead.
        - Moving flag m_responseContainsData from QNetworkReplyHandler to the reply wrapper and removing the connection of
        signal metaDataChanged for m_responseContainsData to be consistent.
        - Using an OwnPtr to keep the reference to the QNetworkReplyWrapper.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::receiveMetaData):
        (WebCore::QNetworkReplyWrapper::didReceiveReadyRead):
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::release):
        (WebCore::shouldIgnoreHttpError):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::redirect):
        (WebCore::QNetworkReplyHandler::forwardData):
        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyWrapper::responseContainsData):
        (WebCore::QNetworkReplyWrapper::redirected):

2011-04-15  Alexey Proskuryakov  <ap@apple.com>

        Chromium build fix.

        * platform/SecureTextInput.h: CARBON_SECURE_INPUT_MODE no longer exists.

2011-04-15  Mike Reed  <reed@google.com>

        Reviewed by Darin Fisher.

        hide unused static function when SKIA_GPU is enabled
        https://bugs.webkit.org/show_bug.cgi?id=58670

        No new tests. Just fixes a warning (treated as an error) when SKIA_GPU is enabled

        * platform/graphics/skia/ImageSkia.cpp:

2011-04-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Beth Dakin.

        Some borders with border-radius do not have rounded inner edges
        https://bugs.webkit.org/show_bug.cgi?id=58457
        
        Improve the logic used to compute the inner radii on curved
        borders, to maintain borders of even thickness around the curve.
        
        Tests: fast/borders/mixed-border-styles-radius.html
               fast/borders/mixed-border-styles.html

        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::computeBorderOuterRect):
        (WebCore::RenderBoxModelObject::computeBorderInnerRect):
        Two new utility functions to share some code that was in both paintBorder()
        and paintBoxShaadow().
        getRoundedInnerBorderWithBorderWidths() now takes the outer border box
        as well as the inner box.
        
        (WebCore::RenderBoxModelObject::paintBorder): Call new methods.
        (WebCore::RenderBoxModelObject::paintBoxShadow): Ditto.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBoxSideFromPath):
        getRoundedInnerBorderWithBorderWidths() now takes the outer border box
        as well as the inner box.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getRoundedInnerBorderWithBorderWidths):
        * rendering/style/RenderStyle.h:
        Compute the inner radii by starting with teh radii used for the
        outer box, and then shrinking them down based on the border thickness.

2011-04-14  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: Password field input does not switch to ASCII-compatible source
        https://bugs.webkit.org/show_bug.cgi?id=58583
        <rdar://problem/9059651>

        * platform/SecureTextInput.cpp:
        (WebCore::enableSecureTextInput):
        (WebCore::disableSecureTextInput):
        This is now only used by Chromium. There is no need to change TSMDocument properties in
        renderer process (and really, all secure text input logic in WebCore should be eliminated).

2011-04-13  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Ryosuke Niwa.

        Continue (3rd) experiment with moving caret by word in visual order.
        https://bugs.webkit.org/show_bug.cgi?id=58294

        This patch along with r82588 and r83483 implements moving caret by
        word in visual order.
        
        The overall algorithm is:
        1. First get the InlineBox and offset of the pass-in VisiblePosition.
        2. Based on the position (left boundary, middle, right boundary) of the offset and the
           direction of the movement, look for visually adjacent word breaks.
        2.1 If the offset is the minimum offset of the box,
            return the rightmost word boundary in previous boxes if moving left.
            return the leftmost word boundary in box and next boxes if moving right.
        2.2 Similar for the case when offset is at the maximum offset of the box.
        2.3 When offset is inside the box (not at boundaries), first find the previousWordPosition 
            or nextWordPosition based on the directionality of the box. If this word break position 
            is also inside the same box, return it. Otherwise (the nextWordPosition or 
            previousWordPosition is not in the same box or is at the box boundary), collect all the 
            word breaks in the box and search for the one closest to the input "offset" based on 
            box directionality, block directionality, and movement direction. Continue search in 
            adjacent boxes if needed.

        Notes:
        1. Word boundaries are collected one box at a time. Only when a boundary that is closest to 
           the input position (in the moving direction) is not available in current box, word 
           boundaries in adjacent box will be collected. So, there is no need to save InlineBox in 
           word boundaries. Instead, the word boundaries are saved as a pair 
           (VisiblePosition, offset) to avoid recomputing VisiblePosition.
 
        2. We only collect boundaries of the right kind (i.e. left boundary of a word in LTR block
           and right boundary of a word in RTL block). And word boundaries are collected using 
           previousWordPosition() and nextWordPosition(). So when box directionality is the same as 
           block directionality, word boundaries are collected from right to left visually in a LTR 
           box, and word boundaries are collected from left to right visually in a RTL box. It is
           the other way around when box directionality is different from block directionality.

        3. To find the right kinds of word boundaries, we must move back and forth between words
           in some situations. For example, if we're moving to the right in a LTR box in LTR block,
           we cannot simply return nextWordPosition() because it would return the right boundary
           of a word. Instead, we return nextWordPosition()'s nextWordPosition()'s previousWordPosition().

        4. When collecting word breaks inside a box, it first computes a start position, then
           collect the right kind of word breaks until it reaches the end of (or beyond) the box.
           In the meanwhile, it might need special handling on the rightmost or leftmost position 
           based on the directionality of the box and block. These computations do not consider the 
           box's bidi level.

        * editing/visible_units.cpp:
        (WebCore::nextWordBreakInBoxInsideBlockWithDifferentDirectionality):
        (WebCore::collectWordBreaksInBox):
        (WebCore::previousWordBoundaryInBox):
        (WebCore::nextWordBoundaryInBox):
        (WebCore::visuallyLastWordBoundaryInBox):
        (WebCore::leftWordBoundary):
        (WebCore::rightWordBoundary):
        (WebCore::leftWordPosition):
        (WebCore::rightWordPosition):

2011-04-14  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Use HTMLImageElement in Canvas 2D / WebGL before response is ready causes crash
        https://bugs.webkit.org/show_bug.cgi?id=58501

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::texImage2D): Call validateHTMLImageElement().
        (WebCore::WebGLRenderingContext::texSubImage2D): Ditto.
        (WebCore::WebGLRenderingContext::validateHTMLImageElement): Make sure image is ready.
        * html/canvas/WebGLRenderingContext.h:

2011-04-07  MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.

        DocumentMaker::AllMarkers should not be a part of DocumentMarker::MarkerType
        https://bugs.webkit.org/show_bug.cgi?id=58112
        
        - Converted DocumentMarker::MarkerTypes from unsigned int to a class.
        - Converted DocumentMarker::AllMarkers from an enum entry to a subclass of MarkerTypes.
        - Changed type of some MarkerType argument on DocumentMarkerController API to MarkerTypes
          which should allow a combination of MarkerType constansts.
        - Removed some MarkerType arguments on DocumentMarkerController API
          which only received AllMarkers.
        
        No new tests, no behavior change.

        * WebCore.exp.in:
        * dom/DocumentMarker.h:
        (WebCore::DocumentMarker::MarkerTypes::MarkerTypes):
        (WebCore::DocumentMarker::MarkerTypes::contains):
        (WebCore::DocumentMarker::MarkerTypes::intersects):
        (WebCore::DocumentMarker::MarkerTypes::operator==):
        (WebCore::DocumentMarker::MarkerTypes::add):
        (WebCore::DocumentMarker::MarkerTypes::remove):
        (WebCore::DocumentMarker::AllMarkers::AllMarkers):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::possiblyHasMarkers):
        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::copyMarkers):
        (WebCore::DocumentMarkerController::removeMarkers):
        (WebCore::DocumentMarkerController::markerContainingPoint):
        (WebCore::DocumentMarkerController::markersInRange):
        (WebCore::DocumentMarkerController::renderedRectsForMarkers):
        (WebCore::DocumentMarkerController::removeMarkersFromMarkerMapVectorPair):
        (WebCore::DocumentMarkerController::repaintMarkers):
        (WebCore::DocumentMarkerController::shiftMarkers):
        (WebCore::DocumentMarkerController::setMarkersActive):
        (WebCore::DocumentMarkerController::hasMarkers):
        (WebCore::DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange):
        * dom/DocumentMarkerController.h:

2011-04-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Complicated hash table is complicated
        https://bugs.webkit.org/show_bug.cgi?id=58631
        
        Now that we use the opaque roots system to track node wrapper lifetime,
        we can remove a lot of complicated hash-tablery that used to do the same.
        
        Now normal world node wrappers are just set as direct properties of
        ScriptWrappable, while isolated world node wrappers and other DOM object
        wrappers are stored in a shared, per-world hash table.

        In addition to reducing complexity, this makes DOM wrapper allocation
        1.6X faster (tested with scratch-gc-dom3.html), and it reduces the memory
        footprint of normal world wrappers by ~2/3, and isolated world wrappers
        by ~1/3.

        * WebCore.exp.in: Paying the patch tithe.

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::clearWrappers): No more per-document hash tables.

        (WebCore::JSNodeHandleOwner::finalize): Changed to call a helper function,
        so the code to destroy a wrapper can live next to the code to create one.

        * bindings/js/DOMWrapperWorld.h: No more per-document hash tables.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::uncacheDOMObjectWrapper):
        * bindings/js/JSDOMBinding.h:
        (WebCore::createDOMNodeWrapper):
        (WebCore::getDOMNodeWrapper): No more per-document hash tables.
        Added uncacheDOMObjectWrapper to be symmetrical with cacheDOMObjectWrapper.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline): Ditto.

        * bindings/js/JSNodeCustom.h:
        (WebCore::getCachedDOMNodeWrapper):
        (WebCore::cacheDOMNodeWrapper):
        (WebCore::uncacheDOMNodeWrapper):
        (WebCore::toJS): Implemented the scheme described above.

        * bindings/js/ScriptWrappable.h:
        (WebCore::ScriptWrappable::wrapper):
        (WebCore::ScriptWrappable::setWrapper):
        (WebCore::ScriptWrappable::clearWrapper): ScriptWrappable needs a handle
        owner now, since we don't have an extra handle living in a hash table
        to maintain ownership for us.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        * dom/Document.h:
        * dom/Node.cpp:
        (WebCore::Node::setDocument): No more per-document hash tables.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer): Removed call to
        hasCachedDOMNodeWrapperUnchecked because that was the old way of doing
        things, and I was in the mood for getting rid of the old way. It's
        debatable whether the check was ever a good idea. Even when a <canvas>
        doesn't have a direct JS wrapper, other JS references can still keep
        the <canvas> alive. So, it's probably best always to report extra cost.

2011-04-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Rename rawRequestHeadersText and RawResponseHeadersText to requestHeadersText and responseHeadersText
        https://bugs.webkit.org/show_bug.cgi?id=58650

        * inspector/Inspector.json:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceResponse):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithResponse):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.get requestHeadersText):
        (WebInspector.Resource.prototype.set requestHeadersText):
        (WebInspector.Resource.prototype.get requestHeadersSize):
        (WebInspector.Resource.prototype.get responseHeadersText):
        (WebInspector.Resource.prototype.set responseHeadersText):
        (WebInspector.Resource.prototype.get responseHeadersSize):
        (WebInspector.Resource.prototype._headersSize):
        * inspector/front-end/ResourceHeadersView.js:
        (WebInspector.ResourceHeadersView):
        (WebInspector.ResourceHeadersView.prototype._refreshRequestHeaders):
        (WebInspector.ResourceHeadersView.prototype._refreshResponseHeaders):
        (WebInspector.ResourceHeadersView.prototype._refreshHeadersTitle):
        (WebInspector.ResourceHeadersView.prototype._refreshHeadersText):
        (WebInspector.ResourceHeadersView.prototype._toggleRequestHeadersText):
        (WebInspector.ResourceHeadersView.prototype._toggleResponseHeadersText):
        (WebInspector.ResourceHeadersView.prototype._createHeadersToggleButton):
        * inspector/front-end/networkPanel.css:
        (.resource-headers-view .outline-disclosure li.headers-text):
        * platform/network/ResourceLoadInfo.h:

2011-04-15  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement css overflow properties in CSSStyleApplyProperty
        https://bugs.webkit.org/show_bug.cgi?id=58633

        No new tests required as no functionality changes.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Add initializers for CSSPropertyOverflowX, CSSPropertyOverflowY and CSSPropertyOverflow.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Delete existing implementations.

2011-04-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Make mac WebKit1 use the default localization strategy
        https://bugs.webkit.org/show_bug.cgi?id=58628

        * English.lproj/Localizable.strings:
        Update by running update-webkit-localizable-strings.

        * platform/DefaultLocalizationStrategy.cpp:
        (WebCore::DefaultLocalizationStrategy::contextMenuItemTagLookUpInDictionary):
        (WebCore::DefaultLocalizationStrategy::keygenKeychainItemName):
        (WebCore::DefaultLocalizationStrategy::imageTitle):
        Match the WebKit1 versions of these functions by special casing CF platforms.

2011-04-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: No console message and headers in inspector when X-Frame-Options header blocks a load
        https://bugs.webkit.org/show_bug.cgi?id=58136

        Passed response info to inspector when X-Frame-Options header blocks resource loading.

        Test: http/tests/inspector/network/x-frame-options-deny.html

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::continueAfterXFrameOptionsDeniedImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::continueAfterXFrameOptionsDenied):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):

2011-04-15  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: TextViewer and TextEditorModel must support both \n and \r\n as line separators
        https://bugs.webkit.org/show_bug.cgi?id=58449

        Test: inspector/editor/text-editor-model.html

        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel):
        (WebInspector.TextEditorModel.prototype.get text):
        (WebInspector.TextEditorModel.prototype.setText):
        (WebInspector.TextEditorModel.prototype._innerSetText):
        (WebInspector.TextEditorModel.prototype.copyRange):

2011-04-15  Sergey Vorobyev  <sergeyvorobyev@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Network events don't preserves,
        when inspector frontend closed and open again
        https://bugs.webkit.org/show_bug.cgi?id=58064

        Added InspectorFrontendProxy and EventsCollector.
        They allow captured messages from InspectorResourceAgent
        to frontend (or mockFrontend if frontend disabled) and
        push collected data when frontend reconnect.
        This functionality is disabled by default.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/EventsCollector.cpp: Added.
        (WebCore::EventsCollector::EventsCollector):
        (WebCore::EventsCollector::addEvent):
        (WebCore::EventsCollector::sendCollectedEvents):
        * inspector/EventsCollector.h: Added.
        (WebCore::EventsCollector::~EventsCollector):
        * inspector/Inspector.json:
        * inspector/InspectorFrontendProxy.cpp: Added.
        (WebCore::InspectorFrontendProxy::InspectorFrontendProxy):
        (WebCore::InspectorFrontendProxy::setInspectorFrontendChannel):
        (WebCore::InspectorFrontendProxy::setEventsCollector):
        (WebCore::InspectorFrontendProxy::sendMessageToFrontend):
        * inspector/InspectorFrontendProxy.h: Added.
        (WebCore::InspectorFrontendProxy::~InspectorFrontendProxy):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl):
        (WebCore::InspectorInstrumentation::loadEventFiredImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willSendRequest):
        (WebCore::InspectorInstrumentation::willReceiveResourceResponse):
        (WebCore::InspectorInstrumentation::didReceiveContentLength):
        (WebCore::InspectorInstrumentation::didFinishLoading):
        (WebCore::InspectorInstrumentation::domContentLoadedEventFired):
        (WebCore::InspectorInstrumentation::loadEventFired):
        (WebCore::InspectorInstrumentation::frameDetachedFromParent):
        (WebCore::InspectorInstrumentation::didCreateWebSocket):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorInstrumentation::didCloseWebSocket):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::setFrontend):
        (WebCore::InspectorResourceAgent::resourceContent):
        (WebCore::InspectorResourceAgent::~InspectorResourceAgent):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::domContentEventFired):
        (WebCore::InspectorResourceAgent::loadEventFired):
        (WebCore::InspectorResourceAgent::enabledBackgoundEventsCoollection):
        (WebCore::InspectorResourceAgent::enable):
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype.domContentEventFired):
        (WebInspector.NetworkDispatcher.prototype.loadEventFired):
        * inspector/front-end/inspector.js:
        (WebInspector.domContentEventFired):
        (WebInspector.loadEventFired):

2011-04-15  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION(r83397) [Qt] When clicking on the media elements they grow 2 pixels.
        https://bugs.webkit.org/show_bug.cgi?id=58477

        Since r83397 the media controls elements are actual DOM elements.
        Therefore the global style-sheet applies to them. html.css defines
        input[type="button"]:active to be border-style: inset which means
        that when the buttons are active they grow by their border size. Therefore
        ports which are not using the borders must explicitly disable them in their custom
        stylesheet.

        * css/mediaControlsQt.css:
        (audio::-webkit-media-controls-mute-button):
        (video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-play-button):
        (video::-webkit-media-controls-play-button):
        (video::-webkit-media-controls-fullscreen-button):
        * css/mediaControlsQuickTime.css:
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-seek-back-button, video::-webkit-media-controls-seek-back-button):
        (audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls-seek-forward-button):
        (audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-rewind-button, video::-webkit-media-controls-rewind-button):
        (audio::-webkit-media-controls-return-to-realtime-button, video::-webkit-media-controls-return-to-realtime-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):

2011-04-15  Zelidrag Hornung  <zelidrag@chromium.org>

        Reviewed by Darin Fisher.

        Added enums for external file system type.
        https://bugs.webkit.org/show_bug.cgi?id=58456

        * fileapi/DOMFileSystemBase.cpp:
        (WebCore::DOMFileSystemBase::crackFileSystemURL):
        * fileapi/DOMFileSystemBase.h:
        * fileapi/EntryBase.cpp:
        (WebCore::EntryBase::toURL):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::requestFileSystem):
        * page/DOMWindow.h:
        * platform/AsyncFileSystem.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::requestFileSystem):
        (WebCore::WorkerContext::requestFileSystemSync):
        * workers/WorkerContext.h:

2011-04-15  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make resource revisions use dedicated type (not Resource clone).
        https://bugs.webkit.org/show_bug.cgi?id=58659

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.setStyleSheetText):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.addRevision):
        (WebInspector.Resource.prototype._innerRequestContent.onResourceContent):
        (WebInspector.Resource.prototype._innerRequestContent):
        (WebInspector.ResourceRevision):
        (WebInspector.ResourceRevision.prototype.get resource):
        (WebInspector.ResourceRevision.prototype.get timestamp):
        (WebInspector.ResourceRevision.prototype.get content):
        (WebInspector.ResourceRevision.prototype.revertToThis):
        (WebInspector.ResourceRevision.prototype.requestContent.mycallback):
        (WebInspector.ResourceRevision.prototype.requestContent):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.resourceViewTypeMatchesResource):
        (WebInspector.ResourceView.resourceViewForResource):
        (WebInspector.ResourceView.recreateResourceView):
        (WebInspector.ResourceView.existingResourceViewForResource):
        (WebInspector.RevisionSourceFrame):
        (WebInspector.RevisionSourceFrame.prototype.get resource):
        (WebInspector.RevisionSourceFrame.prototype.isContentEditable):
        (WebInspector.RevisionSourceFrame.prototype.requestContent):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._showResourceView):
        (WebInspector.ResourcesPanel.prototype._showRevisionView):
        (WebInspector.ResourcesPanel.prototype._fetchAndApplyDiffMarkup.step1):
        (WebInspector.ResourcesPanel.prototype._fetchAndApplyDiffMarkup.step2):
        (WebInspector.ResourcesPanel.prototype._fetchAndApplyDiffMarkup):
        (WebInspector.ResourceRevisionTreeElement):
        (WebInspector.ResourceRevisionTreeElement.prototype.get itemURL):
        (WebInspector.ResourceRevisionTreeElement.prototype.onselect):
        (WebInspector.ResourceRevisionTreeElement.prototype._ondragstart):
        (WebInspector.ResourceRevisionTreeElement.prototype._handleContextMenuEvent):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._ensureContentLoaded):
        (WebInspector.SourceFrame.prototype.requestContent):
        (WebInspector.SourceFrame.prototype.commitEditing.didEditContent):
        (WebInspector.SourceFrame.prototype.commitEditing):

2011-04-15  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Prevent Backspace keypresses from routing into the inspected page
        https://bugs.webkit.org/show_bug.cgi?id=58653

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

2011-04-15  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ryosuke Niwa.

        Text selection changes unexpectedly when dragging out of the <input>
        https://bugs.webkit.org/show_bug.cgi?id=55552

        Tests: editing/selection/select-out-of-editable.html
               editing/selection/select-out-of-floated-contenteditable.html
               editing/selection/select-out-of-floated-input.html
               editing/selection/select-out-of-floated-textarea.html

        * page/EventHandler.cpp:
        (WebCore::selectionExtentRespectingEditingBoundary): When dragging from an editable element, check that
        the endpoint is not outside the element. If it is, translate the point into a local point within
        the editable element.
        (WebCore::EventHandler::updateSelectionForMouseDrag): Call targetPositionForSelectionEndpoint() to
        calculate the selection endpoint.

2011-04-15  Adam Roben  <aroben@apple.com>

        Roll out r83954

        It was causing fast/dom/Window/timer-null-script-execution-context.html to crash on multiple
        bots.

        See <http://webkit.org/b/58610>.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::setTimeout):
        (WebCore::JSWorkerContext::setInterval):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        * bindings/js/ScheduledAction.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::WindowSetTimeoutImpl):
        * page/ContentSecurityPolicy.cpp:
        * page/ContentSecurityPolicy.h:

2011-04-15  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor resource setContent / revisions infrastructure to get
        rid of onRevert callback.
        https://bugs.webkit.org/show_bug.cgi?id=58649

        Instead, we will have DomainModel/Resource binding responsible for changing
        underlying model upon resource changes and vice versa.

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getStyleSheet):
        (WebCore::InspectorCSSAgent::getStyleSheetText):
        (WebCore::InspectorCSSAgent::setStyleSheetText):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::assertStyleSheetForId):
        * inspector/InspectorCSSAgent.h:
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.addRule):
        (WebInspector.CSSStyleModel.prototype._fireStyleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._fireStyleSheetChanged):
        (WebInspector.CSSStyleModel.prototype.setStyleSheetText):
        (WebInspector.CSSStyleDeclaration.prototype.insertPropertyAt):
        (WebInspector.CSSProperty.prototype.setText):
        (WebInspector.CSSProperty.prototype.setText.callback):
        (WebInspector.CSSProperty.prototype.setDisabled.callback):
        (WebInspector.CSSProperty.prototype.setDisabled):
        (WebInspector.CSSStyleSheet.prototype.setText):
        (WebInspector.CSSStyleModelResourceBinding):
        (WebInspector.CSSStyleModelResourceBinding.prototype.setContent):
        (WebInspector.CSSStyleModelResourceBinding.prototype._frameNavigated):
        (WebInspector.CSSStyleModelResourceBinding.prototype._innerSetContent):
        (WebInspector.CSSStyleModelResourceBinding.prototype._loadStyleSheetHeaders):
        (WebInspector.CSSStyleModelResourceBinding.prototype._styleSheetChanged.setContent):
        (WebInspector.CSSStyleModelResourceBinding.prototype._styleSheetChanged):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource.didEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource.didReceiveSource):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource):
        (WebInspector.DebuggerPresentationModelResourceBinding):
        (WebInspector.DebuggerPresentationModelResourceBinding.prototype.canSetContent):
        (WebInspector.DebuggerPresentationModelResourceBinding.prototype.setContent):
        * inspector/front-end/Object.js:
        (WebInspector.Object.prototype.hasEventListeners):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource.registerDomainModelBinding):
        (WebInspector.Resource.prototype.isEditable):
        (WebInspector.Resource.prototype.setContent):
        (WebInspector.Resource.prototype.addRevision):
        (WebInspector.Resource.prototype.revertToThis.callback):
        (WebInspector.Resource.prototype.revertToThis):
        (WebInspector.ResourceDomainModelBinding):
        (WebInspector.ResourceDomainModelBinding.prototype.canSetContent):
        (WebInspector.ResourceDomainModelBinding.prototype.setContent):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.createResourceView):
        (WebInspector.ResourceView.resourceViewTypeMatchesResource):
        (WebInspector.ResourceSourceFrame.prototype.isContentEditable):
        (WebInspector.ResourceSourceFrame.prototype.editContent):
        (WebInspector.ResourceSourceFrame.prototype.endEditing):
        (WebInspector.ResourceSourceFrame.prototype._clearIncrementalUpdateTimer):
        (WebInspector.ResourceSourceFrame.prototype._requestContent):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._resourceAdded):
        (WebInspector.FrameResourceTreeElement):
        (WebInspector.FrameResourceTreeElement.prototype._populateRevisions):
        (WebInspector.FrameResourceTreeElement.prototype._revisionAdded):
        (WebInspector.FrameResourceTreeElement.prototype._appendRevision):
        * inspector/front-end/inspector.html:

2011-04-15  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed, rolling out r83949.
        http://trac.webkit.org/changeset/83949
        https://bugs.webkit.org/show_bug.cgi?id=57960

        broke 31 tests in chromium win & linux

        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::drawTexturedRect):
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::copySubRect):
        (WebCore::Texture::load):
        (WebCore::Texture::updateSubRect):
        * platform/graphics/gpu/Texture.h:
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):

2011-04-15  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Alexey Proskuryakov.

        Fix building with Sun Studio 12: function pointers for extern "C" are treated differently
        https://bugs.webkit.org/show_bug.cgi?id=58508

        Since extern "C" makes a different type (although most compilers ignore that),
        we should be more careful when passing NPAPI callback functions.

        * plugins/npapi.cpp:
        (NPN_PluginThreadAsyncCall):

2011-04-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP should block string arguments to setTimeout and setInterval unless options eval-script
        https://bugs.webkit.org/show_bug.cgi?id=58610

        It's somewhat sadness that the JSC and V8 code for setTimeout and
        setInterval are so different.  I struggled for a while with how to
        handle the worker case, but I decided to punt on it for now.

        Tests: http/tests/security/contentSecurityPolicy/eval-scripts-setInterval-allowed.html
               http/tests/security/contentSecurityPolicy/eval-scripts-setInterval-blocked.html
               http/tests/security/contentSecurityPolicy/eval-scripts-setTimeout-allowed.html
               http/tests/security/contentSecurityPolicy/eval-scripts-setTimeout-blocked.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::setTimeout):
        (WebCore::JSWorkerContext::setInterval):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        * bindings/js/ScheduledAction.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::WindowSetTimeoutImpl):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowEval):
        * page/ContentSecurityPolicy.h:

2011-04-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add support for CSP's 'self' source
        https://bugs.webkit.org/show_bug.cgi?id=58604

        This change is now trivially easy.

        Test: http/tests/security/contentSecurityPolicy/script-src-self.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPSourceList::addSourceSelf):

2011-04-15  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Renaming TRACK feature define to VIDEO_TRACK
        https://bugs.webkit.org/show_bug.cgi?id=53556

        No new tests. No new functionality.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * features.pri:
        * html/HTMLTagNames.in:
        * html/HTMLTrackElement.cpp:
        * html/HTMLTrackElement.h:
        * html/HTMLTrackElement.idl:

2011-04-14  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Ctrl+Left/Right switch panels during live editing
        https://bugs.webkit.org/show_bug.cgi?id=58521

        Disable Ctrl+Left/Right keyboard shortcuts while in live edit.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.readOnlyStateChanged):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.set readOnly):
        (WebInspector.TextViewer.prototype.get readOnly):
        (WebInspector.TextViewer.prototype._doubleClick):
        (WebInspector.TextViewer.prototype._commitEditing.didCommitEditing):
        (WebInspector.TextViewer.prototype._commitEditing):
        (WebInspector.TextViewer.prototype._cancelEditing):
        (WebInspector.TextViewerDelegate.prototype.readOnlyStateChanged):
        (WebInspector.TextEditorMainPanel.prototype.set readOnly):
        * inspector/front-end/inspector.js:
        (WebInspector.markBeingEdited):
        (WebInspector.isEditingAnyField):
        (WebInspector.startEditing.cleanUpAfterEditing):

2011-04-14  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Enable raw HTTP headers support
        https://bugs.webkit.org/show_bug.cgi?id=58259

        Added raw headers text support to inspector.

        * English.lproj/localizedStrings.js:
        * inspector/Inspector.json:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceResponse):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithResponse):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource.prototype.get transferSize):
        (WebInspector.Resource.prototype.set requestHeaders):
        (WebInspector.Resource.prototype.get rawRequestHeadersText):
        (WebInspector.Resource.prototype.set rawRequestHeadersText):
        (WebInspector.Resource.prototype.get requestHeadersSize):
        (WebInspector.Resource.prototype.set responseHeaders):
        (WebInspector.Resource.prototype.get rawResponseHeadersText):
        (WebInspector.Resource.prototype.set rawResponseHeadersText):
        (WebInspector.Resource.prototype.get responseHeadersSize):
        (WebInspector.Resource.prototype._headersSize):
        * inspector/front-end/ResourceHeadersView.js:
        (WebInspector.ResourceHeadersView):
        (WebInspector.ResourceHeadersView.prototype._refreshParms):
        (WebInspector.ResourceHeadersView.prototype._refreshRequestHeaders):
        (WebInspector.ResourceHeadersView.prototype._refreshResponseHeaders):
        (WebInspector.ResourceHeadersView.prototype._refreshHeadersTitle):
        (WebInspector.ResourceHeadersView.prototype._refreshHeaders):
        (WebInspector.ResourceHeadersView.prototype._refreshRawHeadersText):
        (WebInspector.ResourceHeadersView.prototype._toggleRawRequestHeadersText):
        (WebInspector.ResourceHeadersView.prototype._toggleRawResponseHeadersText):
        (WebInspector.ResourceHeadersView.prototype._createToggleButton):
        (WebInspector.ResourceHeadersView.prototype._createHeadersToggleButton):
        * inspector/front-end/networkPanel.css:
        (.resource-headers-view .outline-disclosure li .header-toggle):
        (.resource-headers-view .outline-disclosure li.expanded .header-toggle):
        (.resource-headers-view .outline-disclosure li .header-toggle:hover):
        (.resource-headers-view .outline-disclosure li.raw-headers-text):
        * platform/network/ResourceLoadInfo.h:

2011-04-14  Justin Novosad  <junov@chromium.org>

        Reviewed by Kenneth Russell.

        [Chromium] Accelerated 2D Canvas is slow to execute putImageData
        https://bugs.webkit.org/show_bug.cgi?id=57960

        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::drawTexturedRect):
        Added an option for using the blend ops for alpha multiplication
        instead of compositing.
        (WebCore::GLES2Canvas::applyClipping):
        (WebCore::GLES2Canvas::putImageData):
        New method for drawing raw pixel data from memory to the canvas
        (WebCore::GLES2Canvas::putUnmultipliedImageData):
        Wrapper for putImageData
        (WebCore::GLES2Canvas::putPremultipliedImageData):
        Wrapper for putImageData
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::copySubRect):
        (WebCore::Texture::load):
        (WebCore::Texture::updateSubRect):
        Added an overload of the updateSubRect method that can receive a pixel 
        of a size that is different from texture size. Improved the performance
        of updateSubrect by avoiding the allocation of a temporary buffer when
        not required.
        * platform/graphics/gpu/Texture.h:
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):
        In the unmultiplied path, division by alpha now performs proper
        rounding in order to avoid generational degradation with putImageData
        (WebCore::putImageData):
        Alpha multiplication now performs proper rounding in order to be
        consistent with the hardware rendering path: OpenGL always rounds when
        converting to fixed point representation.
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        Now supports a hardware rendering path, which eliminates the need
        for a readback from the GPU
        (WebCore::ImageBuffer::putPremultipliedImageData):
        Now supports a hardware rendering path, which eliminates the need
        for a readback from the GPU

2011-04-14  Joone Hur  <joone.hur@collabora.co.uk>

        Reviewed by Martin Robinson.

        Creating a CairoPath instance is not thread safe
        https://bugs.webkit.org/show_bug.cgi?id=58514

        This patch allows a cairo surface to be created just one time in order to 
        guarantee thread safety.
        In addition, CairoPath.{h,cpp} is renamed to PlatformPathCairo.{h,cpp} to 
        prevent confusing them with PathCairo.cpp

        * CMakeListsEfl.txt: Added PlatformPathCairo.cpp
        * GNUmakefile.list.am: Added PlatformPathCairo.{h,cpp} instead of CairoPath.h.
        * platform/graphics/cairo/CairoPath.h: Removed.
        * platform/graphics/cairo/CairoUtilities.cpp: Include PlatformPathCairo.h instead of CairoPath.h.
        * platform/graphics/cairo/GraphicsContextCairo.cpp: Ditto.
        * platform/graphics/cairo/PathCairo.cpp: Ditto.
        * platform/graphics/cairo/PlatformPathCairo.cpp: Added.
        (WebCore::getPathSurface): Getting a static cairo surface.
        (WebCore::CairoPath::CairoPath): Moved the implementation of the constructor 
        into the CPP file.
        * platform/graphics/cairo/PlatformPathCairo.h: Renamed CairoPath.h to this.
        (WebCore::CairoPath::~CairoPath):
        (WebCore::CairoPath::context):

2011-04-14  Nat Duca  <nduca@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Add lowpass filter and graph to fps indicator
        https://bugs.webkit.org/show_bug.cgi?id=58186

        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::CCHeadsUpDisplay):
        (WebCore::CCHeadsUpDisplay::drawHudContents):
        (WebCore::CCHeadsUpDisplay::drawFPSCounter):
        (WebCore::CCHeadsUpDisplay::drawPlatformLayerTree):
        (WebCore::CCHeadsUpDisplay::onPresent):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h:

2011-04-14  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=58612
        Crash switching overlay/non-overlay scrollbar preference 
        (WebCore::Page::setNeedsRecalcStyleInAllFrames + 9)
        -and corresponding-
        <rdar://problem/9241920> 

        Speculative fix: Page could definitely be null here. 
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollbarStyleChanged):

2011-04-14  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: ResourceResponse should have encodedDataLength field for synchronous requests transfer size
        https://bugs.webkit.org/show_bug.cgi?id=58447

        FrameLoader now takes encoded data length for synchronous requests from the field with the same name.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * platform/network/ResourceLoadInfo.h:
        (WebCore::ResourceLoadInfo::ResourceLoadInfo):

2011-04-14  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by James Robinson.

        Remove dependency on chromium skia::PlatformCanvas
        https://bugs.webkit.org/show_bug.cgi?id=57563

        This patch does not change any functionality, just the type of object skia::PlatformCanvas -> SkCanvas. The object is still being created by a factory method skia::CreateBitmapCanvas defined in Chromium. We will eventually define an API that every port using skia will define.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::initializeForGDI):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::~TransparencyAwareFontPainter):
        (WebCore::Font::drawComplexText):
        * platform/graphics/chromium/ImageBufferDataSkia.h:
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::resize):
        * platform/graphics/chromium/PlatformCanvas.h:
        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::compositeTextComposite):
        (WebCore::TransparencyWin::makeLayerOpaque):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap):
        (WebCore::Image::drawPattern):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::PlatformContextSkia):
        (WebCore::PlatformContextSkia::setCanvas):
        (WebCore::PlatformContextSkia::isNativeFontRenderingAllowed):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::canvas):
        (WebCore::PlatformContextSkia::printing):
        (WebCore::PlatformContextSkia::setPrinting):

2011-04-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        PumpSession should not call currentTime() in the constructor
        https://bugs.webkit.org/show_bug.cgi?id=55211

        currentTime() is expensive.  So we avoid calling it in the constructor
        and instead set startTime on the first check for a yield
        (which in the synchronous case never happens, and in the yielding
        case will happen immediately after the first token due to
        processedTokens being set to INT_MAX).

        This ended up being a large win on (my local copy of)
        peacekeeper's domDynamicCreationCreateElement:

        Before:
        avg 366.3333333333333
        median 366
        stdev 2.712112747574399
        min 362
        max 377

        After:
        avg 345.96666666666664
        median 346
        stdev 1.6829207415152454
        min 343
        max 349

        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLParserScheduler.h:
        (WebCore::PumpSession::PumpSession):
        (WebCore::HTMLParserScheduler::checkForYieldBeforeToken):

2011-04-14  Ami Fischman  <fischman@google.com>

        Reviewed by Eric Carlson.

        Remove unnecessary bottom margin of controls in video elements on media documents.
        This makes the cases of media documents and non-media documents consistent,
        and makes it possible to reason about the height of a rendered media document
        (needed e.g. for sizing iframes).

        This change is covered by (the currently Skipped, but soon-to-be-un-Skipped)
        media/video-controls-in-media-document.html layouttest (see bug 54634 for
        the un-Skipping).

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

        * css/mediaControls.css:
        (video:-webkit-full-page-media::-webkit-media-controls-panel):
        * css/mediaControlsEfl.css:
        (video:-webkit-full-page-media::-webkit-media-controls-panel):
        * css/mediaControlsQuickTime.css:
        (video:-webkit-full-page-media::-webkit-media-controls-panel):

2011-04-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Use opaque roots instead of direct marking for nodes in the DOM
        https://bugs.webkit.org/show_bug.cgi?id=58624

        A node treats the root of its tree (usually the document) as its opaque
        root during GC.
        
        This is needed for correctness in a generational GC world, but it also
        happens to be a 3.5X speedup in a DOM-heavy GC test (scratch-gc-dom2.html).

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::isObservable):
        (WebCore::isReachableFromDOM): Moved a helper function from JSDOMBinding.
        We use this function to determine whether a node is observable.

        (WebCore::JSNodeHandleOwner::isReachableFromOpaqueRoots): Start using
        our weak handle callback to determine reachability, instead of direct
        marking traversal through the DOM.

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::markChildren): Updated to use the opaque roots mechanism
        instead of direct marking.

        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h: Moved code mentioned above. Removed
        markDOMNodeWrapper because it is now unused. This is a good thing because
        markDOMNodeWrapper used deprecatedAppend, which is not compatible
        with generational GC.

        * bindings/js/JSDOMImplementationCustom.cpp:
        (WebCore::JSDOMImplementation::markChildren): Updated to use opaque roots.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::markChildren): No need to mark our child nodes directly,
        since they will take care of themselves through the opaque roots mechanism.

        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::markChildren): Updated to use opaque roots.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::markChildren): No need to mark our tree or our document
        directly, since they will take care of themselves through the opaque
        roots mechanism.

        * bindings/js/JSNodeCustom.h:
        (WebCore::root): Helper function for accessing the root of a node tree.
        This is O(1) while you're in the document, O(log(N)) when you're in a
        reasonably balanced disconnected tree, and O(N) in the pathological case
        of a disconnected tree that's shaped like a linked list. If average case
        O(long(N)) turns out to be too slow, we can optimize through use of
        rare data or an external hash table, but it is so uncommon that I have
        ignored it for now.

        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::markChildren): Updated to use opaque roots.

2011-04-14  Mike Reed  <reed@google.com>

        Reviewed by Kenneth Russell.

        fix shadows with gradients
        https://bugs.webkit.org/show_bug.cgi?id=58376

        No new tests. Existing tests exercise this
        LayoutTests/fast/canvas/canvas-fillPath-gradient-shadow.html

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

2011-04-14  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: No headers information in network panel for downloads.
        https://bugs.webkit.org/show_bug.cgi?id=58139

        Passed resource response to inspector for PolicyDownload and PolicyIgnore requests.

        Test: http/tests/inspector/network/download.html

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseButCanceledImpl):
        (WebCore::InspectorInstrumentation::continueWithPolicyDownloadImpl):
        (WebCore::InspectorInstrumentation::continueWithPolicyIgnoreImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::continueWithPolicyDownload):
        (WebCore::InspectorInstrumentation::continueWithPolicyIgnore):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterContentPolicy):

2011-04-14  Joone Hur  <joone.hur@collabora.co.uk>

        Reviewed by Martin Robinson.

        Convert use of raw pointers to RefPtr in using Cairo
        https://bugs.webkit.org/show_bug.cgi?id=57717

        No new tests added becaue of just replacing raw pointers with smart pointers.

        * platform/graphics/cairo/ContextShadowCairo.cpp: Use a RefPtr<cairo_surface_t> instead of raw pointer.
        (WebCore::purgeScratchBuffer):
        (WebCore::getScratchBuffer):
        * platform/graphics/cairo/ImageBufferCairo.cpp: Use a RefPtr<cairo_t> instead of raw pointer.
        (copySurface):

2011-04-14  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Eric Seidel.

        [Chromium]Change menu list background fallback value to transparent to work background:none for HTML select tag.
        https://bugs.webkit.org/show_bug.cgi?id=57818

        Test: fast/forms/select-background-none.html

        This fix is only for Chromium on Linux. Chromium on Mac already works fine.
        But Windows has the same problem. This change doesn't include Windows part.

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::paintMenuList): Change the default color to transparent.

2011-04-14  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement border style css properties in CSSStyleApplyProperty
        https://bugs.webkit.org/show_bug.cgi?id=58506

        No new functionality added.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Added new property initializers.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Removed old property handlers.

2011-04-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Ojan Vafai.

        Presence of shadow DOM should suppress rendering of ordinary child nodes
        https://bugs.webkit.org/show_bug.cgi?id=58073

        Test: fast/dom/shadow/no-renderers-for-light-children.html

        * dom/Node.cpp:
        (WebCore::shadowRoot): Added a helper function.
        (WebCore::Node::setDocumentRecursively): Changed to use the helper.
        (WebCore::shouldCreateRendererFor): Expanded a long condition check into a helper function,
            added a check for children of an element with a shadow DOM.
        (WebCore::Node::createRendererAndStyle): Changed to use the helper.

2011-04-14  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Tile content and image layers
        https://bugs.webkit.org/show_bug.cgi?id=57113

        Layers tile by default if any dimension is larger than 512.  Smaller
        layers are contained within a single texture but still use the tiler
        infrastructure so that there's only one code path.

        Remove large layer support from content layers.  Content layers no
        longer own a platform canvas--they own a tiler.  Refactor tiler to
        allow for better separation of update/upload/paint.  Add rect
        parameter to update and draw functions on layers for the layer-space
        rect of interest.  This is necessary to know which tiles need to be
        drawn.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::ContentLayerChromium):
        (WebCore::ContentLayerChromium::~ContentLayerChromium):
        (WebCore::ContentLayerPainter::ContentLayerPainter):
        (WebCore::ContentLayerPainter::paint):
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        (WebCore::ContentLayerChromium::setLayerRenderer):
        (WebCore::ContentLayerChromium::tilingTransform):
        (WebCore::ContentLayerChromium::visibleLayerRect):
        (WebCore::ContentLayerChromium::layerBounds):
        (WebCore::ContentLayerChromium::updateLayerSize):
        (WebCore::ContentLayerChromium::draw):
        (WebCore::ContentLayerChromium::createTilerIfNeeded):
        (WebCore::ContentLayerChromium::updateCompositorResources):
        (WebCore::ContentLayerChromium::setTilingOption):
        (WebCore::ContentLayerChromium::bindContentsTexture):
        (WebCore::ContentLayerChromium::unreserveContentsTexture):
        (WebCore::ContentLayerChromium::setIsMask):
        (WebCore::ContentLayerChromium::dumpLayerProperties):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (WebCore::ContentLayerChromium::drawsContent):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setMaskLayer):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        (WebCore::ImageLayerChromium::updateCompositorResources):
        (WebCore::ImageLayerChromium::layerBounds):
        (WebCore::ImageLayerChromium::tilingTransform):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::invalidateRect):
        (WebCore::LayerChromium::paintContentsIfDirty):
        (WebCore::LayerChromium::setIsMask):
        (WebCore::LayerChromium::draw):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawRootLayer):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::paintContentsRecursive):
        (WebCore::LayerRendererChromium::copyOffscreenTextureToDisplay):
        (WebCore::LayerRendererChromium::drawLayer):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::setTileSize):
        (WebCore::LayerTilerChromium::getSingleTexture):
        (WebCore::LayerTilerChromium::invalidateRect):
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::uploadCanvas):
        (WebCore::LayerTilerChromium::updateFromPixels):
        (WebCore::LayerTilerChromium::draw):
        (WebCore::LayerTilerChromium::unreserveTextures):
        * platform/graphics/chromium/LayerTilerChromium.h:
        (WebCore::LayerTilerChromium::setLayerRenderer):
        (WebCore::LayerTilerChromium::skipsDraw):
        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::AutoLocker::AutoLocker):
        (WebCore::PlatformCanvas::Painter::Painter):
        * platform/graphics/chromium/PlatformCanvas.h:
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::draw):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp:
        (WebCore::CCCanvasLayerImpl::draw):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.h:
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::draw):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::draw):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp:
        (WebCore::CCPluginLayerImpl::draw):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.h:
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::draw):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:

2011-04-14  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] REGRESSION(83820): Composited scrollbar layers sometimes not positioned when initially creating frame
        https://bugs.webkit.org/show_bug.cgi?id=58575

        Tell the RenderLayerCompositor to create/destroy composited layers for overflow controls on a FrameView when visibleContentsResized()
        is called, not contentsResized() so that we always update layers when adding or removing scrollbars.

        Covered by several chromium pixel tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::contentsResized):
        (WebCore::FrameView::visibleContentsResized):

2011-04-07  David Levin  <levin@chromium.org>

        Reviewed by Brady Eidson.

        Fix some threading issues in IconDatabase.
        https://bugs.webkit.org/show_bug.cgi?id=57985

        No functionality change so no new tests. It would be very hard to test this, but
        I am working on a change for bug 31639 to detect these (which makes layout tests
        fail for at least one of these issues).

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::setIconDataForIconURL): Release imageData so that it won't get deref'ed outside of locks.
        (WebCore::IconDatabase::readFromDatabase): Ditto.
        (WebCore::IconDatabase::writeToDatabase): Acquire m_urlAndIconLock because the SharedBuffer<> data
        is used, and this lock seems to be the one which consistently guards it.

2011-04-14  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Simplifying Worker termination sequence (removing unnecessary mutex)
        https://bugs.webkit.org/show_bug.cgi?id=57090

        No new tests. Existing Worker tests should pass.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        Check for Terminator-caused exception (or Terminator::shouldTerminate since sometimes
        JS might not run significant enough chunk to be terminated by Terminator) and set
        the flag to forbid future reentry into JS.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::scheduleExecutionTermination):
        (WebCore::WorkerScriptController::forbidExecution):
        (WebCore::WorkerScriptController::isExecutionForbidden):
        * bindings/js/WorkerScriptController.h:
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::scheduleExecutionTermination):
        (WebCore::WorkerScriptController::forbidExecution):
        (WebCore::WorkerScriptController::isExecutionForbidden):
        * bindings/v8/WorkerScriptController.h:
        (WebCore::WorkerScriptController::proxy):
        Symmetrical changes to JSC and V8 WorkerScriptControllers:
        - remove Mutex around operations with executionForbidden flag.
        - set/check that flag only on Worker thread.
        - some renaming in attempt to better reflect what the methods do.

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::handleEvent):
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::evaluate):
        Check for v8::TryCatch::CanContinue() and set forbidExecution flag.
        This result indicates that TerminateExecution() was in effect - we should
        not reenter V8 anymore after that.

        * dom/Document.h:
        (WebCore::Document::isJSExecutionForbidden):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::dispatchMessages):
        Stop dispatching messages once the worker context started to close.
        Per Workers spec, once WorkerGlobalScope.Close() is called, the next
        JS execution does not happen, including onmessage events. Before this
        change, Close() was setting the forbidExecution flag, indirectly stopping
        events from dispatching.

        * dom/ScriptExecutionContext.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::close):
        (WebCore::WorkerContext::isJSExecutionForbidden):
        * workers/WorkerContext.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):
        (WebCore::WorkerThread::stop):

2011-04-14  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=56493
        Drag-scrolling overlay scrollbars thumb in overflow regions does not work
        -and corresponding-
        <rdar://problem/9112688>

        There was an original change to fix this in the normal hit-testing case, but hit 
        testing of transformed and/or positioned objects was still broken. The transformed 
        case is fixed by sending an OverlayScrollbarSizeRelevancy parameter to 
        calculateRects(). Getting positioned objects right is a little trickier. Those need 
        to opt into using temporary clip rects during hit testing. To avoid doing that when 
        it is not necessary, I added a new bit to ScrollView to track whether there are 
        currently overlay scrollbars painted in the view.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        (WebCore::ScrollView::containsScrollableAreaWithOverlayScrollbars):
        (WebCore::ScrollView::setContainsScrollableAreaWithOverlayScrollbars):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::updateClipRects):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::parentClipRects):
        (WebCore::RenderLayer::backgroundClipRect):
        (WebCore::RenderLayer::calculateRects):
        * rendering/RenderLayer.h:

2011-04-14  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver Hunt.

        REGRESSION(r74107): Including svg format in @font-face rules makes Web Fonts fail to load
        https://bugs.webkit.org/show_bug.cgi?id=57766
        <rdar://problem/9232183>

        Move the knowledge of whether to interpret a font as SVG from CachedFont to CSSFontFaceSource. This way
        we can try to interpret the same cached resource in multiple ways.

        Test: fast/css/font-face-repeated-url.html

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::CSSFontFaceSource):
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontFaceSource.h:
        (WebCore::CSSFontFaceSource::setHasExternalSVGFont):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::CachedFont):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::ensureSVGFontData):

            Use TextResourceDecoder correctly.

        (WebCore::CachedFont::getSVGFontById):
        * loader/cache/CachedFont.h:
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::loadFont):

2011-04-14  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Enable building Web Audio with MKL in Chrome-branded builds
        https://bugs.webkit.org/show_bug.cgi?id=58561

        Factored out MKL support into a separate GYP file that is
        incorporated in Chrome-branded builds. Changed how the FFTFrame
        implementations are pulled in and chosen so that all files can be
        unconditionally compiled.

        Tested with both Chrome-branded build (incorporating MKL) and
        Chromium build (building just FFTFrameStub.cpp) on Linux.

        * WebCore.gyp/WebCore.gyp:
        * platform/audio/fftw/FFTFrameFFTW.cpp:
        * platform/audio/mkl/FFTFrameMKL.cpp:

2011-04-14  Ragner Magalhaes  <ragner.magalhaes@openbossa.org>

        Reviewed by Antonio Gomes.

        [Qt] Web Inspector does not highlight elements
        https://bugs.webkit.org/show_bug.cgi?id=35125

        We should call drawNodeHighlight() just if a highlighted node exists
        to avoid do save()/restore() on the Graphics Context unnecessarily.

        Added highlightedNode() method to check if we need to call drawNodeHighlight()
        and only on this case do save()/restore() on the Graphics Context.

        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::highlightedNode):

2011-04-14  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] TilingData should return 1 tile when tile size is texture size.
        https://bugs.webkit.org/show_bug.cgi?id=58364

        * platform/graphics/gpu/TilingData.cpp:
        (WebCore::computeNumTiles):

2011-04-14  Andy Estes  <aestes@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION (r72141): Acid3 rendering is not pixel perfect.
        https://bugs.webkit.org/show_bug.cgi?id=55734
        
        WebCore should render text with a 0px font size at 0px regardless of
        minimum font size settings. This is compatible with other browsers that
        have a minimum font size preference and ensures pixel-perfect rendering
        on Acid3.

        Test: fast/text/zero-font-size.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::getComputedSizeFromSpecifiedSize): If
        specifiedSize is 0, return specified size regardless of zoom factor or
        minimum font size.

2011-04-14  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Have canvas drawImageFromRect just redirect to use drawImage
        https://bugs.webkit.org/show_bug.cgi?id=58516

        Test: fast/canvas/drawImageFromRect_withToDataURLAsSource.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::drawImageFromRect):
        * html/canvas/CanvasRenderingContext2D.h:

2011-04-14  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        REGRESSION (r83820): Lots of compositing tests failing on Windows 7 Release (Tests)
        https://bugs.webkit.org/show_bug.cgi?id=58535

        Change PLATFORM(MAC) guards to !PLATFORM(CHROMIUM) so they apply correctly to the windows build.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::requiresHorizontalScrollbarLayer):
        (WebCore::RenderLayerBacking::requiresVerticalScrollbarLayer):
        (WebCore::RenderLayerBacking::requiresScrollCornerLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::shouldCompositeOverflowControls):

2011-04-14  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        BlobBuilder should be vendor-prefixed
        https://bugs.webkit.org/show_bug.cgi?id=58518

        Renamed BlobBuilder to WebKitBlobBuilder.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/WebKitBlobBuilder.cpp: Renamed from Source/WebCore/fileapi/BlobBuilder.cpp.
        (WebCore::WebKitBlobBuilder::WebKitBlobBuilder):
        (WebCore::WebKitBlobBuilder::getBuffer):
        (WebCore::WebKitBlobBuilder::append):
        (WebCore::WebKitBlobBuilder::getBlob):
        * fileapi/WebKitBlobBuilder.h: Renamed from Source/WebCore/fileapi/BlobBuilder.h.
        (WebCore::WebKitBlobBuilder::create):
        * fileapi/WebKitBlobBuilder.idl: Renamed from Source/WebCore/fileapi/BlobBuilder.idl.
        * page/DOMWindow.idl:
        * workers/WorkerContext.idl:

2011-04-14  Adam Barth  <abarth@webkit.org>

        Remove some trailing whitespace.  I'm making this change to initialize
        the SVN credentials on a new commit-queue machine.  I'm sure there's a
        better way to do this, but I don't know it.

        * dom/Document.cpp:
        (WebCore::Document::Document):

2011-04-14  Pratik Solanki  <psolanki@apple.com>

        Reviewed by David Kilzer.

        Set minimum priority for fast lane connections
        https://bugs.webkit.org/show_bug.cgi?id=58353

        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::initializeMaximumHTTPConnectionCountPerHost): Call
        wkSetHTTPPipeliningMinimumFastLanePriority to allow javascript resources to use the fast
        lane connections.

2011-04-14  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Fix Web Audio build on Linux Debug and with stub FFTFrame
        https://bugs.webkit.org/show_bug.cgi?id=58555

        Built Chromium/Linux in Debug mode to test.

        * platform/audio/FFTFrame.cpp:
        * platform/audio/FFTFrameStub.cpp:
        (WebCore::FFTFrame::initialize):
        * webaudio/AudioContext.cpp:
        * webaudio/DefaultAudioDestinationNode.cpp:

2011-04-14  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [v8] Web Inspector: add initial implementation of WorkerScriptDebugServer
        https://bugs.webkit.org/show_bug.cgi?id=58552

        * bindings/v8/DebuggerScript.js:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded): each worker context
        now have a debug id (similar to frame contexts).
        * bindings/v8/WorkerScriptDebugServer.cpp:
        (WebCore::retrieveWorkerContext):
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::removeListener):
        (WebCore::WorkerScriptDebugServer::getDebugListenerForContext):
        (WebCore::WorkerScriptDebugServer::runMessageLoopOnPause): run message loop until
        debugger command is received and execution is resumed.
        (WebCore::WorkerScriptDebugServer::quitMessageLoopOnPause):
        * bindings/v8/WorkerScriptDebugServer.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::startListeningScriptDebugServer):
        (WebCore::WorkerDebuggerAgent::stopListeningScriptDebugServer):

2011-04-14  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        Add webkit prefix to Blob.slice method and change its semantics to be
        like Array.slice
        https://bugs.webkit.org/show_bug.cgi?id=58496

        Renamed Blob.slice to blob.webkitSlice and made it take start and end
        parameters that're like Array.slice.

        Test: fast/files/blob-slice-test.html

        * fileapi/Blob.cpp:
        (WebCore::Blob::webkitSlice):
        * fileapi/Blob.h:
        * fileapi/Blob.idl:

2011-04-14  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] Height of "Ahem" font differs from all other ports.
        https://bugs.webkit.org/show_bug.cgi?id=57954

        QFontMetricsF::descent() returns the actual descent minus 1,
        to account for the baseline. Add it back to get correct metrics
        for WebKit.

        QFontMetricsF::leading() may return negative values on some
        platforms (those using FreeType), this breaks WebKit's assumption
        that lineSpacing >= (ascent + descent), so we work around this in
        the same fashion as SimpleFontDataFreeType and SimpleFontDataPango.

        This is covered by thousands of layout tests.

        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::platformInit):

2011-04-14  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fixes for wxMSW and wx 2.9.1.1.

        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/wx/FileSystemWx.cpp:
        (WebCore::writeToFile):

2011-04-14  Anders Carlsson  <andersca@apple.com>

        Fix build.

        RuntimeApplicationChecks.h needs to be a private header so WebKit can find it.

        * WebCore.xcodeproj/project.pbxproj:

2011-04-14  Pavel Podivilov  <podivilov@chromium.org>

        Unreviewed, build fix for r83864.

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._childNodeRemoved):

2011-04-14  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Content area highlight does not cover scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=58528

        * inspector/DOMNodeHighlighter.cpp:
        (WebCore::DOMNodeHighlighter::DrawNodeHighlight):

2011-04-14  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: re-implement dom breakpoints.
        https://bugs.webkit.org/show_bug.cgi?id=57038

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/BreakpointManager.js: Removed.
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.NativeBreakpointsSidebarPane):
        (WebInspector.NativeBreakpointsSidebarPane.prototype._reset):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._restoreBreakpoints):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype.setStatus):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.DOMAgent.prototype._childNodeRemoved):
        * inspector/front-end/DOMBreakpointsSidebarPane.js: Added.
        (WebInspector.DOMBreakpointsSidebarPane):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.setInspectedURL):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.populateNodeContextMenu.toggleBreakpoint):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.populateNodeContextMenu):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.createBreakpointHitStatusMessage.didPushNodeToFrontend):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.createBreakpointHitStatusMessage):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._doCreateBreakpointHitStatusMessage.formatters.s):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._doCreateBreakpointHitStatusMessage.append):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._doCreateBreakpointHitStatusMessage):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.nodeRemoved):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._removeBreakpointsForNode):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._removeBreakpoint):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._contextMenu.removeBreakpoint):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._contextMenu):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._checkboxClicked):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.highlightBreakpoint):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.clearBreakpointHighlight):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._createBreakpointId):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._saveBreakpoints):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.restoreBreakpoints):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.show):
        (WebInspector.ElementsPanel.prototype.updateModifiedNodes):
        (WebInspector.ElementsPanel.prototype.updateBreadcrumbSizes.coalesceCollapsedCrumbs):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.show):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused.didCreateBreakpointHitStatusMessage):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused.else.didGetSourceLocation):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._clearInterface):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        (WebInspector.Settings.prototype._set):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.inspectedURLChanged):
        * inspector/front-end/utilities.js:
        ():

2011-04-14  Satish Sampath  <satish@chromium.org>

        Reviewed by Kent Tamura.

        Disable speech input for readonly and disabled input fields.
        https://bugs.webkit.org/show_bug.cgi?id=58540

        Test: fast/speech/input-readonly-and-disabled.html

        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::setRecognitionResult):

2011-04-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed. Rollout r83849 and r83857.

        * inspector/Inspector.json:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didOpenDatabase):
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::setFrontend):
        (WebCore::InspectorDatabaseAgent::clearFrontend):
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        (WebCore::InspectorDatabaseAgent::executeSQL):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/front-end/inspector.js:

2011-04-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r83847.
        http://trac.webkit.org/changeset/83847
        https://bugs.webkit.org/show_bug.cgi?id=58477

        Chromium media controls do use button borders, so this change
        is incorrect.

        * css/mediaControls.css:
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider):
        (audio::-webkit-media-controls-seek-back-button, video::-webkit-media-controls-seek-back-button):
        (audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls-seek-forward-button):
        (audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-rewind-button, video::-webkit-media-controls-rewind-button):
        (audio::-webkit-media-controls-return-to-realtime-button, video::-webkit-media-controls-return-to-realtime-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):

2011-04-14  Andrew Wason  <rectalogic@rectalogic.com>

        Reviewed by Andreas Kling.

        Fix GraphicsContext3DQt.cpp compilation warnings treated as errors
        https://bugs.webkit.org/show_bug.cgi?id=58478

        No new tests.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::getProcAddress):
         Do not use deprecated QString constructor to avoid warning.
        (WebCore::GraphicsContext3D::reshape):
         Use parenthesis to avoid warning.

2011-04-14  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed. Removed ScrollableArea::paintScrollCorner() added in r83820,
        as it breaks chromium clang build (shadowed by RenderLayer::paintScrollCorner()
        with a different signature)

        * platform/ScrollableArea.h:

2011-04-14  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Ready to move detailed heap snapshots storage and processing into workers.
        https://bugs.webkit.org/show_bug.cgi?id=58534

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get _countPercent):
        (WebInspector.HeapSnapshotDiffNode):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff.diffCalculated):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff.baseIdsReceived):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff.idsReceived):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider.createProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype.get data):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren.baseAggregatesReceived.aggregatesReceived.addNodeIfNonZeroDiff):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren.baseAggregatesReceived.aggregatesReceived):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot):
        (WebInspector.HeapSnapshot.prototype.dispose):
        (WebInspector.HeapSnapshot.prototype.nodeFieldValuesByIndex):
        (WebInspector.HeapSnapshot.prototype._numbersComparator):
        (WebInspector.HeapSnapshot.prototype.baseSnapshotHasNode):
        (WebInspector.HeapSnapshot.prototype.updateBaseNodeIds):
        (WebInspector.HeapSnapshotsDiff):
        (WebInspector.HeapSnapshotsDiff.prototype.set baseIds):
        (WebInspector.HeapSnapshotsDiff.prototype.set baseSelfSizes):
        (WebInspector.HeapSnapshotsDiff.prototype.calculate):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotProxy):
        (WebInspector.HeapSnapshotProxy.prototype.createDiff):
        (WebInspector.HeapSnapshotProxy.prototype.createEdgesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.createNodesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.dispose):
        (WebInspector.HeapSnapshotProxy.prototype.nodeFieldValuesByIndex):
        (WebInspector.HeapSnapshotProxy.prototype.pushBaseIds):
        (WebInspector.HeapSnapshotsDiffProxy):
        (WebInspector.HeapSnapshotsDiffProxy.prototype.calculate):
        (WebInspector.HeapSnapshotsDiffProxy.prototype.pushBaseIds):
        (WebInspector.HeapSnapshotsDiffProxy.prototype.pushBaseSelfSizes):

2011-04-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: The list of Database entries is empty if the page opens a database just before Web Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=57833

        * inspector/Inspector.json:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didOpenDatabase):
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::setFrontend):
        (WebCore::InspectorDatabaseAgent::enable):
        (WebCore::InspectorDatabaseAgent::disable):
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        (WebCore::InspectorDatabaseAgent::executeSQL):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/front-end/inspector.js:

2011-04-14  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Chromium] "Remove Breakpoint" menu item is absent in the DOM breakpoints sidebar pane
        https://bugs.webkit.org/show_bug.cgi?id=58530

        * inspector/front-end/ElementsPanel.js:

2011-04-14  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION(r83397) [Qt] When clicking on the media elements they
        grow 2 pixels.
        https://bugs.webkit.org/show_bug.cgi?id=58477

        Since r83397 the media controls elements are actual DOM elements.
        Therefore the global style-sheet applies to them. html.css defines
        input[type="button"]:active to be border-style: inset which means
        that when the buttons are active they grow by their border size.

        * css/mediaControls.css:
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider):
        (audio::-webkit-media-controls-seek-back-button, video::-webkit-media-controls-seek-back-button):
        (audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls-seek-forward-button):
        (audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-rewind-button, video::-webkit-media-controls-rewind-button):
        (audio::-webkit-media-controls-return-to-realtime-button, video::-webkit-media-controls-return-to-realtime-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):

2011-04-14  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Improve disable style for input elements in mobile theme
        https://bugs.webkit.org/show_bug.cgi?id=58480

        * platform/qt/QtMobileWebStyle.cpp:
        (QtMobileWebStyle::drawControl):
        (QtMobileWebStyle::drawPrimitive):
        (QtMobileWebStyle::drawComplexControl):

2011-04-14  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: restore previous selection in Resources panel upon front-end reopen.
        https://bugs.webkit.org/show_bug.cgi?id=58533

        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._processCachedResources):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._initDefaultSelection):
        (WebInspector.ResourcesPanel.prototype._populateResourceTree):
        (WebInspector.ResourcesPanel.prototype._cachedResourcesLoaded):
        * inspector/front-end/inspector.css:
        (#close-button-left, #close-button-right):

2011-04-14  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: implement incremental CSS free flow editing.
        https://bugs.webkit.org/show_bug.cgi?id=58529

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleSheet.prototype.setText):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.isResourceRevision):
        (WebInspector.Resource.prototype.setContent):
        * inspector/front-end/ResourceView.js:
        (WebInspector.CSSSourceFrame.prototype.isContentEditable):
        (WebInspector.CSSSourceFrame.prototype.editContent):
        (WebInspector.CSSSourceFrame.prototype.endEditing.commitIncrementalEdit):
        (WebInspector.CSSSourceFrame.prototype.endEditing):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.commitEditing):
        (WebInspector.SourceFrame.prototype.editContent):

2011-04-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector:Duplicated display of storage db when running Web SQL from an iframe.
        https://bugs.webkit.org/show_bug.cgi?id=57830

        There was created a new InspectorDatabaseResource entry for every didOpenDatabase event.
        Moreover there is new WebCore::Database for each didOpenDatabase event.
        I decided to change the old instance of the Database to a new one if they both use the same file.

        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didOpenDatabase):
        (WebCore::InspectorDatabaseAgent::findByFileName):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.h:
        (WebCore::InspectorDatabaseResource::setDatabase):

2011-04-14  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Dirk Schulze.

        svg/W3C-SVG-1.1-SE/svgdom-over-01-f.svg crashes in Debug build
        https://bugs.webkit.org/show_bug.cgi?id=58525

        A renderer is created even for those filter primitives
        which parent is not a filter. A rendererIsNeeded() is
        added to SVGFilterPrimitiveStandardAttributes.

        Test: svg/W3C-SVG-1.1-SE/svgdom-over-01-f.svg

        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::rendererIsNeeded):
        * svg/SVGFilterPrimitiveStandardAttributes.h:

2011-04-14  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        REGRESSION(r83397) [Qt] When the video is loading and the poster is shown
        all the controls are not visible except the play button.
        https://bugs.webkit.org/show_bug.cgi?id=58484

        r83397 introduces a new API hasOwnDisabledStateHandlingFor to handle when
        the controls should be disabled. Qt port paints its own controls, we don't want
        the default implementation to handle the hidden/disable state for us.

        Existing tests covers the visibility of the controls.

        * platform/qt/RenderThemeQt.h:
        (WebCore::RenderThemeQt::hasOwnDisabledStateHandlingFor):

2011-04-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Disabled form controls don't actually look disabled.
        https://bugs.webkit.org/show_bug.cgi?id=58490

        Unsetting QStyle::State_Enabled is not enough to get the "disabled" appearance
        when painting controls. We must also set the QStyleOption's palette's current
        color group.

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

2011-04-14  Nancy Piedra  <nancy.piedra@nokia.com>

        Reviewed by Benjamin Poulain.

        [Qt] MediaPlayerPrivateQt::supportsType does not parse codec parameter
        https://bugs.webkit.org/show_bug.cgi?id=58188

        The codec parameter in MediaPlayerPrivateQt::supportsType was not parsed into
        a QStringList. This change parses and trims the list.

        An additional test was added to video-can-play-type.html to test parsing of codec parameter.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::supportsType):

2011-04-14  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Optimizing lightning filter to ARM-NEON SIMD instruction set
        https://bugs.webkit.org/show_bug.cgi?id=54456

        NEON is the SIMD instruction set for ARM. This instruction set
        allows to speed-up the lighting filter by 4 times on ARM
        (on WebCore/manual-tests/svg-filter-animation.svg).

        * WebCore.pri:
        * WebCore.pro:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::drawLighting):
        (WebCore::getPowerCoefficients):
        (WebCore::FELighting::drawInteriorPixels):
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/arm/FELightingNEON.cpp: Added.
        (__attribute__):
        * platform/graphics/filters/arm/FELightingNEON.h: Added.

2011-04-14  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Benjamin Poulain.

        [Qt] GraphicsContext3D internal buffers are not freed
        https://bugs.webkit.org/show_bug.cgi?id=57530

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::~GraphicsContext3DInternal):

2011-04-14  Andy Estes  <aestes@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION (r75555): Safari RSS sidebar jiggles when scrolling
        https://bugs.webkit.org/show_bug.cgi?id=52988
        
        Safari RSS relies on synchronous dispatch of ScrollEvent to update the
        position of its sidebar during scrolling without producing a jiggling
        effect. Due to r75555, this event is no longer dispatched synchronously
        which results in stale repaints before the onscroll handler gets a
        chance to update the position of the sidebar.
        
        Since it is impractical to resolve this issue in Safari RSS itself, add
        a quirk that restores synchronous ScrollEvent dispatch for Safari RSS.
        
        No tests. This is an app-specific change that doesn't affect web
        content.

        * Android.mk: Add platform/RuntimeApplicationChecks.[cpp|h]
        * CMakeLists.txt: Ditto.
        * GNUmakefile.list.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/EventQueue.cpp:
        (WebCore::shouldDispatchScrollEventSynchronously): Send ScrollEvent
        synchronously if the embedding application is Safari and the document's
        URL scheme is "feed" or "feeds".
        (WebCore::EventQueue::enqueueOrDispatchScrollEvent): Dispatch
        ScrollEvent synchronously if shouldDispatchScrollEventSynchronously()
        returns true.
        * dom/EventQueue.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendScrollEvent): Call enqueueOrDispatchScrollEvent().
        * platform/RuntimeApplicationChecks.cpp: Added.
        (WebCore::mainBundleIsEqualTo): Add a helper routine for CF platforms
        that checks if the main bundle's identifier is equal to a given string.
        This function returns false for non-CF platforms.
        (WebCore::applicationIsSafari): Call mainBundleIsEqualTo().
        (WebCore::applicationIsAppleMail): Ditto.
        (WebCore::applicationIsMicrosoftMessenger): Ditto.
        (WebCore::applicationIsAdobeInstaller): Ditto.
        (WebCore::applicationIsAOLInstantMessenger): Ditto.
        (WebCore::applicationIsMicrosoftMyDay): Ditto.
        (WebCore::applicationIsMicrosoftOutlook): Ditto.
        * platform/mac/RuntimeApplicationChecks.mm: Removed. Functions moved to
        RuntimeApplicationChecks.cpp.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo): Call enqueueOrDispatchScrollEvent().
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::scrollTo): Call enqueueOrDispatchScrollEvent().

2011-04-14  John Bates  <jbates@google.com>

        Reviewed by Kenneth Russell.

        Fix bug with adding wrong context to LayerRendererChromium and get rid of RefPtr loop.
        https://bugs.webkit.org/show_bug.cgi?id=58383

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::addChildContext):
        (WebCore::LayerRendererChromium::removeChildContext):
        * platform/graphics/chromium/LayerRendererChromium.h:

2011-04-14  Renata Hodovan  <reni@webkit.org>

        Reviewed by Nikolas Zimmermann.

        CSS related SVG*Element changes doesn't require relayout
        https://bugs.webkit.org/show_bug.cgi?id=56906

        The changes of some CSS related SVGFilter properties e.g. lighting_color, flood_color, flood_opacity
        need only repaint. To avoid the default invalidation of filters in SVGResourceCache::clientStyleChange()
        we need an early return. So RenderSVGResourceFilterPrimitive::styleDidChange() can handle these properties
        via RenderSVGResourceFilter::primitiveAttributeChanged() the same way like we do it for the other SVGAttributes.

        Tests: svg/dynamic-updates/SVGFEDiffuseLightingElement-inherit-lighting-color-css-prop.html
               svg/dynamic-updates/SVGFEFloodElement-inherit-flood-color.html
               svg/dynamic-updates/SVGFESpecularLightingElement-inherit-lighting-color-css-prop.html
               svg/dynamic-updates/SVGFESpecularLightingElement-lighting-color-css-prop.html

        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::setFloodColor):
        (WebCore::FEFlood::setFloodOpacity):
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::setLightingColor):
        * platform/graphics/filters/FESpecularLighting.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::styleDidChange):
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientStyleChanged):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::setFilterEffectAttribute):
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::setFilterEffectAttribute):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::setFilterEffectAttribute):

2011-04-13  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Allow setting composited backing stores for scrollbars and scroll corners
        https://bugs.webkit.org/show_bug.cgi?id=57202

        This teaches ScrollableArea to manage GraphicsLayer backings for the two scrollbars and
        scroll corner. ScrollableArea can position the layers and route invalidation and paint calls to
        the correct place but depends on subclasses to manage the lifetime of the GraphicsLayers and
        place them into the correct place in the hierarchy.

        FrameView and RenderLayerCompositor updated to provide layers for frames with overflow controls.
        that need them.  The overflow control layers are siblings of the frame's clip layer.

        RenderLayer and RenderLayerBacking updated to provide overflow control layers for layers that
        need them.  Currently, layers are only created for overflow controls on layers that are already composited
        for other reasons and not necessarily for every RenderLayer with overflow.  Overflow control layers are siblings
        of the RenderLayerBacking's clipping layer if it exists, otherwise they are siblings of the layer's normal
        children.

        Tested by a number of compositing/ tests that have scrollbars and by these new tests:
               compositing/iframes/repaint-after-losing-scrollbars.html
               compositing/overflow/clip-content-under-overflow-controls.html
               compositing/overflow/content-gains-scrollbars.html
               compositing/overflow/content-loses-scrollbars.html
               compositing/overflow/overflow-scrollbar-layers.html
               compositing/overflow/repaint-after-losing-scrollbars.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass):
        * page/FrameView.cpp:
        (WebCore::FrameView::layerForHorizontalScrollbar):
        (WebCore::FrameView::layerForVerticalScrollbar):
        (WebCore::FrameView::layerForScrollCorner):
        (WebCore::FrameView::syncCompositingStateForThisFrame):
        (WebCore::FrameView::contentsResized):
        (WebCore::FrameView::updateScrollCorner):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::invalidateScrollbar):
        (WebCore::ScrollableArea::invalidateScrollCorner):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::paintScrollCorner):
        (WebCore::ScrollableArea::layerForHorizontalScrollbar):
        (WebCore::ScrollableArea::layerForVerticalScrollbar):
        (WebCore::ScrollableArea::layerForScrollCorner):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::invalidateRect):
        * platform/Scrollbar.h:
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::invalidateRootLayerRect):
        (WebCore::LayerRendererChromium::drawRootLayer):
        (WebCore::LayerRendererChromium::setViewport):
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        (WebCore::LayerRendererChromium::updateLayers):
        (WebCore::LayerRendererChromium::setRootLayer):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPartAnimation setCurrentProgress:]):
        * platform/win/PopupMenuWin.h:
        (WebCore::PopupMenuWin::invalidateScrollCornerRect):
        (WebCore::PopupMenuWin::isScrollCornerVisible):
        (WebCore::PopupMenuWin::scrollCornerRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollCornerRect):
        (WebCore::RenderLayer::scrollCornerAndResizerRect):
        (WebCore::RenderLayer::isScrollCornerVisible):
        (WebCore::RenderLayer::invalidateScrollbarRect):
        (WebCore::RenderLayer::invalidateScrollCornerRect):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::paintScrollCorner):
        (WebCore::RenderLayer::layerForHorizontalScrollbar):
        (WebCore::RenderLayer::layerForVerticalScrollbar):
        (WebCore::RenderLayer::layerForScrollCorner):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::horizontalScrollbar):
        (WebCore::RenderLayer::verticalScrollbar):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::~RenderLayerBacking):
        (WebCore::RenderLayerBacking::updateAfterWidgetResize):
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::RenderLayerBacking::updateInternalHierarchy):
        (WebCore::RenderLayerBacking::updateClippingLayers):
        (WebCore::RenderLayerBacking::requiresHorizontalScrollbarLayer):
        (WebCore::RenderLayerBacking::requiresVerticalScrollbarLayer):
        (WebCore::RenderLayerBacking::requiresScrollCornerLayer):
        (WebCore::RenderLayerBacking::updateOverflowControlsLayers):
        (WebCore::paintScrollbar):
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::layerForHorizontalScrollbar):
        (WebCore::RenderLayerBacking::layerForVerticalScrollbar):
        (WebCore::RenderLayerBacking::layerForScrollCorner):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::frameViewDidChangeLocation):
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):
        (WebCore::RenderLayerCompositor::rootPlatformLayer):
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        (WebCore::paintScrollbar):
        (WebCore::RenderLayerCompositor::paintContents):
        (WebCore::shouldCompositeOverflowControls):
        (WebCore::RenderLayerCompositor::requiresHorizontalScrollbarLayer):
        (WebCore::RenderLayerCompositor::requiresVerticalScrollbarLayer):
        (WebCore::RenderLayerCompositor::requiresScrollCornerLayer):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):
        (WebCore::RenderLayerCompositor::destroyRootPlatformLayer):
        (WebCore::RenderLayerCompositor::detachRootPlatformLayer):
        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::layerForHorizontalScrollbar):
        (WebCore::RenderLayerCompositor::layerForVerticalScrollbar):
        (WebCore::RenderLayerCompositor::layerForScrollCorner):
        * rendering/RenderListBox.h:
        (WebCore::RenderListBox::isScrollCornerVisible):
        (WebCore::RenderListBox::scrollCornerRect):
        (WebCore::RenderListBox::invalidateScrollCornerRect):

2011-04-13  Cary Clark  <caryclark@chromium.org>
 
         Reviewed by Eric Seidel.
          
         [Chromium] allow concurrent Skia and CG datatypes
         https://bugs.webkit.org/show_bug.cgi?id=57848

         The Chromium port is experimenting with running Skia as the WebKit rendering engine, and CoreGraphics
         as the UI rendering engine. This permits Chromium to unify its graphics story while leveraging OS X to
         draw elements like scrollbars and buttons.
 
         Restructure the common graphics units, points, and rectangles, to convert to Sk-types and CG-types at
         the same time. This requires only adding to the existing preprocessor commands, and will have no effect
         on any existing platform.
         
         Eventually, WTF_USE_SKIA_ON_MAC_CHROME will be defined to enable this, but for now, there's no
         functional change.
 
         No new tests as this provides no new functionality.
 
         * platform/graphics/FloatPoint.h: Add USE(SKIA_ON_MAC_CHROME) to make CG type and operators visible
         to a Skia-based Chrome Mac build.
         * platform/graphics/FloatRect.h: Ditto.
         * platform/graphics/FloatSize.h: Ditto.
         * platform/graphics/IntPoint.h: Ditto.
         * platform/graphics/IntRect.h: Ditto.
         * platform/graphics/IntSize.h: Ditto.
         * platform/graphics/cg/FloatPointCG.cpp: Ditto.
         * platform/graphics/cg/FloatRectCG.cpp: Ditto.
         * platform/graphics/cg/FloatSizeCG.cpp: Ditto.
         * platform/graphics/cg/IntPointCG.cpp: Ditto.
         * platform/graphics/cg/IntRectCG.cpp: Ditto.
         * platform/graphics/cg/IntSizeCG.cpp: Ditto.
 
2011-04-13  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 58460 - childTypeAllowed() should be const
        https://bugs.webkit.org/show_bug.cgi?id=58460

        Made childTypeAllowed const.

        No new tests. (minor refactoring).

        * dom/Attr.cpp:
        (WebCore::Attr::childTypeAllowed):
        * dom/Attr.h:
        * dom/CDATASection.cpp:
        (WebCore::CDATASection::childTypeAllowed):
        * dom/CDATASection.h:
        * dom/Comment.cpp:
        (WebCore::Comment::childTypeAllowed):
        * dom/Comment.h:
        * dom/Document.cpp:
        (WebCore::Document::childTypeAllowed):
        * dom/Document.h:
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::childTypeAllowed):
        * dom/DocumentFragment.h:
        * dom/Element.cpp:
        (WebCore::Element::childTypeAllowed):
        * dom/Element.h:
        * dom/Node.h:
        (WebCore::Node::childTypeAllowed):
        * dom/Notation.cpp:
        (WebCore::Notation::childTypeAllowed):
        * dom/Notation.h:
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::childTypeAllowed):
        * dom/ProcessingInstruction.h:
        * dom/Text.cpp:
        (WebCore::Text::childTypeAllowed):
        * dom/Text.h:

2011-04-13  Jon Lee  <jonlee@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION(r81880): Paste menu is disabled for many edit fields (yahoo and google search, yahoo mail msg, forms, etc)
        https://bugs.webkit.org/show_bug.cgi?id=58284
        <rdar://problem/9246149>

        * WebCore.exp.in: Exporting EditingBehavior.h for use in WebKit2
        * editing/EditingBehavior.h:
        (WebCore::EditingBehavior::shouldClearSelectionWhenLosingWebPageFocus): moving the platform-specific code out of an #ifdef and into this class for run-time instead of compile-time checking

2011-04-13  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Eric Seidel.

        constructLine should take bidiRuns as a parameter
        https://bugs.webkit.org/show_bug.cgi?id=58458

        Pass bidiRuns to constructLine and move reachedEndOfTextRenderer so that it is
        declared before constructLine.

        No new tests as this is refactoring only.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::reachedEndOfTextRenderer):
        (WebCore::RenderBlock::constructLine):
        (WebCore::RenderBlock::layoutInlineChildren):

2011-04-13  Cary Clark  <caryclark@google.com>

        Reviewed by Eric Seidel.

        Allow CG Font support in Chrome Darwin build using Skia
        https://bugs.webkit.org/show_bug.cgi?id=58321
        
        This allows Chrome to use Skia to do WebKit rendering, while
        using CoreGraphics for glyph creation and computing font metrics.
        It relies on an undefined platform token, WTF_USE_SKIA_ON_MAC_CHROME.

        No new tests needed, no functionality change.

        * loader/cache/CachedFont.cpp: Make CGFontRef functions and
        CG-specific font code available to Chrome builds on Darwin using Skia.
        * platform/graphics/FontPlatformData.h: Ditto.
        (WebCore::FontPlatformData::hash): Ditto.
        * platform/graphics/GlyphBuffer.h: Ditto.
        (WebCore::GlyphBuffer::advanceAt): Ditto.
        (WebCore::GlyphBuffer::add): Ditto.
        (WebCore::GlyphBuffer::expandLastAdvance): Ditto.
        * platform/graphics/SimpleFontData.h: Ditto.

2011-04-13  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Dimitri Glazkov.

        The timeline of the video controls is unusable if the multimedia backend returns a
        infinite duration.
        https://bugs.webkit.org/show_bug.cgi?id=58452

        In case the underlaying media element backend returns crazy values, e.g.
        an infinite duration for the video we need to bail out and hide the timeline
        rather than in a broken state where you can't use it. The previous code was just
        checking if the duration was NaN.

        We can't control from JS what the backend will return as a duration for the video
        so we can't make an test for it.

        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::reset):

2011-04-13  Abhishek Arya  <inferno@chromium.org>

        Reviewed by James Robinson.

        Draw outline for render widgets.
        https://bugs.webkit.org/show_bug.cgi?id=57439

        Test: fast/frames/iframe-outline.html

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):

2011-04-13  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Change the representation of ShadowRoot nodes in render tree dumps
        https://bugs.webkit.org/show_bug.cgi?id=58432

        Show "#shadow-root" for ShadorRoot nodes instead of "#document-fragment"
        in DRT results.

        No new tests. This change doesn't affect existing tests yet.

        * dom/DocumentFragment.h:
          Make nodeName() protected in order that ShdowRoot can override it.
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::nodeName): Returns "#shadow-root".
        * dom/ShadowRoot.h: Declare nodeName().
        * rendering/RenderTreeAsText.cpp:
        (WebCore::nodePosition): Don't show "child N " if the node is a shadow boundary.
          We don't use isShadowRoot() here because the legacy shadow root nodes
          return true for isShadowRoot() and we don't want to update existing
          test results.

2011-04-13  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Merge LineOffsets and LineWidth
        https://bugs.webkit.org/show_bug.cgi?id=58411

        Merged lineOffsets into LineWidth.

        After this patch, available width is updated in positionNewFloatOnLine via updateAvailableWidth and
        shrinkAvailableWidthForNewFloatIfNeeded instead of findNextBreak. This is correct because
        - LineOffsets::update and LineOffsets::shrinkWidthForNewFloatIfNeeded were only called in positionNewFloatOnLine
          besides LineOffsets' constructor
        - positionNewFloatOnLine was only called in skipLeadingWhitespace and findNextLineBreak
        - findNextLineBreak updates the available width whenever it calls skipLeadingWhitespace or positionNewFloatOnLine

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::skipLeadingWhitespace): Takes LineWidth instead of LineOffset
        (WebCore::LineWidth::LineWidth): Takes RenderBlock* and boolean isFirstLine; call updateAvailableWidth
        because the initial available width was used to be computed from lineOffsets.width().
        (WebCore::LineWidth::computeAvailableWidthFromLeftAndRight): Added.
        (WebCore::LineWidth::updateAvailableWidth): Renamed from LineOffsets::update; this function now updates
        m_availableWidth via computeAvailableWidthFromLeftAndRight as well as m_left and m_right.
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded): Renamed from
        LineOffsets::shrinkWidthForNewFloatIfNeeded. This function also calls computeAvailableWidthFromLeftAndRight.
        (WebCore::LineWidth::applyOverhang): No longer takes arguments since both arguments were member variables
        of LineOffsets.
        (WebCore::LineWidth::fitBelowFloats): No longer takes isFirstLine.
        (WebCore::RenderBlock::findNextLineBreak): Uses LineWidth.
        (WebCore::RenderBlock::positionNewFloatOnLine): Takes a reference to LineWidth.

2011-04-13  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [CMAKE] Separate DerivedSources.
        https://bugs.webkit.org/show_bug.cgi?id=58427

        No new tests since these are refactoring only.

        * CMakeLists.txt:
        * UseJSC.cmake:

2011-04-13  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Kenneth Russell.

        [chromium] Fix canvas.toDataURL mimeType assertion
        https://bugs.webkit.org/show_bug.cgi?id=58425

        Following r81213, reassert expected toDataURL() mimeType, remove an unused variable.

        No new tests. Covered by existing tests.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageToDataURL):
        (WebCore::ImageBuffer::toDataURL):

2011-04-12  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] QNetworkReplyHandler refactoring: remove nested event loop.
        https://bugs.webkit.org/show_bug.cgi?id=58375

        As QNAM now makes actual synchronous loads there is no need for a nested event loop
        in ResourceHandleQt.

        Moving the call for QNetworkReplyWrapper::synchronousLoad from
        ResourceHandle::loadResourceSynchronously to QNetworkReplyHandler::start for the
        redirections to work in synchronous requests.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::didReceiveResponse):
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2011-04-13  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by David Hyatt.

        Bug 55930 - Incorrect handling of 'display:' property within nested <ruby> tags
        https://bugs.webkit.org/show_bug.cgi?id=55930

        Non-inline :before/:after generated content is now wrapped with an anonymous inline block.

        Also, added an additional check in RenderObjectChildList::updateBeforeAfterContent()
        to verify that the created render object is legal under the parent.

        Tests: fast/ruby/after-block-doesnt-crash.html
               fast/ruby/after-table-doesnt-crash.html
               fast/ruby/before-block-doesnt-crash.html
               fast/ruby/before-table-doesnt-crash.html

        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):
        * rendering/RenderRuby.cpp:
        (WebCore::isAnonymousRubyInlineBlock):
        (WebCore::rubyBeforeBlock):
        (WebCore::rubyAfterBlock):
        (WebCore::createAnonymousRubyInlineBlock):
        (WebCore::lastRubyRun):
        (WebCore::RenderRubyAsInline::addChild):
        (WebCore::RenderRubyAsInline::removeChild):
        (WebCore::RenderRubyAsBlock::addChild):
        (WebCore::RenderRubyAsBlock::removeChild):
        * rendering/RenderRuby.h:

2011-04-13  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        [CG] Refactor get/putImageData routines from ImageBufferCG into a (new) ImageBufferDataCG.cpp
        https://bugs.webkit.org/show_bug.cgi?id=58084

        No new tests. Does not affect outward behavior.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageBufferData.h: Added.
        * platform/graphics/cairo/ImageBufferData.h: Removed.
        * platform/graphics/cairo/ImageBufferDataCairo.h: Added.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        * platform/graphics/cg/ImageBufferDataCG.cpp: Added.
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::haveVImageRoundingErrorFix):
        (WebCore::ImageBufferData::getData):
        (WebCore::ImageBufferData::putData):
        * platform/graphics/cg/ImageBufferData.h: Removed.
        * platform/graphics/cg/ImageBufferDataCG.h: Added.
        * platform/graphics/chromium/ImageBufferData.h: Removed.
        * platform/graphics/chromium/ImageBufferDataSkia.h: Added.
        * platform/graphics/haiku/ImageBufferData.h: Removed.
        * platform/graphics/haiku/ImageBufferDataHaiku.h: Added.
        * platform/graphics/qt/ImageBufferData.h: Removed.
        * platform/graphics/qt/ImageBufferDataQt.h: Added.
        * platform/graphics/wince/ImageBufferData.h: Removed.
        * platform/graphics/wince/ImageBufferDataWince.h: Added.
        * platform/graphics/wx/ImageBufferData.h: Removed.
        * platform/graphics/wx/ImageBufferDataWx.h: Added.

2011-04-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Remove std:: prefix on some min/max calls
        https://bugs.webkit.org/show_bug.cgi?id=58493

        Remove std:: namespacing on min/max in favor of a 'using' clause.

        * platform/graphics/RoundedIntRect.cpp:
        (WebCore::RoundedIntRect::Radii::expand):
        * rendering/style/RenderStyle.cpp:
        (WebCore::calcConstraintScaleFor):

2011-04-13  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        Replace our own RenderThemeQt::getMediaElementFromRenderObject by
        MediaControlsElement::toParentMediaElement used by every other port.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintMediaFullscreenButton):
        (WebCore::RenderThemeQt::paintMediaMuteButton):
        (WebCore::RenderThemeQt::paintMediaPlayButton):
        (WebCore::RenderThemeQt::paintMediaSliderTrack):
        * platform/qt/RenderThemeQt.h:

2011-04-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Switched DOM wrappers to use HashMap of Weak<T> instead of WeakGCMap<T>
        https://bugs.webkit.org/show_bug.cgi?id=58482

        This will allow wrappers to make individual decisions about their lifetimes.

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        (WebCore::JSNodeHandleOwner::isReachableFromOpaqueRoots):
        (WebCore::JSNodeHandleOwner::finalize):
        (WebCore::DOMObjectHandleOwner::isReachableFromOpaqueRoots):
        (WebCore::DOMObjectHandleOwner::finalize):
        * bindings/js/DOMWrapperWorld.h:
        (WebCore::JSNodeHandleOwner::JSNodeHandleOwner):
        (WebCore::DOMObjectHandleOwner::DOMObjectHandleOwner):
        (WebCore::DOMWrapperWorld::jsNodeHandleOwner):
        (WebCore::DOMWrapperWorld::domObjectHandleOwner): Added handle owners
        for JSNode and DOMObject, our two hash table values. For now, the owners
        just take care to remove their handles from their respective hash tables.
        
        Changed the hash table type to be a standard HashMap of weak pointers,
        instead of a WeakGCMap.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::getCachedDOMObjectWrapper):
        (WebCore::cacheDOMObjectWrapper):
        (WebCore::cacheDOMNodeWrapper):
        (WebCore::isObservableThroughDOM):
        (WebCore::markDOMNodesForDocument):
        (WebCore::takeWrappers):
        (WebCore::updateDOMNodeDocument):
        (WebCore::markDOMObjectWrapper):
        (WebCore::markDOMNodeWrapper): Updated wrapper hash table access to
        accomodate its new data type.

        * bindings/js/JSNodeCustom.h:
        (WebCore::getCachedDOMNodeWrapper): Ditto.

        * dom/Document.h: Updated declaration to match the above.

2011-04-13  Sam Weinig  <sam@webkit.org>

        Fix Mac builds.

        * WebCore.exp.in:

2011-04-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        WebKit2 doesn't keep overlay scrollers shown while scroll gesture held
        <rdar://problem/9260518>

        Notify the scrollbar painter controller when gesture scrolls begin and end.

        * WebCore.exp.in:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::didBeginScrollGesture):
        (WebCore::ScrollAnimatorMac::didEndScrollGesture):
        (WebCore::ScrollAnimatorMac::beginScrollGesture):
        (WebCore::ScrollAnimatorMac::endScrollGesture):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2011-04-13  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Maciej Stachowiak.

        MediaPlayerPrivateAVFoundationObjC should adopt [AVURLAsset isPlayableExtendedMIMEType:]
        https://bugs.webkit.org/show_bug.cgi?id=58451
        <rdar://problem/9278468>

        No new tests, supported MIME types haven't changed.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType): Use 
        [AVURLAsset isPlayableExtendedMIMEType] instead of just the list of types.

2011-04-13  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Alexey Proskuryakov.

        Media engine fallback doesn't always work
        https://bugs.webkit.org/show_bug.cgi?id=58462

        No new tests, this was verified manually with the url noted in the bug.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::networkStateChanged):

2011-04-13  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Extension3D needs to provide a way to check if an extension is enabled
        https://bugs.webkit.org/show_bug.cgi?id=58410

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::setupFlags): Use isEnabled() instead of supports().
        * platform/graphics/Extensions3D.h: Add isEnabled().
        * platform/graphics/chromium/Extensions3DChromium.h: Ditto.
        * platform/graphics/opengl/Extensions3DOpenGL.cpp: Ditto.
        (WebCore::Extensions3DOpenGL::isEnabled):
        * platform/graphics/opengl/Extensions3DOpenGL.h: Ditto.
        * platform/graphics/qt/Extensions3DQt.cpp: Ditto.
        (WebCore::Extensions3DQt::isEnabled):
        * platform/graphics/qt/Extensions3DQt.h: Ditto.

2011-04-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make PropertyMapEntry use a WriteBarrier for specificValue
        https://bugs.webkit.org/show_bug.cgi?id=58407

        Pass JSGlobalData reference on to APIs that now need them

        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::all):

2011-04-12  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: fix source mapping for de-obfuscated scripts.
        https://bugs.webkit.org/show_bug.cgi?id=58231

        * inspector/front-end/ScriptFormatterWorker.js:
        (buildMapping):
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceMapping):
        (WebInspector.SourceMapping.prototype.sourceLineToScriptLocation):
        (WebInspector.SourceMapping.prototype._sourceLocationToScriptLocation):
        (WebInspector):
        (WebInspector.FormattedSourceMapping):
        (WebInspector.FormattedSourceMapping.prototype.scriptLocationToSourceLine):
        (WebInspector.FormattedSourceMapping.prototype.sourceLineToScriptLocation):

2011-04-13  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Consider editable and non editable nodes when calculating selection offsets
        https://bugs.webkit.org/show_bug.cgi?id=58431

        Use firstPositionInOrBeforeNode() and lastPositionInOrAfterNode().

        This is needed to ensure that getSelectionOffsetsForObject() works
        well when non editable nodes are present in the selection, since
        firstPositionInNode() and lastPositionInNode() don't work in those
        cases (they assume the node is editable).

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getSelectionOffsetsForObject): Updated calls.

2011-04-13  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Missing nullchecks in GTK's a11y wrapper
        https://bugs.webkit.org/show_bug.cgi?id=58429

        Add missing nullchecks for coreObject->document().

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkParentOfRootObject): Add missing nullcheck.
        (getPangoLayoutForAtk): Ditto.
        (webkit_accessible_text_get_caret_offset): Ditto.
        (textExtents): Ditto.
        (webkit_accessible_editable_text_insert_text): Ditto.
        (webkit_accessible_editable_text_delete_text): Ditto.

2011-04-13  Thierry Reding  <thierry.reding@avionic-design.de>

        Gtk+ port fails to build when enabling WebGL
        https://bugs.webkit.org/show_bug.cgi?id=58434

        Fix the GTK+ WebGL build after the introduction of PlatformContextCairo.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::paintToCanvas):

2011-04-12  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        REGRESSION(r83561): doesn't pause in-window playback during fullscreen playback
        https://bugs.webkit.org/show_bug.cgi?id=58312

        Make sure to link the videoValve in all cases, fpsdisplaysink
        being used or not.

        No new test, this patch fixes an internal feature of the player,
        not publicly exposed. Having two video sinks and pausing one while
        the other displays the fullscreen video is an implementation
        detail of the GStreamer player.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):

2011-04-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: there is a problem if an optional param is not at the end of a params list.
        https://bugs.webkit.org/show_bug.cgi?id=58440

        In InspectorBackend.dispatch method we are converting the message's params object into array of arguments
        for a callback. But in some cases the optional parameter is declared in the middle of the params list.
        That gets us into a problem if this param has been skipped in the message. In that case the tail of the
        event params will be shifted. We can slightly modify dispatcher and it will put the params in right places.

        * inspector/CodeGeneratorInspector.pm:

2011-04-13  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Eric Seidel.

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

        Work around a bug in ternary opertions in the Solaris Studio
        12/12.1/12.2 compilers, using an if clause.

        * dom/NodeRenderStyle.h:
        (WebCore::Node::renderStyle):

2011-04-13  Brian Salomon  <bsalomon@google.com>

        Reviewed by Kenneth Russell.

        Use new skia API for wrapping DrawingBuffer's FBO/Tex IDs in skia object
        https://bugs.webkit.org/show_bug.cgi?id=58363

        No new tests needed, exercised by all existing canvas2d tests.

        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::getGrPlatformSurfaceDesc):
        * platform/graphics/gpu/DrawingBuffer.h:
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::setSharedGraphicsContext3D):

2011-04-13  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed. Fix chromium clang build problem:
        ApplyPropertyExpandingSuppressValue::applyValue() shadows a virtual method
        with a different signature in base class instead of overriding it.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyExpandingSuppressValue::applyValue):

2011-04-13  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        Add mock implementation and plumbing code for unified Quota API
        https://bugs.webkit.org/show_bug.cgi?id=57927

        Added mock implementation and some plumbing code for the quota API,
        that is based on the discussion on public-webapps:
        http://lists.w3.org/Archives/Public/public-webapps/2011JanMar/0346.html

        No new tests: tests will be added when we expose the API.

        * CMakeLists.txt: Added new file entries.
        * DerivedSources.cpp: Added new file entries.
        * DerivedSources.make: Added new file entries.
        * GNUmakefile.am: Added new file entries.
        * WebCore.gypi: Added new file entries.
        * WebCore.pro: Added new file entries.
        * WebCore.vcproj/WebCore.vcproj: Added new file entries.
        * WebCore.xcodeproj/project.pbxproj: Added new file entries.
        * storage/StorageInfo.cpp: Added.
        * storage/StorageInfo.h: Added.
        * storage/StorageInfoErrorCallback.h: Added.
        * storage/StorageInfoQuotaCallback.h: Added.
        * storage/StorageInfoUsageCallback.h: Added.

2011-04-13  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Martin Robinson.

        [GTK] PluginPackage should check whether a plugin mixes GTK+ 2 and 3 symbols itself
        https://bugs.webkit.org/show_bug.cgi?id=58297

        Make sure we do not load plugins that use symbols of a different
        GTK+ major version to avoid bugs and crashes.

        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::moduleMixesGtkSymbols):
        (WebCore::PluginPackage::load):

2011-04-13  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Implement undo/redo in text editor
        https://bugs.webkit.org/show_bug.cgi?id=58426

        Native undo/redo does not work because we modify DOM structure (highlights, chunks and etc.)
        Implement it via keyboard shortcuts for now (Cmd/Ctrl+Z and Cmd/Ctrl+Shift+Z).
        FIXME: Do something with the popup's Undo and Redo menu options - they invoke native's undo/redo.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.endEditing):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel.prototype.setText):
        (WebInspector.TextEditorModel.prototype._innerSetText):
        (WebInspector.TextEditorModel.prototype._pushUndoableCommand):
        (WebInspector.TextEditorModel.prototype.undo):
        (WebInspector.TextEditorModel.prototype.redo):
        (WebInspector.TextEditorModel.prototype._doUndo):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._textChanged):
        (WebInspector.TextViewer.prototype._enterInternalTextChangeMode):
        (WebInspector.TextViewer.prototype._exitInternalTextChangeMode):
        (WebInspector.TextViewer.prototype._registerShortcuts):
        (WebInspector.TextViewer.prototype._cancelEditing):
        (WebInspector.TextViewer.prototype._handleUndoRedo):
        (WebInspector.TextEditorChunkedPanel.prototype.makeLineAChunk):
        (WebInspector.TextEditorChunkedPanel.prototype._repaintAll):
        (WebInspector.TextEditorGutterPanel.prototype.textChanged):
        (WebInspector.TextEditorMainPanel.prototype.handleUndoRedo.callback):
        (WebInspector.TextEditorMainPanel.prototype.handleUndoRedo):
        (WebInspector.TextEditorMainPanel.prototype._restoreSelection):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype.textChanged):
        (WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):

2011-04-13  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make optional event parameter last to prevent regressions.
        https://bugs.webkit.org/show_bug.cgi?id=58433

        * inspector/Inspector.json:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willSendRequest):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype.requestWillBeSent):

2011-04-13  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: revert Inspector.json change for breaking world.

        * inspector/Inspector.json:

2011-04-13  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: swap methods in the Inspector.json.

        * inspector/Inspector.json:

2011-04-13  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, rolling out r83695.
        http://trac.webkit.org/changeset/83695
        https://bugs.webkit.org/show_bug.cgi?id=58375

        [Qt][WK2]It broke http tests

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::start):
        (WebCore::QNetworkReplyHandler::synchronousLoad):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::resourceResponse):
        (WebCore::WebCoreSynchronousLoader::resourceError):
        (WebCore::WebCoreSynchronousLoader::data):
        (WebCore::WebCoreSynchronousLoader::setReplyFinished):
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::didReceiveResponse):
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::WebCoreSynchronousLoader::waitForCompletion):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2011-04-13  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: inactive style sheets should be read only.
        https://bugs.webkit.org/show_bug.cgi?id=58423

        * inspector/front-end/ResourceView.js:
        (WebInspector.CSSSourceFrame):
        (WebInspector.CSSSourceFrame.prototype.isContentEditable):
        (WebInspector.CSSSourceFrame.prototype._loadStyleSheet.didGetAllStyleSheets.didCreateForId):
        (WebInspector.CSSSourceFrame.prototype._loadStyleSheet):

2011-04-13  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Prepare to move detailed heap snapshots storage and processing into workers.
        https://bugs.webkit.org/show_bug.cgi?id=58320

        Introduce a proxy object that emulates worker behavior and change UI code to cope with it.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype._populate.doPopulate.sorted):
        (WebInspector.HeapSnapshotGridNode.prototype._populate.doPopulate):
        (WebInspector.HeapSnapshotGridNode.prototype._populate):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren.childrenRetrieved.notify):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren.childrenRetrieved):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.doSort.afterSort.afterPopulate):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.doSort.afterSort):
        (WebInspector.HeapSnapshotGridNode.prototype.sort):
        (WebInspector.HeapSnapshotGenericObjectNode):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get _shallowSizePercent):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype._updateHasChildren):
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._createProvider):
        (WebInspector.HeapSnapshotInstanceNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype._createProvider):
        (WebInspector.HeapSnapshotConstructorNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotConstructorNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotIteratorsTuple.prototype.sortAndRewind):
        (WebInspector.HeapSnapshotDiffNode.prototype._calculateDiff):
        (WebInspector.HeapSnapshotDiffNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider.createProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._childHashForEntity):
        (WebInspector.HeapSnapshotDiffNode.prototype._childHashForNode):
        (WebInspector.HeapSnapshotDiffNode.prototype.populateChildren.firstProviderPopulated):
        (WebInspector.HeapSnapshotDiffNode.prototype.populateChildren.else.firstProviderPopulated):
        (WebInspector.HeapSnapshotDiffNode.prototype.populateChildren):
        (WebInspector.HeapSnapshotDominatorObjectNode):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._createProvider):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.sortingChanged):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype._performSorting):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.setDataSource):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.populateChildren):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource.baseSnapshotNodeIdsReceived):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource.pushBaseSnapshotNodeIds):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource.snapshotNodeIdsReceived):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren.baseAggregatesReceived.aggregatesReceived):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren):
        (WebInspector.HeapSnapshotRetainingPathsList):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype._resetPaths):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.setDataSource):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.refresh):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.showNext.pathFound):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.showNext.startSearching):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.showNext):
        (WebInspector.DetailedHeapshotView.profileCallback):
        (WebInspector.DetailedHeapshotView):
        (WebInspector.DetailedHeapshotView.prototype.get profileWrapper):
        (WebInspector.DetailedHeapshotView.prototype.get baseProfileWrapper):
        (WebInspector.DetailedHeapshotView.prototype.show.profileCallback1):
        (WebInspector.DetailedHeapshotView.prototype.show.profileCallback2):
        (WebInspector.DetailedHeapshotView.prototype.show):
        (WebInspector.DetailedHeapshotView.prototype._changeBase.baseProfileLoaded):
        * inspector/front-end/HeapSnapshot.js:
        * inspector/front-end/HeapSnapshotProxy.js: Added.
        * inspector/front-end/PleaseWaitMessage.js:
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._reset):
        (WebInspector.ProfilesPanel.prototype.loadHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype._addHeapSnapshotChunk):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot.doParse):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot.else.parsed):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-04-13  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Web Page Performance auditing fails
        https://bugs.webkit.org/show_bug.cgi?id=58322

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.documentLoaded):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.externalStylesheetsReceived):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.inlineStylesReceived):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.onDocumentAvailable):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.cssBeforeInlineReceived):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.lateStylesReceived):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.onDocumentAvailable):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun):

2011-04-13  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: enumerate properties in Inspector.json using array, not object keys.
        https://bugs.webkit.org/show_bug.cgi?id=58418

        * inspector/Inspector.json:

2011-04-06  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: add "De-obfuscate Source" item to source frame text area context menu.
        https://bugs.webkit.org/show_bug.cgi?id=57942

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.formatSourceFilesToggled):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._togglePauseOnExceptions):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.releaseEvaluationResult):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.toggleFormatSourceFiles):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.formatSourceFilesToggled):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._contextMenu):
        (WebInspector.SourceFrame.prototype._populateLineGutterContextMenu):
        (WebInspector.SourceFrame.prototype._populateTextAreaContextMenu):
        (WebInspector.SourceFrameDelegate.prototype.releaseEvaluationResult):
        (WebInspector.SourceFrameDelegate.prototype.toggleFormatSourceFiles):
        (WebInspector.SourceFrameDelegate.prototype.formatSourceFilesToggled):

2011-04-13  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVGTextContentElements textLength returns 0
        https://bugs.webkit.org/show_bug.cgi?id=52543

        Add proper handling of the SVGTextContentElement textLength property, according to SVG 1.1 2nd edition.

        If the textLength attributes is not explicitely set "textContentElement.textLength.baseVal"
        will return the same as "textContentElement.getComputedTextLength()". If it's set the values
        aren't equal anymore. getComputedTextLength() ignores the textLength attributes as well as the
        lengthAdjust attribute. Adapt all of SVGTextQuery to ignore the lengthAdjust/textLength attributes.
        This is how Opera implements it, and it makes sense to a certain degree, as otherwhise getComputedTextLength()
        and textLength.baseVal.value would always be the same. Nor does the spec mention that textLength is honored
        in the SVG Text DOM API.

        Fixes svg/custom/text-dom-01-f.svg (from SVG 1.1 2nd edition, should be moved into the new W3C-SVG-1.1-SE directory).
        Fixes svg/W3C-SVG-1.1-SE/svgdom-over-01-f.svg (last subtest related to textLength now passes).

        Added new svg/dynamic-updates testcases covering dynamic changes of lengthAdjust/textLength and the synchronization
        with getComputedTextLength().

        Tests: svg/W3C-SVG-1.1-SE/svgdom-over-01-f.svg
               svg/dynamic-updates/SVGTextElement-dom-lengthAdjust-attr.html
               svg/dynamic-updates/SVGTextElement-dom-textLength-attr.html
               svg/dynamic-updates/SVGTextElement-svgdom-lengthAdjust-prop.html
               svg/dynamic-updates/SVGTextElement-svgdom-textLength-prop.html

        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::positionForPoint):
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::offsetForPositionInFragment):
        (WebCore::SVGInlineTextBox::selectionRect):
        (WebCore::SVGInlineTextBox::paintSelectionBackground):
        (WebCore::SVGInlineTextBox::paint):
        (WebCore::SVGInlineTextBox::calculateBoundaries):
        * rendering/svg/SVGTextChunkBuilder.cpp:
        (WebCore::SVGTextChunkBuilder::buildTextChunks):
        (WebCore::SVGTextChunkBuilder::layoutTextChunks):
        (WebCore::SVGTextChunkBuilder::addTextChunk):
        (WebCore::SVGTextChunkBuilder::processTextChunk):
        (WebCore::SVGTextChunkBuilder::processTextLengthSpacingCorrection):
        (WebCore::SVGTextChunkBuilder::processTextAnchorCorrection):
        * rendering/svg/SVGTextFragment.h:
        (WebCore::SVGTextFragment::SVGTextFragment):
        (WebCore::SVGTextFragment::buildFragmentTransform):
        (WebCore::SVGTextFragment::transformAroundOrigin):
        (WebCore::SVGTextFragment::buildTransformForTextOnPath):
        (WebCore::SVGTextFragment::buildTransformForTextOnLine):
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::parentDefinesTextLength):
        (WebCore::SVGTextLayoutEngine::beginTextPathLayout):
        (WebCore::dumpTextBoxes):
        (WebCore::SVGTextLayoutEngine::finalizeTransformMatrices):
        (WebCore::SVGTextLayoutEngine::finishLayout):
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath):
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::SVGTextQuery::textLengthCallback):
        (WebCore::SVGTextQuery::subStringLengthCallback):
        (WebCore::SVGTextQuery::startPositionOfCharacterCallback):
        (WebCore::SVGTextQuery::endPositionOfCharacterCallback):
        (WebCore::SVGTextQuery::rotationOfCharacterCallback):
        (WebCore::calculateGlyphBoundaries):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::SVGTextContentElement):
        (WebCore::SVGTextContentElement::synchronizeTextLength):
        (WebCore::SVGTextContentElement::textLengthAnimated):
        (WebCore::SVGTextContentElement::parseMappedAttribute):
        (WebCore::SVGTextContentElement::svgAttributeChanged):
        * svg/SVGTextContentElement.h:
        (WebCore::SVGTextContentElement::specifiedTextLength):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::svgAttributeChanged):
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::svgAttributeChanged):

2011-04-13  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: requestDocument can result in race condition in DOMAgent.js
        https://bugs.webkit.org/show_bug.cgi?id=58415

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.requestDocument.onDocumentAvailable):
        (WebInspector.DOMAgent.prototype.requestDocument):

2011-04-12  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: another pass of protocol renames.
        https://bugs.webkit.org/show_bug.cgi?id=58340

        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::setSearchingForNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._setSearchingForNode):
        (WebInspector.ElementsPanel.prototype.setSearchingForNode):

2011-04-12  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement remaining Background and Mask css properties in CSSStyleApplyProperty
        https://bugs.webkit.org/show_bug.cgi?id=58390

        No new tests required as no functionality changed.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyExpanding): Class to expand one property to 0-4 properties.
        (WebCore::ApplyPropertyExpandingSuppressValue): Expand properties but suppress applyValue.

        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        (WebCore::CSSStyleSelector::applyProperty): Remove implementations that have been moved to CSSStyleApplyProperty.

2011-04-12  Sergey Glazunov  <serg.glazunov@gmail.com>

        Reviewed by Dimitri Glazkov.

        Element::setAttribute should check the namespace of an id attribute
        https://bugs.webkit.org/show_bug.cgi?id=58359

        Test: fast/dom/id-attribute-with-namespace-crash.html

        * dom/Element.cpp:
        (WebCore::Element::setAttribute):

2011-04-12  Mike Lawther  <mikelawther@chromium.org>

        Reviewed by James Robinson.

        Update boolean operators in RenderStyle to be compatible with check-webkit-style
        https://bugs.webkit.org/show_bug.cgi?id=58409

        No new functionality, so no new tests.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::operator==):
        (WebCore::RenderStyle::inheritedNotEqual):
        (WebCore::positionedObjectMoved):
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::applyTransform):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::isOriginalDisplayInlineType):

2011-04-12  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] QNetworkReplyHandler refactoring: remove nested event loop.
        https://bugs.webkit.org/show_bug.cgi?id=58375

        As QNAM now makes actual synchronous loads there is no need for a nested event loop
        in ResourceHandleQt.

        Moving the call for QNetworkReplyWrapper::synchronousLoad from
        ResourceHandle::loadResourceSynchronously to QNetworkReplyHandler::start for the
        redirections to work in synchronous requests.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::didReceiveResponse):
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2011-04-12  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by James Robinson.

        [chromium] Move the calculation of the layer's z coordinate to the
        right spot so that it can be picked up by its sublayers.
        https://bugs.webkit.org/show_bug.cgi?id=58397

        Test: platform/chromium/compositing/child-layer-3d-sorting.html

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):

2011-04-12  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] QNetworkReplyHandler refactoring: signal queue
        https://bugs.webkit.org/show_bug.cgi?id=57075

        The idea is to make all signals that come from the QNetworkReply to pass through a queue and to
        stop that queue when loading is deferred. This way almost all the deferred logic can be removed
        from QNetworkReplyHandler class and encapsulated in its own class.

        To stop the queue during wrapper methods execution avoids stacking handler methods over wrapper
        methods. Because of this there is no chance for the wrapper to be destroyed inside one of its methods.
        This together with empting the queue at wrapper destruction time makes sure that the handler will
        not receive calls from a dead wrapper.

        The new class is named QNetworkReplyHandlerCallQueue.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandlerCallQueue::QNetworkReplyHandlerCallQueue):
        (WebCore::QNetworkReplyHandlerCallQueue::push):
        (WebCore::QNetworkReplyHandlerCallQueue::lock):
        (WebCore::QNetworkReplyHandlerCallQueue::unlock):
        (WebCore::QNetworkReplyHandlerCallQueue::setDeferSignals):
        (WebCore::QNetworkReplyHandlerCallQueue::flush):
        (WebCore::QueueLocker::QueueLocker):
        (WebCore::QueueLocker::~QueueLocker):
        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::~QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::receiveMetaData):
        (WebCore::QNetworkReplyWrapper::readyRead):
        (WebCore::QNetworkReplyWrapper::didReceiveFinished):
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::resetState):
        (WebCore::QNetworkReplyHandler::release):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        (WebCore::QNetworkReplyHandler::synchronousLoad):
        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyHandlerCallQueue::deferSignals):
        (WebCore::QNetworkReplyHandlerCallQueue::clear):
        (WebCore::QNetworkReplyWrapper::synchronousLoad):
        (WebCore::QNetworkReplyHandler::setLoadingDeferred):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):

2011-04-12  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed by Kent Tamura.

        Fix wrong calculation of HTMLFormElement::m_associatedElementsAfterIndex.
        https://bugs.webkit.org/show_bug.cgi?id=58247

        - Increment m_associatedElementsAfterIndex when the form owner and an
        inserted form associated element have the same parent chain.
        - Always iterate over m_associatedElements to decrease indexes when a
        form associated element is removed. This is needed for a case that the
        form associated element is removed from the form element due to
        deleting the 'form' attribute. No behavioral change expected with this
        change.

        Tests: fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html
               fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail2.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formElementIndexWithFormAttribute):
        Incremet m_associatedElementsAfterIndex when compareDocumentPosition()
        returns DOCUMENT_POSITION_CONTAINED_BY.
        (WebCore::HTMLFormElement::removeFormElement):
        Always iterate m_associatedElements to adjust indexes.

2011-04-12  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Do not show scrollbars when use mobile theme
        https://bugs.webkit.org/show_bug.cgi?id=58380

        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarThemeQt::scrollbarThickness):

2011-04-12  Anantanarayanan G Iyengar  <ananta@chromium.org>

        Reviewed by Alexey Proskuryakov.

        The default backspace event handler should mark the event as handled if navigation succeeds.
        https://bugs.webkit.org/show_bug.cgi?id=58379

        We should mark the event as handled only if we were able to successfully navigate backwards or forwards.
        These navigations can fail if there is now back/forward history. This can occur in cases like ChromeFrame
        where history is managed by an external browser like IE.

        No new tests added as this scenario can occur when the history view is split across two browsers (WebKit and IE)
        It is non trivial to simulate this environment.

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

2011-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Make availableWidth and totalOverhangWidth in findNextLineBreak member variables of LineWidth
        https://bugs.webkit.org/show_bug.cgi?id=58400

        Added m_availableWidth and m_overhangWidth to LineWidth this allows us to encapsulate m_overhangWidth.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineWidth::LineWidth):
        (WebCore::LineWidth::fitsOnLine): Added; returns true if current width + first argument <= availableWidth.
        (WebCore::LineWidth::availableWidth): Added.
        (WebCore::LineWidth::setAvailableWidth): Added; takes LineOffsets.
        (WebCore::LineWidth::applyOverhang): Added; obtains the overhang width from ruby run and inflates
        the available width.
        (WebCore::LineWidth::fitBelowFloats): Moved from RenderBlock.
        (WebCore::RenderBlock::findNextLineBreak): Uses LineWidth.

2011-04-12  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed warning fix.

        MediaControlElements has been moved to html/shadow.

        * WebCore.pro:

2011-04-12  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Eric Seidel.

        Rename onEndChain and make it a static method.
        https://bugs.webkit.org/show_bug.cgi?id=58403

        No new tests since this is refactoring only.

        * rendering/InlineFlowBox.cpp:
        (WebCore::isLastChildForRenderer):
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        * rendering/InlineFlowBox.h:

2011-04-12  Eric Carlson  <eric.carlson@apple.com>

        Not reviewed, build fix.

        Fix non-accelerated build after r83667.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerFirstVideoFrameAvailable): Guard call to 
            mediaPlayerRenderingModeChanged with USE(ACCELERATED_COMPOSITING.

2011-04-12  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] TilingData mishandles very small texture sizes
        https://bugs.webkit.org/show_bug.cgi?id=58364

        Use zero tiles when the texture size is too small for tiling.

        * platform/graphics/gpu/TilingData.cpp:
        (WebCore::TilingData::TilingData):
        (WebCore::TilingData::setMaxTextureSize):

2011-04-12  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, rolling out r83634 and r83659.
        http://trac.webkit.org/changeset/83634
        http://trac.webkit.org/changeset/83659
        https://bugs.webkit.org/show_bug.cgi?id=57075

        It made 2 tests time out

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::~QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::receiveMetaData):
        (WebCore::QNetworkReplyWrapper::didReceiveFinished):
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::resetState):
        (WebCore::QNetworkReplyHandler::setLoadingDeferred):
        (WebCore::QNetworkReplyHandler::resumeDeferredLoad):
        (WebCore::QNetworkReplyHandler::release):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::resourceResponse):
        (WebCore::WebCoreSynchronousLoader::resourceError):
        (WebCore::WebCoreSynchronousLoader::data):
        (WebCore::WebCoreSynchronousLoader::setReplyFinished):
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::didReceiveResponse):
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::WebCoreSynchronousLoader::waitForCompletion):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2011-04-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Simon Fraser.

        Frames prevent scrolling containing page
        <rdar://problem/8990409>
        https://bugs.webkit.org/show_bug.cgi?id=58392

        Also fixes:
        Should rubber-band on pages with no scrollbars
        <rdar://problem/9034280>

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        Make the main frame rubber-band horizontally and vertically always.

        * platform/ScrollTypes.h:
        Add ScrollElasticity enum.

        * platform/ScrollableArea.cpp:
        Default to no elasticity.

        (WebCore::ScrollableArea::ScrollableArea):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::setVerticalScrollElasticity):
        (WebCore::ScrollableArea::verticalScrollElasticity):
        (WebCore::ScrollableArea::setHorizontalScrollElasticity):
        (WebCore::ScrollableArea::horizontalScrollElasticity):
        Add state for horizontal and vertical elasticity.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        Bail out of new scrolling behavior if we can't rubber-band. By bailing before
        accepting the wheel event, we allow the wheel event to be forwarded. We will
        need to refine this logic to allow subframe scrolling in the future.

        (WebCore::ScrollAnimatorMac::allowsVerticalStretching):
        (WebCore::ScrollAnimatorMac::allowsHorizontalStretching):
        Switch stretching behavior based on the ScrollableArea's elasticity.

2011-04-12  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Try to fix the Chromium build.
        
        Why have one URL when you can have two at twice the price?

        * platform/KURL.h:
        (WebCore::KURL::KURL):
        (WebCore::KURL::isHashTableDeletedValue):
        * platform/KURLGoogle.cpp:
        (WebCore::KURLGooglePrivate::KURLGooglePrivate):
        * platform/KURLGooglePrivate.h: Added a GoogleURL path for KURL's hash
        table deleted value constructor.

2011-04-12  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Oliver Hunt.
        https://bugs.webkit.org/show_bug.cgi?id=58280
        Fix a layout test by correctly comparing enums, and not adding exceptions.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/js/SerializedScriptValue.h:

2011-04-12  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Apple movie trailers play only audio
        https://bugs.webkit.org/show_bug.cgi?id=58339
        <rdar://problem/9237606>

        No new tests, covered by existing layout and manual tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerEngineUpdated): Do the logging before calling any functions.
        (WebCore::HTMLMediaElement::mediaPlayerFirstVideoFrameAvailable): New, if still displaying the poster 
            change the display mode to Video and force a style recalc so the video layer gets hooked
            up the the render tree.
        * html/HTMLMediaElement.h: Define new display mode, PosterWaitingForVideo, to signal that we
            want to stop displaying the poster as soon as the first frame of video is available.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::setDisplayMode): Change display mode to PosterWaitingForVideo when
            we want to display Video but the media engines doesn't have the first frame yet.
        * html/HTMLVideoElement.h:
        (WebCore::HTMLVideoElement::shouldDisplayPosterImage): Update to return true when display mode
            is PosterWaitingForVideo.

        * manual-tests/media-elements/video-replaces-poster.html: Clean up bit-rot from patch changes.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::firstVideoFrameAvailable): New, passthrough from media engien to element.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerFirstVideoFrameAvailable):

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation): Initialize 
            m_haveReportedFirstVideoFrame and m_playWhenFramesAvailable.
        (WebCore::MediaPlayerPrivateAVFoundation::play): Don't actually start playback until the first
            frame of video has loaded, or audio will begin to play before we can show video.
        (WebCore::MediaPlayerPrivateAVFoundation::pause): Clear m_playWhenFramesAvailable.
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates): When first frame of video is
            available, inform elment and begin playback if it was previousl requested.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyContextVideoRenderer): Correct logging.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformPlay): Renamed from play.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformPause): Rename from pause.

2011-04-12  Jian Li  <jianli@chromium.org>

        Unreviewed, rolling out r83649.
        http://trac.webkit.org/changeset/83649
        https://bugs.webkit.org/show_bug.cgi?id=57563

        This patch causes compiling errors for chromium

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::initializeForGDI):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::~TransparencyAwareFontPainter):
        (WebCore::Font::drawComplexText):
        * platform/graphics/chromium/ImageBufferData.h:
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::resize):
        * platform/graphics/chromium/PlatformCanvas.h:
        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::compositeTextComposite):
        (WebCore::TransparencyWin::makeLayerOpaque):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap):
        (WebCore::Image::drawPattern):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::PlatformContextSkia):
        (WebCore::PlatformContextSkia::setCanvas):
        (WebCore::PlatformContextSkia::isPrinting):
        (WebCore::PlatformContextSkia::isNativeFontRenderingAllowed):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::canvas):

2011-04-12  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Implement non-activating clicks to allow dragging out of a background window.
        https://bugs.webkit.org/show_bug.cgi?id=55053
        <rdar://problem/9042197>

        * WebCore.exp.in: Added new exported method.

2011-04-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Geoffrey Garen.

        Cleaned up hash traits, and added hash traits for handles
        https://bugs.webkit.org/show_bug.cgi?id=58381

        * dom/QualifiedName.h: Use new SimpleClassHashTraits to avoid duplication.

        * platform/KURL.h:
        (WebCore::KURL::KURL):
        (WebCore::KURL::isHashTableDeletedValue): Added explicit hash table
        deleted value constructor, to be more explicit and enable use of
        SimpleClassHashTraits.

        * platform/KURLHash.h: Use new SimpleClassHashTraits to avoid duplication.

        * platform/graphics/FontCache.cpp: Ditto.
        * platform/network/ProtectionSpaceHash.h: Ditto.
        * svg/properties/SVGAnimatedPropertyDescription.h: Ditto.

2011-04-12  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] QNetworkReplyHandler refactoring: remove nested event loop.
        https://bugs.webkit.org/show_bug.cgi?id=58375

        As QNAM now makes actual synchronous loads there is no need for a nested event loop
        in ResourceHandleQt.

        Moving the call for QNetworkReplyWrapper::synchronousLoad from
        ResourceHandle::loadResourceSynchronously to QNetworkReplyHandler::start for the
        redirections to work in synchronous requests.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::didReceiveResponse):
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2011-04-11  Jer Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION: Vimeo fullscreen video displays incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=58291

        Set the RenderFullScreen's zIndex to the max.  And make sure to override
        a video element's specified width and height by making its full screen rules
        important.  Also, always show the controls when a media element is in full
        screen mode.

        Test: fullscreen/video-specified-size.html
        Test: fullscreen/full-screen-zIndex.html

        * css/fullscreen.css:
        (video:-webkit-full-screen): 
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::controls): Always show controls in full screen mode.
        (WebCore::HTMLMediaElement::preDispatchEventHandler): Added. Handle the fullscreen
            change event and hide or show the controls accordingly.
        * html/HTMLMediaElement.h:
        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::createFullScreenStyle): Set the zIndex to INT_MAX and use a 
            vertical flexbox instead of a horizontal one.

2011-04-12  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Page tears and stutters in WebKit2 when page is > 2048 pixels wide
        https://bugs.webkit.org/show_bug.cgi?id=58330

        Added API to GraphicsLayer to disable switching to tiled layers. This is 
        set in the nonCompositedContentLayer in WK2, causing that layer to never
        switch to tiles and avoiding the asynchronous update of the content during
        scroll.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
            Implement setAllowTiledLayer() to simulate a SizeChanged action to 
            properly switch between tiled and untiled layer.
        * platform/graphics/ca/GraphicsLayerCA.h:

2011-04-12  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by James Robinson.

        Remove dependency on chromium skia::PlatformCanvas
        https://bugs.webkit.org/show_bug.cgi?id=57563

        This patch does not change any functionality, just the type of object skia::PlatformCanvas -> SkCanvas.
        The object is still being created by a factory method skia::CreateBitmapCanvas defined in Chromium.
        We will eventually define an API that every port using skia will define.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::initializeForGDI):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::~TransparencyAwareFontPainter):
        (WebCore::Font::drawComplexText):
        * platform/graphics/chromium/ImageBufferData.h:
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::resize):
        * platform/graphics/chromium/PlatformCanvas.h:
        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::compositeTextComposite):
        (WebCore::TransparencyWin::makeLayerOpaque):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap):
        (WebCore::Image::drawPattern):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::PlatformContextSkia):
        (WebCore::PlatformContextSkia::setCanvas):
        (WebCore::PlatformContextSkia::isNativeFontRenderingAllowed):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::canvas):
        (WebCore::PlatformContextSkia::printing):
        (WebCore::PlatformContextSkia::setPrinting):

2011-04-11  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=58280
        <rdar://problem/9252824> javascript in an inconsistent state due to serialization returning an un-handled exception
        Currently serialization and deserialization can throw javascript exceptions.  Since SerializedScriptValue is called in
        several places that do not always involve direct calls into javascript have the functions return an error code and the callers
        decide whether or not to throw exceptions.

        Don't allow SerializedScriptValue to attempt to serialize objects that inherit from JSNavigator.h.  Walking that object creates
        additional objects which eventually causes serialization to end up throwing a stack overflow error.  Instead fail immediately.

        Untangle header includes.  SerializedScriptValue was inheriting ScriptValue.h, but not using it.  Since ScriptValue depends on
        SerializedScriptValue this could lead to a circular header dependency.

        No change in functionality, covered by current tests

        * WebCore.exp.in:
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::initMessageEvent):
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::serialize):
        (WebCore::ScriptValue::deserialize):
        * bindings/js/ScriptValue.h:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::deserialize):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::deserialize):
        (WebCore::SerializedScriptValue::maybeThrowExceptionIfSerializationFailed):
        (WebCore::SerializedScriptValue::serializationDidCompleteSuccessfully):
        * bindings/js/SerializedScriptValue.h:

        * bindings/js/JSWorkerContextBase.cpp: header include fix
        * loader/FrameLoader.h: header include fix
        * page/Frame.cpp: header include fix

2011-03-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Kenneth Russell.

        Move libtess from WebCore/thirdparty to ThirdParty
        https://bugs.webkit.org/show_bug.cgi?id=57288

        * WebCore.gyp/WebCore.gyp:
            - Add libtess as a legit dependency.
        * WebCore.gypi:
            - Remove libtess files from the gypi.
        * thirdparty/glu: Removed.

2011-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by David Hyatt.

        Bundle w and tmpW in findNextLineBreak together as a class
        https://bugs.webkit.org/show_bug.cgi?id=58362

        Renamed w, tempW, and width in findNextLineBreak to committedWidth, uncommittedWidth,
        and availableWidth respectively. Also bundled committedWidth and uncommittedWith as a class
        named LineWidth.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineWidth::LineWidth): Added.
        (WebCore::LineWidth::currentWidth): Added; returns the sum of committed and uncommitted width.
        (WebCore::LineWidth::uncommittedWidth): Added.
        (WebCore::LineWidth::committedWidth): Added.
        (WebCore::LineWidth::addUncommittedWidth): Added; adds the specified width to the uncommitted width.
        (WebCore::LineWidth::commit): Added; commits the current width and clears the uncommitted width.
        (WebCore::RenderBlock::findNextLineBreak): Uses LineWidth.

2011-04-12  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Eric Seidel.

        REGRESSION(r82419): extra border in t0805-c5519-ibrdr-r-00-a.html
        https://bugs.webkit.org/show_bug.cgi?id=57459

        Slightly change the way we decide if a InlineFlowBox is the last box for its renderer.
        We include the border in that box under these conditions:
        (1) The next line was not created, or it is constructed. We check the previous line for rtl.
        (2) The logicallyLastRun is not a descendant of this renderer.
        (3) The logicallyLastRun is a descendant of this renderer, but it is the last child of this renderer and it does not wrap to the next line.
        I added the tests from bug 47210, because now the draw the borders correctly.

        Tests: fast/borders/bidi-002.html
               fast/borders/bidi-004.html
               fast/borders/bidi-009a.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::onEndChain):
        (WebCore::isAnsectorAndWithinBlock):
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::constructLine):
        (WebCore::RenderBlock::layoutInlineChildren):

2011-04-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Cleaned up some Vector traits, and added missing Vector traits for handles
        https://bugs.webkit.org/show_bug.cgi?id=58372

        * platform/graphics/BitmapImage.h: Added a FIXME because the current
        Vector traits for FrameData are logically incorrect, but I couldn't find
        a place where this currently results in bad behavior, and it's not
        immediately obvious what the right solution is.

2011-04-12  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Move MediaControlElements to html/shadow.
        https://bugs.webkit.org/show_bug.cgi?id=58347

        Mechanical move of the files.

        * Android.mk: Updated the build file.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.list.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto, also ran sort-XCode-project-files.
        * html/shadow/MediaControlElements.cpp: Copied from Source/WebCore/rendering/MediaControlElements.cpp.
        (WebCore::MediaControlFullscreenButtonElement::defaultEventHandler):
        * html/shadow/MediaControlElements.h: Copied from Source/WebCore/rendering/MediaControlElements.h.
        * rendering/MediaControlElements.cpp: Removed.
        * rendering/MediaControlElements.h: Removed.
        * rendering/RenderingAllInOne.cpp: Removed the files that were moved.

2011-04-12  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] QNetworkReplyHandler refactoring: signal queue
        https://bugs.webkit.org/show_bug.cgi?id=57075

        The idea is to make all signals that come from the QNetworkReply to pass through a queue and to
        stop that queue when loading is deferred. This way almost all the deferred logic can be removed
        from QNetworkReplyHandler class and encapsulated in its own class.

        To stop the queue during wrapper methods execution avoids stacking handler methods over wrapper
        methods. Because of this there is no chance for the wrapper to be destroyed inside one of its methods.
        This together with empting the queue at wrapper destruction time makes sure that the handler will
        not receive calls from a dead wrapper.

        The new class is named QNetworkReplyHandlerCallQueue.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandlerCallQueue::QNetworkReplyHandlerCallQueue):
        (WebCore::QNetworkReplyHandlerCallQueue::push):
        (WebCore::QNetworkReplyHandlerCallQueue::lock):
        (WebCore::QNetworkReplyHandlerCallQueue::unlock):
        (WebCore::QNetworkReplyHandlerCallQueue::setDeferSignals):
        (WebCore::QueueLocker::QueueLocker):
        (WebCore::QueueLocker::~QueueLocker):
        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::~QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::receiveMetaData):
        (WebCore::QNetworkReplyWrapper::readyRead):
        (WebCore::QNetworkReplyWrapper::didReceiveFinished):
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::resetState):
        (WebCore::QNetworkReplyHandler::release):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        (WebCore::QNetworkReplyHandler::synchronousLoad):
        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyHandlerCallQueue::deferSignals):
        (WebCore::QNetworkReplyHandlerCallQueue::clear):
        (WebCore::QNetworkReplyWrapper::synchronousLoad):
        (WebCore::QNetworkReplyHandler::setLoadingDeferred):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):

2011-04-12  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=58176
        
        Inline replaced elements following positioned elements on lines are not rendered. Make sure the
        logic for skipping run construction in appendRunsForObject matches the new logic that I added
        to findNextLineBreak. If they don't match up, you risk confusing the run construction code and
        causing it to not make runs for objects that follow the positioned object on the line.

        Added fast/inline/positioned-object-between-replaced-elements.html
        
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::appendRunsForObject):

2011-04-12  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=58292
        Provide new setting to allow site icon loading despite disabling automatic image loading in general.

        Test: http/tests/misc/favicon-loads-with-icon-loading-override.html

        * WebCore.exp.in: Added export symbol
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::startIconLoader): Check new setting before deciding that site icon images shouldn't be loaded.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Add initializer for new setting
        (WebCore::Settings::setLoadsSiteIconsIgnoringImageLoadingSetting): Add setter for new setting.
        * page/Settings.h: Explain nuances regarding loadsImagesAutomatically setting.
        (WebCore::Settings::loadsSiteIconsIgnoringImageLoadingSetting): Added getter.

2011-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Move StyleChange and other global functions from ApplyStyleCommand to EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=55974

        Moved StyleChange, getIdentifierValue, and legacyFontSizeFromCSSValue from ApplyStyleCommand
        to EditingStyle. Also moved reconcileTextDecorationProperties, getIdentifierValue,
        setTextDecorationProperty, isCSSValueLength, legacyFontSizeFromCSSValue, extractTextStyles,
        diffTextDecorations, fontWeightIsBold, getTextAlignment, and getPropertiesNotIn.

        Because of this move, getPropertiesNotIn is no longer visible outside of EditingStyle.cpp

        * editing/ApplyStyleCommand.cpp:
        * editing/ApplyStyleCommand.h:
        * editing/EditingStyle.cpp:
        (WebCore::reconcileTextDecorationProperties):
        (WebCore::StyleChange::StyleChange):
        (WebCore::setTextDecorationProperty):
        (WebCore::getRGBAFontColor):
        (WebCore::StyleChange::extractTextStyles):
        (WebCore::diffTextDecorations):
        (WebCore::fontWeightIsBold):
        (WebCore::getTextAlignment):
        (WebCore::getPropertiesNotIn):
        (WebCore::getIdentifierValue):
        (WebCore::isCSSValueLength):
        (WebCore::legacyFontSizeFromCSSValue):
        * editing/EditingStyle.h:
        (WebCore::StyleChange::cssStyle):
        (WebCore::StyleChange::applyBold):
        (WebCore::StyleChange::applyItalic):
        (WebCore::StyleChange::applyUnderline):
        (WebCore::StyleChange::applyLineThrough):
        (WebCore::StyleChange::applySubscript):
        (WebCore::StyleChange::applySuperscript):
        (WebCore::StyleChange::applyFontColor):
        (WebCore::StyleChange::applyFontFace):
        (WebCore::StyleChange::applyFontSize):
        (WebCore::StyleChange::fontColor):
        (WebCore::StyleChange::fontFace):
        (WebCore::StyleChange::fontSize):
        (WebCore::StyleChange::operator==):
        (WebCore::StyleChange::operator!=):

2011-04-12  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Better padding for inputs and comboxes in mobile theme
        https://bugs.webkit.org/show_bug.cgi?id=58248

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::setButtonPadding):
        (WebCore::RenderThemeQt::adjustTextFieldStyle):
        (WebCore::RenderThemeQt::paintTextField):
        (WebCore::RenderThemeQt::adjustMenuListStyle):

2011-04-11  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Replace insertChildNode with addChild in handleRunIn's reparenting
        of inlineRunIn to currBlock.
        https://bugs.webkit.org/show_bug.cgi?id=58228

        Use addChild instead of insertChildNode since it handles 
        correct placement of the children, esp where we cannot insert
        anything before the first child. e.g. details tag requires that its
        first child be a summary child and won't be able to remove child if
        that is not the case.

        Test: fast/runin/runin-reparent-crash.html

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

2011-04-12  Chris Fleizach  <cfleizach@apple.com>

        Unreviewed. Fixing Leopard build.

        REGRESSION: WK2: misspelled AX attributes no longer returned from text fields
        https://bugs.webkit.org/show_bug.cgi?id=58304

        checkTextOfParagraph is not available on Leopard. That code needs to be conditionalized with USE(UNIFIED_TEXT_CHECKING).

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (AXAttributeStringSetSpelling):

2011-04-12  Mario Sanchez Prada  <msanchez@igalia.com>

        Unreviewed. Added missing files to GNUmakefile.list.am.

        * GNUmakefile.list.am: Added IDBLevelDBBackingStore.[h|cpp].

2011-04-12  Cris Neckar  <cdn@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Add handling for non-svg inline text boxes in text box lists.
        https://bugs.webkit.org/show_bug.cgi?id=57933

        Test: svg/text/svg-rtl-text-crash.html

        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::positionForPoint):
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGInlineTextBoxes):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::closestLeafChildForPosition):
        (WebCore::reverseInlineBoxRangeAndValueListsIfNeeded):
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::SVGTextQuery::collectTextBoxesInFlowBox):

2011-04-12  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Expose menu items and menus as children of a menu bar
        https://bugs.webkit.org/show_bug.cgi?id=56659

        Ensure menu items get exposed when they're children of menu bars.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAriaRoleAttribute):
        Consider menu bars as potential parent objects for menu items.

2011-04-12  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: remove scriptWorldType from the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=58324

        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/ScriptDebugListener.h:
        (WebCore::ScriptDebugListener::~ScriptDebugListener):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerDispatcher.prototype.scriptParsed):
        * inspector/front-end/Script.js:
        (WebInspector.Script):
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile):

2011-04-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        Should MediaControls::changedNetworkState fiddle with Fullscreen controls?
        https://bugs.webkit.org/show_bug.cgi?id=58163

        Covered by existing tests and manual-tests/media-controls.html.

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::reset): Moved fullscreen showing/hiding here.
        (WebCore::MediaControls::changedNetworkState): ... from here.

2011-04-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove unnecessary method InspectorAgent.didEvaluateForTestInFrontend.
        https://bugs.webkit.org/show_bug.cgi?id=58335

        It was the method for Inspector layout tests.
        We can use RuntimeAgent.evaluate instead.

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        * inspector/front-end/TestController.js:
        (WebInspector.TestController.prototype.notifyDone):

2011-04-12  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] some public callbacks remain
        https://bugs.webkit.org/show_bug.cgi?id=58307

        Cleanup of the player public/private APIs. Moving the GstMessage
        handling code inside of the player allowed some APIs to move to
        the private scope of the class.

        No new tests, this patch is a cleanup and should not affect
        current tests coverage.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateMessageCallback):
        (WebCore::mediaPlayerPrivateSourceChangedCallback):
        (WebCore::mediaPlayerPrivateVolumeChangedCallback):
        (WebCore::mediaPlayerPrivateMuteChangedCallback):
        (WebCore::mediaPlayerPrivateRepaintCallback):
        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition):
        (WebCore::MediaPlayerPrivateGStreamer::currentTime):
        (WebCore::MediaPlayerPrivateGStreamer::seek):
        (WebCore::MediaPlayerPrivateGStreamer::setRate):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::sourceChanged):
        (WebCore::MediaPlayerPrivateGStreamer::triggerRepaint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2011-04-12  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] advertize HTTP Live Streaming mime-type
        https://bugs.webkit.org/show_bug.cgi?id=58318

        Register the hls mime-type in the internal cache if found in the
        typefind factories.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache):

2011-04-11  MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.
        
        RenderIndicator and ShadowBlockElement are no longer used.
        https://bugs.webkit.org/show_bug.cgi?id=58277

        Removed RenderIndicator and ShadowBlockElement.
        
        No new tests. Just removed unused code.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderIndicator.cpp: Removed.
        * rendering/RenderIndicator.h: Removed.
        * rendering/RenderMeter.h:
        * rendering/RenderingAllInOne.cpp:
        * rendering/ShadowElement.cpp:
        * rendering/ShadowElement.h:

2011-04-12  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Benjamin Poulain.

        fast/css/dashboard-regions-attr-crash.html asserts
        https://bugs.webkit.org/show_bug.cgi?id=58233

        Move DASHBOARD_SUPPORT feature detection from features.pri to CodeGenerators.pri
        not to generate incorrect properties into CSSPropertyNames.h.

        * CodeGenerators.pri:
        * features.pri:

2011-04-12  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION: WK2: misspelled AX attributes no longer returned from text fields
        https://bugs.webkit.org/show_bug.cgi?id=58304

        checkSpellingOfString is no longer implemented in WK2. Accessibility needs to change to use
        checkTextOfParagraph in order to retrieve misspelled ranges.

        Existing tests cover this functionality.

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (AXAttributeStringSetSpelling):

2011-04-12  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Remove m_idleHandler from ResourceHandleSoup
        https://bugs.webkit.org/show_bug.cgi?id=58319

        The m_idleHandler attribute is no longer used in ResourceHandleSoup.
        No new tests needed, no functionality change.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):

2011-04-12  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Breakpoints and execution line decoration should stay in place if the edited line is not whitespace
        https://bugs.webkit.org/show_bug.cgi?id=58314

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._lineNumberAfterEditing):

2011-04-11  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move shortcut handlers from SourceFrame to TextViewer.
        https://bugs.webkit.org/show_bug.cgi?id=58238

        Commit/cancel editing functionality is common for all resource types, and it deals with TextViewer state.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.isContentEditable):
        (WebInspector.SourceFrame.prototype._createTextViewer):
        (WebInspector.SourceFrame.prototype.commitEditing.didEditContent):
        (WebInspector.SourceFrame.prototype.commitEditing):
        (WebInspector.SourceFrame.prototype.cancelEditing):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._doubleClick):
        (WebInspector.TextViewer.prototype._registerShortcuts):
        (WebInspector.TextViewer.prototype._handleKeyDown):
        (WebInspector.TextViewer.prototype._commitEditing.didCommitEditing):
        (WebInspector.TextViewer.prototype._commitEditing):
        (WebInspector.TextViewer.prototype._cancelEditing):
        (WebInspector.TextViewerDelegate.prototype.endEditing):
        (WebInspector.TextViewerDelegate.prototype.commitEditing):
        (WebInspector.TextViewerDelegate.prototype.cancelEditing):

2011-04-12  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: cookies view is empty even for sites with cookies.
        https://bugs.webkit.org/show_bug.cgi?id=58316

        Test: http/tests/inspector/resource-tree-model.html

        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._callForFrameResources):

2011-04-11  Stephen White  <senorblanco@chromium.org>

        Reviewed by James Robinson.

        [chromium] GPU-accelerated canvas-to-canvas drawImage is incorrect.
        https://bugs.webkit.org/show_bug.cgi?id=58258

        When one accelerated canvas is drawn to another via drawImage(), if the
        prior call in the source canvas was non-accelerated, the 
        hardware canvas is not up-to-date, and the results will be incorrect.
        Fixed by calling prepareForHardwareDraw() on the source context.

        Test: fast/canvas/canvas-to-canvas.html

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::draw):

2011-04-12  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Add some more tests for detailed heap snapshots UI.
        https://bugs.webkit.org/show_bug.cgi?id=58146

        Tests: inspector/profiler/detailed-heapshots-comparison-expansion-preserved-when-sorting.html
               inspector/profiler/detailed-heapshots-comparison-show-all.html
               inspector/profiler/detailed-heapshots-comparison-show-next.html
               inspector/profiler/detailed-heapshots-comparison-shown-node-count-preserved-when-sorting.html
               inspector/profiler/detailed-heapshots-comparison-sorting.html
               inspector/profiler/detailed-heapshots-containment-shown-node-count-preserved-when-sorting.html
               inspector/profiler/detailed-heapshots-dominators-expansion-preserved-when-sorting.html
               inspector/profiler/detailed-heapshots-dominators-show-all.html
               inspector/profiler/detailed-heapshots-dominators-show-next.html
               inspector/profiler/detailed-heapshots-dominators-shown-node-count-preserved-when-sorting.html
               inspector/profiler/detailed-heapshots-dominators-sorting.html
               inspector/profiler/detailed-heapshots-summary-shown-node-count-preserved-when-sorting.html

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

2011-04-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: there was incorrect value of id property of responses for malformed json-rpc 2.0 requests.
        https://bugs.webkit.org/show_bug.cgi?id=58305

        It was 0 if the message is not a json object or it has no id property. But according to spec it must be null.

        * inspector/CodeGeneratorInspector.pm:

2011-04-11  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [chromium] script formatting doesn't work when chromium is built with debug_devtools=1.
        https://bugs.webkit.org/show_bug.cgi?id=58232

        * WebCore.gypi:

2011-04-12  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: REGRESSION: Most resources in the Network panel show a blank panel when clicked.
        https://bugs.webkit.org/show_bug.cgi?id=58273

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.get visible):
        (WebInspector.SourceFrame.prototype.set visible):
        (WebInspector.SourceFrame.prototype.show):
        (WebInspector.SourceFrame.prototype.hide):
        (WebInspector.SourceFrame.prototype.detach):
        (WebInspector.SourceFrame.prototype._ensureContentLoaded):
        (WebInspector.SourceFrame.prototype.markDiff):
        (WebInspector.SourceFrame.prototype.addMessage):
        (WebInspector.SourceFrame.prototype.clearMessages):
        (WebInspector.SourceFrame.prototype.get scrollTop):
        (WebInspector.SourceFrame.prototype.set scrollTop):
        (WebInspector.SourceFrame.prototype.highlightLine):
        (WebInspector.SourceFrame.prototype._clearLineHighlight):
        (WebInspector.SourceFrame.prototype._initializeTextViewer):
        (WebInspector.SourceFrame.prototype.performSearch):
        (WebInspector.SourceFrame.prototype.searchCanceled):
        (WebInspector.SourceFrame.prototype._jumpToSearchResult):
        (WebInspector.SourceFrame.prototype.setExecutionLine):
        (WebInspector.SourceFrame.prototype.clearExecutionLine):
        (WebInspector.SourceFrame.prototype.resize):

2011-04-12  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: document runtime agent, share remote object definition between domains.
        https://bugs.webkit.org/show_bug.cgi?id=58246

        * inspector/Inspector.json:

2011-04-12  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: document console domain, support cross-domain type references.
        https://bugs.webkit.org/show_bug.cgi?id=58240

        * inspector/ConsoleMessage.cpp:
        (WebCore::messageSourceValue):
        (WebCore::messageTypeValue):
        (WebCore::messageLevelValue):
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/Inspector.json:
        * inspector/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::buildInspectorObject):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.messageAdded):
        (WebInspector.ConsoleMessage):
        (WebInspector.ConsoleMessage.prototype._populateStackTraceTreeElement):
        (WebInspector.ConsoleMessage.prototype.isEqual):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype.requestWillBeSent):
        * inspector/generate-inspector-idl:
        * page/Console.h:

2011-04-06  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] RTSP playback broken
        https://bugs.webkit.org/show_bug.cgi?id=56930

        Rely on {audio,video}-changed playbin2 signals instead of the
        -tags-changed signals because some media don't provide tags and
        then can trick the media-player to not paint video, for instance.

        Also trigger a video size calculation after the video sink
        negotiated its caps. This is useful in the cases where
        audio-changed signal is emitted but the video sink takes more time
        to negociate caps with its peer.

        This patch also fixes the rtsp manual-test with a new stream url
        which seems to be more permanent than the previous WWDC keynote
        stream.

        * manual-tests/video-rtsp.html:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateVideoChangedCallback):
        (WebCore::mediaPlayerPrivateAudioChangedCallback):
        (WebCore::mediaPlayerPrivateAudioChangeTimeoutCallback):
        (WebCore::mediaPlayerPrivateVideoChangeTimeoutCallback):
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::naturalSize):
        (WebCore::MediaPlayerPrivateGStreamer::videoChanged):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
        (WebCore::MediaPlayerPrivateGStreamer::audioChanged):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio):
        (WebCore::MediaPlayerPrivateGStreamer::paint):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2011-04-12  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Failed/canceled resource requests kept showing as Pending in network panel.
        https://bugs.webkit.org/show_bug.cgi?id=58135

        Added statuses for failed/canceled resource loading.

        * English.lproj/localizedStrings.js:
        * inspector/Inspector.json:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didFailLoading):
        * inspector/front-end/NetworkManager.js:
        * inspector/front-end/NetworkPanel.js:
        * inspector/front-end/Resource.js:

2011-04-12  Steve Block  <steveblock@google.com>

        Reviewed by Oliver Hunt.

        Callable objects created via JavaScriptCore API cannot be used as Geolocation callbacks
        https://bugs.webkit.org/show_bug.cgi?id=40012

        Covered by fast/dom/Geolocation/argument-types.html

        * bindings/js/CallbackFunction.cpp:
        (WebCore::checkFunctionOnlyCallback):

2011-04-07  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] report playback statistics
        https://bugs.webkit.org/show_bug.cgi?id=58033

        Provide media playback statistics using fpsdisplaysink and
        position queries.

        * manual-tests/video-statistics.html: Added.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::decodedFrameCount):
        (WebCore::MediaPlayerPrivateGStreamer::droppedFrameCount):
        (WebCore::MediaPlayerPrivateGStreamer::audioDecodedByteCount):
        (WebCore::MediaPlayerPrivateGStreamer::videoDecodedByteCount):
        (WebCore::MediaPlayerPrivateGStreamer::updateAudioSink):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2011-04-11  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] warnings in media/video-set-rate-from-pause.html
        https://bugs.webkit.org/show_bug.cgi?id=58220

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setRate): Pause the
        pipeline if new rate is zero, like advised in the GStreamer
        documentation of gst_event_new_seek().

2011-04-11  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by James Robinson.

        [chromium] Properly invalidate the contents of ImageLayerChromium's
        when the actual image contents change.
        https://bugs.webkit.org/show_bug.cgi?id=58181

        Test: compositing/images/content-image-change.html

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateTexture):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::ImageLayerChromium):
        (WebCore::ImageLayerChromium::setContents):
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/ImageLayerChromium.h:

2011-04-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        -webkit-box-shadow:inset does not animate transform as an inset shadow
        https://bugs.webkit.org/show_bug.cgi?id=45176
        
        Two fixes:
        1. Don't run transitions between different shadow styles (normal vs. inset).
        2. When either source or destination is null, use a default shadow with a
        matching style so that the transition runs.

        Test: transitions/mismatched-shadow-styles.html

        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):
        (WebCore::PropertyWrapperShadow::blend):

2011-04-11  John Bates  <jbates@google.com>

        Reviewed by Kenneth Russell.

        chromium support for glSetLatch and glWaitLatch between 3D contexts
        https://bugs.webkit.org/show_bug.cgi?id=58003

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::~Canvas2DLayerChromium):
        (WebCore::Canvas2DLayerChromium::setDrawingBuffer):
        (WebCore::Canvas2DLayerChromium::setLayerRenderer):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        * platform/graphics/chromium/Extensions3DChromium.h:
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::Cubic::Cubic):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        (WebCore::LayerRendererChromium::updateLayers):
        (WebCore::LayerRendererChromium::addChildContext):
        (WebCore::LayerRendererChromium::removeChildContext):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::~WebGLLayerChromium):
        (WebCore::WebGLLayerChromium::updateCompositorResources):
        (WebCore::WebGLLayerChromium::setContext):
        (WebCore::WebGLLayerChromium::setLayerRenderer):
        * platform/graphics/chromium/WebGLLayerChromium.h:

2011-04-11  Alexey Marinichev  <amarinichev@chromium.org>

        Reviewed by James Robinson.

        LayerChromium/CCLayerImpl ownership fix
        https://bugs.webkit.org/show_bug.cgi?id=58283

        CCLayerImpl's m_owner field lifetime should match the lifetime of the
        corresponding LayerChromium.  This change moves resetting of m_owner
        into LayerChromium's destructor.

        Tested similarly to bug 57577.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::~LayerChromium):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::cleanupResources):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::resetOwner):

2011-04-11  Daniel Bates  <dbates@rim.com>

        Attempt to fix the GTK build after changeset 83527 <http://trac.webkit.org/changeset/83527>
        (https://bugs.webkit.org/show_bug.cgi?id=53556).

        * GNUmakefile.list.am: Append files HTMLTrackElement.{h, cpp} to the list webcore_sources.

2011-04-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9251515> and https://bugs.webkit.org/show_bug.cgi?id=58072
        URLs accessed as a result of pushState/replaceState should count as "visited" and be in the global history

        Test: fast/loader/stateobjects/state-url-sets-links-visited.html

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::pushState): Notify the history client and add the visited link.
        (WebCore::HistoryController::replaceState): Ditto.

2011-04-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        Rename MediaControls to MediaControlRootElement.
        https://bugs.webkit.org/show_bug.cgi?id=58250

        Mechanical move using do-webcore-rename.

2011-04-11  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=58285
        CompositeAnimation is cleared while an AnimationBase is waiting for notification

        Occasionally hardware animations would trigger a state where
        they would tell the AnimationControllerPrivate that it should notify
        any waiting animations that they are ready to start, even though
        the RenderObject had gone away and hence the CompositeAnimation
        had been destroyed. The fix is to zero the pointer from AnimationBase
        when the CompositeAnimation destructor runs (or its animations are
        cleared) and test the validity of the CompositeAnimation before it
        is used in AnimationBase.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded):
        (WebCore::AnimationBase::updatePlayState):
        (WebCore::AnimationBase::freezeAtTime):
        (WebCore::AnimationBase::beginAnimationUpdateTime):
        - test that the CompositeAnimation exists
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::clear):
        - rename clearRenderer() to clear() as it now also clears the CompositeAnimation
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::clearRenderer):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        - call clear() rather than clearRenderer()

2011-04-11  Justin Novosad  <junov@chromium.org>

        Reviewed by Kenneth Russell.

        [Chromium] Text anti-aliasing fails when rendering text with shadow
        https://bugs.webkit.org/show_bug.cgi?id=57584

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::drawGlyphsWin): new static function, code factored-out
        from WebCore::Font::drawGlyphs
        (WebCore::Font::drawGlyphs): may separate font rendering into two
        passes to allow foreground glyphs to be rendered with GDI when Skia 
        is required for rendering shadows
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::windowsCanHandleDrawTextShadow):
        Modified method so that it does not assume a shadow is present, and
        returns true if there is no shadow (GDI can draw 'no shadow')
        (WebCore::windowsCanHandleTextDrawing):
        Factored out into sub methods so that the the shadow and foregound
        glyph properties can be tested separately independently.
        (WebCore::windowsCanHandleTextDrawingWithoutShadow):
        New method returns true if the foreground glyph only has effect
        that can be draw with GDI
        (WebCore::paintSkiaText):
        * platform/graphics/skia/SkiaFontWin.h:

2011-04-11  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed, rolling out r83515.
        http://trac.webkit.org/changeset/83515
        https://bugs.webkit.org/show_bug.cgi?id=57178

        Broke GTK builds. nextOnLineExists and prevOnLineExists are still used in AccessibilityObjectWrapperAtk.cpp.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::nextOnLineExists):
        (WebCore::InlineBox::prevOnLineExists):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):

2011-04-11  Brady Eidson  <beidson@apple.com>

        Reverting, seeing something else still broken.  Sorry.

        * html/HTMLTrackElement.cpp:

2011-04-11  Brady Eidson  <beidson@apple.com>

        Fix the build.

        * html/HTMLTrackElement.cpp: Case-sensitive, please.

2011-04-11  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed build fix for Mac.

        An idl file was added in the wrong place.

        * WebCore.xcodeproj/project.pbxproj:

2011-04-11  Chris Marrin  <cmarrin@apple.com>

        Rubberstamped by Dan Bernstein.

        xhr.responseType = 'arraybuffer' works on Mac but not on Windows
        https://bugs.webkit.org/show_bug.cgi?id=50334

        Got rid of guards around arraybuffer logic in XHR. ArrayBuffer and friends
        are always turned on now, so there's not need for the guard. I reenabled the
        test that was Skipped on Windows and it works now.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::markChildren):
        (WebCore::JSXMLHttpRequest::send):
        (WebCore::JSXMLHttpRequest::response):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseArrayBuffer):
        (WebCore::XMLHttpRequest::setResponseType):
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::clearResponseBuffers):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::optionalResponseArrayBuffer):

2011-04-11  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Setup ENABLE(TRACK) feature define + initial HTMLTrackElement
        https://bugs.webkit.org/show_bug.cgi?id=53556

        No new tests. No real functionality added just yet.

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * features.pri:
        * html/HTMLAttributeNames.in:
        * html/HTMLTagNames.in:
        * html/HTMLTrackElement.cpp: Added.
        (WebCore::HTMLTrackElement::HTMLTrackElement):
        (WebCore::HTMLTrackElement::create):
        (WebCore::HTMLTrackElement::insertedIntoTree):
        (WebCore::HTMLTrackElement::willRemove):
        (WebCore::HTMLTrackElement::src):
        (WebCore::HTMLTrackElement::setSrc):
        (WebCore::HTMLTrackElement::kind):
        (WebCore::HTMLTrackElement::setKind):
        (WebCore::HTMLTrackElement::srclang):
        (WebCore::HTMLTrackElement::setSrclang):
        (WebCore::HTMLTrackElement::label):
        (WebCore::HTMLTrackElement::setLabel):
        (WebCore::HTMLTrackElement::isDefault):
        (WebCore::HTMLTrackElement::setIsDefault):
        (WebCore::HTMLTrackElement::isURLAttribute):
        * html/HTMLTrackElement.h: Added.
        * html/HTMLTrackElement.idl: Added.

2011-04-11  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by David Levin.

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

        Better compile fix for Solaris 10/Sun Studio 12 CC 
        needing <sys/time.h>

        * loader/icon/IconRecord.h:
        * page/Page.h:
        * platform/network/ResourceResponseBase.h:

2011-04-11  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Cannot use Ctrl-Delete as a custom keyboard shortcut
        https://bugs.webkit.org/show_bug.cgi?id=58265
        <rdar://problem/9221468>

        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultKeyboardEventHandler): Handle Backspace.
        (WebCore::EventHandler::defaultSpaceEventHandler): Enabled this on Mac, and added checks for
        other modifiers - no one wants to scroll on Ctrl+Alt+Space and such.
        (WebCore::EventHandler::defaultBackspaceEventHandler): Backspace goes back, Shift-backspace
        goes forward. All browsers do it.
        (WebCore::EventHandler::defaultArrowEventHandler): Assert that this function was called
        for a correct event.
        (WebCore::EventHandler::defaultTabEventHandler): Ditto.

        * page/EventHandler.h: Added defaultBackspaceEventHandler.

2011-04-11  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Dan Bernstein.

        [CG] drawImage with a subimage bleeds pixel data at borders
        https://bugs.webkit.org/show_bug.cgi?id=58267

        Test: fast/canvas/DrawImageSinglePixelStretch.html

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw): Any interpolation quality other than 'none' will graft out the subimage first now.

2011-04-11  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        iframe/compositing propagation should also work for <object> and framesets
        https://bugs.webkit.org/show_bug.cgi?id=39037

        Generalized the code that handles the parenting of composited <iframe> elements
        to include <frame> and <object> elements. This includes forcing the parent
        element to be composited and constructing the layer tree in the child document
        and properly parenting it. Much of the change is giving the function calls more
        generic names (from ...IFrame... to ...Frame...)
        
        Compositing tests that were done in RenderIFrame have been moved to RenderPart
        since this is the highest base class common to all 3 elements.
        
        I also renamed several ...IFrame... functions to
        ...Frame... and changed them so they work on a RenderPart for determining
        if the renderer is composited. One other detail is that <iframe> and 
        <object> never share style since they might be composited. I had to add
        <frame> to that list.

        Tests: compositing/framesets/composited-frame-alignment.html
               compositing/objects/composited-object-alignment.html

        * css/CSSStyleSelector.cpp: Add <frame> to list of element types that should never share style since it might be composited.
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        * page/FrameView.cpp:
        (WebCore::FrameView::hasCompositedContentIncludingDescendants):
        (WebCore::FrameView::setIsOverlapped):
        * rendering/RenderIFrame.cpp: Moved methods to RenderPart
        * rendering/RenderIFrame.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterWidgetResize):
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::RenderLayerBacking::paintingGoesToWindow):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::frameContentsCompositor):
        (WebCore::RenderLayerCompositor::parentFrameContentLayers):
        (WebCore::RenderLayerCompositor::didMoveOnscreen):
        (WebCore::RenderLayerCompositor::allowsIndependentlyCompositedFrames):
        (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingFrame):
        (WebCore::RenderLayerCompositor::enclosingFrameElement):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::requiresCompositingForFrame):
        (WebCore::RenderLayerCompositor::requiresScrollLayer):
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):
        (WebCore::RenderLayerCompositor::attachRootPlatformLayer):
        (WebCore::RenderLayerCompositor::detachRootPlatformLayer):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderPart.cpp: Functions moved from RenderIFrame
        (WebCore::RenderPart::requiresLayer):
        (WebCore::RenderPart::requiresAcceleratedCompositing):
        * rendering/RenderPart.h:

2011-04-11  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Eric Seidel.

        InlineBox::prevOnline and InlineBox::prevOnlineExists() are confusing and should be renamed
        https://bugs.webkit.org/show_bug.cgi?id=57178

        Remove prevOnLineExists() and nextOnLineExists() as they are not used anymore.
        No new tests needed because this is cleanup only.

        * rendering/InlineBox.cpp:
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::setPrevOnLine):

2011-04-11  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Fix for layout regression on marketwatch.com. When I converted TrailingFloatsRootInlineBox over
        to the new overflow model, I messed up the math and passed a bottom value where I should have
        passed a height value. This patch fixes the code to be logically equivalent to the way it
        was prior to my changes.

        Added fast/overflow/trailing-float-linebox.html.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2011-04-11  Adrienne Walker  <enne@google.com>

        Unreviewed, rolling out r83500.
        http://trac.webkit.org/changeset/83500
        https://bugs.webkit.org/show_bug.cgi?id=57113

        Regresses huge-layer-rotated test

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::ContentLayerChromium):
        (WebCore::ContentLayerChromium::~ContentLayerChromium):
        (WebCore::ContentLayerChromium::cleanupResources):
        (WebCore::ContentLayerChromium::requiresClippedUpdateRect):
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        (WebCore::ContentLayerChromium::resizeUploadBuffer):
        (WebCore::ContentLayerChromium::updateTextureIfNeeded):
        (WebCore::ContentLayerChromium::updateTexture):
        (WebCore::ContentLayerChromium::draw):
        (WebCore::ContentLayerChromium::updateCompositorResources):
        (WebCore::ContentLayerChromium::unreserveContentsTexture):
        (WebCore::ContentLayerChromium::bindContentsTexture):
        (WebCore::ContentLayerChromium::dumpLayerProperties):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (WebCore::ContentLayerChromium::drawsContent):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setMaskLayer):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        (WebCore::ImageLayerChromium::updateTextureIfNeeded):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::draw):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawRootLayer):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::paintContentsRecursive):
        (WebCore::LayerRendererChromium::copyOffscreenTextureToDisplay):
        (WebCore::LayerRendererChromium::drawLayer):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::contentLayerProgram):
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::invalidateRect):
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::updateFromPixels):
        (WebCore::LayerTilerChromium::draw):
        * platform/graphics/chromium/LayerTilerChromium.h:
        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::AutoLocker::AutoLocker):
        (WebCore::PlatformCanvas::Painter::Painter):
        * platform/graphics/chromium/PlatformCanvas.h:
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::draw):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp:
        (WebCore::CCCanvasLayerImpl::draw):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.h:
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::draw):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::draw):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp:
        (WebCore::CCPluginLayerImpl::draw):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.h:
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::draw):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:

2011-04-11  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/9267042> Assertion failure on launch in
        LayerChangesFlusher::setHook().

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

        Reviewed by Adam Roben.

        * platform/graphics/ca/win/LayerChangesFlusher.cpp:
        (WebCore::LayerChangesFlusher::setHook):
        MSDN says that the HINSTANCE passed in must be null if the thread ID
        passed is a thread created by this process and the hook procedure is
        within this process.

2011-04-11  MORITA Hajime  <morrita@google.com>

        Unreviewed build fix.

        Changeset 83492 broke Leopard build.
        https://bugs.webkit.org/show_bug.cgi?id=58268

        * editing/Editor.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToWord):

2011-03-25  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Tile content and image layers
        https://bugs.webkit.org/show_bug.cgi?id=57113

        Layers tile by default if any dimension is larger than 512.  Smaller
        layers are contained within a single texture but still use the tiler
        infrastructure so that there's only one code path.

        Remove large layer support from content layers.  Content layers no
        longer own a platform canvas--they own a tiler.  Refactor tiler to
        allow for better separation of update/upload/paint.  Add rect
        parameter to update and draw functions on layers for the layer-space
        rect of interest.  This is necessary to know which tiles need to be
        drawn.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::ContentLayerChromium):
        (WebCore::ContentLayerChromium::~ContentLayerChromium):
        (WebCore::ContentLayerPainter::ContentLayerPainter):
        (WebCore::ContentLayerPainter::paint):
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        (WebCore::ContentLayerChromium::setLayerRenderer):
        (WebCore::ContentLayerChromium::tilingTransform):
        (WebCore::ContentLayerChromium::visibleLayerRect):
        (WebCore::ContentLayerChromium::layerBounds):
        (WebCore::ContentLayerChromium::updateLayerSize):
        (WebCore::ContentLayerChromium::draw):
        (WebCore::ContentLayerChromium::createTilerIfNeeded):
        (WebCore::ContentLayerChromium::updateCompositorResources):
        (WebCore::ContentLayerChromium::setTilingOption):
        (WebCore::ContentLayerChromium::bindContentsTexture):
        (WebCore::ContentLayerChromium::unreserveContentsTexture):
        (WebCore::ContentLayerChromium::setIsMask):
        (WebCore::ContentLayerChromium::dumpLayerProperties):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (WebCore::ContentLayerChromium::drawsContent):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setMaskLayer):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        (WebCore::ImageLayerChromium::updateCompositorResources):
        (WebCore::ImageLayerChromium::layerBounds):
        (WebCore::ImageLayerChromium::tilingTransform):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::invalidateRect):
        (WebCore::LayerChromium::paintContentsIfDirty):
        (WebCore::LayerChromium::setIsMask):
        (WebCore::LayerChromium::draw):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawRootLayer):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::paintContentsRecursive):
        (WebCore::LayerRendererChromium::copyOffscreenTextureToDisplay):
        (WebCore::LayerRendererChromium::drawLayer):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::getSingleTexture):
        (WebCore::LayerTilerChromium::invalidateRect):
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::uploadCanvas):
        (WebCore::LayerTilerChromium::updateFromPixels):
        (WebCore::LayerTilerChromium::draw):
        (WebCore::LayerTilerChromium::unreserveTextures):
        * platform/graphics/chromium/LayerTilerChromium.h:
        (WebCore::LayerTilerChromium::setLayerRenderer):
        (WebCore::LayerTilerChromium::skipsDraw):
        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::AutoLocker::AutoLocker):
        (WebCore::PlatformCanvas::Painter::Painter):
        * platform/graphics/chromium/PlatformCanvas.h:
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::draw):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp:
        (WebCore::CCCanvasLayerImpl::draw):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.h:
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::draw):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::draw):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp:
        (WebCore::CCPluginLayerImpl::draw):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.h:
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::draw):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:

2011-04-11  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Ignore context change callbacks when not on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=58256
        <rdar://problem/9266090>

        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp:
        (WebCore::WKCACFViewLayerTreeHost::contextDidChange): Do nothing when not called
            on the main thread. This should only happen when no changes have actually 
            been committed to the context, eg. when a video frame has been added to an image
            queue, so return without triggering animations etc.

2011-04-11  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Dmitry Titov.

        [chromium] Implement image/png support in DataTransferItems
        https://bugs.webkit.org/show_bug.cgi?id=58106

        This patch implements DataTransferItem::getAsFile() using Blobs. In
        addition, plumbing for image/png has been added so image paste will be
        supported as long as the renderer makes that data available.

        Tests: editing/pasteboard/data-transfer-items-image-png.html

        * dom/DataTransferItem.h:
        * dom/DataTransferItem.idl:
        * platform/chromium/ClipboardMimeTypes.cpp:
        * platform/chromium/ClipboardMimeTypes.h:
        * platform/chromium/DataTransferItemChromium.cpp:
        (WebCore::DataTransferItemChromium::getAsString):
        (WebCore::DataTransferItemChromium::getAsFile):
        * platform/chromium/DataTransferItemChromium.h:
        * platform/chromium/PlatformBridge.h:

2011-04-11  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [Gtk] Implement support for Embedded Objects
        https://bugs.webkit.org/show_bug.cgi?id=52148

        Expose special OBJECT character for replaced elements, implementing
        AtkText and AtkHyperlink when required.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::textIteratorBehaviorForTextRange): New helper function,
        to return the right behavior, depending on the platform, so it
        ensures that object replacement characters get emitted for GTK.
        (WebCore::AccessibilityRenderObject::textUnderElement): Use the
        new helper function textIteratorBehaviorForTextRange.
        (WebCore::AccessibilityRenderObject::stringValue): Ditto.
        (WebCore::AccessibilityRenderObject::indexForVisiblePosition):
        Consider replaced elements when calculating range length in GTK.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (textForRenderer): Ouput the 'object replacement character' for
        replaced objects.
        (getSelectionOffsetsForObject): Consider replaced elements when
        calculating range length in GTK.
        (webkitAccessibleHypertextGetLink): Remove wrong extra check that
        were causing only links to be considered.
        (webkitAccessibleHypertextGetNLinks): Replace wrong 'isLink()'
        check with the right one, by checking that the right ATK interface
        is being implemented by the AtkObject.
        (getInterfaceMaskFromObject): Implement the Hyperlink interface
        both for links and replaced objects.
        (objectAndOffsetUnignored): Consider replaced elements when
        calculating range length in GTK.

        * accessibility/gtk/WebKitAccessibleHyperlink.cpp:
        (getRangeLengthForObject): Ensure spaces are used for replaced
        elements when calling to TextIterator::rangeLength().

        * editing/TextIterator.h: New value in the TextIteratorBehavior
        enumeration (TextIteratorEmitsObjectReplacementCharacters) and new
        private variable to consider that new option internally.
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator): Initialize the new private
        attribute m_emitsObjectReplacementCharacters in constructors.
        (WebCore::TextIterator::handleReplacedElement): Emit the 'object
        replacement character' when m_emitsObjectReplacementCharacters.

2011-04-11  Jia Pu  <jpu@apple.com>

        Reviewed by Adele Peterson.

        Shouldn't carry out autocorrection when start typing a new word
        https://bugs.webkit.org/show_bug.cgi?id=58241
        <rdar://problem/9264736>

        Tests: platform/mac/editing/spelling/autocorrection-at-beginning-of-word-1.html
               platform/mac/editing/spelling/autocorrection-at-beginning-of-word-2.html

        In TypingCommand::markMisspellingsAfterTyping(), we want to call Editor::markMisspellingsAfterTypingToWord()
        only when the typing command is an insertion command, and preceding word contains at least one non-whitespace
        character.

        * editing/Editor.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        * editing/Editor.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::markMisspellingsAfterTyping):

2011-04-11  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        PerformanceTiming returns inconsistent values when timing is null.
        https://bugs.webkit.org/show_bug.cgi?id=58143

        Made PerformanceTiming returned values consistent when there is no timing object.

        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::domainLookupStart):
        (WebCore::PerformanceTiming::domainLookupEnd):
        (WebCore::PerformanceTiming::connectStart):
        (WebCore::PerformanceTiming::connectEnd):
        (WebCore::PerformanceTiming::requestStart):
        (WebCore::PerformanceTiming::responseStart):
        (WebCore::PerformanceTiming::domLoading):

2011-04-05  Stephen White  <senorblanco@chromium.org>

        Fix for jittering when animating a rotated image.
        https://bugs.webkit.org/show_bug.cgi?id=50775

        Make GraphicsContext::roundToDevicePixels a no-op on Chrome/Mac.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels):

2011-04-06  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Ryosuke Niwa.

        Continue experiment with moving caret by word in visual order.
        https://bugs.webkit.org/show_bug.cgi?id=57806

        This is the 2nd patch, which adds implementation when caret is inside box
        (not at boundaries). If the word break is inside the same box and not at the boundaries
        either, the word break will be returned. If need to search the adjacent boxes for word
        breaks, then, only the cases implemented in bug 57336 work.

        * editing/visible_units.cpp:
        (WebCore::leftmostPositionInRTLBoxInLTRBlock):
        (WebCore::rightmostPositionInLTRBoxInRTLBlock):
        (WebCore::lastWordBreakInBox):
        (WebCore::positionIsVisuallyOrderedInBoxInBlockWithDifferentDirectionality):
        (WebCore::nextWordBreakInBoxInsideBlockWithDifferentDirectionality):
        (WebCore::WordBoundaryEntry::WordBoundaryEntry):
        (WebCore::collectWordBreaksInBoxInsideBlockWithSameDirectionality):
        (WebCore::collectWordBreaksInBoxInsideBlockWithDifferntDirectionality):
        (WebCore::greatestValueUnder):
        (WebCore::smallestOffsetAbove):
        (WebCore::positionIsInsideBox):
        (WebCore::positionBeforeNextWord):
        (WebCore::positionAfterPreviousWord):
        (WebCore::leftWordPosition):
        (WebCore::rightWordPosition):

2011-04-11  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Unskip accessibility/input-slider.html and accessibility/media-element.html
        https://bugs.webkit.org/show_bug.cgi?id=58040

        Don't expose objects of role SliderThumbRoles in GTK.

        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::addChildren): Allow the platform
        make a final decision before including children in the hierarchy.
        (WebCore::AccessibilitySliderThumb::accessibilityIsIgnored):
        Implemented by relying on accessibilityPlatformIncludesObject().

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Ignore accessibility objects with role SliderThumbRole.

2011-04-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Divide by zero in calcColumnWidth
        https://bugs.webkit.org/show_bug.cgi?id=58230

        Test: fast/multicol/huge-column-count.html
        
        Make sure we have at least one column, to avoid divide by zero.

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

2011-04-09  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 58198 - Clean up JSValue implementation for JSVALUE64

        JSNumberCell.h has been deprecated.

        * ForwardingHeaders/runtime/JSNumberCell.h: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/c_instance.cpp:

2011-04-11  Dan Bernstein  <mitz@apple.com>

        Build fix.

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

2011-04-11  Antti Koivisto  <antti@apple.com>

        Reviewed by Tony Gentilcore.

        Document source preload scanned repeatedly
        https://bugs.webkit.org/show_bug.cgi?id=58123
        
        Don't clear the preload scanner after execution resumes. This would lose the current
        scanning point and lead to rescanning when the preload scanner would get reconstructed
        due to main parser blocking again.

        Instead clear the scanner only in the specific case of receiving new data while the main
        parser has already reached the end of the current input.

        Also switched to using isWaitingForScripts() instead of m_treeBuilder->isPaused() for consistency.

        The case the clearing in resumeParsingAfterScriptExecution() was added for is covered by 
        http/tests/loading/preload-slow-loading.php.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):

2011-04-11  Dan Bernstein  <mitz@apple.com>

        Build fix.

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

2011-04-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        Assertion failure in CanvasRenderingContext2D::State::fontsNeedUpdate when invalidating the font cache after opening canvas/philip/tests/initial.reset.2dstate.html (occurs on Qt debug test bot)
        https://bugs.webkit.org/show_bug.cgi?id=58229

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State): Added copy constructor, to register the copy with
        the font selector if needed.
        (WebCore::CanvasRenderingContext2D::State::operator=): Added assignment constructor, to handle
        registration with the font selector as needed.
        * html/canvas/CanvasRenderingContext2D.h:

2011-04-11  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] ARIA tables not exposing cells as HTML tables do
        https://bugs.webkit.org/show_bug.cgi?id=57463

        Expose cells for ARIA grids consistently with HTML tables in GTK,
        keeping the same behaviour for the other platforms.

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addChild): Add the row's children
        to the accessibility hierarchy when accessibility objects for rows
        are ignoring accessibility, otherwise add the row.
        (WebCore::AccessibilityARIAGrid::addChildren): Do not check at
        this point whether every child of the table ignores or not
        accessibility, letting addChild() make the proper decision later.

        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::parentTable): Consider that
        rows could be ignoring accessibility, hence the parent could be
        retrieved in the first call to parentObjectUnignored().
        (WebCore::AccessibilityARIAGridCell::rowIndexRange): Ditto.
        (WebCore::AccessibilityARIAGridCell::columnIndexRange): Ditto..

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole): Map ColumnHeader and RowHeader to ATK_ROLE_TABLE_CELL.

2011-04-11  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix make distcheck
        https://bugs.webkit.org/show_bug.cgi?id=58224

        Removed a file that is no longer in the source tree.

        * GNUmakefile.list.am:

2011-04-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Martin Robinson.

        REGRESSION(r83397): Most GTK media controls are hidden when no valid source is specified
        https://bugs.webkit.org/show_bug.cgi?id=58204

        Covered by existing tests.

        * platform/gtk/RenderThemeGtk.h:
        (WebCore::RenderThemeGtk::hasOwnDisabledStateHandlingFor): Let GTK handle
            the the state of media controls.

2011-04-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Remove obsolete comment, which was mistakenly landed in r83397.

        Though potentially a work of art, the comment lost its functional meaning a long time ago.

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::create): Removed comment.

2011-04-05  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        IndexedDB: Introduce skeleton for LevelDB backend
        https://bugs.webkit.org/show_bug.cgi?id=57827

        No new tests: no new functionality (yet).

        * WebCore.gyp/WebCore.gyp:
            Add dependency on leveldb when ENABLE_LEVELDB=1 in feature_defines.
        * WebCore.gypi:
            Add new files.
        * storage/IDBBackingStore.h:
        (WebCore::IDBBackingStore::ObjectStoreRecordIdentifier::~ObjectStoreRecordIdentifier):
            Introduce abstract type ObjectStoreRecordIdentifier. The SQLite
            backend uses integers to refer to a specific row in a table, but
            the LevelDB backend will use something else.
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::createObjectStoreInternal):
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStoreInternal):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
            Change functions to pass along the database id for operations that
            concern object stores. We want to be able to group object stores
            ids per database.
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
            Decide which backend to use based on the backingStoreType
            parameter.
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl):
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        (WebCore::IDBIndexBackendImpl::getInternal):
        (WebCore::IDBIndexBackendImpl::addingKeyAllowed):
        * storage/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::create):
            Pass database and object store id to backend functions concerning
            indexes.
        * storage/IDBLevelDBBackingStore.cpp: Added.
        (WebCore::IDBLevelDBBackingStore::IDBLevelDBBackingStore):
        (WebCore::IDBLevelDBBackingStore::~IDBLevelDBBackingStore):
        (WebCore::IDBLevelDBBackingStore::open):
        (WebCore::IDBLevelDBBackingStore::extractIDBDatabaseMetaData):
        (WebCore::IDBLevelDBBackingStore::setIDBDatabaseMetaData):
        (WebCore::IDBLevelDBBackingStore::getObjectStores):
        (WebCore::IDBLevelDBBackingStore::createObjectStore):
        (WebCore::IDBLevelDBBackingStore::deleteObjectStore):
        (WebCore::IDBLevelDBBackingStore::getObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::clearObjectStore):
        (WebCore::IDBLevelDBBackingStore::deleteObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::nextAutoIncrementNumber):
        (WebCore::IDBLevelDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBLevelDBBackingStore::forEachObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::getIndexes):
        (WebCore::IDBLevelDBBackingStore::createIndex):
        (WebCore::IDBLevelDBBackingStore::deleteIndex):
        (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord):
        (WebCore::IDBLevelDBBackingStore::deleteIndexDataForRecord):
        (WebCore::IDBLevelDBBackingStore::getObjectViaIndex):
        (WebCore::IDBLevelDBBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBLevelDBBackingStore::keyExistsInIndex):
        (WebCore::IDBLevelDBBackingStore::openObjectStoreCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexKeyCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexCursor):
        (WebCore::IDBLevelDBBackingStore::createTransaction):
        * storage/IDBLevelDBBackingStore.h: Added.
            Add an empty implementation of the LevelDB backend.
        * storage/IDBObjectStoreBackendImpl.cpp:
            Keep track of database id, use the new RecordIdentifier.
        (WebCore::IDBObjectStoreBackendImpl::IDBObjectStoreBackendImpl):
        (WebCore::IDBObjectStoreBackendImpl::getInternal):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        (WebCore::IDBObjectStoreBackendImpl::clearInternal):
        (WebCore::populateIndex):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::createIndexInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndexInternal):
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
        (WebCore::IDBObjectStoreBackendImpl::loadIndexes):
        (WebCore::IDBObjectStoreBackendImpl::genAutoIncrementKey):
        * storage/IDBObjectStoreBackendImpl.h:
        (WebCore::IDBObjectStoreBackendImpl::create):
        (WebCore::IDBObjectStoreBackendImpl::databaseId):
        * storage/IDBSQLiteBackingStore.cpp:
        (WebCore::IDBSQLiteBackingStore::open):
        (WebCore::IDBSQLiteBackingStore::createObjectStore):
        (WebCore::IDBSQLiteBackingStore::deleteObjectStore):
        (WebCore::IDBSQLiteBackingStore::getObjectStoreRecord):
        (WebCore::IDBSQLiteBackingStore::putObjectStoreRecord):
        (WebCore::IDBSQLiteBackingStore::clearObjectStore):
        (WebCore::IDBSQLiteBackingStore::deleteObjectStoreRecord):
        (WebCore::IDBSQLiteBackingStore::nextAutoIncrementNumber):
        (WebCore::IDBSQLiteBackingStore::keyExistsInObjectStore):
        (WebCore::IDBSQLiteBackingStore::forEachObjectStoreRecord):
        (WebCore::IDBSQLiteBackingStore::getIndexes):
        (WebCore::IDBSQLiteBackingStore::createIndex):
        (WebCore::IDBSQLiteBackingStore::deleteIndex):
        (WebCore::IDBSQLiteBackingStore::putIndexDataForRecord):
        (WebCore::IDBSQLiteBackingStore::deleteIndexDataForRecord):
        (WebCore::IDBSQLiteBackingStore::getObjectViaIndex):
        (WebCore::IDBSQLiteBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBSQLiteBackingStore::keyExistsInIndex):
        (WebCore::IDBSQLiteBackingStore::openObjectStoreCursor):
        (WebCore::IDBSQLiteBackingStore::openIndexKeyCursor):
        (WebCore::IDBSQLiteBackingStore::openIndexCursor):
        * storage/IDBSQLiteBackingStore.h:

2011-04-11  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Duplicate CSS properties are reported for non-lowercase property names in the Styles sidebar
        https://bugs.webkit.org/show_bug.cgi?id=58226

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

2011-04-07  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: get rid of source frame delegates for resources panel.
        https://bugs.webkit.org/show_bug.cgi?id=58041

        Use TextViewer configured with a domain-specific delegate to show/edit resource contents in resources panel.

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.createResourceView):
        (WebInspector.ResourceView.resourceViewTypeMatchesResource):
        (WebInspector.ResourceSourceFrame):
        (WebInspector.ResourceSourceFrame.prototype.get resource):
        (WebInspector.ResourceSourceFrame.prototype.contentEditable):
        (WebInspector.ResourceSourceFrame.prototype._requestContent):
        (WebInspector.CSSSourceFrame):
        (WebInspector.CSSSourceFrame.prototype.contentEditable):
        (WebInspector.CSSSourceFrame.prototype._editContent):
        (WebInspector.CSSSourceFrame.prototype._editContent.handleInfos):
        (WebInspector.CSSSourceFrame.prototype._saveStyleSheet):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._ensureContentLoaded):
        (WebInspector.SourceFrame.prototype._requestContent):
        (WebInspector.SourceFrame.prototype._handleSave):
        (WebInspector.SourceFrame.prototype._editContent):

2011-04-11  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Regression : r83051 Oxygen's lineedits are not rendered properly
        https://bugs.webkit.org/show_bug.cgi?id=58076

        State_Sunken is more generic than pressed. It is used by items such as frames or
        line edits because they are "sunken" frames (e.g. QLineEdit). It can be required
        by some style like Oxygen. Therefore only in the mobile theme we check if the object
        is pressed.

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

2011-04-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add support for optional output parameters.
        https://bugs.webkit.org/show_bug.cgi?id=58207

        Output parameters such as "redirectResponse" are optional, but
        do not allow specifying them as such.

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.json:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceResponse):
        (WebCore::buildObjectForCachedResource):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithResponse):
        * inspector/generate-inspector-idl:

2011-04-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor / document call frames in debugger domain.
        https://bugs.webkit.org/show_bug.cgi?id=58187

        Note that we are not special casing with(element) and with(document) anymore
        and do not tell user that it is "Event target" and "Event document". Strictly speaking,
        we should not have done it for with(element) not necessarily being related to an event.

        * English.lproj/localizedStrings.js:
        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.json:
        * inspector/front-end/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update):

2011-04-10  ChangSeok Oh  <shivamidow@gmail.com>

        Reviewed by Eric Seidel.

        Make correspondence of file name related with event to other port.
        https://bugs.webkit.org/show_bug.cgi?id=57416

        Some file names are changed to make correspondence naming rule.
        Keyboard, mouse and wheel event file names for GTK port have been different from other ports.
        This has made user hard to find a specific file related with event for GTK port. 

        No test required. This patch just changes some file names.

        * GNUmakefile.list.am:
        * platform/gtk/KeyEventGtk.cpp: Removed.
        * platform/gtk/MouseEventGtk.cpp: Removed.
        * platform/gtk/PlatformKeyboardEventGtk.cpp: Added.
        * platform/gtk/PlatformMouseEventGtk.cpp: Added.
        * platform/gtk/PlatformWheelEventGtk.cpp: Added.
        * platform/gtk/WheelEventGtk.cpp: Removed.

2011-04-10  Simon Fraser  <simon.fraser@apple.com>

        Revert the FloatRect.cpp part of r83422, since
        clampToInteger() is broken for some inputs. I filed
        https://bugs.webkit.org/show_bug.cgi?id=58216

        * platform/graphics/FloatRect.cpp:
        (WebCore::safeFloatToInt):
        (WebCore::enclosingIntRect):

2011-04-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Maciej Stachowiak.

        Car model dropdowns at audiusa.com lay out incorrectly with compositing enabled
        https://bugs.webkit.org/show_bug.cgi?id=56660
        
        When overflow on an element changes, we need to inform compositing
        layers which create and position an "ancestor clipping" layer based
        on that overflow. Do this by triggering a rebuild of compositing layers
        when overflow changes on a layer whose stacking context has compositing
        descendants. (We can't just check whether the layer itself has compositing
        descendants, because overflow follows the render tree, but compositing
        follows the z-order tree.)

        Test: compositing/geometry/ancestor-overflow-change.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2011-04-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Ariya Hidayat.

        Allow ShadowBlur to re-use the last buffer if it already contains the correct shadow
        https://bugs.webkit.org/show_bug.cgi?id=58161
        
        ShadowBlur already has a singleton scratch buffer that is re-used
        between shadows. Enhance use of this scratch buffer to avoid drawing
        and blurring the shadow if the results will match what is already
        in the buffer.
        
        Cleaned up ShadowBlur code to remove beginShadowLayer() and endShadowLayer(),
        which ended up with little reusable code after adding the re-use logic.

        * platform/graphics/FloatRect.cpp:
        (WebCore::enclosingIntRect): Replace safeFloatToInt() with the existing
        clampToInteger() from MathExtras.h
        
        * platform/graphics/FloatSize.h:
        (WebCore::expandedIntSize): New method to safely ceil() the size.
        
        * platform/graphics/RoundedIntRect.h:
        Add operator== for Radii and RoundedIntRect.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::ScratchBuffer):
        (WebCore::ScratchBuffer::setLastShadowValues):
        (WebCore::ScratchBuffer::setLastInsetShadowValues):
        (WebCore::ScratchBuffer::matchesLastShadow):
        (WebCore::ScratchBuffer::matchesLastInsetShadow):
        (WebCore::ScratchBuffer::clearScratchBuffer):
        Have the scratch buffer remember what shadow parameters were used
        to render the buffer contents.
        
        (WebCore::ShadowBlur::drawShadowBuffer):
        Renamed from endShadowLayer(), and only contains the drawing
        logic now.
        
        (WebCore::ShadowBlur::drawRectShadow):
        Promote some code from beginShadowLayer().
        
        (WebCore::ShadowBlur::drawInsetShadow):
        Promote some code from beginShadowLayer().

        (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        These methods now check to see if the buffer already matches
        their required parameters, and avoid work if it does.
        
        (WebCore::ShadowBlur::blurShadowBuffer):
        Factored some code into this new method.
        
        (WebCore::ShadowBlur::blurAndColorShadowBuffer):
        Minor refactoring.

        * platform/graphics/ShadowBlur.h:

2011-04-10  Geoffrey Garen  <ggaren@apple.com>

        Build fix: Updated for file move.

        * bindings/js/GCController.cpp:
        * bindings/js/ScriptGCEvent.cpp:

2011-04-10  Geoffrey Garen  <ggaren@apple.com>

        Rubber-stamped by Beth Dakin.

        Moved Heap.h and Heap.cpp to the heap folder, because anything less 
        would be uncivilized.

        * ForwardingHeaders/heap/Heap.h: Copied from WebCore/ForwardingHeaders/runtime/Heap.h.
        * ForwardingHeaders/runtime/Heap.h: Removed.

2011-04-10  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Simon Fraser.

        Rename CSSStyleApplyProperty::inherit,initial,value applyInheritValue,applyInitialValue,applyValue
        https://bugs.webkit.org/show_bug.cgi?id=58212

        No new tests - function renaming only / no functionality changes.

        * css/CSSStyleApplyProperty.cpp:
        Rename all instances of inherit, initial and value.
        * css/CSSStyleApplyProperty.h:
        Rename all instances of inherit, initial and value.
        * css/CSSStyleSelector.cpp:
        Rename all instances of inherit, initial and value.

2011-04-10  Mike Lawther  <mikelawther@chromium.org>

        Reviewed by Ojan Vafai.

        flex/bison tokens and grammar for CSS calc
        https://bugs.webkit.org/show_bug.cgi?id=54412

        Tests: css3/calc/calc-errors.html
               css3/calc/lexer-regression-57581-2.html
               css3/calc/lexer-regression-57581-3.html
               css3/calc/lexer-regression-57581.html
               css3/calc/minmax-errors.html
               css3/calc/nested-rounded-corners.html
               css3/calc/simple-calcs.html
               css3/calc/simple-minmax.html

        * css/CSSGrammar.y:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValueList::insertValueAt):
        (WebCore::CSSParserValueList::extend):
        * css/CSSParserValues.h:
        * css/tokenizer.flex:

2011-04-10  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ryosuke Niwa.

        Change EventHandler::updateSelectionForMouseDrag to take a HitTestResult only.
        https://bugs.webkit.org/show_bug.cgi?id=57923

        Change EventHandler::updateSelectionForMouseDrag to take a HitTestResult
        rather than a Node* and an IntPoint&, as the selection may actually not
        extend into the Node found by the HitTest.

        No new tests. Refactoring only.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        * page/EventHandler.h:

2011-04-10  Kent Tamura  <tkent@chromium.org>

        Unreviewed, rolling out r83353.
        http://trac.webkit.org/changeset/83353
        https://bugs.webkit.org/show_bug.cgi?id=58106

        The new test doesn't pass on all Chromium platforms.

        * dom/DataTransferItem.h:
        * dom/DataTransferItem.idl:
        * platform/chromium/ClipboardMimeTypes.cpp:
        * platform/chromium/ClipboardMimeTypes.h:
        * platform/chromium/DataTransferItemChromium.cpp:
        (WebCore::DataTransferItemChromium::getAsString):
        * platform/chromium/DataTransferItemChromium.h:
        * platform/chromium/PlatformBridge.h:

2011-04-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Eric Carlson.

        [EFL] Add seek forward / backward buttons to MediaControl UI.
        https://bugs.webkit.org/show_bug.cgi?id=56810

        Add seek forward / backward buttons to media control. And, change formType name
        for media control.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::edjeGroupFromFormType):
        (WebCore::RenderThemeEfl::emitMediaButtonSignal):
        (WebCore::RenderThemeEfl::paintMediaMuteButton):
        (WebCore::RenderThemeEfl::paintMediaPlayButton):
        (WebCore::RenderThemeEfl::paintMediaSeekBackButton):
        (WebCore::RenderThemeEfl::paintMediaSeekForwardButton):
        * platform/efl/RenderThemeEfl.h:

2011-04-10  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Eric Seidel.

        Remove unused function declaration in PlatformContextSkia.h.
        https://bugs.webkit.org/show_bug.cgi?id=55983

        * platform/graphics/skia/PlatformContextSkia.h:

2011-04-10  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix for !ENABLE(XSLT) after r82562.

        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doEnd):

2011-04-10  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix for !ENABLE(XSLT) after r82562.

        * xml/XMLTreeViewer.cpp: Readded #if ENABLE(XSLT).

2011-04-10  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Anders Carlsson.

        REGRESSION(r83256): Text-decoration bleeds into shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=58205

        Now that the shadow root is a never-styled element, we need to walk to
        parent to find out if we're inside of a shadow DOM subtree.

        Test: media/controls-styling.html

        * css/CSSStyleSelector.cpp:
        (WebCore::isAtShadowBoundary): Added helper function.
        (WebCore::CSSStyleSelector::adjustRenderStyle): Changed to use the helper.

2011-04-07  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        [Meta] Convert HTMLMediaElement to use the new shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=53020

        This conversion is non-trivial, for several reasons:

        1) Since HTMLMediaElement now hosts the shadow DOM for controls, hiding
        and showing controls does not result in destroying and re-creating the
        shadow DOM tree. Instead, the tree is created as needed and shown/hidden
        using inline styles.
        
        2) Instead of detaching/attaching on each style change, the control parts
        are now using a set of higher fidelity callbacks that notify MediaControls
        about changes to which it should react. Each reaction results in hiding,
        showing, or changing the state of the control parts using inline styles
        and DOM APIs.

        3) Hiding and showing controls is accomplished using inline styles, rather
        than wiring rendererIsNeeded, because renderers are now re-created less
        frequently.

        4) Instead of constantly querying RenderTheme about visibility of a particular
        control part, we let the theme determine which parts are supported and
        which parts are visible in certain conditions.

        5) Custom hit-testing, event forwarding, and style updates are completely
        removed, since they are now unnecessary.

        6) Fading controls in/out is now done as CSS animation, since shadow DOM
        supports it.

        Test: manual-tests/media-controls.html

2011-04-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/9215280> Detached canvas draws with incorrect font

        Test: fast/canvas/font-update.html

        The existing mechanism for updating the font in a canvas 2D context was lacking in at least
        two ways: it neglected to update fonts in all but the topmost state in the stack, and since it
        was based on HTMLCanvasElemen's attach() and recalcStyle(), it did not work when the element
        was not attached.

        This change takes the responsibility for font updates away from the canvas element and gives it
        to the canvas context and its graphics state.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::registerForInvalidationCallbacks): Added. Adds to the set of registered
        font selector clients.
        (WebCore::CSSFontSelector::unregisterForInvalidationCallbacks): Added. Removes from the set of
        registered font selector clients.
        (WebCore::CSSFontSelector::dispatchInvalidationCallbacks): Calls fontsNeedUpdate() on all registered
        clients and forces a style recalc on the document.
        (WebCore::CSSFontSelector::fontLoaded): Changed to call dispatchInvalidationCallbacks().
        (WebCore::CSSFontSelector::fontCacheInvalidated): Ditto.
        * css/CSSFontSelector.h:
        * html/HTMLCanvasElement.cpp: Removed overrides of attach() and recalcStyle().
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::~State): Added. Unregisters with the font selector.
        (WebCore::CanvasRenderingContext2D::State::fontsNeedUpdate): Added. Called by the font selector
        when its fonts need to be updated. Updates the font.
        (WebCore::CanvasRenderingContext2D::setFont): Registers the state with the font selector.
        * html/canvas/CanvasRenderingContext2D.h:
        * platform/graphics/FontSelector.h:
        (WebCore::FontSelectorClient::~FontSelectorClient):

2011-04-09  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Try recommitting some things svn left out of my last commit.

        * bridge/qt/qt_runtime.h:

2011-04-09  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Try recommitting some things svn left out of my last commit.

        * ForwardingHeaders/collector: Removed.
        * ForwardingHeaders/collector/handles: Removed.
        * ForwardingHeaders/collector/handles/Global.h: Removed.

2011-04-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Ojan Vafai.

        Implement proper handling of mouseover/mouseout events in regard to shadow DOM boundaries.
        https://bugs.webkit.org/show_bug.cgi?id=55515

        This implements XBL 2.0's specified handling of mouseover/mouseout events:
        http://dev.w3.org/2006/xbl2/Overview.html#the-mouseover-and-mouseout-events

        To do this, we:
        1) calculate lowest common ancestor between relatedTarget and target, and
           the nearest boundaries around them: the outer (common) boundary, and the
           inner (specific to relatedTarget) boundary. Then, we
        2) ensure that events only propagate up to the common boundary (or
           all the way if boundary is not found), while
        3) updating relatedTarget be the inner boundary.

        We also detect the most common case when no common boundary could exist
        and provide a fast path to short-circuit most of the boundary detection
        logic.

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

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::adjustToShadowBoundaries): Added a helper to determine lowest
            common ancestor, the boundaries around it, and compute adjustments
            to relatedTarget and event target ancestor chain.
        (WebCore::ancestorsCrossShadowBoundaries): Added.
        (WebCore::EventDispatcher::adjustRelatedTarget): Changed to calculate
            inner/outer shadow DOM boundaries and adjust ancestors chain accordingly.
        (WebCore::EventDispatcher::EventDispatcher): Added flag initializer
        (WebCore::EventDispatcher::ensureEventAncestors): Renamed from getEventAncestors,
            converted to use initialization flag, rather than testing for empty.
        * dom/EventDispatcher.h: Adjusted decls.
        * dom/MouseEvent.cpp:
        (WebCore::MouseEventDispatchMediator::dispatchEvent): Changed to send event
            to adjustRelatedTarget.

2011-04-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        A few heap-related renames and file moves.
        
        WeakGCPtr<T> => Weak<T>
        Global<T> => Strong<T>
        collector/ => heap/
        collector/* => heap/*
        runtime/WeakGCPtr.h => heap/Weak.h
        
        (Eventually, even more files should move into the heap directory. Like
        Heap.h and Heap.cpp, for example.)

        * CMakeLists.txt:
        * ForwardingHeaders/collector: Removed.
        * ForwardingHeaders/heap: Copied from ForwardingHeaders/collector.
        * ForwardingHeaders/heap/Strong.h: Copied from ForwardingHeaders/collector/handles/Global.h.
        * ForwardingHeaders/heap/Weak.h: Copied from ForwardingHeaders/runtime/WeakGCPtr.h.
        * ForwardingHeaders/runtime/WeakGCPtr.h: Removed.
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/copyForwardingHeaders.cmd:
        * bindings/js/JSCallbackData.h:
        * bindings/js/JSCustomVoidCallback.h:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSDataGridDataSource.h:
        * bindings/js/JSEventListener.h:
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        * bindings/js/ScriptCachedFrameData.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::createWindowShell):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptObject.h:
        * bindings/js/ScriptState.h:
        * bindings/js/ScriptValue.cpp:
        * bindings/js/ScriptValue.h:
        * bindings/js/ScriptWrappable.h:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):
        * bindings/js/WorkerScriptController.h:
        * bridge/jsc/BridgeJSC.h:
        * bridge/qt/qt_runtime.h:
        * bridge/runtime_root.h:
        * xml/XMLHttpRequest.cpp:

2011-04-09  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Don't link against fontconfig or X11 if embedded
        https://bugs.webkit.org/show_bug.cgi?id=58104

        No functional change so no new tests.

        * WebCore.pri: qpa=>embedded should be done very early so all cases of embedded are uniform.

2011-04-09  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed trivial fix after r83344.

        * WebCore.pro: Update HEADERS list.

2011-04-09  Jon Lee  <jonlee@apple.com>

        Reviewed by Beth Dakin.

        Overlay scrollbar flashes in scrollable <textarea> with each keystroke (58180)
        https://bugs.webkit.org/show_bug.cgi?id=58180
        <rdar://problem/9047984>

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::immediateScrollToPoint): Check that there is a change before submitting
        (WebCore::ScrollAnimatorMac::immediateScrollByDeltaX):
        (WebCore::ScrollAnimatorMac::immediateScrollByDeltaY):

2011-04-09  Sreeram Ramachandran  <sreeram@google.com>

        Reviewed by Ryosuke Niwa.

        Gather data on modal dialogs shown during unload events
        https://bugs.webkit.org/show_bug.cgi?id=58115

        Add a new method to the ChromeClient API to allow clients to receive
        notifications of modal dialogs dispatched during page dismissal events.
        The new method has a default empty definition; only chromium overrides
        it to keep track of histograms.

        No tests because this is a no-op for all ports except chromium (and it's
        not clear how to test chromium histograms from webkit).

        * page/Chrome.cpp:
        (WebCore::isDuringPageDismissal):
        (WebCore::willRunModalDialog):
        (WebCore::Chrome::runJavaScriptAlert):
        (WebCore::Chrome::runJavaScriptConfirm):
        (WebCore::Chrome::runJavaScriptPrompt):
        (WebCore::Chrome::willRunModalHTMLDialog):
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::willRunModalDialogDuringPageDismissal):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::showModalDialog):

2011-04-08  David Humphrey  <david.humphrey@senecac.on.ca>

        Reviewed by Eric Carlson.

        Fix call order of media element muted and play(), such that setting muted before play() works.
        https://bugs.webkit.org/show_bug.cgi?id=57673
        https://code.google.com/p/chromium/issues/detail?id=70777

        Manual test added: manual-tests/media-muted.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updatePlayState):
        * manual-tests/media-muted.html: Added.

2011-04-08  Nat Duca  <nduca@chromium.org>

        Reviewed by David Levin.

        [chromium] Fix windows assertion on ~CCThread
        https://bugs.webkit.org/show_bug.cgi?id=58153

        Because ~CCThread uses waitForThreadCompletion,
        calling detachThread is not necessary.

        * platform/graphics/chromium/cc/CCThread.cpp:
        (WebCore::CCThread::runLoop):

2011-04-08  Jian Li  <jianli@chromium.org>

        Unreviewed, rolling out r83348.
        http://trac.webkit.org/changeset/83348
        https://bugs.webkit.org/show_bug.cgi?id=49508

        Breaks layout tests in QT, Win7 and Chromium.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):

2011-04-08  MORITA Hajime  <morrita@google.com>

        Reviewed by Simon Fraser.

        Negative spread should not make a sharp corner rounded
        https://bugs.webkit.org/show_bug.cgi?id=58162

        Handled inset shadow path for rounded and non-rounded rect
        differently as normal shadow path is doing.
        
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow):

2011-04-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Martin Robinson.

        REGRESSION (r77034-r77220): CSS box-shadow no longer renders on PowerPC
        https://bugs.webkit.org/show_bug.cgi?id=55180

        The endianness #ifdef in ShadowBlur was unnecessary and harmful. The
        data we get back from ImageBuffer::getImageData() do not vary in
        endianness.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::blurLayerImage):

2011-04-08  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Dimitri Glazkov.

        IFrame is getting the focus even though it is hidden
        https://bugs.webkit.org/show_bug.cgi?id=55861

        Test: fast/dom/hidden-iframe-no-focus.html

        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::isKeyboardFocusable):
        * html/HTMLFrameOwnerElement.h:

2011-04-08  Jeff Timanus  <twiz@chromium.org>

        Reviewed by Kenneth Russell.

        Fall back to software rendering for Canvas2D when requesting a DrawingBuffer larger than supported by the GL environment.
        https://bugs.webkit.org/show_bug.cgi?id=57768

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        (WebCore::CanvasRenderingContext2D::reset):
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::reset):
        * platform/graphics/gpu/DrawingBuffer.h:

2011-04-08  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Dmitry Titov.

        [chromium] Implement image/png support in DataTransferItems
        https://bugs.webkit.org/show_bug.cgi?id=58106

        This patch implements DataTransferItem::getAsFile() using Blobs. In
        addition, plumbing for image/png has been added so image paste will be
        supported as long as the renderer makes that data available.

        Tests: editing/pasteboard/data-transfer-items-image-png.html

        * dom/DataTransferItem.h:
        * dom/DataTransferItem.idl:
        * platform/chromium/ClipboardMimeTypes.cpp:
        * platform/chromium/ClipboardMimeTypes.h:
        * platform/chromium/DataTransferItemChromium.cpp:
        (WebCore::DataTransferItemChromium::getAsString):
        (WebCore::DataTransferItemChromium::getAsFile):
        * platform/chromium/DataTransferItemChromium.h:
        * platform/chromium/PlatformBridge.h:

2011-04-08 MORITA Hajime  <morrita@google.com>

        Unreviewed windows build fix.
        
        * editing/SpellingCorrectionController.h:
        (WebCore::SpellingCorrectionController::UNLESS_ENABLED):

2011-04-08  Enrica Casucci  <enrica@apple.com>

        Reviewed by Maciej Stachowiak.

        Improve lifetime management of nodes in ReplaceNodeWithSpanCommand.
        https://bugs.webkit.org/show_bug.cgi?id=57595
        <rdar://problem/9222122>

        Test: editing/style/bold-with-dom-changes.html

        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::swapInNodePreservingAttributesAndChildren):

2011-04-07  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 58060 - Prepare access to TreeScope from Node, using NodeRareData
        https://bugs.webkit.org/show_bug.cgi?id=58060

        Add a TreeScope pointer to NodeRareData to allow direct access to the containing tree scope.
        However, in case the containing scope is the document, this is not set, and the
        document pointer within Node is used instead.

        In an object derived from TreeScope (currently Document), the tree scope pointer
        points to itself. Such objects also contain a parent tree scope pointer that
        points to the containing scope. For Document, this is 0.

        Add new functions setTreeScope[Recursively] that replace setDocument[Recursively]
        in public usage. setDocument[Recursively] are now only used internally and are
        thererfore protected.

        No new tests. (no new functionality)

        * dom/ContainerNode.cpp: change DOM manipulation methods to update scope of inserted nodes
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::setDocType): Ditto
        (WebCore::Document::adoptNode): Ditto
        * dom/Document.h:
        * dom/Node.cpp:
        (WebCore::Node::treeScope): use NodeRareData to check if a non-Document scope is set
        (WebCore::Node::setTreeScope): update NodeRareData depending on whether scope is a document
        (WebCore::Node::setTreeScopeRecursively):
        (WebCore::Node::setDocumentRecursively):
        * dom/Node.h:
        * dom/NodeRareData.h: add scope pointer
        (WebCore::NodeRareData::NodeRareData):
        (WebCore::NodeRareData::treeScope):
        (WebCore::NodeRareData::setTreeScope):
        * dom/TreeScope.cpp: add parentTreeScope pointer
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::setParentTreeScope):
        * dom/TreeScope.h:
        (WebCore::TreeScope::parentTreeScope):

2011-04-08  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Hyatt.

        Local caret rectangle calculation should be relative to its containing block.
        https://bugs.webkit.org/show_bug.cgi?id=49508.

        InlineBox and caret rectangle are positioned relative to its containing block.
        So its left and right edge value should be relative to its containing block as well. 

        Test: fast/forms/cursor-at-editable-content-boundary.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):

2011-04-08  MORITA Hajime  <morrita@google.com>

        Unreviewed build fix.

        * editing/Editor.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToWord):

2011-04-08  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=57971
        
        Rework visited/unvisited links for before/after content. Propagate the bits earlier so that we don't lose
        them when we throw away the visited style. Don't throw away the visited link style for pseudo elements
        either, so that the styles are consistent.

        Added fast/history/visited-generated-content-test.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):

2011-04-06  MORITA Hajime  <morrita@google.com>

        Reviewed by Darin Adler.

        [Refactoring] Auto correction panel should be handled by its own class.
        https://bugs.webkit.org/show_bug.cgi?id=55571

        Extracted code inside SUPPORT_AUTOCORRECTION_PANEL into
        SpellingCorrectionController class.
        This change also remove some SUPPORT_AUTOCORRECTION_PANEL guard if
        code paths inside the never reached without autocorrection support.
        Removing guards reduces unintentional build breakage.

        No new tests, no behavior chagne.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/CorrectionPanelInfo.h: Removed.
        * editing/EditingAllInOne.cpp:
        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection):
        (WebCore::Editor::respondToChangedContents):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::Editor):
        (WebCore::Editor::~Editor):
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::insertLineBreak):
        (WebCore::Editor::insertParagraphSeparator):
        (WebCore::Editor::cut):
        (WebCore::Editor::paste):
        (WebCore::Editor::pasteAsPlainText):
        (WebCore::Editor::isAutomaticSpellingCorrectionEnabled):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::changeBackToReplacedString):
        (WebCore::Editor::unappliedSpellCorrection):
        (WebCore::Editor::updateMarkersForWordsAffectedByEditing):
        (WebCore::Editor::startCorrectionPanelTimer):
        (WebCore::Editor::handleCorrectionPanelResult):
        (WebCore::Editor::dismissCorrectionPanelAsIgnored):
        * editing/Editor.h:
        * editing/SpellingCorrectionCommand.cpp:
        * editing/SpellingCorrectionController.cpp: Added.
        (WebCore::markerTypesForAutocorrection):
        (WebCore::markerTypesForReplacement):
        (WebCore::markersHaveIdenticalDescription):
        (WebCore::SpellingCorrectionController::SpellingCorrectionController):
        (WebCore::SpellingCorrectionController::~SpellingCorrectionController):
        (WebCore::SpellingCorrectionController::startCorrectionPanelTimer):
        (WebCore::SpellingCorrectionController::stopCorrectionPanelTimer):
        (WebCore::SpellingCorrectionController::stopPendingCorrection):
        (WebCore::SpellingCorrectionController::applyPendingCorrection):
        (WebCore::SpellingCorrectionController::hasPendingCorrection):
        (WebCore::SpellingCorrectionController::isSpellingMarkerAllowed):
        (WebCore::SpellingCorrectionController::show):
        (WebCore::SpellingCorrectionController::handleCancelOperation):
        (WebCore::SpellingCorrectionController::dismiss):
        (WebCore::SpellingCorrectionController::dismissSoon):
        (WebCore::SpellingCorrectionController::applyCorrectionPanelInfo):
        (WebCore::SpellingCorrectionController::applyAutocorrectionBeforeTypingIfAppropriate):
        (WebCore::SpellingCorrectionController::respondToUnappliedSpellCorrection):
        (WebCore::SpellingCorrectionController::correctionPanelTimerFired):
        (WebCore::SpellingCorrectionController::handleCorrectionPanelResult):
        (WebCore::SpellingCorrectionController::isAutomaticSpellingCorrectionEnabled):
        (WebCore::SpellingCorrectionController::windowRectForRange):
        (WebCore::SpellingCorrectionController::respondToChangedSelection):
        (WebCore::SpellingCorrectionController::respondToAppliedEditing):
        (WebCore::SpellingCorrectionController::client):
        (WebCore::SpellingCorrectionController::textChecker):
        (WebCore::SpellingCorrectionController::recordAutocorrectionResponseReversed):
        (WebCore::SpellingCorrectionController::markReversed):
        (WebCore::SpellingCorrectionController::markCorrection):
        (WebCore::SpellingCorrectionController::recordSpellcheckerResponseForModifiedCorrection):
        * editing/SpellingCorrectionController.h: Added.
        (WebCore::SpellingCorrectionController::UNLESS_ENABLED):
        (WebCore::SpellingCorrectionController::shouldStartTimeFor):
        (WebCore::SpellingCorrectionController::shouldRemoveMarkersUponEditing):        
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::markMisspellingsAfterTyping):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * editing/htmlediting.h:
        (WebCore::isAmbiguousBoundaryCharacter):
        * page/EditorClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::setPageAndTextZoomFactors):

2011-04-08  Alpha Lam  <hclam@chromium.org>

        Unreviewed, rolling out r83335.
        http://trac.webkit.org/changeset/83335
        https://bugs.webkit.org/show_bug.cgi?id=53556

        GTK and QT bots are broken

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * features.pri:
        * html/HTMLAttributeNames.in:
        * html/HTMLTagNames.in:
        * html/HTMLTrackElement.cpp: Removed.
        * html/HTMLTrackElement.h: Removed.
        * html/HTMLTrackElement.idl: Removed.

2011-04-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=58155 and part of <rdar://problem/9251767>
        BitmapImage::getFirstCGImageRefOfSize fails if the frameCount hasn't been initialized from the image source.

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::getFirstCGImageRefOfSize): Call frameCount() instead of accessing m_frames.size() to
          make sure the frames are properly tallied first.

2011-04-08  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Dragging and dropping an image in edit mode does not work
        https://bugs.webkit.org/show_bug.cgi?id=19385

        When adding an image to the clipboard, we should also include the HTML code of that image so
        it can be used for internal drag and drop.

        This HTML is expected by all clients of drop events so a fragment can be moved from one browser to
        another, or inside the same browser.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::declareAndWriteDragImage):

2011-04-07  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Setup ENABLE(TRACK) feature define + initial HTMLTrackElement
        https://bugs.webkit.org/show_bug.cgi?id=53556

        No new tests. No real functionality added just yet.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * features.pri:
        * html/HTMLAttributeNames.in:
        * html/HTMLTagNames.in:
        * html/HTMLTrackElement.cpp: Added.
        (WebCore::HTMLTrackElement::HTMLTrackElement):
        (WebCore::HTMLTrackElement::create):
        (WebCore::HTMLTrackElement::insertedIntoTree):
        (WebCore::HTMLTrackElement::willRemove):
        (WebCore::HTMLTrackElement::src):
        (WebCore::HTMLTrackElement::setSrc):
        (WebCore::HTMLTrackElement::kind):
        (WebCore::HTMLTrackElement::setKind):
        (WebCore::HTMLTrackElement::srclang):
        (WebCore::HTMLTrackElement::setSrclang):
        (WebCore::HTMLTrackElement::label):
        (WebCore::HTMLTrackElement::setLabel):
        (WebCore::HTMLTrackElement::isDefault):
        (WebCore::HTMLTrackElement::setIsDefault):
        (WebCore::HTMLTrackElement::isURLAttribute):
        * html/HTMLTrackElement.h: Added.
        * html/HTMLTrackElement.idl: Added.

2011-04-07  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Logic error in HTMLMediaElement::exitFullscreen()
        https://bugs.webkit.org/show_bug.cgi?id=58085

        The new full screen API case could fall through to the legacy API case
        unintentionally if a script calls exitFullscreen on an element which is
        not the current full screen element.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enterFullscreen):
        (WebCore::HTMLMediaElement::exitFullscreen):

2011-04-08  Mike Reed  <reed@google.com>

        Reviewed by Eric Seidel.

        Replace SKIA_TEXT with isNativeFontRenderingAllowed() for print-preview to work
        https://bugs.webkit.org/show_bug.cgi?id=57782

        No new tests. This change only affects print-preview and build option SKIA_GPU 

        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::paintSkiaText):

2011-04-08  Ryosuke Niwa  <rniwa@webkit.org>

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

        REGRESSION(r81887): Crash in SplitElement
        https://bugs.webkit.org/show_bug.cgi?id=57743

        The crash was caused by ReplaceSelectionCommand::doApply's calling splitElement with computeNodeAfterPosition
        even when the position was after the last node in it container. Since all we are doing here is to splitting tree
        up until the highest ancestor with isInlineNodeWithStyle, replaced the while loop by calls to splitTreeToNode
        and highestEnclosingNodeOfType.

        Also fixed a bug in splitTreeToNode not to check the difference in visible position when splitting the ancestor,
        which would have introduced unnecessary nodes when splitting tree and a bug in highestEnclosingNodeOfType that
        it incorrectly called deprecatedNode instead of containerNode.

        Test: editing/inserting/insert-images-in-pre-x-crash.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::splitTreeToNode):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/htmlediting.cpp:
        (WebCore::highestEnclosingNodeOfType):

2011-04-08  Antti Koivisto  <antti@apple.com>

        Reviewed by Tony Gentilcore.

        Incoming source should be preload scanned when the parser is blocked 
        https://bugs.webkit.org/show_bug.cgi?id=58117

        Scan the appended source if parser is blocked.

        Test: http/tests/loading/preload-append-scan.php

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::append):

2011-04-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix the WebKit2 build for older versions of GTK+
        https://bugs.webkit.org/show_bug.cgi?id=58095

        No new tests. This is just a build fix.

        * platform/gtk/GtkVersioning.c:
        (gdk_window_create_similar_surface): Reimplement this method for older versions of GDK.
        * platform/gtk/GtkVersioning.h: Add the new method to the header.

2011-04-08  Misha Tyutyunik  <michael.tyutyunik@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Plugin is not scrolled together with page content or jumping 
        when content is rendered using cache (backing store).
        https://bugs.webkit.org/show_bug.cgi?id=56130
        
        This is a Symbian portion of the fix. For Linux it looks like
        it's enough to call set geometry which should be addressed in
        https://bugs.webkit.org/show_bug.cgi?id=57179

        No new tests required. This can be tested with manual tests from 
        WebCore/manual-tests/qt and WebCore/manual-tests/plugins

        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::updatePluginWidget):

2011-04-08  Abhishek Arya  <inferno@chromium.org>

        Unreviewed. Remove accidental printf added in r83306.

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

2011-04-08  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Dragging text in a WebKit2 window results in a copy instead of a move.
        https://bugs.webkit.org/show_bug.cgi?id=56772
        <rdar://problem/9165140>

        cleanupAfterSystemDrag cannot call dragEnd in WebKit2, since
        the call to startDrag is asynchronous.
        
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::cleanupAfterSystemDrag):

2011-04-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Move WheelEvent-dispatching logic into WheelEventDispatchMediator.
        https://bugs.webkit.org/show_bug.cgi?id=57642

        Covered by existing tests, no functional change.

        * dom/Event.cpp:
        * dom/Event.h:
        (WebCore::EventDispatchMediator::EventDispatchMediator): Added default
            constructor.
        (WebCore::EventDispatchMediator::event): Inlined.
        (WebCore::EventDispatchMediator::setEvent): Added.
        * dom/EventDispatcher.cpp: Removed dispatchWheelEvent.
        * dom/EventDispatcher.h: Updated decls.
        * dom/Node.cpp:
        (WebCore::Node::dispatchWheelEvent): Changed to use the mediator and
            return a bool, like other dispatch event functions.
        * dom/Node.h: Changed decl.
        * dom/WheelEvent.cpp:
        (WebCore::granularity): Moved from EventDispatcher.
        (WebCore::WheelEventDispatchMediator::WheelEventDisatchMediator): Added.
        (WebCore::WheelEventDispatchMediator::event): Added.
        (WebCore::WheelEventDispatchMediator::dispatchEvent): Added.
        * dom/WheelEvent.h: Updated decls.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent): Changed to receive and react
            to the return value.

2011-04-08  Jessie Berlin  <jberlin@apple.com>

        Windows build warning fix.

        * WebCore.vcproj/WebCore.vcproj:
        Since ShadowRoot.cpp is included in the DOMAllInOne.cpp file, it should be excluded from
        the build.

2011-04-07  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: update breakpoints according to source frame decorations after live edit.
        https://bugs.webkit.org/show_bug.cgi?id=58029

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource.didEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._updateResourceContent.didEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._updateResourceContent):
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile.prototype.set content):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._handleSave.didEditScriptSource):
        (WebInspector.SourceFrame.prototype._handleSave):

2011-04-08  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: fix scripts concatenation in scripts panel.
        https://bugs.webkit.org/show_bug.cgi?id=58138

        When there is just one script starting at 0:0 it should not be surrounded by <script> framing.

        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile.prototype._loadResourceContent):
        (WebInspector.SourceFile.prototype._loadAndConcatenateScriptsContent):

2011-04-08  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: use "locations" for debugger scripts, "lineNumbers" for the UI elements.
        https://bugs.webkit.org/show_bug.cgi?id=58118

        This change reuses location for call frames in the protocol + structures script
        location <-> source lines interaction better. When we need UI columns, we will add
        them, but we should distinguish between script and UI terms on the type level, not naming.

        * English.lproj/localizedStrings.js:
        * bindings/v8/DebuggerScript.js:
        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.json:
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update.didGetSourceLine):
        (WebInspector.CallStackSidebarPane.prototype.update):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.addConsoleMessage.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype.addConsoleMessage):
        (WebInspector.DebuggerPresentationModel.prototype.continueToLine):
        (WebInspector.DebuggerPresentationModel.prototype._setBreakpointInDebugger.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype._setBreakpointInDebugger):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.PresenationCallFrame):
        (WebInspector.PresenationCallFrame.prototype.sourceLine.didRequestSourceMapping):
        (WebInspector.PresenationCallFrame.prototype.sourceLine):
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter.locationToPosition):
        (WebInspector.ScriptFormatter.lineToPosition):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerPaused.else.didGetSourceLocation):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype.showAnchorLocation):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected.didGetSourceLocation):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceMapping.prototype.scriptLocationToSourceLine):
        (WebInspector.SourceMapping.prototype.sourceLineToScriptLocation):
        (WebInspector.FormattedSourceMapping.prototype.scriptLocationToSourceLine):
        (WebInspector.FormattedSourceMapping.prototype.sourceLineToScriptLocation):

2011-04-08  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: distinguish breakpoints set on de-obfuscated sources from breakponts set on original sources.
        https://bugs.webkit.org/show_bug.cgi?id=58133

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.canEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerPaused):
        (WebInspector.DebuggerPresentationModel.prototype._sourceFileForScript):
        (WebInspector.DebuggerPresentationModel.prototype._scriptForSourceFileId):
        (WebInspector.DebuggerPresentationModel.prototype._createSourceFileId):
        (WebInspector.DebuggerPresentationModel.prototype._reset):

2011-04-07  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: make SourceFrame TextViewer's delegate for editing operations.
        https://bugs.webkit.org/show_bug.cgi?id=58026

        This is the first step of decoupling TextViewer from SourceFrame.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.show):
        (WebInspector.SourceFrame.prototype.hide):
        (WebInspector.SourceFrame.prototype._ensureContentLoaded):
        (WebInspector.SourceFrame.prototype.contentEditable):
        (WebInspector.SourceFrame.prototype.startEditing):
        (WebInspector.SourceFrame.prototype.endEditing):
        (WebInspector.SourceFrame.prototype._createTextViewer):
        (WebInspector.SourceFrame.prototype._handleSave):
        (WebInspector.SourceFrame.prototype._handleRevertEditing):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._enterInternalTextChangeMode):
        (WebInspector.TextViewer.prototype._exitInternalTextChangeMode):
        (WebInspector.TextViewer.prototype._syncDecorationsForLine):
        (WebInspector.TextViewer.prototype._doubleClick):
        (WebInspector.TextViewerDelegate):
        (WebInspector.TextViewerDelegate.prototype.contentEditable):
        (WebInspector.TextViewerDelegate.prototype.startEditing):
        (WebInspector.TextViewerDelegate.prototype.endEditing):
        (WebInspector.TextEditorMainPanel.prototype._paintScheduledLines):
        (WebInspector.TextEditorMainPanel.prototype._handleDOMUpdates):
        * inspector/front-end/inspector.html:

2011-04-08  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Steve Block.

        Media Stream API: add the getUserMedia method and the Javascript bindings.
        https://bugs.webkit.org/show_bug.cgi?id=56586

        Add the getUserMedia method to the navigator and its new Javascript types.
        Current specification: http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#video-conferencing-and-peer-to-peer-communication

        Tests: fast/dom/MediaStream/argument-types.html
               fast/dom/MediaStream/enabled.html
               fast/dom/MediaStream/no-interface-object.html

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.v8bindings.mk:
        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::webkitGetUserMedia):
        * bindings/v8/custom/V8NavigatorCustom.cpp: Added.
        (WebCore::V8Navigator::webkitGetUserMediaCallback):
        * page/Navigator.cpp:
        (WebCore::Navigator::webkitGetUserMedia):
        * page/Navigator.h:
        * page/Navigator.idl:
        * page/NavigatorUserMediaError.h: Added.
        (WebCore::NavigatorUserMediaError::NavigatorUserMediaError):
        (WebCore::NavigatorUserMediaError::~NavigatorUserMediaError):
        (WebCore::NavigatorUserMediaError::code):
        * page/NavigatorUserMediaError.idl: Added.
        * page/NavigatorUserMediaErrorCallback.h: Added.
        (WebCore::NavigatorUserMediaErrorCallback::~NavigatorUserMediaErrorCallback):
        * page/NavigatorUserMediaErrorCallback.idl: Added.
        * page/NavigatorUserMediaSuccessCallback.h: Added.
        (WebCore::NavigatorUserMediaSuccessCallback::~NavigatorUserMediaSuccessCallback):
        * page/NavigatorUserMediaSuccessCallback.idl: Added.

2011-04-08  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Add more tests for detailed heap snapshots UI.
        https://bugs.webkit.org/show_bug.cgi?id=58010
        https://bugs.webkit.org/show_bug.cgi?id=58011

        Added tests for "Containment" view. Minor refactorings, bugs fixed.
        Split one large tests into smaller ones to avoid timing out in debug mode.

        Tests: inspector/profiler/detailed-heapshots-containment-expansion-preserved-when-sorting.html
               inspector/profiler/detailed-heapshots-containment-show-all.html
               inspector/profiler/detailed-heapshots-containment-show-next.html
               inspector/profiler/detailed-heapshots-containment-sorting.html
               inspector/profiler/detailed-heapshots-summary-expansion-preserved-when-sorting.html
               inspector/profiler/detailed-heapshots-summary-show-all.html
               inspector/profiler/detailed-heapshots-summary-show-next.html
               inspector/profiler/detailed-heapshots-summary-sorting.html

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.doSort):
        (WebInspector.HeapSnapshotGridNode.prototype.sort):
        (WebInspector.HeapSnapshotGenericObjectNode):
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotInstanceNode):
        (WebInspector.HeapSnapshotConstructorNode):
        (WebInspector.HeapSnapshotDiffNode):
        (WebInspector.HeapSnapshotDominatorObjectNode):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotContainmentDataGrid):
        (WebInspector.HeapSnapshotDominatorsDataGrid):

2011-04-08  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Bugs in some corner cases in the text editor
        https://bugs.webkit.org/show_bug.cgi?id=58025

        This solves the following bugs:
        1) The very last _empty_ line would not be deleted if you hit a Backspace on it, or the selection text to be deleted is extended to the very bottom of the editor.
        2) An odd corner case: delete all source code from the editor, hit backspace on the only empty line, then add a character. In this case the browser will insert a TEXT node instead of a DIV node for a lineRow.

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel.prototype._selectionToPosition):
        (WebInspector.TextEditorMainPanel.prototype._enclosingLineRowOrSelf):
        (WebInspector.TextEditorMainPanel.prototype._handleDOMUpdates):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._collectLinesFromDiv):

2011-04-07  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: add test for script formatter worker.
        https://bugs.webkit.org/show_bug.cgi?id=57447

        Test: inspector/debugger/script-formatter.html

        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:
        * gyp/streamline-inspector-source.sh:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._addScript):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype._formatter):
        * inspector/front-end/ScriptFormatterWorker.js:

2011-04-08  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Tweak dynamically constants for the async highlighting in text editor
        https://bugs.webkit.org/show_bug.cgi?id=58035

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel.prototype._expandChunks):
        (WebInspector.TextEditorMainPanel.prototype._schedulePaintLines):
        (WebInspector.TextEditorMainPanel.prototype._paintScheduledLines):
        (WebInspector.TextEditorMainPanel.prototype._restorePaintLinesOperationsCredit):
        (WebInspector.TextEditorMainPanel.prototype._adjustPaintLinesOperationsRefreshValue):

2011-04-08  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: HAR compliance fixes
        https://bugs.webkit.org/show_bug.cgi?id=58124

        - Always provide some values for queryString and cookies, even though arrays may be empty
        - Always provide an empty cache object
        - Added entire HARLog to test
        - Workaround in test to avoid custom expectations (favicon.ico appears in log on certain platforms)

        * inspector/front-end/HAREntry.js:
        (WebInspector.HAREntry.prototype.build):
        (WebInspector.HAREntry.prototype._buildRequest):
        (WebInspector.HAREntry.prototype._buildResponse):

2011-04-08  Adam Barth  <abarth@webkit.org>

        Attempt to fix the Qt build.

        * css/CSSStyleApplyProperty.cpp:

2011-04-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Refactor WebCore/GNUMakefile.am to separate list of files
        https://bugs.webkit.org/show_bug.cgi?id=58116

        This change is similar to the cooresponding to change to
        JavaScriptCore.  We hope to generate GNUmakefile.list.am automatically
        using GYP.

        * GNUmakefile.am:
        * GNUmakefile.list.am: Added.

2011-04-07  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Rolled out some accidentally-committed changes in my last commit.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListener):
        (WebCore::EventTarget::removeEventListener):
        * dom/EventTarget.h:

2011-04-07  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by Alexey Proskuryakov.

        EventSource should only accept UTF-8 charset
        https://bugs.webkit.org/show_bug.cgi?id=56942

        Following the discussion on bug 45372, this change implements the recommended
        way of handling "charset". We only accept UTF-8 but no other encoding. This matches
        the encoding of the EventSource and also may fix TomCat that automatically send this
        charset.

        * page/EventSource.cpp:
        (WebCore::EventSource::didReceiveResponse): We now check the charset attribute and if it is
        not UTF-8, abort the connection and log the error to the console. Also we log if the MIME type
        is wrong to the console to help debugging (only in the case of an HTTP 200 response though).

2011-04-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Some Handle<T> cleanup
        https://bugs.webkit.org/show_bug.cgi?id=58109

        * bindings/js/ScriptValue.h:
        (WebCore::ScriptValue::ScriptValue): Updated for new null constructor.
        (WebCore::ScriptValue::hasNoValue): Updated for removal of isEmpty().

2011-04-07  Dominic Cooney  <dominicc@google.com>

        Reviewed by Dimitri Glazkov.

        Let shadow DOM have a list of nodes at the top level of a shadow.
        https://bugs.webkit.org/show_bug.cgi?id=57813

        Adds ShadowRoot, a list of nodes, to be a parent for top-level
        shadow children. Forwards rendering through the root and into the
        host's renderer.

        Covered by existing tests of elements that use this style of shadow.

        * Android.mk: add ShadowRoot.h/cpp
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::initForStyleResolve): proxy style to host
        * dom/ContainerNode.cpp: parent nodes that are shadow roots are alive
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::appendChild):
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::DocumentFragment):
        * dom/DocumentFragment.h:
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle): look through ShadowRoots for host's style
        (WebCore::Element::shadowRoot): should be const
        (WebCore::Element::ensureShadowRoot): simpler than setShadowRoot
        * dom/Element.h:
        * dom/ElementRareData.h:
        * dom/Node.cpp:
        (WebCore::Node::parentNodeForRenderingAndStyle): indirection so
          ShadowRoot can forward to the host's renderer
        (WebCore::Node::createRendererAndStyle):
        (WebCore::Node::createRendererIfNeeded):
        * dom/Node.h:
        (WebCore::Node::isShadowBoundary): temporary, to differentiate
          old- and new-style, until all roots are ShadowRoot instances
        * dom/ShadowRoot.cpp: Added.
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::recalcStyle): forward recalc to children
        * dom/ShadowRoot.h: Added.
        (WebCore::ShadowRoot::isShadowBoundary):
        (WebCore::ShadowRoot::create):
        * html/HTMLKeygenElement.cpp: use ensureShadowRoot
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        (WebCore::HTMLKeygenElement::parseMappedAttribute):
        (WebCore::HTMLKeygenElement::appendFormData):
        (WebCore::HTMLKeygenElement::reset):
        (WebCore::HTMLKeygenElement::shadowSelect):
        * html/HTMLKeygenElement.h:
        * html/HTMLMeterElement.cpp: use ensureShadowRoot
        (WebCore::HTMLMeterElement::createShadowSubtree):
        * html/HTMLProgressElement.cpp: use ensureShadowRoot
        (WebCore::HTMLProgressElement::createShadowSubtree):
        * html/InputType.cpp: use ensureShadowRoot
        (WebCore::InputType::destroyShadowSubtree):
        * html/RangeInputType.cpp: use ensureShadowRoot
        (WebCore::RangeInputType::handleMouseDownEvent):
        (WebCore::RangeInputType::createShadowSubtree):
        (WebCore::RangeInputType::valueChanged):
        (WebCore::RangeInputType::shadowSliderThumb):
        * html/RangeInputType.h:
        * html/ValidationMessage.cpp: use ensureShadowRoot
        (WebCore::ValidationMessage::buildBubbleTree):
        (WebCore::ValidationMessage::deleteBubbleTree):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::setPositionFromPoint):
        (WebCore::SliderThumbElement::hostInput):
        * html/shadow/SliderThumbElement.h:
        * rendering/MediaControlElements.cpp: use ensureShadowRoot
        (WebCore::MediaControlInputElement::attach):
        (WebCore::MediaControlInputElement::updateStyle):
        * rendering/RenderSlider.cpp: use ensureShadowRoot
        (WebCore::RenderSlider::thumbRect):
        (WebCore::RenderSlider::layout):
        (WebCore::RenderSlider::shadowSliderThumb):
        (WebCore::RenderSlider::inDragMode):
        * rendering/RenderSlider.h:

2011-04-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION (r80871): Crash when visiting http://broadband.biglobe.ne.jp/
        https://bugs.webkit.org/show_bug.cgi?id=56297
        <rdar://problem/9131597>

        Test: fast/css-generated-content/table-row-after-no-crash.html

        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::styleDidChange): Factor out generation of before/after
        content, and only do it if the row already has a parent. For construction of
        anonymous cells to work correctly, the row needs to already have a parent, so
        in that case wait a bit.
        (WebCore::RenderTableRow::updateBeforeAndAfterContent): Factored out to here.
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild): When adding a row, update its
        before/after content, in case it had any.

2011-04-07  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        Probable fix for <rdar://problem/9251443>  Crashing on exception: -
        [ScrollAnimationHelperDelegate _pixelAlignProposedScrollPosition:]: unrecognized 
        selector sent to instance ADDRESS.

       Need to implement new delegate method.
        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollAnimationHelperDelegate _pixelAlignProposedScrollPosition:]):

2011-04-07  Ian Henderson  <ianh@apple.com>

        Reviewed by Simon Fraser.

        Optimize filling rounded rects that are actually ellipses
        https://bugs.webkit.org/show_bug.cgi?id=58098

        In CG, drawing an ellipse directly is faster than constructing and
        filling a rounded rect path.  Detect when the given rounded rect is
        actually an ellipse and draw it directly in this case.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):

2011-04-07  Ned Holbrook  <nholbrook@apple.com>

        Reviewed by Dan Bernstein.

        CTLine objects should outlive their CTRuns
        https://bugs.webkit.org/show_bug.cgi?id=58063

        * platform/graphics/mac/ComplexTextController.h: Add m_coreTextLines, to be destroyed after m_complexTextRuns.
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Moot m_coreTextRun.
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText): Append line to m_coreTextLines.

2011-04-07  Nat Duca  <nduca@chromium.org>

        Reviewed by David Levin.

        [chromium] Compositor thread infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=56131

        Introduce chrome compositor thread and related
        infrastructure.

        * WebCore.gypi:
        * platform/graphics/chromium/cc/CCMainThread.cpp: Added.
        (WebCore::CCMainThread::performTask):
        (WebCore::CCMainThread::postTask):
        * platform/graphics/chromium/cc/CCMainThread.h: Added.
        (WebCore::CCMainThread::Task::~Task):
        (WebCore::CCMainThread::Task::instance):
        (WebCore::CCMainThread::Task::Task):
        * platform/graphics/chromium/cc/CCMainThreadTask.h: Added.
        (WebCore::MainThreadTask0::create):
        (WebCore::MainThreadTask0::MainThreadTask0):
        (WebCore::MainThreadTask0::performTask):
        (WebCore::MainThreadTask1::create):
        (WebCore::MainThreadTask1::MainThreadTask1):
        (WebCore::MainThreadTask1::performTask):
        (WebCore::MainThreadTask2::create):
        (WebCore::MainThreadTask2::MainThreadTask2):
        (WebCore::MainThreadTask2::performTask):
        (WebCore::MainThreadTask3::create):
        (WebCore::MainThreadTask3::MainThreadTask3):
        (WebCore::MainThreadTask3::performTask):
        (WebCore::createMainThreadTask):
        * platform/graphics/chromium/cc/CCThread.cpp: Added.
        (WebCore::CCThread::create):
        (WebCore::CCThread::CCThread):
        (WebCore::CCThread::~CCThread):
        (WebCore::CCThread::postTask):
        (WebCore::CCThread::compositorThreadStart):
        (WebCore::CCThread::runLoop):
        * platform/graphics/chromium/cc/CCThread.h: Added.
        (WebCore::CCThread::Task::~Task):
        (WebCore::CCThread::Task::instance):
        (WebCore::CCThread::Task::Task):
        (WebCore::CCThread::threadID):
        (WebCore::CCCompletionEvent::CCCompletionEvent):
        (WebCore::CCCompletionEvent::~CCCompletionEvent):
        (WebCore::CCCompletionEvent::wait):
        (WebCore::CCCompletionEvent::signal):
        * platform/graphics/chromium/cc/CCThreadTask.h: Added.
        (WebCore::CCThreadTask0::create):
        (WebCore::CCThreadTask0::CCThreadTask0):
        (WebCore::CCThreadTask0::performTask):
        (WebCore::CCThreadTask1::create):
        (WebCore::CCThreadTask1::CCThreadTask1):
        (WebCore::CCThreadTask1::performTask):
        (WebCore::CCThreadTask2::create):
        (WebCore::CCThreadTask2::CCThreadTask2):
        (WebCore::CCThreadTask2::performTask):
        (WebCore::CCThreadTask3::create):
        (WebCore::CCThreadTask3::CCThreadTask3):
        (WebCore::CCThreadTask3::performTask):
        (WebCore::createCCThreadTask):

2011-04-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION (r46914, r48764): When typing in Mail, line wrapping frequently occurs in the middle of words
        https://bugs.webkit.org/show_bug.cgi?id=57872

        r46914 initially introduced a regression by replacing calls to styleAtPosition by editingStyleAtPosition
        because editingStyleAtPosition did not avoid tab span to obtain the computed style unlike styleAtPosition.

        r46914 also introduced a regression by cloning hierarchy under new block at the insertion position without
        avoiding the tab span.

        Fixed the both regressions by avoiding tab spans when computing the editing style and when cloning hierarchy.
        Also reverted r46914 for the general code path because re-creating node hierarchy duplicates nodes when
        we're moving nodes after the paragraph separator. Instead, we now split the tree up until the start block
        before moving the nodes.

        Tests: editing/inserting/insert-paragraph-after-tab-span-and-text.html
               editing/inserting/insert-paragraph-separator-tab-span.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::saveTypingStyleState): Since EditingStyle's constructor avoids a tab span,
        no longer calls positionBeforeTabSpan on the position passed to EditingStyle's constructor.
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::init): Always avoid a tab span when computing the editing style.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Avoid cloning tab spans and inserting a paragraph
        separator into a paragraph separator.
        * editing/htmlediting.cpp:
        (WebCore::positionOutsideTabSpan): Renamed from positionBeforeTabSpan. Also returns the position in the parent
        node after the tab span if the position was at the end of the tab span.
        * editing/htmlediting.h:

2011-04-07  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        [Mac] Editor::setComposition() should not trigger correction panel timer.
        https://bugs.webkit.org/show_bug.cgi?id=58049
         <rdar://problem/9226305>

        On Mac OS X that supports autocorrection panel, typing unconfirmed composition (i.e. unconfirmed Japanese or Chinese input)
        should not start autocorrection timer. We added a member variable, m_shouldPreventSpellChecking, to TypingCommand. 
        When this value is true, markMisspellingsAfterTyping() will not be called in TypingCommand::typingAddedToOpenCommand().
        m_shouldPreventSpellChecking is set to true in the TypingCommand objects created by Editor::setComposition().

        No new tests. No deterministically reproducible test case. Patch is based on static code analysis. Testing this also requires firing
        autocorrection panel timer, which can not be easily done in automated fashion.

        * editing/Editor.cpp:
        (WebCore::Editor::deleteWithDirection):
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::confirmComposition):
        (WebCore::Editor::setComposition):
        * editing/EditorCommand.cpp:
        (WebCore::executeDelete):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::TypingCommand):
        (WebCore::TypingCommand::deleteSelection):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::insertLineBreak):
        (WebCore::TypingCommand::insertParagraphSeparator):
        (WebCore::TypingCommand::typingAddedToOpenCommand):
        * editing/TypingCommand.h:
        (WebCore::TypingCommand::create):
        (WebCore::TypingCommand::setShouldPreventSpellChecking):

2011-04-07  John Bauman  <jbauman@chromium.org>

        Reviewed by Kenneth Russell.

        clearIfComposited call is really slow
        https://bugs.webkit.org/show_bug.cgi?id=57999

        Move getContextAttributes call after the if, so it isn't called nearly as often.

        No new tests.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::clearIfComposited):

2011-04-07  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement Backgroun and Mask properties in CSSStyleApplyProperty
        https://bugs.webkit.org/show_bug.cgi?id=57922

        No tests added as no behavioral changes.

        * css/CSSStyleApplyProperty.cpp:
        Added ApplyPropertyFillLayer test to handle Background and Mask CSS Properties.
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Added constructor calls to set up:
          CSSPropertyBackgroundAttachment
          CSSPropertyBackgroundClip
          CSSPropertyWebkitBackgroundClip
          CSSPropertyWebkitBackgroundComposite
          CSSPropertyBackgroundOrigin
          CSSPropertyWebkitBackgroundOrigin
          CSSPropertyBackgroundSize
          CSSPropertyWebkitBackgroundSize
          CSSPropertyWebkitMaskAttachment
          CSSPropertyWebkitMaskClip
          CSSPropertyWebkitMaskComposite
          CSSPropertyWebkitMaskOrigin
          CSSPropertyWebkitMaskSize
        * css/CSSStyleApplyProperty.h:
        (WebCore::CSSStyleApplyProperty::setPropertyValue):
        Add function to specify an equivalent property value in the lookup table.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove sections now implemented by CSSStyleApplyProperty.
        * css/CSSStyleSelector.h:
        Make CSSStyleApplyProperty a friend class so that the mapFill* functions are accessible.

2011-04-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Split run storage out from BidiResolver into a new BidiRunList class
        https://bugs.webkit.org/show_bug.cgi?id=57764

        Part of what makes BidiResolver and InlineIterator so difficult to understand
        (and bug 50912 so difficult to fix) is that BidiResolver is both a state machine
        for the Unicode Bidi Algorithm (UBA) as well as storage for the resulting
        BidiRuns from the algorithm.  This patch breaks the storage aspect off
        into its own class BidiRunList.

        This patch is only a start.  It does not actually fix the problematic ownership
        relationship, but it does make it possible to fix such in a second patch.

        The run pointers and addRun/prependRun, etc. were already a tightly coupled
        logical subset of the BidiResolver class, so moving them into their own class
        was both obvious and easy.  The only piece of logic I had to move was that
        deleteRuns() had a side-effect of setting the m_emptyRun bit on the resolver.

        I believe this deleteRuns side-effect was only ever used for one place
        (right after findNextLineBreak) and that it's only needed because
        findNextLineBreak can sometimes create bidi runs.  Run creation appears to be
        an unintentional side-effect of how InlineIterator calls through to BidiResolver
        as part of bidiNext and not a desired effect of the code.  I have added the call
        to markCurrentRunEmpty to both places deleteRuns was called (where the resolver
        could get re-used) as a safety precaution.  We could replace both with ASSERTs
        in a later patch.

        I suspect there may be a small performance win from further refactoring so that
        findNextLineBreak does not need to create BidiRuns.

        As I commented in the code, callers should own their own BidiRunList which they
        pass to BidiResolver::createBidiRunsForLine.  I attempted to implement that in
        an earlier version of this patch, but it was too complicated with the current
        twisted dependencies between InlineIterator/bidiNext and InlineBidiResolver.
        raise/lowerExplicitEmbeddingLevel are called unconditionally
        from commitExplicitEmbedding (which is called by bidiNext) and expect to have
        access to a runs list even in cases where we don't want any runs (findNextLineBreak).

        I also cleaned up some of the callers to pass around BidiRunList objects instead
        of InlineBidiResolvers now that they're separate objects.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawBidiText):
        * platform/text/BidiResolver.h:
        (WebCore::BidiResolver::BidiResolver):
        (WebCore::BidiResolver::runs):
        (WebCore::BidiResolver::markCurrentRunEmpty):
        (WebCore::::appendRun):
        (WebCore::::lowerExplicitEmbeddingLevel):
        (WebCore::::raiseExplicitEmbeddingLevel):
        (WebCore::::reorderRunsFromLevels):
        (WebCore::::createBidiRunsForLine):
        * rendering/InlineIterator.h:
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::createRun):
        (WebCore::RenderBlock::appendRunsForObject):
        (WebCore::reachedEndOfTextRenderer):
        (WebCore::RenderBlock::handleTrailingSpaces):
        (WebCore::RenderBlock::layoutInlineChildren):

2011-04-07  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Adam Barth.

        [Chromium] Fix relocation problem of popup window which introduces autofill popup sometimes moves to screen's top left corner.
        https://bugs.webkit.org/show_bug.cgi?id=57911
        http://code.google.com/p/chromium/issues/detail?id=78073

        Manual test added: manual-tests/autofill-popup-location.html

        Originally only height is checked so that it introduces the bug.
        So I changed it to check both width and height as size.

        * manual-tests/autofill-popup-location.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::refresh): Check window size between original and new before calling setFrameRect().

2011-04-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement img-src style-src and font-src
        https://bugs.webkit.org/show_bug.cgi?id=58018

        These are pretty straight forward given the rest of the infrastructure
        we've built so far.

        Tests: http/tests/security/contentSecurityPolicy/image-allowed.html
               http/tests/security/contentSecurityPolicy/image-blocked.html
               http/tests/security/contentSecurityPolicy/style-allowed.html
               http/tests/security/contentSecurityPolicy/style-blocked.html
               http/tests/security/contentSecurityPolicy/xsl-allowed.php
               http/tests/security/contentSecurityPolicy/xsl-blocked.php

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowImageFromSource):
        (WebCore::ContentSecurityPolicy::allowStyleFromSource):
        (WebCore::ContentSecurityPolicy::allowFontFromSource):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:

2011-04-07  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        Make IconSnapshot and PageURLRecord member variables private.
        https://bugs.webkit.org/show_bug.cgi?id=58080

        No change in functionality so no new tests.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::writeToDatabase): Changed to used the accessor functions.
        (WebCore::IconDatabase::writeIconSnapshotToSQLDatabase): Ditto.
        * loader/icon/IconRecord.h:
        (WebCore::IconSnapshot::IconSnapshot): Changed to use the new member variable names.
        (WebCore::IconSnapshot::iconURL): Expose the property.
        (WebCore::IconSnapshot::timestamp): Ditto.
        (WebCore::IconSnapshot::data): Ditto.
        * loader/icon/PageURLRecord.h:
        (WebCore::PageURLSnapshot::PageURLSnapshot): Changed to use the new member variable names.
        (WebCore::PageURLSnapshot::pageURL): Expose the property.
        (WebCore::PageURLSnapshot::iconURL): Ditto.

2011-04-07  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels):

2011-04-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add stub support for generating Gtk build system from gyp
        https://bugs.webkit.org/show_bug.cgi?id=58086

        This does not produce a buildable WebCore, but it
        does allow running gyp/configure --port=gtk and having
        it generate a gtk.Makefile which we can use for testing
        the rest of the plumbing.

        * gyp/gtk.gyp: Added.

2011-04-07  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=57736
        
        Crash on openstreetmap.org while using the map. Fix a bad interaction between the positioned movement layout
        optimization and the simplified layout optimization that could lead to blocks remaining marked as dirty when
        layout finished. This would eventually lead to an inability to properly determine the correct layout root and
        would cause a deleted root to be used later on.

        Added fast/block/positioning/complex-positioned-movement.html.

        * page/FrameView.cpp:
        (WebCore::FrameView::scheduleRelayoutOfSubtree):
        Add asserts to catch cases in the future where a layout root is set that has a dirty containing block.
    
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedLayout):
        Change simplified layout so that the positioned movement optimization no longer clears the other layout
        flags. This will ensure that we still lay out our descendants if they need it.
        
        (WebCore::RenderBlock::layoutPositionedObjects):
        Changed to clear our layout flags now if the positioned movement is successful, since tryLayoutDoingPositionedMovementOnly
        no longer does the clear.
    
        * rendering/RenderBox.h:
        (WebCore::RenderBox::tryLayoutDoingPositionedMovementOnly):
        tryLayoutDoingPositionedMovementOnly now returns a boolean indicating success or failure.  On success it no longer
        does setNeedsLayout(false), but instead will let the caller take care of it. This way the caller can still look at
        the other flags in case other kinds of layout are still needed.
    
        * rendering/RenderObject.h:
        (WebCore::RenderObject::setNeedsPositionedMovementLayout):
        (WebCore::RenderObject::setNeedsSimplifiedNormalFlowLayout):
        Changed these methods to only set their respective flags and not to try to be clever about avoiding propagation.

2011-04-07  Andrew Scherkus  <scherkus@chromium.org>

        Revert ENABLE_TRACK patch due to compile failures.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * features.pri:
        * html/HTMLAttributeNames.in:
        * html/HTMLTagNames.in:
        * html/HTMLTrackElement.cpp: Removed.
        * html/HTMLTrackElement.h: Removed.
        * html/HTMLTrackElement.idl: Removed.

2011-04-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/9018212> Underline thickness is not uniform under non-integral scale factor
        https://bugs.webkit.org/show_bug.cgi?id=58083

        Test: fast/text/decorations-transformed.html

        * platform/graphics/GraphicsContext.h: Added a RoundingMode enum with two values. RoundAllSides
        is the existing rounding mode, where each side of the rectangle snaps to the nearest pixel
        gridline. RoundOriginAndDimensions snaps the origin to the nearest pixel gridpoint and rounds
        the width and the height. In this new mode, translating a rectangle in user space never changes
        its dimensions in device pixels.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels): Implemented RoundOriginAndDimensions.
        (WebCore::GraphicsContext::drawLineForText): Use RoundOriginAndDimensions, thus ensuring that
        all underlines have the same thickness in device pixels.
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels): Added RoundingMode parameter, but did not implement it.
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels): Ditto.
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels): Ditto.
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels): Ditto.
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels): Ditto.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):

2011-04-06  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Nate Chapin.

        [V8] Remove custom DOMImplementation getter on Document.
        https://bugs.webkit.org/show_bug.cgi?id=57991

        The custom getter is no longer required because DOMImplementation
        objects are now created per document.

        Test: fast/dom/DOMImplementation/implementation-identity.html

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        * dom/Document.idl:

2011-04-07  Sergey Glazunov  <serg.glazunov@gmail.com>

        Reviewed by Dimitri Glazkov.

        setHasID() is only called for styled elements
        https://bugs.webkit.org/show_bug.cgi?id=57267

        Test: fast/dom/non-styled-element-id-crash.html

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore::Element::idAttributeChanged):
        * dom/Element.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::parseMappedAttribute):

2011-04-07  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        HTMLVideoElement::webkitEnterFullscreen does not use new Full Screen API when available.
        https://bugs.webkit.org/show_bug.cgi?id=58070

        Make the HTMLMediaElement full screen functions call into the new Full Screen API when
        FULLSCREEN_API is enabled.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enterFullscreen):
        (WebCore::HTMLMediaElement::exitFullscreen):

2011-04-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement CSP's options directive
        https://bugs.webkit.org/show_bug.cgi?id=58014

        This patch contains the full options parser, but we only have enough of
        CSP implemented to see the effects of disable-xss-protection.  Will
        need to do some more work before we can see eval-script in action.

        Tests: http/tests/security/contentSecurityPolicy/inline-script-allowed.html
               http/tests/security/contentSecurityPolicy/inline-script-blocked-goofy.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPOptions::CSPOptions):
        (WebCore::CSPOptions::disableXSSProtection):
        (WebCore::CSPOptions::evalScript):
        (WebCore::CSPOptions::parse):
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs):
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers):
        (WebCore::ContentSecurityPolicy::allowInlineScript):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:

2011-04-07  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        REGRESSION (WebKit2): Reverse conversion doesn't work in Kotoeri
        https://bugs.webkit.org/show_bug.cgi?id=58066
        <rdar://problem/8965302>

        * platform/mac/HTMLConverter.h:
        * platform/mac/HTMLConverter.mm: (+[WebHTMLConverter editingAttributedStringFromRange:]):
        Changed editingAttributedStringFromRange: to use WebCore::Range instead of DOMRange, since
        it's now used in WebKit2.

2011-04-07  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r64712): Microsoft Outlook 2011: original message contents
        not included when replying to an email.
        https://bugs.webkit.org/show_bug.cgi?id=57794
        
        * WebCore.exp.in:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedParsing): Call Frame::injectUserScripts()
        before checking if the FrameLoader is parsing the initial empty document.
        This allows user scripts to be injected at the end of document parsing
        (if the setting is enabled).
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScripts): Do not inject scripts if this
        feature is disabled on the initial empty document.
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h: Add a setting for injecting user scripts into the
        initial empty document (defaults to false).
        (WebCore::Settings::setInjectUserScriptsInInitialEmptyDocument):
        (WebCore::Settings::injectUserScriptsInInitialEmptyDocument):
        * platform/mac/RuntimeApplicationChecks.h:
        * platform/mac/RuntimeApplicationChecks.mm:
        (WebCore::applicationIsMicrosoftOutlook): Check if the embedding
        application is Microsoft Outlook.

2011-04-06  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        AVF: MediaPlayerPrivateAVFoundation never reaches playable state.
        https://bugs.webkit.org/show_bug.cgi?id=57962

        Add support for a new AVPlayerItem API which will notify clients when their
        seek completes.  This requires a new Notification type to be passed to the main
        thread in MediaPlayerPrivateAVFoundation.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted): Added.
        (WebCore::MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification): Added two new
            overloaded functions which take a Notification; and a Notification::Type and boolean.
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification): Support new SeekCompleted 
            Notification type.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::Notification): Added one new constructor.
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::finished): Added ivar and accessor.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime): Call new AVPlayerItem API.
        (-[WebCoreAVFMovieObserver seekCompleted:]): Added.

2011-04-07  Nancy Piedra  <nancy.piedra@nokia.com>

        Reviewed by Eric Carlson.

        Parse quotes from content type parameters
        https://bugs.webkit.org/show_bug.cgi?id=53275

        This functionality is tested in video-can-play-type.html layout test
        where I've added codecs parameter with good and bad formatting.

        * platform/ContentType.cpp:
        (WebCore::ContentType::parameter):

2011-04-07  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: remove "enabled" from the setBreakpoint protocol.
        https://bugs.webkit.org/show_bug.cgi?id=58047

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::hasBreakpoint):
        * bindings/v8/DebuggerScript.js:
        ():
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::buildObjectForBreakpointCookie):
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/ScriptBreakpoint.h:
        (WebCore::ScriptBreakpoint::ScriptBreakpoint):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.setBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpointBySourceId):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype._updateBreakpointsAfterLiveEdit):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint.callback):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._setBreakpointInDebugger):
        (WebInspector.DebuggerPresentationModel.prototype._setBreakpointInDebugger.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype._removeBreakpointFromDebugger):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpointEnabled.afterUpdate):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpointEnabled):
        (WebInspector.DebuggerPresentationModel.prototype.updateBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype.removeBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointRemoved):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointResolved):
        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpointsFromSettings):
        (WebInspector.DebuggerPresentationModel.prototype._saveBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype._reset):
        (WebInspector.PresentationBreakpoint):

2011-04-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        Removed a redundant line of code.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::updateAlwaysCreateLineBoxes): No need to compare line gap values, as
        this is covered by the earlier hasIdenticalAscentDescentAndLineGap() check.

2011-04-07  Liang Qi  <liang.qi@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt][Symbian] Enable webkit build with GCCE on Symbian.
        https://bugs.webkit.org/show_bug.cgi?id=57841

        * WebCore.pri: Thanks for Norbert Leser  <norbert.leser@nokia.com> who checked RVCT part.
        --rw-base value in QMAKE_LFLAGS.ARMCC and -Tdata value in QMAKE_LFLAGS.GCCE are updated
        to 0x1000000 together. They need to be updated in the future when WebKit grows.

2011-04-06  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: get rid of Breakpoint.js.
        https://bugs.webkit.org/show_bug.cgi?id=57949

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/Breakpoint.js: Removed.
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.addBreakpoint):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.updateBreakpoint.didLoadSnippet):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.updateBreakpoint):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._compareBreakpoints):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        (WebInspector.DebuggerModel.prototype._debuggerWasDisabled):
        (WebInspector.DebuggerModel.prototype.setBreakpoint.didSetBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpointBySourceId):
        (WebInspector.DebuggerModel.prototype.removeBreakpoint):
        (WebInspector.DebuggerModel.prototype._breakpointResolved):
        (WebInspector.DebuggerModel.prototype.reset):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._refreshBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype._updateBreakpointsAfterLiveEdit):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint.didSetBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpointEnabled):
        (WebInspector.DebuggerPresentationModel.prototype.updateBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype.removeBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointRemoved):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointResolved):
        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._saveBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype._reset):
        (WebInspector.PresentationBreakpoint):
        (WebInspector.PresentationBreakpoint.prototype.get sourceFile):
        (WebInspector.PresentationBreakpoint.prototype.get url):
        (WebInspector.PresentationBreakpoint.prototype.get resolved):
        (WebInspector.PresentationBreakpoint.prototype.loadSnippet):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype._onResourceStarted):
        (WebInspector.ResourceTreeModel.prototype._addResourceToFrame):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._breakpointUpdated):
        (WebInspector.ScriptsPanel.prototype.reset):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-04-07  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: console messages names should adhere to the common naming style
        https://bugs.webkit.org/show_bug.cgi?id=58042

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::updateRepeatCountInConsole):
        * inspector/Inspector.json:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::clearConsoleMessages):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.messageAdded):
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.messageRepeatCountUpdated):
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.messagesCleared):
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher):

2011-04-06  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: migrate Inspector protocol messages format to JSON-RPC.
        https://bugs.webkit.org/show_bug.cgi?id=57957

        There is not a significant difference between  inspector messages spec and and JSON-RPC 2.0 messages spec.
        Also JSON-RPC has a pretty clear specification for error descriptions which we haven't.
        It was decided that we will use it.

        the list of renames:
        1) type-> /dev/null
        2) domain + '.' + event => method // for events
        3) domain + '.' + command => method // for requests
        4) requestId => id // for responses
        5) arguments => params // for requests
        6) data => params // for events
        7) body => result // for responses

        protocolErrors and error properties will be converted to JSON-RPC error format.
        The order of properties in messages also will be adjusted.
        The only thing that looks unnecessary is jsonrpc property.

        * inspector/CodeGeneratorInspector.pm:

2011-04-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Add functions to update left and right offsets to LineOffsets
        https://bugs.webkit.org/show_bug.cgi?id=58028

        Added update() and shrinkWidthForNewFloatIfNeeded(FloatingObject*) to LineOffsets,
        which are used to update m_left and m_right. Also added m_block and m_isFirstLine
        member variables to LineOffsets so that users of LineOffsets don't have to pass them around.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::skipLeadingWhitespace): No longer passes firstLine to positionNewFloatOnLine.
        (WebCore::LineOffsets::LineOffsets): Takes RenderBlock* and isFirstLine instead of left and right offsets.
        (WebCore::LineOffsets::update): Extracted from findNextLineBreak and positionNewFloatOnLine.
        (WebCore::LineOffsets::shrinkWidthForNewFloatIfNeeded): Extracted from positionNewFloatOnLine.
        (WebCore::RenderBlock::findNextLineBreak): Calls skipLeadingWhitespace and positionNewFloatOnLine.
        (WebCore::RenderBlock::positionNewFloatOnLine): Calls shrinkWidthForNewFloatIfNeeded and update and
        no longer passes firstLine around.

2011-04-06  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: migrate debugger domain to the unified breakpoint location notion.
        https://bugs.webkit.org/show_bug.cgi?id=57928

        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::buildObjectForBreakpointCookie):
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.setBreakpointBySourceId):
        (WebInspector.DebuggerModel.prototype._breakpointResolved):

2011-04-07  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Benjamin Poulain.

        [Qt] Mask the QStyle::State_Horizontal hint for vertical scrollbars.

        When initializing a QStyleOptionSlider from a widget, the State_Horizontal
        hint may get set depending on how that widget is laid out in its parent.
        If this happens when drawing a vertical scrollbar, the hint is never
        cleared and we end up painting a vertical scrollbar with horizontal arrows.

        Covered by pixel tests which should no longer paint silly scrollbars.

        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::styleOptionSlider):

2011-04-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        script-src should block inline script
        https://bugs.webkit.org/show_bug.cgi?id=58012

        Block inline scripts at the ScriptElement layer.  This should catch
        exactly the scripts we want to catch.

        Test: http/tests/security/contentSecurityPolicy/inline-script-blocked.html

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
            - This patch also adds the ability to supply a CSP policy via a
              <meta> tag.  We'll update the name of the header once we've
              finished implementing the spec.
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::executeScript):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowInlineScript):
        * page/ContentSecurityPolicy.h:

2011-04-07  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ryosuke Niwa.

        Move the MouseEventWithHitTestResults::targetNode() method on to EventHandler.
        https://bugs.webkit.org/show_bug.cgi?id=57921

        Moves the MouseEventWithHitTestResults::targetNode() method on to EventHandler, so
        that the same logic can be used for a HitTestResult.

        No visible changes, just cleanup, so no tests.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromMouseEvent):
        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent):
        (WebCore::EventHandler::handleMousePressEventTripleClick):
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::subframeForHitTestResult):
        Made public static member, so that it can access targetNode(), and be accessed by
        webkitwebview in gtk.
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::targetNode):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::sendContextMenuEvent):
        * page/EventHandler.h:
        * page/MouseEventWithHitTestResults.cpp:
        (WebCore::MouseEventWithHitTestResults::MouseEventWithHitTestResults):
        * page/MouseEventWithHitTestResults.h:
        * page/android/EventHandlerAndroid.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * page/brew/EventHandlerBrew.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * page/efl/EventHandlerEfl.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * 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/wx/EventHandlerWx.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):

2011-04-07  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: build mapping for formatted scripts based on keywords positions.
        https://bugs.webkit.org/show_bug.cgi?id=57936

        Mapping based on [\$\.\w]+ was not accurate because string literals representation
        may be different in original and formatted scripts.

        * inspector/front-end/ScriptFormatterWorker.js:
        (buildMapping.regexp.b):
        (buildMapping):

2011-04-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Spinbuttons become unclickable if right padding is large.
        https://bugs.webkit.org/show_bug.cgi?id=56298

        An inner-spin-button is put on the right border and ignores right
        padding in RenderTextControlSingleLine::layout(), but forwardEvent()
        checks if a point is in an area just right of an internal text block.
        This inconsistency caused a bug that an inner-spin-button with large
        padding didn't receive mouse events.

        To fix this bug, we render spin buttons as layers, and remove manual
        event forwarding code.

        Test: fast/forms/input-number-large-padding.html

        * css/html.css: Add "position:relative" to make a spin-button a layer.
        (input::-webkit-inner-spin-button):
        (input::-webkit-outer-spin-button):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::forwardEvent):
          Remove manual event forwarding code.

2011-04-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP object-src should block plugin loads
        https://bugs.webkit.org/show_bug.cgi?id=57283

        This change is pretty straight-forward.  It's slighly unclear to me
        whether this patch is correct w.r.t. the code in DocumentWriter.  I've
        added a FIXME comment, and I'll investigate that case more in the future.

        Test: http/tests/security/contentSecurityPolicy/object-src-none.html

        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestPlugin):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowObjectFromSource):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:

2011-04-06  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=58009
        Frame::scalePage() results in visual artifacts with scale factors less than 1
        -and corresponding-
        <rdar://problem/8683230>

        Fall into the case where we fill with a background base color when there is a page 
        scale factor that is less than 1.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):

2011-04-06  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        AVF: MediaPlayerPrivateAVFoundationObjC should not use -[AVPlayerItem isPlaybackBufferEmpty]
        https://bugs.webkit.org/show_bug.cgi?id=57982

        Query our cached loaded time array instead of asking AVPlayerItem if its buffer is empty.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playerItemStatus):

2011-04-06  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        MediaPlayerPrivateAVFoundation does not change rate due to setRate().
        https://bugs.webkit.org/show_bug.cgi?id=57919

        Test: media/video-set-rate-from-pause.html

        The base class of MediaPlayerPrivateAVFoundation does not actually change the rate
        of the media; instead a subclass must do that work.  So when setRate() is called, 
        inform a subclass through a new pure virtual updateRate() function that there's 
        work to be done.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::setRate): Call updateRate()
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateRate): Added.  Set the requested rate.

2011-04-06  Dai Mikurube  <dmikurube@chromium.org>

        Reviewed by David Levin.

        Add QUOTA build flag for unified quota API
        https://bugs.webkit.org/show_bug.cgi?id=57918

        * Configurations/FeatureDefines.xcconfig: Added QUOTA build flag
        * GNUmakefile.am: Added QUOTA build flag
        * WebCore.pri: Added QUOTA build flag

2011-04-06  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57997
        <rdar://problem/9187856> REGRESSION(r75555): ~5-7 MB increase in memory between iBench runs
        Navigating away from a Scrolled page which queues a scroll event that is never dispatched.
        Cancel all enqueued events when detaching the Document the events cannot keep the Document
        alive.

        No change in functionality so no new tests.  

        * dom/Document.cpp:
        (WebCore::Document::detach):
        * dom/EventQueue.cpp:
        (WebCore::EventQueue::cancelQueuedEvents):
        * dom/EventQueue.h:

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

        Reviewed by Darin Adler.

        <rdar://problem/9084761> REGRESSION (r73993): Default Arabic line spacing has gotten very loose when the specified font is not Arabic
        https://bugs.webkit.org/show_bug.cgi?id=58002

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit): The version of Geeza Pro in Snow Leopard
        does not require the vertical metrics tweaks that were needed in Leopard. That the
        tweaks were being applied went mostly unnoticed until r73993, because until then it
        only affected cases where Geeza Pro was specified, not when it occurred as a fallback
        font.

2011-04-06  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 57994 - Move guardRef functionality back to Document
        https://bugs.webkit.org/show_bug.cgi?id=57994

        Move the relevant code parts from TreeScope back into Document.

        No new tests. (no new functionality)

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        * dom/Document.h:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::destroyTreeScopeData):
        * dom/TreeScope.h:

2011-04-06  Ian Henderson  <ianh@apple.com>

        Reviewed by Simon Fraser, Antti Koivisto.

        Fast path for parsing simple CSS values
        https://bugs.webkit.org/show_bug.cgi?id=57964

        Add functions to parse simple color or dimension values, skipping the
        overhead of full CSS parsing.

        Change parseValue to a static method to avoid unnecessary allocation
        of a CSSParser in the fast case.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        Changed to use the new, static parseValue method.
        * css/CSSParser.cpp:
        (WebCore::isColorPropertyID):
        (WebCore::parseColorValue):
        Parses any color accepted by the existing parseColor() static method.
        We must handle color identifiers separately, since parseColor() will
        change 'red' into 'rgb(255, 0, 0)'.
        (WebCore::isSimpleLengthPropertyID):
        (WebCore::parseSimpleLengthValue):
        Parses a value of the form 'NNpx', 'NN%', or 'NN' (when strict is
        false, or 'NN' is '0').  Returns false to fall back to the slow path.
        (WebCore::CSSParser::parseValue):
        * css/CSSParser.h:
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue):
        Changed to use the new, static parseValue method.

2011-04-06  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Make sure JS_EXPORT_PRIVATE is an empty define when we aren't using the export macros.

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

        * config.h:

2011-04-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Antti Koivisto.

        Some minor style resolution optimizations
        https://bugs.webkit.org/show_bug.cgi?id=57996

        A couple of minor optimizations to style-related code.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::isCSSPropertyName):
        (WebCore::JSCSSStyleDeclaration::putDelegate):
        Avoid calling cssPropertyName() twice when setting style on an element.
        
        * css/CSSStyleSelector.cpp:
        (WebCore::useSVGZoomRules):
        (WebCore::CSSStyleSelector::applyProperty):
        Avoid calling isSVGElement() for every property, since only a two properties
        care about it.

2011-04-06  Ian Henderson  <ianh@apple.com>

        Reviewed by Antti Koivisto.

        Unnecessary string allocation in CSSStyleDeclaration::setProperty
        https://bugs.webkit.org/show_bug.cgi?id=57995

        Pass the bool representing the property's importance directly instead
        of constructing a string.

        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::setProperty):

2011-04-06  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Steve Block.

        Make the style of createFunctionOnlyCallback in V8 consistent with the JavaScriptCore version.
        https://bugs.webkit.org/show_bug.cgi?id=57963

        No new tests. LayoutTests/fast/dom/Geolocation/argument-types.html

        * bindings/v8/V8Utilities.h:
        (WebCore::createFunctionOnlyCallback):
        * bindings/v8/custom/V8GeolocationCustom.cpp:
        (WebCore::V8Geolocation::getCurrentPositionCallback):
        (WebCore::V8Geolocation::watchPositionCallback):

2011-04-06  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Support Windows 7 Gestures
        https://bugs.webkit.org/show_bug.cgi?id=49824
        <rdar://problem/8689728>
        
        Move WindowTouch.h from WebKit/win, so it can be used in both WebKit and WebKit2.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/WindowsTouch.h: Copied from WebKit/win/WindowsTouch.h.

2011-04-06  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] We should use USE(QT_MULTIMEDIA) rather than ENABLE(QT_MULTIMEDIA).
        https://bugs.webkit.org/show_bug.cgi?id=57974

        We should use USE(QT_MULTIMEDIA) rather than ENABLE(QT_MULTIMEDIA).

        No new tests needed, just a config flag rename.

        * features.pri:

2011-04-06  Tyler Close  <tjclose@chromium.org>

        Reviewed by Nate Chapin.

        run-bindings-tests reference files out of sync with CodeGenerator*.pm
        https://bugs.webkit.org/show_bug.cgi?id=57967

        * bindings/scripts/test/V8/V8TestCallback.cpp:

2011-04-06  Asanka Herath  <asanka@chromium.org>

        Reviewed by Darin Fisher.

        Add new TargetType: TargetIsFavicon

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

        No new functionality added, so no additional tests.

        * platform/network/ResourceRequestBase.h:

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

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=57981
        
        Update the column count and width computation algorithm for CSS3 multi-column layout 
        to match the revised pseudo-algorithm in the latest draft of the spec.

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

2011-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        borderPaddingMarginStart and borderPaddingMarginEnd should take RenderInline
        https://bugs.webkit.org/show_bug.cgi?id=57965

        Changed the argument types of borderPaddingMarginStart and borderPaddingMarginEnd
        from RenderBoxModelObject to RenderInline since they call marginStart and marginEnd
        instead of marginStartForChild and marginEndForChild respectively.

        Calling these two functions on RenderInline is okay because writing-mode cannot differ
        from that of the containing block.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::borderPaddingMarginStart):
        (WebCore::borderPaddingMarginEnd):
        (WebCore::inlineLogicalWidth):

2011-04-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r83039.
        http://trac.webkit.org/changeset/83039
        https://bugs.webkit.org/show_bug.cgi?id=57978

        introduced a new regression in conjunction to
        ReplaceSelectionCommand (Requested by rniwa on #webkit).

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::init):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):

2011-04-06  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by David Levin.

        Webkit ignores PgUp/PgDown/Home/End in SELECT tag objects
        https://bugs.webkit.org/show_bug.cgi?id=27658

        Test: fast/events/select-element.html

        * dom/SelectElement.cpp:
        (WebCore::nextValidIndex): Moved from elsewhere in the file to be used by other routines.
        (WebCore::nextSelectableListIndexPageAway): Returns a selectable index one page away from the given index.
        (WebCore::nextSelectableListIndex): Implemented with nextValidIndex.
        And converted to a normal static function from a private function of SelectElement.
        (WebCore::previousSelectableListIndex): Implemented with nextValidIndex.
        And converted to a normal static function from a private function of SelectElement.
        (WebCore::firstSelectableListIndex): Returns the first selectable index.
        (WebCore::lastSelectableListIndex): Returns the last selectable index.
        (WebCore::SelectElement::menuListDefaultEventHandler): Converted from C cast to C++ cast.
        (WebCore::SelectElement::listBoxDefaultEventHandler): Adds support for PageUp/PageDown/Home/End with both single and multiple selection.

        * dom/SelectElement.h:
        (WebCore::SelectElement::): Remove nextSelectableListIndex() and previousSelectableListIndex().

        * rendering/RenderListBox.h: Makes RenderListBox::size public so that PageUp/PageDown behavior can use the actual list size rather than that specified in HTML.
        They can differ due to the minimum size imposed by RenderListBox.

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

        Reviewed by Dan Bernstein.

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

        The "More..." link for line clamping no longer shows up in Safari RSS. Fix the isLink() check
        to just look at the style, so that it can find the InlineTextBox and not care that it's a child
        of the link element and not the line box for the link element itself (since that line box got
        culled).

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::applyLineClamp):

2011-04-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=57973 and https://bugs.webkit.org/show_bug.cgi?id=57973
        WK2 icon database should be able to get a CGImage of a specific size

        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::getFirstCGImageRefOfSize):
        
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::getFirstCGImageRefOfSize): Walk the frames of the image until reaching the
          first frame of the requested size.

2011-04-06  Malcolm MacLeod  <malcolm.macleod@tshwanedje.com>

        Reviewed by Kevin Ollivier.

        [wx] Fix cursor handling so that we always call the chrome to set it.
        
        https://bugs.webkit.org/show_bug.cgi?id=57972

        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::setCursor):

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

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=41445
        
        Visited links painting with black background. Make sure that if the visited style has
        the initial background color (transparent) set that we just use the unvisited color.

        Added fast/history/visited-link-background-color.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::visitedDependentColor):

2011-04-06  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed Qt buildfix after r83079.

        * WebCore.pro:

2011-04-06  Dean Jackson  <dino@apple.com>

        Reviewed by Chris Marrin.

        https://bugs.webkit.org/show_bug.cgi?id=56936
        Crash in ImplicitAnimation::~ImplicitAnimation

        Make sure the style and start time waiting lists
        are cleared in the CompositeAnimation destructor. This
        way, no running transitions can be left in a state
        where they are destroyed as the AnimationControllerPrivate
        cleans up.

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::~CompositeAnimation):

2011-04-06  Robert Sesek  <rsesek@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Move code duplicated between the WebKit/mac and WebKit2 down to WebCore because Chromium will need it too
        https://bugs.webkit.org/show_bug.cgi?id=54969

        No change in behavior; no new tests.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::locationAndLengthFromRange): New method from duplicated code in WebKits
        * editing/TextIterator.h:
        * page/Frame.cpp:
        (WebCore::Frame::rangeForPoint): New method from duplicated code in WebKits

2011-04-06  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Steve Block.

        Factoring the creation of 'FunctionOnly' callbacks in JavaScriptCore.
        https://bugs.webkit.org/show_bug.cgi?id=57770

        Create a template from an existing functionality in JSGeolocationCustom.cpp
        to be used by the custom bindings of both Geolocation and the Media Stream API.
        V8 version of this bug: https://bugs.webkit.org/show_bug.cgi?id=57760

        No new tests. LayoutTests/fast/dom/Geolocation/argument-types.html

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/CallbackFunction.cpp: Added.
        (WebCore::checkFunctionOnlyCallback):
        * bindings/js/CallbackFunction.h: Added.
        (WebCore::createFunctionOnlyCallback):
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::JSGeolocation::getCurrentPosition):
        (WebCore::JSGeolocation::watchPosition):

2011-04-06  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Implement fullscreen playback for the GStreamer backend.
        https://bugs.webkit.org/show_bug.cgi?id=56826

        Implement support for fullscreen playback when building the
        Qt port with the GStreamer backend (DEFINES+=USE_GSTREAMER=1).
        The implementation is done in FullScreenVideoQt alongside with
        the Qt Multimedia support.

        No new tests because layout tests cover it. They are not yet activated
        but will be any time soon.

        * platform/graphics/gstreamer/PlatformVideoWindowPrivate.h:
        * platform/graphics/gstreamer/PlatformVideoWindowQt.cpp:
        (FullScreenVideoWindow::FullScreenVideoWindow):
        (FullScreenVideoWindow::setVideoElement):
        (FullScreenVideoWindow::closeEvent):
        (FullScreenVideoWindow::keyPressEvent):
        (FullScreenVideoWindow::event):
        (FullScreenVideoWindow::showFullScreen):
        (FullScreenVideoWindow::hideCursor):
        (FullScreenVideoWindow::showCursor):

2011-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Dimitri Glazkov.

        Bundle lineLeftOffset and lineRightOffset as a class
        https://bugs.webkit.org/show_bug.cgi?id=57851

        Added a new class LineOffsets that encapsulates lineLeftOffset and lineRightOffset.
        The patch makes clear that lineLeftOffset and lineRightOffset are never read individually
        and only the difference is used to compute the width.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::skipLeadingWhitespace): Takes LineOffsets instead of two integers.
        (WebCore::LineOffsets::LineOffsets): Added.
        (WebCore::LineOffsets::width): Added.
        (WebCore::LineOffsets::setLeft): Added.
        (WebCore::LineOffsets::setRight): Added.
        (WebCore::RenderBlock::findNextLineBreak): Calls skipLeadingWhitespace and positionNewFloatOnLine.
        (WebCore::RenderBlock::positionNewFloatOnLine): Takes LineOffsets instead of two integers.

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

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=57916
        
        Implement an optimization to the line box tree to cull out most of the intermediate
        line boxes that can occur between the root line box and the leaves of the tree (images
        and text).

        RenderInlines now have a boolean member, m_alwaysCreateLineBoxes,
        that starts off as false. Only if it gets flipped to true will there be any line boxes
        created for that RenderInline.
        
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusDirectionally):
        Adjust the ordering of updateLayout calls to make sure rects aren't queried unless layout
        is up to date.

        * page/SpatialNavigation.cpp:
        (WebCore::hasOffscreenRect):
        (WebCore::nodeRectInAbsoluteCoordinates):
        Add asserts in spatial navigation code to catch any future bad queries that might be made
        for rectangles without layout being up to date.

        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::uniteIfNonZero):
        * platform/graphics/FloatRect.h:
        * platform/graphics/IntRect.cpp:
        (WebCore::IntRect::uniteIfNonZero):
        * platform/graphics/IntRect.h:
        Add a new unite function that is useful for the render tree to FloatRect and IntRect.  This
        version allows rect unites to happen if either width or height is nonzero.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::addNodeToRectBasedTestResult):
        Make sure rect-based hit testing properly adds in culled inline ancestors to the set of nodes
        if content inside those inlines is hit.

        * rendering/InlineBox.h:
        (WebCore::InlineBox::logicalFrameRect):
        Fix a bug in this function for obtaining the logical frame rect of an inline box.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        addToLine now also checks line gap in the line box tree optimization checks.
    
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::InlineFlowBox::computeOverflow):
        * rendering/InlineFlowBox.h:
        Rewritten to add the text box overflow to the text box itself.

         * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::destroy):
        Destroy has been changed to call a helper function to remove and destroy the line boxes that
        is now called from one additional spot.

        (WebCore::InlineTextBox::logicalOverflowRect):
        (WebCore::InlineTextBox::setLogicalOverflowRect):
        Text boxes now cache their own overflow in a global hash table.

        (WebCore::InlineTextBox::baselinePosition):
        (WebCore::InlineTextBox::lineHeight):
        Changed to not assume that the parent line box's renderer is the RenderText's immediate
        parent, since intermediate line boxes may have been culled.

        (WebCore::InlineTextBox::paint):
        Paint now properly checks only the text box overflow instead of the parent line box's overflow.

        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::logicalTopVisualOverflow):
        (WebCore::InlineTextBox::logicalBottomVisualOverflow):
        (WebCore::InlineTextBox::logicalLeftVisualOverflow):
        (WebCore::InlineTextBox::logicalRightVisualOverflow):
        New accessors to obtain overflow for inline text boxes.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):
        updateFirstLetter now removes text boxes from the line box tree before it destroys them, since those
        text boxes may not have anything in between them and the block that contains the inline first letter
        container.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::createLineBoxes):
        The culling optimization is done here.  Only if the RenderInline says that boxes are allowed will they
        be created.

        (WebCore::RenderBlock::layoutInlineChildren):
        The state of the RenderInline is updated here, in case it is discovered that line boxes are now needed.
        This is done before any lines are built.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::RenderInline):
        The new m_alwaysCreateLineBoxes flag has been added to the constructor.

        (WebCore::RenderInline::styleDidChange):
        An initial update of the m_alwaysCreateLineBoxes happens here for things that can be checked immediately
        (like having a layer, borders, padding, margins or backgrounds).  Some checks that depend on examining
        the RenderInline's parent (including first line styles) happen later in layoutInlineChildren.

        (WebCore::RenderInline::updateAlwaysCreateLineBoxes):
        The function called by layoutInlineChildren to check parent and child style differences (e.g., font,
        vertical alignment, line height, etc.).

        (WebCore::RenderInline::absoluteRects):
        (WebCore::RenderInline::culledInlineAbsoluteRects):
        absoluteRects calls culledInlineAbsoluteRects when m_alwaysCreateLineBoxes is false.

        (WebCore::RenderInline::absoluteQuads):
        (WebCore::RenderInline::culledInlineAbsoluteQuads):
        absoluteQuads calls culledInlineAbsoluteQuads when m_alwaysCreateLineBoxes is false.

        (WebCore::RenderInline::offsetLeft):
        (WebCore::RenderInline::offsetTop):
        offsetLeft and offsetTop now check descendant renderers when m_alwaysCreateLineBoxes is false.

        (WebCore::RenderInline::linesBoundingBox):
        (WebCore::RenderInline::culledInlineBoundingBox):
        lineBoundingBox calls culledInlineBoundingBox when m_alwaysCreateLineBoxes is false.

        (WebCore::RenderInline::culledInlineFirstLineBox):
        (WebCore::RenderInline::culledInlineLastLineBox):
        Helpers that return the first and last line box descendants. Used by firstLineBoxIncludingCulling and
        lastLineBoxIncludingCulling (which are in turn called by offsetLeft and offsetTop).

        (WebCore::RenderInline::culledInlineVisualOverflowBoundingBox):
        (WebCore::RenderInline::linesVisualOverflowBoundingBox):
        linesVisualOverflowBoundingBox calls culledInlineVisualOverflowBoundingBox when m_alwaysCreateLineBoxes is false.

        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        The initial bailout check is now done using firstLineBoxIncludingCulling instead of just firstLineBox.

        (WebCore::RenderInline::dirtyLineBoxes):
        dirtyLineBoxes now crawls into descendants to figure out which root lines to dirty when
        m_alwaysCreateLineBoxes is false.

        (WebCore::RenderInline::createAndAppendInlineFlowBox):
        Clear the m_alwaysCreateLineBoxes if a box gets added anyway. This happens for leaf inline flows and also
        when line-box-contain is set to an unusual value.

        (WebCore::RenderInline::addFocusRingRects):
        Used culledInlineAbsoluteRects in place of the line box walk when m_alwaysCreateLineBoxes is false.

        * rendering/RenderInline.h:
        (WebCore::RenderInline::firstLineBoxIncludingCulling):
        (WebCore::RenderInline::lastLineBoxIncludingCulling):
        Helpers used in a few places (like offsetLeft and offsetTop), mostly in places where the existence of a box
        is all that needs checking.

        (WebCore::RenderInline::alwaysCreateLineBoxes):
        (WebCore::RenderInline::setAlwaysCreateLineBoxes):
        Functions for getting and setting the m_alwaysCreateLineBoxes flag.

        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):
        Modified to use firstLineBoxIncludingCulling and lastLineBoxIncludingCulling to ensure the right set of
        lines get dirtied.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::removeAndDestroyTextBoxes):
        New helper invoked by destroy and also from updateFirstLetter.

        (WebCore::RenderText::destroy):
        Changed to call removeAndDestroyTextBoxes.

        (WebCore::RenderText::absoluteRects):
        Fixed to be properly physical instead of logical.

        (WebCore::RenderText::linesVisualOverflowBoundingBox):
        New implementation for RenderText that gives the bounding box of the text boxes including overflow from
        shadows, glyphs, text-stroke, etc.  Used by RenderInline::culledInlineVisualOverflowBoundingBox.

        * rendering/RenderText.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::RenderSVGInline):
        RenderSVGInline always sets m_alwaysCreateLineBoxes to true so that SVG is unaffected by this optimization.

        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::layoutCharactersInTextBoxes):
        (WebCore::SVGRootInlineBox::layoutChildBoxes):
        Move the isInlineFlowBox asserts to after the generated content skips, since the generated content boxes are
        now InlineTextBoxes (the enclosing InlineFlowBoxes got culled).

2011-04-05  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: Drag & Drop Gmail Attachments doesn't work.
        https://bugs.webkit.org/show_bug.cgi?id=57909
        <rdar://problem/9103220>

        In WebKit2 we cannot rely on the value returned by platformData() that
        on Mac returns an NSDraggingInfo object. This is available only in the UI
        process. Therefore we should use m_pasteboard instead.
        We cannot change what platformData() returns on Mac, since there are
        delegate methods that receive a NSDraggingInfo object (only in WebKit).
        
        * platform/DragData.h:
        (WebCore::DragData::pasteboard): Added.
        * platform/mac/ClipboardMac.mm:
        (WebCore::Clipboard::create): Changed to use pasteboard() instead of platformData().
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::asColor): Replaced references to m_platformData with m_pasteboard.
        (WebCore::DragData::asURL): Same as above.

2011-04-06  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Darin Adler.

        ClipboardWin has unused variables "ExceptionCode ec"
        https://bugs.webkit.org/show_bug.cgi?id=57952

        Remove the unused variable.

        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::declareAndWriteDragImage):
        (WebCore::ClipboardWin::writePlainText):

2011-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Dimitri Glazkov.

        Split getBorderPaddingMargin into two functions
        https://bugs.webkit.org/show_bug.cgi?id=57947

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::borderPaddingMarginStart): Extracted from getBorderPaddingMargin.
        (WebCore::borderPaddingMarginEnd): Ditto.
        (WebCore::inlineLogicalWidth): Calls borderPaddingMarginStart and borderPaddingMarginEnd.
        (WebCore::RenderBlock::findNextLineBreak): Ditto.

2011-04-06  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        [Refactoring] <progress> should not have manual layout code.
        https://bugs.webkit.org/show_bug.cgi?id=57801

        - Simplified RenderProgress, removing its custom layout code
        - Introducing ProgressValueElement and ProgressBarElement, replacing
          ProgressBarValueElement. 
        
        Now the structure is almost identical to <meter>, 
        other than:
        - RenderProgress has animated painting, thus manages its own timer.
        - Both ProgressValueElement and ProgressBarElement has pseudo classes
          which don't changes during its lifetime.
       
        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/html.css:
        (progress):
        (progress::-webkit-progress-bar):
        (progress::-webkit-progress-value):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::~HTMLProgressElement):
        (WebCore::HTMLProgressElement::create):
        (WebCore::HTMLProgressElement::attach):
        (WebCore::HTMLProgressElement::didElementStateChange):
        (WebCore::HTMLProgressElement::createShadowSubtree):
        * html/HTMLProgressElement.h:
        * html/shadow/ProgressShadowElement.cpp: Copied from Source/WebCore/html/shadow/ProgressBarValueElement.h.
        (WebCore::ProgressShadowElement::ProgressShadowElement):
        (WebCore::ProgressShadowElement::progressElement):
        (WebCore::ProgressShadowElement::rendererIsNeeded):
        (WebCore::ProgressBarElement::shadowPseudoId):
        (WebCore::ProgressValueElement::shadowPseudoId):
        (WebCore::ProgressValueElement::setWidthPercentage):
        * html/shadow/ProgressShadowElement.h: Renamed from Source/WebCore/html/shadow/ProgressBarValueElement.h.
        (WebCore::ProgressBarElement::ProgressBarElement):
        (WebCore::ProgressBarElement::create):
        (WebCore::ProgressValueElement::ProgressValueElement):
        (WebCore::ProgressValueElement::create):
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::RenderProgress):
        (WebCore::RenderProgress::updateFromElement):
        (WebCore::RenderProgress::animationTimerFired):
        * rendering/RenderProgress.h:
        (WebCore::RenderProgress::requiresForcedStyleRecalcPropagation):
        (WebCore::RenderProgress::canHaveChildren):

2011-04-06  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Do not reference AccessibilityRenderObject from platform dependent code
        https://bugs.webkit.org/show_bug.cgi?id=57955

        Do not reference AccessibilityRenderObject from platform specific code

        Added new virtual functions to AccessibilityObject.h and removed
        explicit references to AccessibilityRenderObject from GTK code.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::renderer): New virtual method,
        returning 0 by default. Overriden by AccessibilityRenderObject.
        (WebCore::AccessibilityObject::correspondingLabelForControlElement):
        New virtual method, returning 0 by default. It complements the
        already present method correspondingControlForLabelElement().

        * accessibility/AccessibilityRenderObject.h:
        (WebCore::AccessibilityRenderObject::renderer): Made virtual.

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::emitTextChanged): Reference  AccessibilityObject,
        instead of AccessibilityRenderObject.
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification):
        Ditto.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_name): Do not reference
        AccessibilityRenderObject.
        (webkit_accessible_get_description): Ditto.
        (setAtkRelationSetFromCoreObject): Ditto.
        (optionFromList): Ditto.
        (optionFromSelection): Ditto.
        (webkit_accessible_selection_clear_selection): Ditto.
        (webkit_accessible_selection_get_selection_count): Ditto.
        (webkit_accessible_selection_select_all_selection): Ditto.
        (textForObject): Ditto.
        (webkit_accessible_text_get_text): Ditto.
        (getPangoLayoutForAtk): Ditto.
        (webkit_accessible_text_get_caret_offset): Ditto.
        (baselinePositionForRenderObject): Ditto.
        (getAttributeSetForAccessibilityObject): Ditto.
        (accessibilityObjectLength): Ditto.
        (getSelectionOffsetsForObject): Ditto.
        (webkit_accessible_text_set_selection): Ditto.
        (webkit_accessible_text_set_caret_offset): Ditto.
        (webkit_accessible_table_get_caption): Ditto.
        (getInterfaceMaskFromObject): Ditto.

        * accessibility/gtk/WebKitAccessibleHyperlink.cpp:
        (getRangeLengthForObject): Ditto.

        Removed unused renderer() method from AccessibilityMenuList.

        * accessibility/AccessibilityMenuList.h: Removed unused method.
        * accessibility/AccessibilityMenuList.cpp: Removed unused method.

2011-04-06  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Javascipt warning link expand and overlap with icons in js console
        https://bugs.webkit.org/show_bug.cgi?id=57939

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

2011-04-06  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Beautify parameter names in Inspector.json (CSS domain)
        https://bugs.webkit.org/show_bug.cgi?id=57931

        * inspector/Inspector.json:

2011-04-06  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        [Mac] WebCore need to notify AppKit spell checker after user has modified autocorrected text.
        https://bugs.webkit.org/show_bug.cgi?id=57665
        <rdar://problem/7350477>

        We need to track how user modified an autocorrected word. If he changed it back to original
        text, we want to record AutocorrectionReverted response. And if he changed it to something
        else, we want to record AutocorrectionEdited response.

        To achieve this, we need to distringuish between text replacement caused by autocorrection
        from that due to other causes, such as reversion, text substitution, etc. So we added a new
        marker type "Autocorrected". We also need to be able to check for correction, even when we
        don't intend to actually carry out replacement. For this, we introduced a new TextCheckingOption
        value, "CheckForCorrection".

        We also added DocumentMarkerController::markersInRange() to retrieve a vector of markers in
        specified range, and of specified type.

        * dom/DocumentMarker.h:
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::markersInRange):
        (WebCore::DocumentMarkerController::hasMarkers):
        * dom/DocumentMarkerController.h:
        * editing/Editor.cpp:
        (WebCore::markerTypesForAutocorrection):
        (WebCore::markersHaveIdenticalDescription):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::recordSpellcheckerResponseForModifiedCorrection):
        (WebCore::Editor::changeBackToReplacedString):
        (WebCore::Editor::markMisspellingsAndBadGrammar):
        (WebCore::Editor::applyCorrectionPanelInfo):
        (WebCore::Editor::unappliedSpellCorrection):
        (WebCore::Editor::textCheckingTypeMaskFor):
        * editing/Editor.h:
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::doApply):

2011-04-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r83045.
        http://trac.webkit.org/changeset/83045
        https://bugs.webkit.org/show_bug.cgi?id=57953

        Broke win layout tests (Requested by podivilov on #webkit).

        * GNUmakefile.am:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._addScript):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):

2011-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Moved the declaration of positionNewFloatOnLine in RenderBlock.h after r83042.

        * rendering/RenderBlock.h:

2011-03-27  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Re-draw the <input> fields for Qt Mobile Theme to do not override elements already styled.
        https://bugs.webkit.org/show_bug.cgi?id=57007

        * CodeGenerators.pri:
        * css/themeQtMobile.css: Removed.
        * platform/qt/QtMobileWebStyle.cpp:
        (drawRectangularControlBackground):
        (QtMobileWebStyle::drawPrimitive):
        (QtMobileWebStyle::drawComplexControl):
        * platform/qt/QtMobileWebStyle.h:
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::isControlStyled):
        (WebCore::RenderThemeQt::paintTextField):

2011-04-06  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        [Mac] When autocorrection occurs without showing correction panel, WebCore need to post accessibility notification.
        https://bugs.webkit.org/show_bug.cgi?id=57800
        <rdar://problem/9218223>

        Defined a new accessibility notification type, AXAutocorrectionOccured. Editor::markAllMisspellingsAndBadGrammarInRanges()
        now posts said notification when any autocorrection or text replacement (e.g. replacing "(c)" with copyright mark) takes place.

        * accessibility/AXObjectCache.h:
        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):

2011-04-06  Martin Robinson  <mrobinson@igalia.com>

        Build fix for debug Cairo builds.

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::pushImageMask): Update the reference to m_maskInformation.

2011-04-06  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Style fix for QtMobileWebStyle.h
        https://bugs.webkit.org/show_bug.cgi?id=57708

        * platform/qt/QtMobileWebStyle.h:

2011-04-06  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Darin Adler.

        Invalid color #{predefined colorName} is accepted by the CSS parser.
        https://bugs.webkit.org/show_bug.cgi?id=15360

        Test: fast/css/invalid-predefined-color.html

        * css/CSSGrammar.y: Remove superfluous hexcolor production.
        * css/tokenizer.flex: A hexadecimal number should consist of [a-fA-F0-9] values ({h}).

2011-03-30  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: add test for script formatter worker.
        https://bugs.webkit.org/show_bug.cgi?id=57447

        Test: inspector/debugger/script-formatter.html

        * GNUmakefile.am:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):

2011-04-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Cairo] Hide the details of image masking in PlatformContextCairo
        https://bugs.webkit.org/show_bug.cgi?id=57878

        No new tests. This is just a refactor.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::savePlatformState): Call into PlatformContextCairo now to
        do the actual cairo_save. Remove information about image masking.
        (WebCore::GraphicsContext::restorePlatformState): Call into PlatformContextCairo now to
        do the actual cairo_restore. Remove information about image masking.
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::clip): Use PlatformContextCairo here now.
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::restore): Added.
        (WebCore::PlatformContextCairo::save): Added.
        (WebCore::PlatformContextCairo::pushImageMask): Added.
        * platform/graphics/cairo/PlatformContextCairo.h:
        (WebCore::ImageMaskInformation::update): Moved from GraphicsContextPlatformPrivateCairo.h.
        (WebCore::ImageMaskInformation::isValid): Ditto.
        (WebCore::ImageMaskInformation::maskSurface): Ditto.
        (WebCore::ImageMaskInformation::maskRect): Ditto.

2011-04-02  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Radio buttons are showing wrong with mobile theme
        https://bugs.webkit.org/show_bug.cgi?id=57706

        * platform/qt/QtMobileWebStyle.cpp:
        (QtMobileWebStyle::drawRadio):

2011-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Move RenderBlock::positionNewFloatOnLine to RenderBlockLineLayout.cpp
        https://bugs.webkit.org/show_bug.cgi?id=57943

        * rendering/RenderBlock.cpp: Removed positionNewFloatOnLine.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::positionNewFloatOnLine): Moved from RenderBlock.cpp

2011-04-05  Diego Gonzalez  <diegohcg@webkit.org>

        Buildfix after r82125.

        [Qt] QtWebKit will not compile with QT_ASCII_CAST_WARNINGS enabled
        https://bugs.webkit.org/show_bug.cgi?id=57087

        * platform/qt/QtMobileWebStyle.cpp:
        (QtMobileWebStyle::findChecker):
        (QtMobileWebStyle::findRadio):
        (QtMobileWebStyle::findComboButton):

2011-04-06  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: inline script imports in ScriptFormatterWorker.js so it works in Safari release.
        https://bugs.webkit.org/show_bug.cgi?id=57641

        * WebCore.xcodeproj/project.pbxproj:
        * gyp/streamline-inspector-source.sh:
        * inspector/combine-javascript-resources.pl: Renamed from Source/WebCore/combine-javascript-resources.
        * inspector/inline-javascript-imports.py: Added.

2011-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION (r46914, r48764): When typing in Mail, line wrapping frequently occurs in the middle of words
        https://bugs.webkit.org/show_bug.cgi?id=57872

        r46914 initially introduced a regression by replacing calls to styleAtPosition by editingStyleAtPosition
        because editingStyleAtPosition did not avoid tab span to obtain the computed style unlike styleAtPosition.

        r46914 also introduced a regression by cloning hierarchy under new block at the insertion position without
        avoiding the tab span.

        Fixed the both regressions by avoiding tab spans when computing the editing style and when cloning hierarchy.

        Test: editing/inserting/insert-paragraph-separator-tab-span.html

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::init): Always avoid a tab span when computing the editing style.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Avoid cloning tab spans and inserting a paragraph
        separator into a paragraph separator.

2011-04-06  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        Add member functions for determining line/paragraph separation to InlineIterator
        https://bugs.webkit.org/show_bug.cgi?id=57938

        Adding atTextParagraphSeparator and atParagraphSeparator inline convenience functions to
        InlineIterator, where it makes far more sense for them to be. Also moving
        shouldPreserveNewline to RenderObject and renaming it preservesNewline.

        No new tests as this provides no new functionality.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::atTextParagraphSeparator):
        (WebCore::InlineIterator::atParagraphSeparator):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::requiresLineBox):
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::preservesNewline):

2011-04-05  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Range insertNode function does not update content in the inspector
        https://bugs.webkit.org/show_bug.cgi?id=57829

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):

2011-04-06  Alejandro G. Castro  <alex@igalia.com>

        Fix GTK3 compilation after r82962.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::paintToggle):
        (WebCore::renderButton):
        (WebCore::RenderThemeGtk::paintMenuList):
        (WebCore::RenderThemeGtk::paintTextField):
        (WebCore::RenderThemeGtk::paintSliderTrack):
        (WebCore::RenderThemeGtk::paintSliderThumb):
        (WebCore::RenderThemeGtk::paintProgressBar):
        (WebCore::paintSpinArrowButton):
        * platform/gtk/ScrollbarThemeGtk3.cpp:
        (WebCore::ScrollbarThemeGtk::paintTrackBackground):
        (WebCore::ScrollbarThemeGtk::paintScrollbarBackground):
        (WebCore::ScrollbarThemeGtk::paintThumb):
        (WebCore::ScrollbarThemeGtk::paintButton):

2011-04-06  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Extensions API] remove inspectedPage.* events
        https://bugs.webkit.org/show_bug.cgi?id=57763

        - Removed webInspector.inspectedPage.* events
        - moved onNavigated to webInspector.resources

        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI):
        (WebInspector.injectedExtensionAPI.InspectedWindow):
        * inspector/front-end/ExtensionAPISchema.json:
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype.notifyInspectedURLChanged):
        * inspector/front-end/inspector.js:
        (WebInspector.domContentEventFired):
        (WebInspector.loadEventFired):
        (WebInspector.inspectedURLChanged):

2011-04-06  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Antti Koivisto.

        Add <head> to the simpleUserAgentStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=57915

        * css/CSSStyleSelector.cpp:
        (WebCore::elementCanUseSimpleDefaultStyle): add head to the
        simple stylesheet, display:none.

2011-04-05  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Add layout test for Summary view of detailed heap snapshots.
        https://bugs.webkit.org/show_bug.cgi?id=57856

        Test: inspector/profiler/detailed-heapshots-summary.html

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid):
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype._populate.doPopulate):
        (WebInspector.HeapSnapshotGridNode.prototype._populate):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.doSort):
        (WebInspector.HeapSnapshotGridNode.prototype.sort):
        (WebInspector.HeapSnapshotDiffNode.prototype.populateChildren):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.sortingChanged):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot.doParse):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot):

2011-04-06  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        [Qt] SmartReplaceQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=40261

        This patch does not require new test cases.

        * editing/qt/SmartReplaceQt.cpp:
        (WebCore::isCharacterSmartReplaceExempt):

2011-04-06  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Ryosuke Niwa.

        REGRESSION(r81328): Null pointer crash in canAppendNewLineFeed when selection isn't inside an editable element
        https://bugs.webkit.org/show_bug.cgi?id=57755

        Test: editing/execCommand/insert-line-break-onload.html

        * editing/TypingCommand.cpp:
        (WebCore::canAppendNewLineFeed): Added null pointer check for rootEditableElement().

2011-04-05  Antti Koivisto  <antti@apple.com>

        Reviewed by Cameron Zwarich.

        Avoid calling currentTime() from FrameView::adjustedDeferredRepaintDelay() when repaints are deferred
        https://bugs.webkit.org/show_bug.cgi?id=57914

        Don't call adjustedDeferredRepaintDelay unnecessarily.

        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::adjustedDeferredRepaintDelay):

2011-04-05  Steve VanDeBogart  <vandebo@chromium.org>

        Reviewed by David Levin.

        Update call to SkAdvancedTypefaceMetrics to new API.
        https://bugs.webkit.org/show_bug.cgi?id=57887

        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::emSizeInFontUnits):

2011-04-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        Rename event dispatching functions after form event removal
        https://bugs.webkit.org/show_bug.cgi?id=57908

        * dom/InputElement.cpp:
        (WebCore::InputElement::setValueFromRenderer):
        * dom/Node.cpp:
        (WebCore::Node::dispatchChangeEvent):
        (WebCore::Node::dispatchInputEvent):
        (WebCore::Node::defaultEventHandler):
        * dom/Node.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::dispatchFormControlChangeEvent):
        (WebCore::HTMLFormControlElement::dispatchFormControlInputEvent):
        (WebCore::HTMLTextFormControlElement::dispatchFormControlChangeEvent):
        Renamed "events" to "event", since there is only one event to dispatch now.

2011-04-05  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        [Qt] DragControllerQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=40258

        This patch does not require new test cases.

        * page/qt/DragControllerQt.cpp:
        (WebCore::DragController::dragOperation):

2011-04-05  Steve VanDeBogart  <vandebo@chromium.org>

        Reviewed by David Levin.

        Update deprecated include: platform_canvas_win.h to platform_canvas.h.
        https://bugs.webkit.org/show_bug.cgi?id=57896

        * platform/graphics/chromium/FontChromiumWin.cpp:

2011-04-05  Darin Adler  <darin@apple.com>

        Try to fix Leopard bots.

        * platform/mac/HTMLConverter.mm: Fix #if back the way Alexey seems
        to have intended it.

2011-04-05  Darin Adler  <darin@apple.com>

        Try to fix Leopard bots.

        * platform/mac/HTMLConverter.mm: Move declarations of new functions
        inside the appropriate #if.

2011-04-05  Adrienne Walker  <enne@google.com>

        Reviewed by Tony Chang.

        Correctly set color when using skia's fillRoundedRect.
        https://bugs.webkit.org/show_bug.cgi?id=57907

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

2011-04-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        Move attributedStringFromRange down to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=57905

        No change in behavior, so no new tests.

        Also tweaked HTMLConverter to not use methods defined in WebKit.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/HTMLConverter.h:
        * platform/mac/HTMLConverter.mm:
        (-[WebHTMLConverter _newTabForElement:]):
        (-[WebHTMLConverter _addAttachmentForElement:URL:needsParagraph:usePlaceholder:]):
        (+[WebHTMLConverter editingAttributedStringFromRange:]):
        (fileWrapperForURL):
        (fileWrapperForElement):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):
        * platform/mac/WebNSAttributedStringExtras.h: Copied from Source/WebKit/mac/Misc/WebNSAttributedStringExtras.h.
        * platform/mac/WebNSAttributedStringExtras.mm: Copied from Source/WebKit/mac/Misc/WebNSAttributedStringExtras.mm.
        (WebCore::attributedStringByStrippingAttachmentCharacters):

2011-04-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Rename variables in border drawing code for readability
        https://bugs.webkit.org/show_bug.cgi?id=57894

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        (WebCore::RenderObject::drawBoxSideFromPath):
        (WebCore::RenderObject::drawArcForBoxSide):

2011-04-05  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        Defer repaints during style recalc
        https://bugs.webkit.org/show_bug.cgi?id=57886

        This reduces the need to do (often expensive) platform surface invalidation.
        We already do this during layout but style recalculation may trigger
        invalidation as well.
    
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):

2011-04-05  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        HTML5 Player Has no Fullscreen Mode
        https://bugs.webkit.org/show_bug.cgi?id=57795

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::supportsFullscreen): Call the new ChromeClient API
            supportsFullScreenForElement() before the old supportsFullScreenForNode() API.

2011-04-05  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: fix data url's status and timing the network panel.
        https://bugs.webkit.org/show_bug.cgi?id=53066

        Added data url support for status of network resources.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._refreshStatusCell):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.isDataURL):

2011-04-04  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Adam Barth.

        [V8] Keep dirty primitive CSS values alive.
        https://bugs.webkit.org/show_bug.cgi?id=57810

        * bindings/v8/V8GCController.cpp:
        (WebCore::GrouperVisitor::visitDOMWrapper):

2011-04-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adele Peterson.

        Add a fast path for simple color backgrounds
        https://bugs.webkit.org/show_bug.cgi?id=57773

        Add a fast path for drawing simple color backgrounds. It's
        faster to fill a path or rect than it is to set up a clip,
        and then paint the rect.
        
        No visible behavior change so no new tests.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):

2011-04-05  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed EFL build fix for r82962.

        * CMakeListsEfl.txt:

2011-04-05  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add support for offline audio rendering to AudioContext API
        https://bugs.webkit.org/show_bug.cgi?id=57676

        No new tests since audio API is not yet implemented.

        * DerivedSources.make:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContextConstructor::constructJSAudioContext):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallback):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):
        * dom/Event.cpp:
        (WebCore::Event::isOfflineAudioCompletionEvent):
        * dom/Event.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toAudioContext):
        * dom/EventTarget.h:
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::waitForLoaderThreadCompletion):
        * platform/audio/HRTFDatabaseLoader.h:
        (WebCore::HRTFDatabaseLoader::loader):
        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createOfflineContext):
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::constructCommon):
        (WebCore::AudioContext::document):
        (WebCore::AudioContext::scriptExecutionContext):
        (WebCore::AudioContext::toAudioContext):
        (WebCore::AudioContext::startRendering):
        (WebCore::AudioContext::fireCompletionEvent):
        * webaudio/AudioContext.h:
        (WebCore::AudioContext::isOfflineContext):
        (WebCore::AudioContext::eventTargetData):
        (WebCore::AudioContext::ensureEventTargetData):
        (WebCore::AudioContext::refEventTarget):
        (WebCore::AudioContext::derefEventTarget):
        * webaudio/AudioContext.idl:
        * webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::AudioDestinationNode):
        * webaudio/AudioDestinationNode.h:
        (WebCore::AudioDestinationNode::reset):
        (WebCore::AudioDestinationNode::numberOfChannels):
        * webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::setBuffer):
        * webaudio/DefaultAudioDestinationNode.cpp: Added.
        (WebCore::DefaultAudioDestinationNode::DefaultAudioDestinationNode):
        (WebCore::DefaultAudioDestinationNode::~DefaultAudioDestinationNode):
        (WebCore::DefaultAudioDestinationNode::initialize):
        (WebCore::DefaultAudioDestinationNode::uninitialize):
        (WebCore::DefaultAudioDestinationNode::startRendering):
        * webaudio/DefaultAudioDestinationNode.h: Added.
        (WebCore::DefaultAudioDestinationNode::create):
        (WebCore::DefaultAudioDestinationNode::sampleRate):
        * webaudio/OfflineAudioCompletionEvent.cpp: Added.
        (WebCore::OfflineAudioCompletionEvent::create):
        (WebCore::OfflineAudioCompletionEvent::OfflineAudioCompletionEvent):
        (WebCore::OfflineAudioCompletionEvent::~OfflineAudioCompletionEvent):
        (WebCore::OfflineAudioCompletionEvent::isOfflineAudioCompletionEvent):
        * webaudio/OfflineAudioCompletionEvent.h: Added.
        (WebCore::OfflineAudioCompletionEvent::renderedBuffer):
        * webaudio/OfflineAudioCompletionEvent.idl: Added.
        * webaudio/OfflineAudioDestinationNode.cpp: Added.
        (WebCore::OfflineAudioDestinationNode::OfflineAudioDestinationNode):
        (WebCore::OfflineAudioDestinationNode::~OfflineAudioDestinationNode):
        (WebCore::OfflineAudioDestinationNode::initialize):
        (WebCore::OfflineAudioDestinationNode::uninitialize):
        (WebCore::OfflineAudioDestinationNode::startRendering):
        (WebCore::OfflineAudioDestinationNode::renderEntry):
        (WebCore::OfflineAudioDestinationNode::render):
        (WebCore::OfflineAudioDestinationNode::notifyCompleteDispatch):
        (WebCore::OfflineAudioDestinationNode::notifyComplete):
        * webaudio/OfflineAudioDestinationNode.h: Added.
        (WebCore::OfflineAudioDestinationNode::create):
        (WebCore::OfflineAudioDestinationNode::sampleRate):

2011-04-05  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [Cairo] Better separate the concerns of GraphicsContextCairo
        https://bugs.webkit.org/show_bug.cgi?id=55150

        Add a PlatformContextCairo which right now stores the cairo_t* for a
        GraphicsContextCairo. Later patches will move logic for tracking ContextShadow
        and image masking layers into this PlatformContextCairo class.

        No new tests. This patch is only a code cleanup.

        * GNUmakefile.am:
        * platform/graphics/GraphicsContext.h: The platform context is no longer a
        cairo_t, but our new class the PlatformContextCairo.
        * platform/graphics/cairo/ContextShadowCairo.cpp: Updated to reflect new class.j
        * platform/graphics/cairo/FontCairo.cpp: Ditto.
        * platform/graphics/cairo/GradientCairo.cpp: Ditto.
        * platform/graphics/cairo/GraphicsContextCairo.cpp: Mostly mechanical
        changes which now reference platformContext()->cr() to get the cairo_t.
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h: Now hold the
        PlatformContextCairo instead of the cairo_t.
        * platform/graphics/cairo/ImageBufferCairo.cpp: Update to reflect new class.
        * platform/graphics/cairo/ImageCairo.cpp: Ditto.
        * platform/graphics/cairo/PathCairo.cpp: Ditto.
        * platform/graphics/cairo/PlatformContextCairo.cpp: Added.
        * platform/graphics/cairo/PlatformContextCairo.h: Added.
        * platform/graphics/gtk/FontGtk.cpp: Update to reflect new class.
        * platform/graphics/gtk/IconGtk.cpp: Ditto.
        * platform/graphics/win/GraphicsContextCairoWin.cpp: Now fill out
        m_data with a private section containing the platform context instead of
        just a cairo_t.
        * platform/gtk/RenderThemeGtk.cpp: Update to reflect new class.
        * platform/gtk/WidgetRenderingContext.cpp: Ditto.
        (WebCore::WidgetRenderingContext::~WidgetRenderingContext): Ditto.
        * plugins/gtk/PluginViewGtk.cpp: Ditto.

2011-04-05  David Dorwin  <ddorwin@chromium.org>

        Reviewed by David Levin.

        Fullscreen code assumes all layers use GPU compositing when USE(ACCELERATED_COMPOSITING)
        https://bugs.webkit.org/show_bug.cgi?id=57400

        Check whether the full screen renderer layer is being composited by the GPU before assuming that the backing is valid. 
        Accelerated compositing may be compiled in but disabled at runtime or for some elements.

        Tests: Fullscreen layout tests on Chromium.

        * dom/Document.cpp:
        (WebCore::Document::webkitWillEnterFullScreenForElement):
        (WebCore::Document::webkitDidEnterFullScreenForElement):
        (WebCore::Document::webkitWillExitFullScreenForElement):

2011-04-05  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Regression: Invalid write in SVGTextLayoutEngine
        https://bugs.webkit.org/show_bug.cgi?id=57721

        Properly stop layout if all metrics object refer to zero-width/height characters,
        which can happen for instance when using <text font-size="0">.

        Test: svg/text/font-size-null-assertion.svg

        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::currentLogicalCharacterAttributes):
        (WebCore::SVGTextLayoutEngine::currentLogicalCharacterMetrics):

2011-04-04 MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.

        [Refactoring] SpellCheckingResult should be replaced with TextCheckingResult
        https://bugs.webkit.org/show_bug.cgi?id=56085
        
        Removed WebCore::SpellCheckingResult and replaced it with TextCheckingResult.
        This change also added TextCheckerClient::requestCheckingOfString() should have
        TextCheckingTypeMask as a parameter to control text checking type.

        * WebCore.exp.in:
        * editing/Editor.cpp:
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::textCheckingTypeMaskFor): Extracted from markAllMisspellingsAndBadGrammarInRanges()
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::requestCheckingFor): Added a parameter.
        (WebCore::SpellChecker::markAt): Extracted from didCheck(), Added a check for the GrammarDetail object.
        (WebCore::SpellChecker::didCheck):
        * editing/SpellChecker.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyTextCheckerClient::checkTextOfParagraph):
        (WebCore::EmptyTextCheckerClient::requestCheckingOfString):
        * platform/text/TextCheckerClient.h:

2011-04-04  Antti Koivisto  <antti@apple.com>

        Reviewed by Sam Weinig.

        Print stylesheet on nytimes.com loads too early
        https://bugs.webkit.org/show_bug.cgi?id=57814

        Don't load resources with Very Low priority until there are no other resources to 
        load for the host (or until document is complete enough that we stop limiting requests).

        No tests, this is  difficult to observe reliably with our current testing infrastructure.
        Verified working with Wireshark.

        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::servePendingRequests):
        (WebCore::ResourceLoadScheduler::HostInformation::limitRequests):
        * loader/ResourceLoadScheduler.h:

2011-04-04  Steve Block  <steveblock@google.com>

        Reviewed by Dimitri Glazkov.

        JavaInstance should be a pure interface
        https://bugs.webkit.org/show_bug.cgi?id=55383

        This patch fixes JavaInstance for V8 only.

        It factors out a JavaInstance interface which does not use JNI
        types. This will allow the Java bridge to be used with objects
        that don't use JNI directly. The existing jobject-backed
        implementation is moved to a new JavaInstanceJobject class which
        implements the interface.

        No new tests, refactoring only.

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bridge/jni/JobjectWrapper.h:
        * bridge/jni/v8/JNIUtilityPrivate.cpp:
        (JSC::Bindings::jvalueToJavaValue):
        (JSC::Bindings::javaValueToJvalue):
        * bridge/jni/v8/JavaInstanceJobjectV8.cpp:
        (JavaInstanceJobject::JavaInstanceJobject):
        (JavaInstanceJobject::~JavaInstanceJobject):
        (JavaInstanceJobject::begin):
        (JavaInstanceJobject::end):
        (JavaInstanceJobject::getClass):
        (JavaInstanceJobject::invokeMethod):
        (JavaInstanceJobject::getField):
        * bridge/jni/v8/JavaInstanceJobjectV8.h: Copied from Source/WebCore/bridge/jni/v8/JavaInstanceV8.h.
        (JSC::Bindings::JavaInstanceJobject::javaInstance):
        * bridge/jni/v8/JavaInstanceV8.h:
        (JSC::Bindings::JavaInstance::~JavaInstance):

2011-04-05  Dimitri Glazkov  <dglazkov@chromium.org>

       Reviewed by Darin Adler.

        Move MouseEvent-dispatching logic into MouseEventDispatchMediator.
        https://bugs.webkit.org/show_bug.cgi?id=57639

        Refactoring, covered by existing tests.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent): Moved useful assertion here
            from dispatchMouseEvent.
        (WebCore::EventDispatcher::adjustRelatedTarget): Converted into a method.
        * dom/EventDispatcher.h: Adjusted decls.
        (WebCore::EventDispatcher::node): Added.
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create): Moved useful assertion here from
            dispatchMouseEvent.
        (WebCore::MouseEventDispatchMediator::MouseEventDispatchMediator): Added.
        (WebCore::MouseEventDispatchMediator::event): Added.
        (WebCore::MouseEventDispatchMediator::dispatchEvent): Added.
        * dom/MouseEvent.h:
        (WebCore::MouseEvent::setRelatedTarget): Added.
        * dom/Node.cpp:
        (WebCore::Node::dispatchMouseEvent): Changed to use MouseEventDispatchMediator.

2011-04-05  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Adam Roben & Dirk Schulze.

        text-tspan-02-b.svg from SVG 1.1 2nd edition fails
        https://bugs.webkit.org/show_bug.cgi?id=57831

        We were not spanning rotation values correcty accross text children, which resulted in text-span-02-b.svg misrendering.
        While rewriting the rotation specific code, it came apparent that the LayoutScope concept is flawed in general and
        should be replaced by a global list of x/y/dx/dy/rotate values for the whole text subtree. This makes it much simpler
        to implement the demand that the last rotation value spans the whole scope. A follow-up patch will optimize the
        required memory.

        Example:
        <text rotate="10,20,999,50">AB<tspan rotate="30">CDE</>FGH</text>
    
        text:   A  B  C  D  E  F  G  H
        rotate="10 20 30 30 30 50 50 50"

        Tests: svg/W3C-SVG-1.1-SE/text-tspan-02-b.svg
               svg/text/text-midpoint-split-bug.svg

        * rendering/RenderBlockLineLayout.cpp:     Move SVG specific midpoint creation after the non-SVG specific code that may mutate the midpoints. otherwhise we end up in an
        (WebCore::RenderBlock::findNextLineBreak): inconsistent state. We were intereferring with the ignoreSpaces code resulting in wrong truncations - covered by new testcase.
        * rendering/svg/SVGTextLayoutAttributes.cpp:
        (WebCore::SVGTextLayoutAttributes::reserveCapacity): Also reserveCapacity for the text metrics list (minor optimization).
        (WebCore::SVGTextLayoutAttributes::fillWithEmptyValue): Added helper function for use from SVGTextLayoutAttributesBuilder.
        (WebCore::SVGTextLayoutAttributes::appendEmptyValue): Ditto.
        (WebCore::safeValueAtPosition): Ditto. (Inline helper)
        (WebCore::SVGTextLayoutAttributes::appendSingleValueFromAttribute): Ditto.
        * rendering/svg/SVGTextLayoutAttributes.h: Ditto.
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp: Rewrite code, see explaination above.
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForTextSubtree):
        (WebCore::processRenderSVGInlineText):
        (WebCore::SVGTextLayoutAttributesBuilder::collectTextPositioningElements):
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForAllCharacters):
        (WebCore::SVGTextLayoutAttributesBuilder::propagateLayoutAttributes):
        (WebCore::fillListAtPosition):
        (WebCore::SVGTextLayoutAttributesBuilder::fillAttributesAtPosition):
        * rendering/svg/SVGTextLayoutAttributesBuilder.h:
        (WebCore::SVGTextLayoutAttributesBuilder::TextPosition::TextPosition):

2011-04-05  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        DeleteButtonController is given invalid style
        https://bugs.webkit.org/show_bug.cgi?id=57853

        DeleteButtonController was assigned an invalid style that can lead to assertions
        in debug builds. This matches up the code with its intent.

        No new tests as this changes nothing on release builds.

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI):

2011-04-05  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Laszlo Gombos.

        [Qt] EditorQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=40260
        
        This patch does not require new test cases.

        * editing/qt/EditorQt.cpp:

2011-04-05  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: go to line dialog highlights wrong line.
        https://bugs.webkit.org/show_bug.cgi?id=57845

        * inspector/front-end/GoToLineDialog.js:
        (WebInspector.GoToLineDialog.prototype._highlightSelectedLine):

2011-04-05  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement CSSPropertyDirection in CSSStyleApplyProperty
        https://bugs.webkit.org/show_bug.cgi?id=57608

        No new tests required as no new functionality introduced.

        * css/CSSStyleApplyProperty.cpp:
        Add implementation class for CSSPropertyDirection
        * css/CSSStyleSelector.cpp:
        Remove existing implementation for CSSPropertyDirection
        * css/CSSStyleSelector.h:
        Add getter for element

2011-04-05  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Steve Block.

        Factoring the creation of 'FunctionOnly' callbacks in V8.
        https://bugs.webkit.org/show_bug.cgi?id=57760

        This method creates a template from an existing functionality in V8GeolocationCustom.cpp
        to V8Utilities to be used by the custom bindings of both Geolocation and the Media Stream API.

        No new tests. LayoutTests/fast/dom/Geolocation/argument-types.html

        * bindings/v8/V8Utilities.cpp:
        (WebCore::throwTypeMismatchException):
        * bindings/v8/V8Utilities.h:
        (WebCore::createFunctionOnlyCallback):
        * bindings/v8/custom/V8GeolocationCustom.cpp:
        (WebCore::V8Geolocation::getCurrentPositionCallback):
        (WebCore::V8Geolocation::watchPositionCallback):

2011-04-05  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Andreas Kling.

        Switch from Vector<UChar> to StringBuilder in bindings/
        https://bugs.webkit.org/show_bug.cgi?id=57838

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyName):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyInfo):

2011-04-05  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Andreas Kling.

        Switch from Vector<UChar> to StringBuilder in accessibility/
        https://bugs.webkit.org/show_bug.cgi?id=57837

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::listMarkerTextForNodeAndPosition):
        (WebCore::AccessibilityObject::stringForVisiblePositionRange):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityDescriptionForElements):

2011-04-05  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Scripts with syntax errors are cropped in the UI
        https://bugs.webkit.org/show_bug.cgi?id=57828

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.addMessageToSource):

2011-04-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        Remove onformchange and onforminput events/event handlers
        https://bugs.webkit.org/show_bug.cgi?id=55755
        <rdar://problem/9087969>

        Covered by existing tests.

        * dom/Document.h:
        * dom/Document.idl:
        * dom/Element.h:
        * dom/Element.idl:
        * dom/Event.cpp:
        (WebCore::Event::fromUserGesture):
        * dom/EventNames.h:
        * html/FormAssociatedElement.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * html/HTMLElement.h:
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::isEnumeratable):
        * html/HTMLFormElement.cpp:
        * html/HTMLFormElement.h:
        * html/HTMLFormElement.idl:
        * html/HTMLInputElement.h:
        * html/HTMLKeygenElement.h:
        * html/HTMLObjectElement.h:
        (WebCore::HTMLObjectElement::isEnumeratable):
        * html/HTMLOutputElement.h:
        (WebCore::HTMLOutputElement::isEnumeratable):
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::isEnumeratable):
        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::isEnumeratable):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2011-04-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82915.
        http://trac.webkit.org/changeset/82915
        https://bugs.webkit.org/show_bug.cgi?id=57825

        Broke 270 chromium tests on win and linux (Requested by
        podivilov on #webkit).

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::defaultGUIFont):

2011-04-05  James Simonsen  <simonjam@chromium.org>

        Reviewed by Adam Barth.

        Stop preload scanning CSS when it&apos;s impossible to have another @import.
        https://bugs.webkit.org/show_bug.cgi?id=57664

        @import statements are only allowed at the beginning of a CSS file.
        Only comments or @charset can precede them. After seeing anything else,
        abort early so that we:
        - don't have to parse the rest of the CSS.
        - don't preload something that the regular parser won't load.

        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::scan): Terminate early if we're done with @imports.
        (WebCore::CSSPreloadScanner::tokenize): Terminate early if we see a {} or any style rule.
        (WebCore::CSSPreloadScanner::emitRule): Only @charset or @import are allowed to precede @import.
        * html/parser/CSSPreloadScanner.h: Add DoneParsingImportRules state.

2011-04-05  Takayoshi Kochi <kochi@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Specify 'sans-serif' as a fallback to the default UI font
        'Arial' for non-latin UI scripts (e.g. CJK).
        https://bugs.webkit.org/show_bug.cgi?id=55035

        No new tests, because it may still fail if the system is not configured
        properly to resolve 'sans-serif' to existing real font file, thus even
        manual test is hard to systematically tell it is working properly.

        * rendering/RenderThemeChromiumSkia.cpp

2011-04-05  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Setting defaultValue on a textarea with a modified value still clobbers the value
        https://bugs.webkit.org/show_bug.cgi?id=57636

        If the dirty flag is true, we shouldn't update the value when the
        defaultValue is updated

        Test: fast/forms/textarea-set-defaultvalue-after-value.html

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::childrenChanged):
        (WebCore::HTMLTextAreaElement::setDefaultValue):

2011-04-04  Kent Tamura  <tkent@chromium.org>

        Add a case label which was unexpectedly removed in r82899.
        https://bugs.webkit.org/show_bug.cgi?id=50661

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):

2011-04-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7709452> Implement Default Ruby Overhang Behavior
        https://bugs.webkit.org/show_bug.cgi?id=49334

        Tests: fast/ruby/overhang-horizontal.html
               fast/ruby/overhang-vertical.html

        This is a first cut at ruby overhang. It allows ruby text to hang over other
        text of equal or smaller size. Two notable omissions are that max preferred
        width computation was not patched, so it will overshoot, and that overhang
        ignores the width of the adjoining text runs.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Adjust margins
        of ruby runs for overhang.
        (WebCore::RenderBlock::fitBelowFloats): Maintain the increase in line width to
        compensate for overhang.
        (WebCore::RenderBlock::findNextLineBreak): When encountering
        a ruby run, increase the line width to account for the fact that overhang will be
        collapsed.
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::getOverhang): Added. Allows ruby to overhang if
        the adjoining renderer is text with equal or smaller font size.
        * rendering/RenderRubyRun.h:
        (WebCore::toRenderRubyRun):

2011-04-04  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/57384> CFNetwork and WebCore load priorities should match

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in: Export wkSetHTTPPipeliningMaximumPriority().
        * platform/mac/WebCoreSystemInterface.h:
        (wkSetHTTPPipeliningMaximumPriority): Added function pointer
        declaration.
        * platform/mac/WebCoreSystemInterface.mm:
        (wkSetHTTPPipeliningMaximumPriority): Added function pointer.
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::initializeMaximumHTTPConnectionCountPerHost): Call
        wkSetHTTPPipeliningMaximumPriority() to set the maximum HTTP
        pipelining priority.
        * platform/network/cf/ResourceRequestCFNet.h:
        (WebCore::toResourceLoadPriority): Renamed from
        mapHTTPPipeliningPriorityToResourceLoadPriority().  Updated to
        to handle Unresolved case.
        (WebCore::toHTTPPipeliningPriority): Renamed from
        mapResourceLoadPriorityToHTTPPipeliningPriority().  Updated to
        handle Unresolved case.
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest): Switched to
        use toResourceLoadPriority().
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Switched to
        use toHTTPPipeliningPriority().  Moved
        shouldForceHTTPPipeliningPriorityHigh() check into the argument
        of toHTTPPipeliningPriority() instead of hard-coding a
        now-incorrect value.

2011-04-04  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        Convert <meter> shadow DOM to a DOM-based shadow.
        https://bugs.webkit.org/show_bug.cgi?id=50661
        
        Eliminated a large part of <meter> custom layout code,
        which is replaced by a shadow tree.
        Note that the shadow tree is created on construction time and
        will remain during the host HTMLMeterElement lifecycle.
        
        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        * css/CSSMutableStyleDeclaration.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/html.css:
        (meter):
        (meter::-webkit-meter-bar):
        (meter::-webkit-meter-optimum-value):
        (meter::-webkit-meter-suboptimum-value):
        (meter::-webkit-meter-even-less-good-value):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::~HTMLMeterElement):
        (WebCore::HTMLMeterElement::parseMappedAttribute):
        (WebCore::HTMLMeterElement::attach):
        (WebCore::HTMLMeterElement::valueRatio):
        (WebCore::HTMLMeterElement::didElementStateChange):
        (WebCore::HTMLMeterElement::createShadowSubtree):
        * html/HTMLMeterElement.h:
        * html/shadow/MeterShadowElement.cpp: Added.
        (WebCore::MeterShadowElement::MeterShadowElement):        
        (WebCore::MeterShadowElement::meterElement):
        (WebCore::MeterShadowElement::rendererIsNeeded):
        (WebCore::MeterBarElement::shadowPseudoId):
        (WebCore::MeterValueElement::shadowPseudoId):
        (WebCore::MeterValueElement::setWidthPercentage):
        * html/shadow/MeterShadowElement.h: Added.
        (WebCore::MeterBarElement::MeterBarElement):
        (WebCore::MeterBarElement::create):
        (WebCore::MeterValueElement::MeterValueElement):
        (WebCore::MeterValueElement::create):
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::RenderMeter):
        (WebCore::RenderMeter::~RenderMeter):
        (WebCore::RenderMeter::valueRatio):
        * rendering/RenderMeter.h:
        (WebCore::RenderMeter::renderName):
        (WebCore::RenderMeter::isMeter):
        (WebCore::RenderMeter::requiresForcedStyleRecalcPropagation):
        (WebCore::RenderMeter::canHaveChildren):

2011-04-04  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        Introduce EventDispatchMediator abstraction, which encapsulate all
        non-trivial logic around firing a specific type of an event.
        https://bugs.webkit.org/show_bug.cgi?id=57562

        Refactoring, covered by existing tests.

        * dom/Event.cpp:
        (WebCore::EventDispatchMediator::EventDispatchMediator): Added.
        (WebCore::EventDispatchMediator::~EventDispatchMediator): Added.
        (WebCore::EventDispatchMediator::dispatchEvent): Added.
        (WebCore::EventDispatchMediator::event): Added.
        * dom/Event.h: Added decl.
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent): Changed to use EventDispatchMediator.
        * dom/EventDispatcher.h: Updated decls.
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEventDispatchMediator::KeyboardEventDispatchMediator): Added.
        (WebCore::KeyboardEventDispatchMediator::dispatchEvent): Added.
        * dom/KeyboardEvent.h: Updated decls
        * dom/Node.cpp:
        (WebCore::Node::dispatchEvent): Changed to use EventDispatchMediator.
        (WebCore::Node::dispatchKeyEvent): Changed to use KeyboardEventDispatchMediator.

2011-04-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Cairo] Memory leak in RefPtrCairo
        https://bugs.webkit.org/show_bug.cgi?id=57758

        No new tests. This just fixes a memory leak.

        * platform/graphics/cairo/RefPtrCairo.cpp:
        (WTF::derefIfNotNull): Deref should unref the cairo_font_fact_t, not reference it.

2011-04-04  Adrienne Walker  <enne@google.com>

        Unreviewed, rolling out r82880.
        http://trac.webkit.org/changeset/82880
        https://bugs.webkit.org/show_bug.cgi?id=50661

        Meter elements not rendered in Chromium Linux layout tests

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSMutableStyleDeclaration.cpp:
        * css/CSSMutableStyleDeclaration.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/html.css:
        (meter):
        (meter::-webkit-meter):
        (meter::-webkit-meter-bar):
        (meter::-webkit-meter-optimum-value):
        (meter::-webkit-meter-suboptimal-value):
        (meter::-webkit-meter-even-less-good-value):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::create):
        (WebCore::HTMLMeterElement::parseMappedAttribute):
        (WebCore::HTMLMeterElement::attach):
        * html/HTMLMeterElement.h:
        * html/shadow/MeterShadowElement.cpp: Removed.
        * html/shadow/MeterShadowElement.h: Removed.
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::RenderMeter):
        (WebCore::RenderMeter::~RenderMeter):
        (WebCore::RenderMeter::createPart):
        (WebCore::RenderMeter::updateFromElement):
        (WebCore::RenderMeter::layoutParts):
        (WebCore::RenderMeter::styleDidChange):
        (WebCore::RenderMeter::shouldHaveParts):
        (WebCore::RenderMeter::valueRatio):
        (WebCore::RenderMeter::barPartRect):
        (WebCore::RenderMeter::valuePartRect):
        (WebCore::RenderMeter::valuePseudoId):
        (WebCore::RenderMeter::barPseudoId):
        (WebCore::RenderMeter::detachShadows):
        (WebCore::RenderMeter::updateShadows):
        * rendering/RenderMeter.h:
        (WebCore::RenderMeter::renderName):
        (WebCore::RenderMeter::isMeter):
        (WebCore::RenderMeter::shadowAttached):

2011-04-04  Chang Shu  <cshu@webkit.org>

        Reviewed by Ryosuke Niwa.

        setContentEditable with true/false/inherit string is not working properly
        https://bugs.webkit.org/show_bug.cgi?id=52058

        Move isContentEditable from HTMLElement to Node. Thus, Node provides two functions for
        checking editability: rendererIsEditable and isContentEdiable. The former is a fast path,
        which does NOT trigger layout and only checks the render style of usermodify. The latter
        updates the layout first to make sure the render style syncs with DOM contenteditable 
        attribute. Certain call sites that need to call isContentEditable rather than rendererIsEditable
        are also updated in the patch. But a complete fix will follow up in bug 57244.

        This patch fixes all the failed layout tests related to set contenteditable.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isReadOnly):
        * dom/Node.cpp:
        (WebCore::Node::isContentEditable):
        (WebCore::Node::shouldUseInputMethod):
        * dom/Node.h:
        * html/HTMLElement.cpp:
        * html/HTMLElement.h:

2011-04-04  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 57689 - Extract scoping functionality from Document
        https://bugs.webkit.org/show_bug.cgi?id=57689

        Moved selfOnlyRef (renamed to guardRef), element ID, image map
        and accesss key functionalities from Document to a new base
        class TreeScope.

        TreeShared: made removedLastRef protected

        No new tests. (refactoring)

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::destroyScope):
        (WebCore::Document::getElementById):
        (WebCore::Document::childrenChanged):
        (WebCore::Document::scheduleStyleRecalc):
        (WebCore::Document::attach):
        (WebCore::Document::detach):
        * dom/Document.h:
        (WebCore::Node::Node):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::get):
        (WebCore::DocumentOrderedMap::getElementById):
        (WebCore::DocumentOrderedMap::getElementByMapName):
        (WebCore::DocumentOrderedMap::getElementByLowercasedMapName):
        * dom/DocumentOrderedMap.h:
        * dom/DOMAllInOne.cpp:
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::setDocument):
        * dom/Node.h:
        * dom/TreeScope.cpp: Added.
        * dom/TreeScope.h: Added.
        * platform/TreeShared.h:
        (WebCore::TreeShared::removedLastRef): made protected

2011-04-04  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        Convert <meter> shadow DOM to a DOM-based shadow.
        https://bugs.webkit.org/show_bug.cgi?id=50661
        
        Eliminated a large part of <meter> custom layout code,
        which is replaced by a shadow tree.
        Note that the shadow tree is created on construction time and
        will remain during the host HTMLMeterElement lifecycle.
        
        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        * css/CSSMutableStyleDeclaration.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/html.css:
        (meter):
        (meter::-webkit-meter-bar):
        (meter::-webkit-meter-optimum-value):
        (meter::-webkit-meter-suboptimum-value):
        (meter::-webkit-meter-even-less-good-value):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::~HTMLMeterElement):
        (WebCore::HTMLMeterElement::parseMappedAttribute):
        (WebCore::HTMLMeterElement::attach):
        (WebCore::HTMLMeterElement::valueRatio):
        (WebCore::HTMLMeterElement::didElementStateChange):
        (WebCore::HTMLMeterElement::createShadowSubtree):
        * html/HTMLMeterElement.h:
        * html/shadow/MeterShadowElement.cpp: Added.
        (WebCore::MeterShadowElement::MeterShadowElement):        
        (WebCore::MeterShadowElement::meterElement):
        (WebCore::MeterShadowElement::rendererIsNeeded):
        (WebCore::MeterBarElement::shadowPseudoId):
        (WebCore::MeterValueElement::shadowPseudoId):
        (WebCore::MeterValueElement::setWidthPercentage):
        * html/shadow/MeterShadowElement.h: Added.
        (WebCore::MeterBarElement::MeterBarElement):
        (WebCore::MeterBarElement::create):
        (WebCore::MeterValueElement::MeterValueElement):
        (WebCore::MeterValueElement::create):
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::RenderMeter):
        (WebCore::RenderMeter::~RenderMeter):
        (WebCore::RenderMeter::valueRatio):
        * rendering/RenderMeter.h:
        (WebCore::RenderMeter::renderName):
        (WebCore::RenderMeter::isMeter):
        (WebCore::RenderMeter::requiresForcedStyleRecalcPropagation):
        (WebCore::RenderMeter::canHaveChildren):

2011-04-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] WebGL support
        https://bugs.webkit.org/show_bug.cgi?id=31517

        Add WebGL support for the GTK+ bits of WebCore.

        No new tests. This will be covered by the existing WebGL tests once
        the bots are capable of running WebGL tests.

        * GNUmakefile.am: Added new files required for WebGL support.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext): Extend #ifdef to cover GTK+ as well, which does not
        yet support accelerated compositing.
        * platform/graphics/ANGLEWebKitBridge.h: Update to reflect the fact that ANGLE isn't compiled as
        a framework for GTK+.
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::platformTexture): Added a declaration of this method for Cairo.
        (WebCore::GraphicsContext3D::paintsIntoCanvasBuffer): Ditto.
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp: Added.
        (WebCore::GraphicsContext3D::getImageData): Added.
        (WebCore::GraphicsContext3D::paintToCanvas): Added.
        * platform/graphics/cairo/OpenGLShims.cpp: Added. This file controls loading of GL extension
        functions dynamically. They have different names across the different vendors' GL implementations.
        (WebCore::lookupOpenGLFunctionAddress): Added
        (WebCore::openGLFunctionTable): Added
        (WebCore::initializeOpenGLShims): Added
        * platform/graphics/cairo/OpenGLShims.h: Added.
        * platform/graphics/gtk/DrawingBufferGtk.cpp: Added.
        (WebCore::DrawingBuffer::DrawingBuffer): Very generic implementation for Cairo.
        (WebCore::DrawingBuffer::~DrawingBuffer): Ditto.
        (WebCore::DrawingBuffer::didReset): Ditto.
        (WebCore::DrawingBuffer::platformColorBuffer): Ditto.
        * platform/graphics/gtk/GraphicsContext3DGtk.cpp: Added.
        (WebCore::GraphicsContext3D::create): Initial implementation.
        (WebCore::GraphicsContext3D::GraphicsContext3D): Ditto.
        (WebCore::GraphicsContext3D::~GraphicsContext3D): Ditto.
        (WebCore::GraphicsContext3D::makeContextCurrent): Ditto.
        (WebCore::GraphicsContext3D::platformGraphicsContext3D): Ditto.
        (WebCore::GraphicsContext3D::isGLES2Compliant): Ditto.
        * platform/graphics/gtk/GraphicsContext3DInternal.cpp: Added.
        (sharedDisplay): Added this shared display which is required by some
        display drivers.
        (WebCore::activeGraphicsContexts): This method keeps track of all active GraphicsContext3D
        contexts, in order to clean them up at exit. This prevents crashes on certain OpenGL drivers.
        (WebCore::GraphicsContext3DInternal::addActiveGraphicsContext): Ditto.
        (WebCore::GraphicsContext3DInternal::removeActiveGraphicsContext): Ditto.
        (WebCore::GraphicsContext3DInternal::cleanupActiveContextsAtExit): Ditto.
        (WebCore::GraphicsContext3DInternal::create): Figure out the best way to create an OpenGL
        context given the current environment.
        (WebCore::GraphicsContext3DInternal::createPbufferContext): Pbuffer context initializer.
        (WebCore::GraphicsContext3DInternal::createPixmapContext): Pixmap context initializer.
        (WebCore::GraphicsContext3DInternal::GraphicsContext3DInternal): Initial implementation.
        (WebCore::GraphicsContext3DInternal::~GraphicsContext3DInternal): Ditto.
        (WebCore::GraphicsContext3DInternal::makeContextCurrent): Ditto.
        * platform/graphics/gtk/GraphicsContext3DInternal.h: Added.
        * platform/graphics/opengl/Extensions3DOpenGL.cpp: Added generic implementation.
        (WebCore::Extensions3DOpenGL::ensureEnabled): Ditto.
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshape): Test for the context using the public API rather than
        the private bits that are specific to the Apple port.

2011-04-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION (WebKit2): Caps-Lock indicator sometimes doesn't appear in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=51230
        <rdar://problem/8780989>

        <rdar://problem/9015250> REGRESSION (WebKit2): Key events not fired for modifier keys

        * page/EventHandler.cpp: (WebCore::EventHandler::keyEvent): Moved Caps Lock handling from
        WebKits to WebCore, because WebKit shouldn't be smart.

2011-04-04  Steve Falkenburg  <sfalken@apple.com>

        Fix Windows build warning.

        * WebCore.vcproj/WebCore.vcproj: Exclude EventQueue.cpp in Debug_All build.

2011-04-04  Adam Roben  <aroben@apple.com>

        Attempted Mac build fix, part III

        * WebCore.exp.in: Export PlatformCALayer::setGeometryFlipped. Also resorted some symbols.

2011-04-04  Andy Estes  <aestes@apple.com>

        Fix the Mac build.

        * WebCore.exp.in:

2011-04-04  David Dorwin  <ddorwin@chromium.org>

        Reviewed by David Levin.

        Chromium Mac crashes when entering fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=57483

        Override extraFullScreenStyleSheet in RenderThemeChromiumMac to avoid hitting the ASSERT_NOT_REACHED in RenderThemeMac.

        * WebCore.gyp/WebCore.gyp:
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::extraFullScreenStyleSheet):

2011-04-04  Adam Roben  <aroben@apple.com>

        Attempted Mac build fix, part II

        * WebCore.xcodeproj/project.pbxproj: Marked PlatformCALayerClient.h and
        PlatformCAAnimation.h as private so that WebKit2 can #include them (transitively).

2011-04-04  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Remove unused AnalyzeWithLargeStack code from Windows build files
        https://bugs.webkit.org/show_bug.cgi?id=57771
        
        This was used for us to build with prefast automatically,
        but it is out-of-date and hasn't been used for some time.
        Removing completely for now.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCorePreBuild.cmd:

2011-04-01  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        [CG] Do not accelerate small canvases
        https://bugs.webkit.org/show_bug.cgi?id=57596

        No new tests. No outward behavior changes.

        * platform/graphics/cg/ImageBufferCG.cpp:

2011-04-04  Adam Roben  <aroben@apple.com>

        Attempted Mac build fix

        * WebCore.xcodeproj/project.pbxproj: Marked PlatformCALayer.h and GraphicsLayerCA.h private
        so that WebKit can #include them.

2011-04-04  Malcolm MacLeod  <mmacleod@webmail.co.za>

        Reviewed by Kevin Ollivier.

        [wx] Implement support for temporary files.
        
        https://bugs.webkit.org/show_bug.cgi?id=57772

        * platform/FileSystem.h:
        * platform/wx/FileSystemWx.cpp:
        (WebCore::getFileModificationTime):
        (WebCore::openTemporaryFile):
        (WebCore::closeFile):
        (WebCore::writeToFile):

2011-04-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make StructureChain GC allocated
        https://bugs.webkit.org/show_bug.cgi?id=56695

        Update for new Structure marking function

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::markChildren):

2011-04-04  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add support for the enumerated types in the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=57761

        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptions):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::resourceRetrievedByXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::scriptImportedImpl):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::cachedResourceTypeString):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::setInitialScriptContent):
        (WebCore::InspectorResourceAgent::setInitialXHRContent):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/ScriptsPanel.js:
        * inspector/generate-inspector-idl:

2011-04-04  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: InspectorRuntimeAgent should not depend on Page
        https://bugs.webkit.org/show_bug.cgi?id=57759

        Descendants of InspectorRuntimeAgent should implement a method providing access to the default
        inspected state used for console evaluations.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent): runtime agent is created and deleted along with other agents.
        (WebCore::InspectorAgent::setFrontend):
        * inspector/InspectorAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::create):
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::evaluate):
        * inspector/InspectorRuntimeAgent.h:
        (WebCore::InspectorRuntimeAgent::InspectedStateProvider::~InspectedStateProvider):

2011-04-04  Yong Li  <yoli@rim.com>

        Reviewed by Antonio Gomes.

        https://bugs.webkit.org/show_bug.cgi?id=55969
        Fix the issue that document state is not saved when
        going backward and ending up with error page.

        Test: platform/qt/fast/history/back-to-unreachable-url-then-forward.html

        (For manual test, load a non-existent html first, then load
        fast/history/resources/check-scroll-position.html, then go
        back and go forward. If it doesn't show "SUCCESS" at the bottom
        of the page, your browser has failed the test)

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):

2011-04-04  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix make distcheck for 1.4.0
        https://bugs.webkit.org/show_bug.cgi?id=57750

        Added a missing header file to the Makefile

        * GNUmakefile.am:

2011-04-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] http/tests/plugins/post-url-file.html fails on GTK+
        https://bugs.webkit.org/show_bug.cgi?id=55826

        Correct the implementation of handlePostReadFile which uses GIO APIs and
        actually resizes the buffer to fit the entire size of the file data. This
        was likely leading to memory corruption until now.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::handlePostReadFile): Fix this method.

2011-04-04  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Extensions API] add notifications on panels shown/hidden
        https://bugs.webkit.org/show_bug.cgi?id=57752

        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI.PanelImpl):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype.notifyPanelShown):
        (WebInspector.ExtensionServer.prototype.notifyPanelHidden):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.show):
        (WebInspector.Panel.prototype.hide):

2011-04-04  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: search in resources panel is broken.
        https://bugs.webkit.org/show_bug.cgi?id=57631

        Search in resources panel should trigger source frame content load.

        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.jumpToNextSearchResult):
        (WebInspector.Panel.prototype.jumpToPreviousSearchResult):
        * inspector/front-end/ResourcesPanel.js:
        * inspector/front-end/SearchController.js:
        (WebInspector.SearchController.prototype.handleShortcut):
        (WebInspector.SearchController.prototype.focusSearchField):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.show):
        (WebInspector.SourceFrame.prototype._ensureContentLoaded):
        (WebInspector.SourceFrame.prototype.performSearch):

2011-04-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Split out UnicodeBidi enum into its own header (to allow use in platform)
        https://bugs.webkit.org/show_bug.cgi?id=57722

        unicode-bidi is a CSS concept.  However the same concept is really needed throughout
        the bidi code in platform as well.  So I'm moving the enum to platform.
        The only part of the enum which doesn't make much sense to platform/ is "normal".

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSPrimitiveValueMappings.h:
        * platform/text/UnicodeBidi.h: Added.
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:

2011-04-04  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Highlighted search tokens would not be shown on long lines in the text viewer
        https://bugs.webkit.org/show_bug.cgi?id=57749

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel.prototype.markAndRevealRange):
        (WebInspector.TextEditorMainPanel.prototype._paintLine):

2011-04-04  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Incorrectly reports warning on missing/incorrect content-type for 304s
        https://bugs.webkit.org/show_bug.cgi?id=48525

        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):

2011-04-01  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: appropriateSelectorForNode() invokes the "localName" getter on DOMNode rather than function
        https://bugs.webkit.org/show_bug.cgi?id=57632

        Moved the affected method onto the DOMNode.prototype as "appropriateSelectorFor".

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.appropriateSelectorFor):
        * inspector/front-end/EventListenersSidebarPane.js:
        ():
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.addBlankSection):
        * inspector/front-end/utilities.js:

2011-04-04  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed. Followup to an incomplete commit in r82806.

        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI.PanelWithSidebarImpl.prototype.createSidebarPane):
        (WebInspector.injectedExtensionAPI.ExtensionSidebarPaneImpl):
        (WebInspector.injectedExtensionAPI.ExtensionSidebarPaneImpl.prototype.setHeight):
        (WebInspector.injectedExtensionAPI.ExtensionSidebarPaneImpl.prototype.setExpression):
        (WebInspector.injectedExtensionAPI):
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionSidebarPane):
        (WebInspector.ExtensionSidebarPane.prototype.setPage):
        (WebInspector.ExtensionSidebarPane.prototype._setObject):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer):
        (WebInspector.ExtensionServer.prototype.notifyExtensionSidebarUpdated):
        (WebInspector.ExtensionServer.prototype._onCreatePanel):
        (WebInspector.ExtensionServer.prototype._onCreateSidebarPane):
        (WebInspector.ExtensionServer.prototype.createClientIframe):
        (WebInspector.ExtensionServer.prototype._onSetSidebarContent):

2011-04-04  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Qt minimal build.

        * inspector/InspectorFrontendChannel.h:

2011-04-01  Sergey Vorobyev  <sergeyvorobyev@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Separate sendMessageToFrontend function
        from InspectorClient to individual interface.
        https://bugs.webkit.org/show_bug.cgi?id=57548

        Refactoring - covered with existing inspector tests.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorClient.h:
        * inspector/InspectorFrontendChannel.h: Added.
        (WebCore::InspectorFrontendChannel::~InspectorFrontendChannel):

2011-04-04  Nico Weber  <thakis@chromium.org>

        Reviewed by Eric Seidel.

        Prefer a using directive over qualified names in LocalizedNumberICU.cpp
        https://bugs.webkit.org/show_bug.cgi?id=57742

        Requested by ap in https://bugs.webkit.org/show_bug.cgi?id=57715

        * platform/text/LocalizedNumberICU.cpp:
        (WebCore::createFormatterForCurrentLocale):
        (WebCore::numberFormatter):
        (WebCore::parseLocalizedNumber):
        (WebCore::formatLocalizedNumber):

2011-04-04  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Breakpoints in the gutter stay static while editing the text
        https://bugs.webkit.org/show_bug.cgi?id=57616

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype._saveViewerState):
        (WebInspector.SourceFrame.prototype._restoreViewerState):
        (WebInspector.SourceFrame.prototype._endEditing):
        (WebInspector.SourceFrame.prototype._lineNumberAfterEditing):
        (WebInspector.SourceFrame.prototype.addBreakpoint):
        (WebInspector.SourceFrame.prototype.removeBreakpoint):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._syncDecorationsForLine):
        (WebInspector):
        (WebInspector.TextEditorChunkedPanel.prototype.removeDecoration):
        (WebInspector.TextEditorChunkedPanel.prototype.makeLineAChunk):
        (WebInspector.TextEditorChunkedPanel.prototype._splitChunkOnALine):
        (WebInspector.TextEditorMainPanel.prototype._splitChunkOnALine):

2011-04-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: remove obsolete doc generating code from CodeGenerator.
        https://bugs.webkit.org/show_bug.cgi?id=57748

        * inspector/CodeGeneratorInspector.pm:

2011-04-04  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Extensions API] Merge WatchExpressionSidebarPane into ExtensionSidebarPane
        https://bugs.webkit.org/show_bug.cgi?id=57622

        Merged WatchExpressionSidebarPane into ExtensionSidebarPane, added setPage(url).
        Fixed wrong getter in schema (scripts -> elements)

        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI.WatchExpressionSidebarPaneImpl.prototype.setObject):
        (WebInspector.injectedExtensionAPI.WatchExpressionSidebarPaneImpl.prototype.setPage):
        * inspector/front-end/ExtensionAPISchema.json:
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onSetSidebarPage):

2011-04-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: introduce support of 'optional' flag for command arguments.
        https://bugs.webkit.org/show_bug.cgi?id=57698

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::reloadPage):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::getResourceContent):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/generate-inspector-idl:

2011-04-04  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: InjectedScriptManager should not try to access inspected window in case of workers
        https://bugs.webkit.org/show_bug.cgi?id=57637

        * bindings/js/JSInjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::injectedScriptFor):
        * bindings/v8/custom/V8InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::injectedScriptFor):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::InjectedScript):
        (WebCore::InjectedScript::canAccessInspectedWindow):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::createForPage):
        (WebCore::InjectedScriptManager::createForWorker):
        (WebCore::InjectedScriptManager::InjectedScriptManager): access check function is passed as a parameter to the constructor
        and it depends on which type of context we're inspecting(worker or page).
        (WebCore::InjectedScriptManager::canAccessInspectedWorkerContext):
        * inspector/InjectedScriptManager.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):

2011-04-04  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Eric Seidel.

        V8StringCallback.cpp requires V8Binding.h
        https://bugs.webkit.org/show_bug.cgi?id=57699

        No new tests required because of just adding header file.

        * bindings/scripts/CodeGeneratorV8.pm:

2011-04-03  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Eric Seidel.

        [CMAKE] Clean duplicated files in WebCore_Sources
        https://bugs.webkit.org/show_bug.cgi?id=57741

        No new tests, Only duplicated files were removed.

        * CMakeLists.txt:

2011-04-03  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Darin Adler.

        Fix 2-space indentation introduced in bug 54706.
        https://bugs.webkit.org/show_bug.cgi?id=57740

        No new tests - whitespace changes only.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Convert 2-space indentation to 4-space indentation.

2011-04-03  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Make CSSStyleApplyProperty non-copyable
        https://bugs.webkit.org/show_bug.cgi?id=57738

        No new functionality added so no new tests required.

        * css/CSSStyleApplyProperty.h:
        Added WTF_MAKE_NONCOPYABLE(CSSStyleApplyProperty) to ensure singleton stays single.

2011-04-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        fast/images/extra-image-in-image-document.html crashes when run after embed-image.html
        https://bugs.webkit.org/show_bug.cgi?id=57733

        The crash happens because resetting the page scale as part of preparing the WebView for the
        next test triggered layout, which in turn caused a plug-in to make a resource request, and
        DumpRenderTree's delegate to be dispatched. The delegate doesn’t expect to be called between
        tests, and it references the layout test controller, which is null.

        * page/Frame.cpp:
        (WebCore::Frame::scalePage): Avoid an unnecessary layout if the page scale isn’t changing. This
        is more efficient, and has the side effect of avoiding the crash in DumpRenderTree, although
        DumpRenderTree could still crash when after a test with disabled plug-ins and a non-1 page scale.
        I think there are currently no such tests, so I am not fixing DumpRenderTree.

2011-04-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Teach InlineIterator how to work from any root, not just a RenderBlock
        https://bugs.webkit.org/show_bug.cgi?id=57726

        For implementing bidi-unicode: isolate, we need to be able to run the
        bidi algorithm over a subtree of inlines, not just from a block root.
        This is the first step in making this possible.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::InlineIterator::root):
        (WebCore::bidiNext):
        (WebCore::bidiFirst):
        (WebCore::InlineIterator::increment):
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2011-04-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Dan Bernstein.

        Split out handling of trailing spaces from layoutInlineChildren
        https://bugs.webkit.org/show_bug.cgi?id=57432

        There is much more we could split out from this function, but this is a start.

        I suspect this is very hot code.  Hopefully the compiler will do the right thing.
        If it doesn't the Chromium PLT bots will tell us.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::handleTrailingSpaces):
        (WebCore::RenderBlock::layoutInlineChildren):

2011-03-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        editing commands shouldn't run when there's no body
        https://bugs.webkit.org/show_bug.cgi?id=56771

        The bug was caused by WebKit's not checking the existence of root editable element
        in enabled* functions. Although isContentEditable returns true whenever we're in design mode,
        we should not run editing commands in a document without a body element editable because
        doing so results in appending a non-body element to the document node.

        Fixed the bug by modifying various enabled* functions to ensure we have a root editable element.
        New behavior tries to match that of Firefox except StyleWithCSS, which Firefox seems to ignore
        when there are no body element. Since StyleWithCSS is a document's state or property, we allow
        execCommand('StyleWithCSS') even in a document without a body element.

        WebKit's and Firefox's behaviors also deviate in insert-image-with-selecting-document.html.
        Whereas WebKit respects selection set by script and ignores execCommand, Firefox modifies
        the selection when document.write("x") is ran and successfully inserts image.

        Thus, empty-document-delete.html and empty-document-justify-right.html both pass on Firefox
        while empty-document-stylewithcss.html and insert-image-with-selecting-document.html both fail.

        Since Internet Explorer does not allow execCommand to run under design mode properly, we could
        not test its behavior.

        Tests: editing/editability/empty-document-delete.html
               editing/editability/empty-document-justify-right.html
               editing/editability/empty-document-stylewithcss.html
               editing/execCommand/insert-image-with-selecting-document.html

        * editing/Editor.cpp:
        (WebCore::Editor::canEdit): Verify that the root editable element exists
        instead of just checking that selection endpoints are editable because
        selection endpoints could be document node without a body element in design mode
        and we don't want to consider such a document editable.
        (WebCore::Editor::canDelete): Ditto.
        * editing/EditorCommand.cpp:
        (WebCore::enabledInEditableText): Ditto.
        (WebCore::enabledInRichlyEditableText): Ditto.
        (WebCore::enabledDelete): Call enabledCut and enabledInEditableText instead
        of duplicating the code in order to fix the same bug.

2011-04-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION (r82786): Media controls render incorrectly on GTK and Qt
        https://bugs.webkit.org/show_bug.cgi?id=57719

        r82786 exposed an incorrect assumption inRenderMediaControlTimeDisplay::layout()
        that the timeline container is the parent of the time display. This is not true
        with the GTK media style, where the current time display is an inline box, and
        thus wrapped in an anonymous flexible box. The code was incorrectly considering
        the width of the anonymous box and deciding to hide the time display. Prior to
        r82786, this mistake was corrected by the call to computeLogicalWidth() in line layout.

        * rendering/MediaControlElements.cpp:
        (WebCore::RenderMediaControlTimeDisplay::layout): Changed to skip past anonymous ancestors.

2011-04-02  Nico Weber  <thakis@chromium.org>

        Reviewed by Adam Barth.

        Explicitly use icu namespace for ports building with U_USING_ICU_NAMESPACE=0

        By default, ICU includes |using namespace icu;| in its header files
        for backwards compatibility. Clients can define
        U_USING_ICU_NAMESPACE=0 to tell ICU to not do this. Prefixing all ICU
        classes with |icu::| makes this file compile no matter what
        U_USING_ICU_NAMESPACE is set to.

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

        * platform/text/LocalizedNumberICU.cpp:
        (WebCore::createFormatterForCurrentLocale):
        (WebCore::numberFormatter):
        (WebCore::parseLocalizedNumber):
        (WebCore::formatLocalizedNumber):

2011-04-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        Remove an unnecessary extra computeLogicalWidth() from line layout
        https://bugs.webkit.org/show_bug.cgi?id=57711

        Changes in behavior (MathML progression) covered by existing layout tests.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Removed a
        call to computeLogicalWidth(). Because of <http://webkit.org/b/57700>, this
        actually prevents MathML rows from reverting to an incorrect width.

2011-04-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Beth Dakin.

        <details> marker loses its margin
        https://bugs.webkit.org/show_bug.cgi?id=57713

        * rendering/RenderDetails.cpp:
        (WebCore::RenderDetails::computePreferredLogicalWidths): Override to update
        the marker location.
        * rendering/RenderDetails.h:
        (WebCore::RenderDetails::renderName): Made private.
        (WebCore::RenderDetails::isDetails): Ditto.
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::computePreferredLogicalWidths): Set the margins
        in the style, like RenderListMarker does.
        (WebCore::RenderDetailsMarker::layout): Set the margins from the style.

2011-04-02  Andy Estes  <aestes@apple.com>

        Reviewed by Oliver Hunt.

        REGRESSION (r69237): Black border around map elements while using an image map on Mac platform
        https://bugs.webkit.org/show_bug.cgi?id=52518

        Test: fast/images/imagemap-focus-ring-zero-outline-width.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintAreaElementFocusRing): Return early if outlineWidth is 0.

2011-04-02  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=57605
        Frame::pageScaleFactor() should not affect getBoundingClientRect() or 
        getClientRects()
        -and corresponding-
        <rdar://problem/9194541>

        New functions adjust*ForPageScale() are analogous to adjust*ForAbsoluteZoom().
        * dom/Element.cpp:
        (WebCore::Element::getClientRects):
        (WebCore::Element::getBoundingClientRect):
        * dom/Range.cpp:
        (WebCore::adjustFloatQuadsForScrollAndAbsoluteZoomAndPageScale):
        (WebCore::Range::getBorderAndTextQuads):
        * rendering/RenderObject.h:
        (WebCore::adjustFloatPointForPageScale):
        (WebCore::adjustFloatQuadForPageScale):
        (WebCore::adjustFloatRectForPageScale):

2011-04-02  Dan Bernstein  <mitz@apple.com>

        Reverted r82775 due to changes in <details> test results, which are
        likely progressions.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Removed a

2011-04-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        Remove an unnecessary extra computeLogicalWidth() from line layout
        https://bugs.webkit.org/show_bug.cgi?id=57711

        Changes in behavior (MathML progression) covered by existing layout tests.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Removed a
        call to computeLogicalWidth(). Because of <http://webkit.org/b/57700>, this
        actually prevents MathML rows from reverting to an incorrect width.

2011-04-02  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Martin Robinson.

        [GTK] Fix leaked pointer in FontGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=57307

        Fix a memory leak.

        No new functionality, so no new tests.

        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::utf16ToUtf8): Rename utf16_to_utf8 and fix indentation.
        (WebCore::convertUniCharToUTF8):

2011-04-02  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: we should be able to have in and out arguments of a command with same name.
        https://bugs.webkit.org/show_bug.cgi?id=57701

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.json:

2011-04-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Not reviewed trivial change.

        Web Inspector: The page agent should be enabled even if JAVASCRIPT_DEBUGGER is off.
        Followup change for r82281.
        https://bugs.webkit.org/show_bug.cgi?id=57327

        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:

2011-04-01  Michael Saboff  <msaboff@apple.com>

        Reviewed by Darin Adler.

        Cached Resource Overhead Space Usage and Accounting Inaccurate
        https://bugs.webkit.org/show_bug.cgi?id=57488

        Fixed windows test failures.
        Changed the fixed overhead value for ResourceResponse to 3800 bytes.
        Modified ResourceResponse::platformLazyInit() to handle "base" level
        attributes or all attributes.  The base attributes, like URL, status
        code, mime type and a few header fields (mostly cache related) are
        suitable for most resources.  This reduces the per resource memory
        needs by over 1K bytes per resource thus saving memory in the cache.
        Collectively, these two changes bring the overhead memory calculation
        in line with reality.

        No new tests added due to existing tests cover areas of change and
        there is no functional change.  The change is limited to reducing 
        memory usage along existing paths.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::canUseCacheValidator):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::isHTTP):
        (WebCore::ResourceResponseBase::url):
        (WebCore::ResourceResponseBase::setURL):
        (WebCore::ResourceResponseBase::mimeType):
        (WebCore::ResourceResponseBase::setMimeType):
        (WebCore::ResourceResponseBase::expectedContentLength):
        (WebCore::ResourceResponseBase::setExpectedContentLength):
        (WebCore::ResourceResponseBase::textEncodingName):
        (WebCore::ResourceResponseBase::setTextEncodingName):
        (WebCore::ResourceResponseBase::suggestedFilename):
        (WebCore::ResourceResponseBase::setSuggestedFilename):
        (WebCore::ResourceResponseBase::httpStatusCode):
        (WebCore::ResourceResponseBase::setHTTPStatusCode):
        (WebCore::ResourceResponseBase::httpStatusText):
        (WebCore::ResourceResponseBase::setHTTPStatusText):
        (WebCore::ResourceResponseBase::httpHeaderField):
        (WebCore::ResourceResponseBase::setHTTPHeaderField):
        (WebCore::ResourceResponseBase::httpHeaderFields):
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        (WebCore::ResourceResponseBase::hasCacheValidatorFields):
        (WebCore::ResourceResponseBase::date):
        (WebCore::ResourceResponseBase::age):
        (WebCore::ResourceResponseBase::expires):
        (WebCore::ResourceResponseBase::lastModified):
        (WebCore::ResourceResponseBase::isAttachment):
        (WebCore::ResourceResponseBase::setLastModifiedDate):
        (WebCore::ResourceResponseBase::lastModifiedDate):
        (WebCore::ResourceResponseBase::wasCached):
        (WebCore::ResourceResponseBase::connectionReused):
        (WebCore::ResourceResponseBase::setConnectionReused):
        (WebCore::ResourceResponseBase::connectionID):
        (WebCore::ResourceResponseBase::setConnectionID):
        (WebCore::ResourceResponseBase::resourceLoadTiming):
        (WebCore::ResourceResponseBase::setResourceLoadTiming):
        (WebCore::ResourceResponseBase::resourceLoadInfo):
        (WebCore::ResourceResponseBase::setResourceLoadInfo):
        (WebCore::ResourceResponseBase::lazyInit):
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::platformLazyInit):
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::memoryUsage):
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::platformLazyInit):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit):

2011-04-01  Anantanarayanan G Iyengar  <ananta@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=45855
        Windowless plugins added dynamically to the DOM should receive paint events.
        This is done by ensuring that the plugin widget is marked for painting when
        it is added.

        Test: plugins/windowless_plugin_paint_test.html

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidget):

2011-04-01  Mike Reed  <reed@google.com>

        Reviewed by James Robinson.

        always use native font rendering on skia_gpu
        fixes a crash when SKIA_GPU is enabled, as we can't call getTopPlatformDevice()
        https://bugs.webkit.org/show_bug.cgi?id=57663

        No new tests. existing rendering tests will exercise this

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::isNativeFontRenderingAllowed):

2011-04-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82712, r82729, and r82746.
        http://trac.webkit.org/changeset/82712
        http://trac.webkit.org/changeset/82729
        http://trac.webkit.org/changeset/82746
        https://bugs.webkit.org/show_bug.cgi?id=57682

        fast/frames/frame-programmatic-noresize.html is failing on
        Windows bots. Will look into this offline. (Requested by dydx
        on #webkit).

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::HTMLFrameElement):
        (WebCore::HTMLFrameElement::attach):
        (WebCore::HTMLFrameElement::parseMappedAttribute):
        * html/HTMLFrameElement.h:
        (WebCore::HTMLFrameElement::noResize):
        * rendering/RenderFrame.cpp:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.cpp:
        * rendering/RenderFrameSet.h:

2011-04-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Tony Chang.

        Valgrind error in _ZN7WebCore8Document11updateTitleERKNS_19StringWithDirectionE
        https://bugs.webkit.org/show_bug.cgi?id=57656

        We should initialize memory when constructing objects.

        * platform/text/StringWithDirection.h:
        (WebCore::StringWithDirection::StringWithDirection):

2011-04-01  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Link from PDF opens in a new tab instead of in the same tab
        https://bugs.webkit.org/show_bug.cgi?id=57528

        * WebCore.exp.in: Export MouseEvent::create().

2011-04-01  John Bauman  <jbauman@chromium.org>

        Reviewed by Kenneth Russell.

        Avoid decoding images twice in texImage2D
        https://bugs.webkit.org/show_bug.cgi?id=51498

        Make sure to redecode the image only if it's not opaque and texImage2D
        wouldn't premultiply it anyway.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2011-04-01  Alexey Proskuryakov  <ap@apple.com>

        32-bit Mac build fix.

        * dom/KeyboardEvent.h: (WebCore::KeypressCommand::KeypressCommand): Use 0U to index a String
        to avoid ambiguity.

2011-04-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        Make WebKit2 text input handling more like WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=57649

        * dom/KeyboardEvent.h: (WebCore::KeypressCommand::KeypressCommand): Put back the assertions
        we used to have. It is dangerous to confuse editor commands and selector names - besides the
        presence of a semicolon, they sometimes have different names, and WebKit2 failed to map those.

2011-04-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82711.
        http://trac.webkit.org/changeset/82711
        https://bugs.webkit.org/show_bug.cgi?id=57657

        Made every test crash on XP and Win7 (Requested by
        abarth|gardening on #webkit).

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::canUseCacheValidator):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::isHTTP):
        (WebCore::ResourceResponseBase::url):
        (WebCore::ResourceResponseBase::setURL):
        (WebCore::ResourceResponseBase::mimeType):
        (WebCore::ResourceResponseBase::setMimeType):
        (WebCore::ResourceResponseBase::expectedContentLength):
        (WebCore::ResourceResponseBase::setExpectedContentLength):
        (WebCore::ResourceResponseBase::textEncodingName):
        (WebCore::ResourceResponseBase::setTextEncodingName):
        (WebCore::ResourceResponseBase::suggestedFilename):
        (WebCore::ResourceResponseBase::setSuggestedFilename):
        (WebCore::ResourceResponseBase::httpStatusCode):
        (WebCore::ResourceResponseBase::setHTTPStatusCode):
        (WebCore::ResourceResponseBase::httpStatusText):
        (WebCore::ResourceResponseBase::setHTTPStatusText):
        (WebCore::ResourceResponseBase::httpHeaderField):
        (WebCore::ResourceResponseBase::setHTTPHeaderField):
        (WebCore::ResourceResponseBase::httpHeaderFields):
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        (WebCore::ResourceResponseBase::date):
        (WebCore::ResourceResponseBase::age):
        (WebCore::ResourceResponseBase::expires):
        (WebCore::ResourceResponseBase::lastModified):
        (WebCore::ResourceResponseBase::isAttachment):
        (WebCore::ResourceResponseBase::setLastModifiedDate):
        (WebCore::ResourceResponseBase::lastModifiedDate):
        (WebCore::ResourceResponseBase::wasCached):
        (WebCore::ResourceResponseBase::connectionReused):
        (WebCore::ResourceResponseBase::setConnectionReused):
        (WebCore::ResourceResponseBase::connectionID):
        (WebCore::ResourceResponseBase::setConnectionID):
        (WebCore::ResourceResponseBase::resourceLoadTiming):
        (WebCore::ResourceResponseBase::setResourceLoadTiming):
        (WebCore::ResourceResponseBase::resourceLoadInfo):
        (WebCore::ResourceResponseBase::setResourceLoadInfo):
        (WebCore::ResourceResponseBase::lazyInit):
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::platformLazyInit):
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::memoryUsage):
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::platformLazyInit):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit):

2011-04-01  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Behavior of isAccelerated() for a IOSurface-backed canvas should be consistent with accelerated status of its ImageBuffer
        https://bugs.webkit.org/show_bug.cgi?id=57651

        No new tests. This patch does not affect outward behavior.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::isAccelerated):
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::isAccelerated):

2011-04-01  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        Frame's noResize attribute can not be set by JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=14845

        Tests: fast/frames/frame-inherit-noresize-from-frameset.html
               fast/frames/frame-programmatic-noresize.html
               fast/frames/frame-with-noresize-can-be-resized-after-removal-of-noresize.html
               fast/frames/frame-with-noresize-can-be-resized-after-setting-noResize-to-false.html

        Implements support to programmatically allow and disallow frame resizing.

        Currently, HTMLFrameElement::parseMappedAttribute() is hardcoded to disallow frame resize (i.e.
        m_noResize = true) when either the noresize DOM attribute is specified (or existed at some
        point in time) or the value of the noResize attribute is modified. Instead we should allow/disallow
        frame resize depending on the presence of the noresize DOM attribute/the value of the noResize
        attribute.

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::HTMLFrameElement):
        (WebCore::HTMLFrameElement::noResize): Made this a non-inline function since this
        code path isn't performance critical.
        (WebCore::HTMLFrameElement::attach): Removed code to inherit noresize attribute from
        parent <frameset> since this functionality is part of RenderFrameSet::computeEdgeInfo().
        (WebCore::HTMLFrameElement::parseMappedAttribute):
        * html/HTMLFrameElement.h:
        * rendering/RenderFrame.cpp:
        (WebCore::RenderFrame::updateFromElement): Added.
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::notifyFrameEdgeInfoChanged): Added.
        * rendering/RenderFrameSet.h:

2011-04-01  Michael Saboff  <msaboff@apple.com>

        Reviewed by Darin Adler.

        Cached Resource Overhead Space Usage and Accounting Inaccurate
        https://bugs.webkit.org/show_bug.cgi?id=57488

        Changed the fixed overhead value for ResourceResponse to 3800 bytes.
        Modified ResourceResponse::platformLazyInit() to handle "base" level
        attributes or all attributes.  The base attributes, like URL, status
        code, mime type and a few header fields (mostly cache related) are
        suitable for most resources.  This reduces the per resource memory
        needs by over 1K bytes per resource thus saving memory in the cache.
        Collectively, these two changes bring the overhead memory calculation
        in line with reality.

        No new tests added due to existing tests cover areas of change and
        there is no functional change.  The change is limited to reducing 
        memory usage along existing paths.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::canUseCacheValidator):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::isHTTP):
        (WebCore::ResourceResponseBase::url):
        (WebCore::ResourceResponseBase::setURL):
        (WebCore::ResourceResponseBase::mimeType):
        (WebCore::ResourceResponseBase::setMimeType):
        (WebCore::ResourceResponseBase::expectedContentLength):
        (WebCore::ResourceResponseBase::setExpectedContentLength):
        (WebCore::ResourceResponseBase::textEncodingName):
        (WebCore::ResourceResponseBase::setTextEncodingName):
        (WebCore::ResourceResponseBase::suggestedFilename):
        (WebCore::ResourceResponseBase::setSuggestedFilename):
        (WebCore::ResourceResponseBase::httpStatusCode):
        (WebCore::ResourceResponseBase::setHTTPStatusCode):
        (WebCore::ResourceResponseBase::httpHeaderField):
        (WebCore::ResourceResponseBase::setHTTPHeaderField):
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        (WebCore::ResourceResponseBase::hasCacheValidatorFields):
        (WebCore::ResourceResponseBase::date):
        (WebCore::ResourceResponseBase::age):
        (WebCore::ResourceResponseBase::expires):
        (WebCore::ResourceResponseBase::lastModified):
        (WebCore::ResourceResponseBase::lazyInit):
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::platformLazyInit):
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::memoryUsage):
        * platform/network/cf/ResourceResponseCFNet.cpp:
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit):

2011-04-01  Timothy Hatcher  <timothy@apple.com>

        Make momentum scroll event latching work in WebKit2 on Mac.

        <rdar://problem/8751861>

        Reviewed by Darin Adler.

        * WebCore.exp.in: Remove _wkIsLatchingWheelEvent, add _wkGetNSEventMomentumPhase.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent): Set m_useLatchedWheelEventNode based on the
        event's momentumPhase.
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::wheelEvent): Remove the setting of m_useLatchedWheelEventNode.
        It is now done in EventHandler::handleWheelEvent.
        * platform/mac/WebCoreSystemInterface.h: Remove wkIsLatchingWheelEvent, add wkGetNSEventMomentumPhase.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.
        * platform/mac/WheelEventMac.mm:
        (WebCore::momentumPhaseForEvent): Return a phase on older Mac system by using wkGetNSEventMomentumPhase.

2011-04-01  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JavaClass should be an interface and free of JNI types
        https://bugs.webkit.org/show_bug.cgi?id=57533

        This patch fixes JavaClass for V8 only.

        It factors out a JavaClass interface which does not use JNI types.
        This will allow the Java bridge to be used with objects that
        don't use JNI directly. The existing jobject-backed
        implementation is moved to a new JavaClassJobject class which
        implements the interface.

        No new tests, refactoring only.

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bridge/jni/v8/JavaClassJobjectV8.cpp:
        (JavaClassJobject::JavaClassJobject):
        (JavaClassJobject::~JavaClassJobject):
        (JavaClassJobject::methodsNamed):
        (JavaClassJobject::fieldNamed):
        * bridge/jni/v8/JavaClassJobjectV8.h: Copied from Source/WebCore/bridge/jni/v8/JavaClassV8.h.
        * bridge/jni/v8/JavaClassV8.h:
        (JSC::Bindings::JavaClass::~JavaClass):
        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::getClass):

2011-04-01  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed build fix.

        Fix build break when font backend is Pango.
        Pango is missed in changeset 80589.

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

        * platform/graphics/pango/FontPlatformData.h:
        (WebCore::FontPlatformData::setOrientation):

2011-04-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82687.
        http://trac.webkit.org/changeset/82687
        https://bugs.webkit.org/show_bug.cgi?id=57643

        This patch broke accessibility aria-treegrid test in Mac
        (Requested by msanchez on #webkit).

        * accessibility/AccessibilityARIAGrid.cpp:
        * accessibility/AccessibilityARIAGrid.h:
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole):
        * accessibility/mac/AccessibilityObjectWrapper.mm:

2011-03-31  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Andreas Kling.

        Whenever a relayout is trigger for SVGPath, make sure
        to clear its previous marker layout info. This helps
        to prevent removed markers from being used.
        https://bugs.webkit.org/show_bug.cgi?id=57492

        Test: svg/dom/path-marker-removed-crash.svg

        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::layout):
        * rendering/svg/SVGMarkerLayoutInfo.cpp:
        (WebCore::SVGMarkerLayoutInfo::clear):
        * rendering/svg/SVGMarkerLayoutInfo.h:

2011-04-01  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Nikolas Zimmermann.

        https://bugs.webkit.org/show_bug.cgi?id=55750
        SVG <image> referenced by <use> is displayed incorrectly

        Reintroduce old behaviour for valid base URI, for invalid
        keep using document base URI.
        Fixes regression of W3C-SVG-1.1/struct-image-07-t.svg.

        Test: svg/custom/image-base-uri.svg

        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::sourceURI):

2011-04-01  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        ARIA Grid tables should return GridRole in roleValue() method
        https://bugs.webkit.org/show_bug.cgi?id=57614

        This change does not need any test since it doesn't change anything
        from the point of view of the consumers (Assistive Technoglogies).
        It's just an internal change to simplify identifying HTML and ARIA
        tables by calling to the AccessibilityObject::roleValue method.

        * accessibility/AccessibilityARIAGrid.h:
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::roleValue): Return GridRole.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole): Removed unneeded comment.

        * accessibility/mac/AccessibilityObjectWrapper.mm: Map GridRole to
        NSAccessibilityTableRole, to keep the same behaviour.

2011-04-01  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        <meter> can only support horizontal indicator
        https://bugs.webkit.org/show_bug.cgi?id=56001

        - Removed code which deals with the direction and
          left the horizontal path.
        - Removed "horizontal" from related names which is now
          redundant.
        
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/html.css:
        (meter::-webkit-meter-bar):
        (meter::-webkit-meter-optimum-value):
        (meter::-webkit-meter-suboptimal-value):
        (meter::-webkit-meter-even-less-good-value):
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::~RenderMeter):
        (WebCore::RenderMeter::createPart):
        (WebCore::RenderMeter::updateFromElement):
        (WebCore::RenderMeter::layoutParts):
        (WebCore::RenderMeter::styleDidChange):
        (WebCore::RenderMeter::shouldHaveParts):
        (WebCore::RenderMeter::valuePartRect):
        (WebCore::RenderMeter::valuePseudoId):
        (WebCore::RenderMeter::barPseudoId):
        (WebCore::RenderMeter::detachShadows):
        (WebCore::RenderMeter::updateShadows):
        * rendering/RenderMeter.h:
        (WebCore::RenderMeter::shadowAttached):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::supportsMeter):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMeter):
        (WebCore::RenderThemeMac::supportsMeter):
        * rendering/style/RenderStyleConstants.h:

2011-03-23  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: fix reveal line in formatted script.
        https://bugs.webkit.org/show_bug.cgi?id=56941

        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointClicked):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.sourceFileForScriptURL):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype.canShowAnchorLocation):
        (WebInspector.NetworkPanel.prototype.showAnchorLocation):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.canShowAnchorLocation):
        (WebInspector.Panel.prototype.showAnchorLocation):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.canShowAnchorLocation):
        (WebInspector.ResourcesPanel.prototype.showAnchorLocation):
        (WebInspector.ResourcesPanel.prototype.showResource):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.canShowAnchorLocation):
        (WebInspector.ScriptsPanel.prototype.showAnchorLocation):
        (WebInspector.ScriptsPanel.prototype._showSourceLine):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.highlightLine):
        (WebInspector.SourceFrame.prototype._createTextViewer):
        * inspector/front-end/inspector.js:
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):
        (WebInspector._showAnchorLocation):

2011-04-01  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make editScriptSource a Script's method.
        https://bugs.webkit.org/show_bug.cgi?id=57615

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.editScriptSource):
        (WebInspector.DebuggerModel.prototype._didEditScriptSource):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.requestSource):
        (WebInspector.Script.prototype.editSource):

2011-04-01  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: event should have "data" attribute, not "body"
        https://bugs.webkit.org/show_bug.cgi?id=57628

        * inspector/CodeGeneratorInspector.pm:

2011-04-01  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: checkboxes are broken in xhr breakpoints sidebar pane.
        https://bugs.webkit.org/show_bug.cgi?id=57610

        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.XHRBreakpointsSidebarPane.prototype._checkboxClicked):

2011-04-01  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: up/down keys are not treating hex numbers properly while editing styles.
        https://bugs.webkit.org/show_bug.cgi?id=40522

        Drive-by: fix inc/dec for numbers like ".5"

        Test: inspector/styles/up-down-numerics-and-colors.html

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):

2011-03-30  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove dead code from Script.js.
        https://bugs.webkit.org/show_bug.cgi?id=57454

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerModel.prototype._failedToParseScriptSource):
        * inspector/front-end/Script.js:
        (WebInspector.Script):
        (WebInspector.Script.prototype.requestSource.didGetScriptSource):
        (WebInspector.Script.prototype.requestSource):

2011-04-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82667.
        http://trac.webkit.org/changeset/82667
        https://bugs.webkit.org/show_bug.cgi?id=57612

        Breaks Leopard layout tests (Requested by podivilov on
        #webkit).

        * GNUmakefile.am:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):

2011-03-30  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove unused SourceFrameContent class.
        https://bugs.webkit.org/show_bug.cgi?id=57453

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ResourceView.js:
        (WebInspector.SourceFrameDelegateForResourcesPanel.prototype.requestContent):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.requestContent):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._createTextViewer):
        * inspector/front-end/SourceFrameContent.js: Removed.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-03-30  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: add test for script formatter worker.
        https://bugs.webkit.org/show_bug.cgi?id=57447

        Test: inspector/debugger/script-formatter.html

        * GNUmakefile.am:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):

2011-03-30  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [chromium] script formatting doesn't work when all scripts are concatenated.
        https://bugs.webkit.org/show_bug.cgi?id=57446

        * inspector/front-end/ScriptFormatterWorker.js:

2011-04-01  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: allow file access from inspector page so inspector can use workers.
        https://bugs.webkit.org/show_bug.cgi?id=57339

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::InspectorFrontendClientLocal):

2011-03-31  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: inspected page crashes on attempt to log object with broken .toString
        https://bugs.webkit.org/show_bug.cgi?id=57557

        If ScriptValue.toString causes a JavaScript exception, the exception is cleared
        before returning from the toString method.

        Test: inspector/console/console-log-toString-object.html

        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::toString):
        * bindings/js/ScriptValue.h:
        * bindings/v8/ScriptValue.cpp:
        (WebCore::ScriptValue::toString):

2011-03-31  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        - removed documentWide parameter to querySelector[All]() (user document node id instead)
        - factor out document request logic within DOMAgent into separate method
        - add querySelector() and querySelectorAll() to DOMAgent.js, assure we have document before calling back-end
        - use the above wrappers for querySelector() and querySelectorAll(), do not call backend directly
        - minor style fixes in Inspector.json
        - more error logging

        Web Inspector: provide front-end wrappers for DOMAgent.querySelector[All]() that take care of fetching the document
        https://bugs.webkit.org/show_bug.cgi?id=57466

        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::querySelector):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.getStyles):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.setRuleSelector.callback):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.addRule.callback):
        (WebInspector.CSSStyleModel.prototype.addRule):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.requestDocument.onDocumentAvailable):
        (WebInspector.DOMAgent.prototype.requestDocument):
        (WebInspector.DOMAgent.prototype.pushNodeToFrontend):
        (WebInspector.DOMAgent.prototype.pushNodeByPathToFrontend):
        (WebInspector.DOMAgent.prototype._dispatchWhenDocumentAvailable.onDocumentAvailable):
        (WebInspector.DOMAgent.prototype._dispatchWhenDocumentAvailable):
        (WebInspector.DOMAgent.prototype.cancelSearch):
        (WebInspector.DOMAgent.prototype.querySelector):
        (WebInspector.DOMAgent.prototype.querySelectorAll):

2011-04-01  Kent Tamura  <tkent@chromium.org>

        Apply sort-Xcode-project-file.

        * WebCore.xcodeproj/project.pbxproj:

2011-03-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82652.
        http://trac.webkit.org/changeset/82652
        https://bugs.webkit.org/show_bug.cgi?id=57603

        Test still fails (Requested by abarth|gardener on #webkit).

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidget):

2011-03-31  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Kent Tamura.

        REGRESSION (r64712): Safari removes the first blank line in a textarea
        https://bugs.webkit.org/show_bug.cgi?id=56434

        Test: fast/forms/textarea-newline.html

        A linefeed removal after a textarea tag is originally processed in WebCore::HTMLTextAreaElement::defaultValue().
        But HTML5 tree builder now removes the linefeed. It means linefeed removal happens twice.
        And devalutValue() removal is not needed anymore.

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setDefaultValue): Remove an extra linefeed insertion at the beginning.
        (WebCore::HTMLTextAreaElement::defaultValue): Remove linefeed removal check in default value creation function.

2011-03-31  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Remove refcounting of CSSStyleApplyProperty singleton
        https://bugs.webkit.org/show_bug.cgi?id=57592

        No new tests required as no functionality changes.

        * css/CSSStyleApplyProperty.h:

2011-03-31  Anantanarayanan G Iyengar  <ananta@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=45855
        Windowless plugins added dynamically to the DOM should receive paint events.
        This is done by ensuring that the plugin widget is marked for painting when
        it is added.

        Test: plugins/windowless_plugin_paint_test.html

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidget):

2011-03-31  Adam Roben  <aroben@apple.com>

        Add a new AbstractCACFLayerTreeHost base class

        This class exposes the interface that LayerChangesFlusher and PlatformCALayer rely on.
        CACFLayerTreeHost now derives from AbstractCACFLayerTreeHost. In the future, WebKit2's
        LayerTreeHostCA will also derive from it (on Windows).

        This should cause no change in behavior.

        Fixes <http://webkit.org/b/57598> Coupling between CACFLayerTreeHost and other CACF-related
        code is too high

        Reviewed by Anders Carlsson.

        * WebCore.vcproj/WebCore.vcproj: Added AbstractCACFLayerTreeHost, and let VS reorder files.

        * platform/graphics/ca/win/AbstractCACFLayerTreeHost.h: Added.

        * platform/graphics/ca/win/CACFLayerTreeHost.h: Changed to derive from
        AbstractCACFLayerTreeHost, and annotated the overrides of its functions.
        AbstractCACFLayerTreeHost also allows us to get rid of the friend relationship with
        PlatformCALayer.

        * platform/graphics/ca/win/LayerChangesFlusher.cpp:
        (WebCore::LayerChangesFlusher::flushPendingLayerChangesSoon):
        (WebCore::LayerChangesFlusher::cancelPendingFlush):
        (WebCore::LayerChangesFlusher::hookFired):
        * platform/graphics/ca/win/LayerChangesFlusher.h:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (layerTreeHostForLayer):
        (PlatformCALayer::rootLayer):
        (PlatformCALayer::setNeedsCommit):
        (PlatformCALayer::addAnimationForKey):
        (PlatformCALayer::removeAnimationForKey):
        Changed to use AbstractCACFLayerTreeHost instead of using CACFLayerTreeHost directly.

2011-03-31  Andy Estes  <aestes@apple.com>

        Reviewed by Alexey Proskuryakov.

        REGRESSION: Java applet fails to load when <object> has a classid attribute.
        https://bugs.webkit.org/show_bug.cgi?id=52703
        
        Java applets embedded with the object element sometimes use classid to
        specify their main resource. When this is done, the classid is prefixed
        with "java:". Treat these as supported classids in WebKit.

        Test: java/embedding-java-with-object.html

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::hasValidClassId): If the MIME type is a
        Java Applet type and the classid starts with "java:", the classid
        should be considered valid.

2011-03-31  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed Adam Roben.

        [WinCairo] Implement Missing drawWindowsBitmap method.
        https://bugs.webkit.org/show_bug.cgi?id=57409

        * WebCore.vcproj/WebCore.vcproj: Add new DIBPixelData files.
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::WindowsBitmap::buffer):
        (WebCore::GraphicsContext::WindowsBitmap::bufferLength):
        (WebCore::GraphicsContext::WindowsBitmap::size):
        (WebCore::GraphicsContext::WindowsBitmap::bytesPerRow):
        (WebCore::GraphicsContext::WindowsBitmap::bitsPerPixel):
        (WebCore::GraphicsContext::WindowsBitmap::windowsDIB):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::CGContextWithHDC):
        (WebCore::GraphicsContext::releaseWindowsContext): Modified to use
        new common routines.
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::drawBitmapToContext): New common drawing implementation.
        (WebCore::GraphicsContext::releaseWindowsContext): Modified to use
        new common routines.
        (WebCore::GraphicsContext::drawWindowsBitmap):
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::WindowsBitmap::WindowsBitmap): Modified
        to use new DIBPixelData data type.
        * platform/graphics/win/DIBPixelData.cpp: Added.
        (WebCore::DIBPixelData::DIBPixelData):
        (WebCore::DIBPixelData::initialize):
        * platform/graphics/win/DIBPixelData.h: Added.
        (WebCore::DIBPixelData::DIBPixelData):
        (WebCore::DIBPixelData::buffer):
        (WebCore::DIBPixelData::bufferLength):
        (WebCore::DIBPixelData::size):
        (WebCore::DIBPixelData::bytesPerRow):
        (WebCore::DIBPixelData::bitsPerPixel):

2011-03-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81849.
        http://trac.webkit.org/changeset/81849
        https://bugs.webkit.org/show_bug.cgi?id=57588

        CSS Parsing broke with -webkit-calc and introduced crashes
        (Requested by inferno-sec on #webkit).

        * css/CSSGrammar.y:
        * css/CSSParserValues.cpp:
        * css/CSSParserValues.h:
        * css/tokenizer.flex:

2011-03-31  Adam Roben  <aroben@apple.com>

        Don't ref CACFLayerTreeHosts when telling them to flush layer changes

        LayerChangesFlusher was reffing CACFLayerTreeHosts before calling out to them. This would
        have protected us if calling out to one CACFLayerTreeHost could cause a different
        CACFLayerTreeHost to be destroyed. But that isn't possible; each CACFLayerTreeHost is
        associated with its own page, and flushing layer changes doesn't touch any other page. So it
        isn't possible for a CACFLayerTreeHost to be deleted while another one is flushing layer
        changes.

        One benefit of this change is that it will make it easier to make LayerChangesFlusher
        interact with a forthcoming abstract base class, rather than with CACFLayerTreeHost itself.

        This should cause no change in behavior.

        Fixes <http://webkit.org/b/57590> LayerChangesFlusher unnecessarily refs CACFLayerTreeHost
        before calling out to it

        Reviewed by Darin Adler.

        * platform/graphics/ca/win/LayerChangesFlusher.cpp:
        (WebCore::LayerChangesFlusher::hookFired): Just store bare pointers to the
        CACFLayerTreeHosts.

2011-03-31  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=57574
        Preload scanner fails to pick up resources from document.write() output

        - Scan script inserted source using a separate preload scanner.
        - Make the main preload scanner correctly process the remaining source if script execution blocked the parser.

        Tests: fast/preloader/document-write-2.html
               fast/preloader/document-write.html

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::appendCurrentInputStreamToPreloadScannerAndScan):
        * html/parser/HTMLDocumentParser.h:
        (WebCore::HTMLDocumentParser::hasPreloadScanner):
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::execute):
        * html/parser/HTMLScriptRunnerHost.h:

2011-03-31  Tony Gentilcore  <tonyg@chromium.org>

        Build fix: Add missing include
        https://bugs.webkit.org/show_bug.cgi?id=57587

        * loader/cache/CachedResourceLoader.cpp:

2011-03-31  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Antti Koivisto.

        PreloadScanner doesn&apos;t find image while executing script in head
        https://bugs.webkit.org/show_bug.cgi?id=45072

        Previously, while parsing the head, no resources in the body would be
        preloaded. After this patch, we will preload scripts and styles in the
        body, although we continue to hold off on all images until the page is 
        first rendered.

        To evaluate this change, I've recorded a sampling of 45 of alexa's top
        sites and replayed them under simulated bandwidth conditions, loading
        each 5-15 times until stddev is small enough.

        Time to the load event improved at the overall average by 3%.
        Most sites are unchanged, but sites with certain blocking patterns had
        big wins -- ebay 19% (331ms), microsoft 15% (226ms), conduit 15% (277ms)
        nytimes 7% (182ms).

        Time to DOM content loaded event improved by 6% with some even bigger
        individual wins.

        First paint time held steady.

        Note that I originally wanted to allow preloading of images while in the
        head, but that regressed first paint time (even though it was better for
        overall load time).

        Test: fast/preloader/scan-body-from-head.html

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::preload):

2011-03-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82616.
        http://trac.webkit.org/changeset/82616
        https://bugs.webkit.org/show_bug.cgi?id=57585

        New test does not pass on Gtk, chromium-mac, chromium-linux
        and possibly elsewhere (Requested by abarth|gardener on
        #webkit).

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidget):

2011-03-31  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Fix ownership semantics for LayerChromium/CCLayerImpl
        https://bugs.webkit.org/show_bug.cgi?id=57577

        LayerRendererChromium now uses a RefPtr to preserve ownership of all
        of the CCLayerImpl layers that it is using during the update/draw
        pass.  Addtionally, when a LayerChromium is destroyed, the weak
        owner pointer from its CCLayerImpl is correctly unset.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::compareLayerZ):
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        (WebCore::LayerRendererChromium::updateLayers):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):
        (WebCore::LayerRendererChromium::drawLayer):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::drawsContent):
        (WebCore::CCLayerImpl::cleanupResources):

2011-03-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Rename WebCore's UI_STRING to WEB_UI_STRING to not overlap with WebKit API
        https://bugs.webkit.org/show_bug.cgi?id=57582

        * platform/DefaultLocalizationStrategy.cpp:
        * platform/LocalizedStrings.h:

2011-03-31  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Rename BidiResolver::lastBeforeET to m_lastBeforeET to match modern style
        https://bugs.webkit.org/show_bug.cgi?id=57550

        * platform/text/BidiResolver.h:
        (WebCore::::createBidiRunsForLine):

2011-03-31  Anantanarayanan G Iyengar  <ananta@chromium.org>

        Reviewed by James Robinson.

        https://bugs.webkit.org/show_bug.cgi?id=45855
        Windowless plugins added dynamically to the DOM should receive paint events.
        This is done by ensuring that the plugin widget is marked for painting when
        it is added.

        Test: plugins/windowless_plugin_paint_test.html

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidget):

2011-03-31  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Speed up accelerated path drawing.
        https://bugs.webkit.org/show_bug.cgi?id=57371
        This CL does three things:  re-uses the same vertex and index buffer
        for all path draws, converts all vertex layouts from vec3 to vec2, and
        does a convexity check for polygons before passing them to the
        tesselator.

        Covered by canvas/philip/tests/2d.path.bezierCurveTo.*, and others.

        * platform/graphics/chromium/GLES2Canvas.cpp:
        Replace the Vector<double> for interpolated curves with a
        Vector<FloatPoint>.
        (WebCore::Cubic::evaluate):
        Inline the evaluation function (as Quadratic does).
        (WebCore::GLES2Canvas::GLES2Canvas):
        Initialize the m_pathIndexBuffer.
        (WebCore::GLES2Canvas::~GLES2Canvas):
        Delete the path vertex and index buffers on destruction.
        (WebCore::interpolateQuadratic):
        (WebCore::interpolateCubic):
        Interpolate directly to a Vector<FloatPoint>, rather than
        Vector<double>.
        (WebCore::PolygonData::PolygonData):
        (WebCore::combineData):
        Replace the DoubleVector with a FloatPointVector.
        (WebCore::GLES2Canvas::tesselateAndFillPath):
        Move curve drawing into this function, and rename it to reflect the
        new behaviour.  Re-use the common vertex and index buffers.  If the
        curve consists of a single convex polygon, draw the curve as a single
        triangle fan.  Otherwise, convert it to doubles and pass it to the
        tesselator.
        (WebCore::GLES2Canvas::fillPathInternal):
        * platform/graphics/chromium/GLES2Canvas.h:
        Rename createVertexBufferFromPath() -> tesselateAndFillPath().
        Add a persistent index buffer for all path draws.
        * platform/graphics/gpu/BicubicShader.cpp:
        (WebCore::BicubicShader::create):
        (WebCore::BicubicShader::use):
        * platform/graphics/gpu/ConvolutionShader.cpp:
        (WebCore::ConvolutionShader::create):
        (WebCore::ConvolutionShader::use):
        Use vec2s instead of vec3s for all vertex data.
        * platform/graphics/gpu/LoopBlinnMathUtils.cpp:
        (WebCore::LoopBlinnMathUtils::convexCompare):
        (WebCore::LoopBlinnMathUtils::convexCross):
        (WebCore::LoopBlinnMathUtils::convexCheckTriple):
        (WebCore::LoopBlinnMathUtils::isConvex):
        * platform/graphics/gpu/LoopBlinnMathUtils.h:
        Implement a convexity check, based on the code in Graphics Gems IV.
        * platform/graphics/gpu/Shader.cpp:
        (WebCore::Shader::generateVertex):
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::useQuadVertices):
        * platform/graphics/gpu/SolidFillShader.cpp:
        (WebCore::SolidFillShader::use):
        * platform/graphics/gpu/TexShader.cpp:
        (WebCore::TexShader::use):
        Use vec2s instead of vec3s for all vertex data.

2011-03-31  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

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

        Optimize overflow computations on lines to avoid allocating RenderOverflows in nearly all cases and to avoid even having
        to check the line for overflow in the first place.
        
        For the purposes of overflow computation, an inline object's default containment box for overflow is now assumed to extend
        all the way from lineTop to lineBottom instead of snugly fitting the inline object's own block dimensions. This allows
        replaced objects to be inside spans without triggering overflow allocation.
        
        The overflow accessors on InlineFlowBox have been changed to require passing in the lineTop and lineBottom so that the block
        dimensions can be forced to those values. Because these values are checked during painting and hit testing of lines, the
        lineTop and lineBottom are now passed as arguments to the painting and hit testing functions to avoid repeatedly crawling
        back up to the root box to fetch them.
        
        Added a new boolean flag to all InlineBoxes, knownToHaveNoOverflow(), and optimized for common cases where no overflow can
        possibly be present.  When the bit is set, computeOverflow will just immediately return.
 
        This change speeds up line layout by ~10%.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/EllipsisBox.h:
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::paint):
        (WebCore::InlineBox::nodeAtPoint):
        (WebCore::InlineBox::clearKnownToHaveNoOverflow):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::logicalFrameRect):
        (WebCore::InlineBox::knownToHaveNoOverflow):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::addBoxShadowVisualOverflow):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::InlineFlowBox::addReplacedChildOverflow):
        (WebCore::InlineFlowBox::computeOverflow):
        (WebCore::InlineFlowBox::setLayoutOverflow):
        (WebCore::InlineFlowBox::setVisualOverflow):
        (WebCore::InlineFlowBox::setOverflowFromLogicalRects):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paint):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::layoutOverflowRect):
        (WebCore::InlineFlowBox::logicalLeftLayoutOverflow):
        (WebCore::InlineFlowBox::logicalRightLayoutOverflow):
        (WebCore::InlineFlowBox::logicalTopLayoutOverflow):
        (WebCore::InlineFlowBox::logicalBottomLayoutOverflow):
        (WebCore::InlineFlowBox::logicalLayoutOverflowRect):
        (WebCore::InlineFlowBox::visualOverflowRect):
        (WebCore::InlineFlowBox::logicalLeftVisualOverflow):
        (WebCore::InlineFlowBox::logicalRightVisualOverflow):
        (WebCore::InlineFlowBox::logicalTopVisualOverflow):
        (WebCore::InlineFlowBox::logicalBottomVisualOverflow):
        (WebCore::InlineFlowBox::logicalVisualOverflowRect):
        (WebCore::InlineFlowBox::frameRectIncludingLineHeight):
        (WebCore::InlineFlowBox::logicalFrameRectIncludingLineHeight):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::nodeAtPoint):
        (WebCore::InlineTextBox::paint):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedNormalFlowLayout):
        (WebCore::RenderBlock::paintEllipsisBoxes):
        (WebCore::RenderBlock::adjustLinePositionForPagination):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::RenderBlock::matchedEndLine):
        (WebCore::RenderBlock::addOverflowFromInlineChildren):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::hasRenderOverflow):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::linesVisualOverflowBoundingBox):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::anyLineIntersectsRect):
        (WebCore::RenderLineBoxList::lineIntersectsDirtyRect):
        (WebCore::RenderLineBoxList::paint):
        (WebCore::RenderLineBoxList::hitTest):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paintEllipsisBox):
        (WebCore::RootInlineBox::addHighlightOverflow):
        (WebCore::RootInlineBox::paint):
        (WebCore::RootInlineBox::nodeAtPoint):
        (WebCore::RootInlineBox::paddedLayoutOverflowRect):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::logicalTopVisualOverflow):
        (WebCore::RootInlineBox::logicalBottomVisualOverflow):
        (WebCore::RootInlineBox::logicalTopLayoutOverflow):
        (WebCore::RootInlineBox::logicalBottomLayoutOverflow):
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paint):
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paint):
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint):
        * rendering/svg/SVGRootInlineBox.h:

2011-03-31  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: disable properties abbreviation.
        https://bugs.webkit.org/show_bug.cgi?id=57525

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::getProperties):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptSource.js:
        (.):
        ():
        * inspector/Inspector.json:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::getProperties):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions.evaluated):
        (WebInspector.ConsoleView.prototype._formatarray):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.update.callback):
        (WebInspector.ObjectPropertiesSection.prototype.update):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        (WebInspector.ObjectPropertyTreeElement.prototype.startEditing):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.nodePrototypesReady):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.getOwnProperties):
        (WebInspector.RemoteObject.prototype.getAllProperties):
        (WebInspector.RemoteObject.prototype._getProperties):
        (WebInspector.LocalJSONObject.prototype.getOwnProperties):
        (WebInspector.LocalJSONObject.prototype.getAllProperties):
        * inspector/front-end/inspector.css:
        (.console-formatted-string, .console-formatted-regexp):

2011-03-31  Adam Roben  <aroben@apple.com>

        Update WKCACFViewLayerTreeHost for changes to WKCACFView API

        This should not result in any change in behavior.

        Fixes <http://webkit.org/b/57560> WKCACFViewLayerTreeHost needs to tell WKCACFView where to
        render

        Reviewed by Darin Adler.

        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp: Updated API declarations.
        (WebCore::WKCACFViewLayerTreeHost::WKCACFViewLayerTreeHost): Tell WKCACFView it should
        render into the window we give it.

2011-03-31  Marius Storm-Olsen  <marius.storm-olsen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Properly detect phonon include, and avoid double qtLibraryTarget() call
        https://bugs.webkit.org/show_bug.cgi?id=57017

        Build fix. No new tests.

        * WebCore.pri:

2011-03-31  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        XML viewer is not shown when frame has non-null opener
        https://bugs.webkit.org/show_bug.cgi?id=56384

        Removed opener check in XML viewer

        Test: http/tests/xmlviewer/extensions-api.html

        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::hasNoStyleInformation):
        * xml/XMLViewer.js:

2011-03-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82589.
        http://trac.webkit.org/changeset/82589
        https://bugs.webkit.org/show_bug.cgi?id=57564

        This patch requires many more updated results than it contains
        (Requested by abarth|gardener on #webkit).

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/html.css:
        (meter::-webkit-meter-horizontal-bar):
        (meter::-webkit-meter-vertical-bar):
        (meter::-webkit-meter-horizontal-optimum-value):
        (meter::-webkit-meter-horizontal-suboptimal-value):
        (meter::-webkit-meter-horizontal-even-less-good-value):
        (meter::-webkit-meter-vertical-optimum-value):
        (meter::-webkit-meter-vertical-suboptimal-value):
        (meter::-webkit-meter-vertical-even-less-good-value):
        * rendering/RenderMeter.cpp:
        (WebCore::MeterPartElement::MeterPartElement):
        (WebCore::MeterPartElement::createForPart):
        (WebCore::MeterPartElement::hide):
        (WebCore::MeterPartElement::restoreVisibility):
        (WebCore::MeterPartElement::updateStyleForPart):
        (WebCore::MeterPartElement::saveVisibility):
        (WebCore::RenderMeter::~RenderMeter):
        (WebCore::RenderMeter::createPart):
        (WebCore::RenderMeter::updateFromElement):
        (WebCore::RenderMeter::layoutParts):
        (WebCore::RenderMeter::shouldHaveParts):
        (WebCore::RenderMeter::valuePartRect):
        (WebCore::RenderMeter::orientation):
        (WebCore::RenderMeter::valuePseudoId):
        (WebCore::RenderMeter::barPseudoId):
        * rendering/RenderMeter.h:
        (WebCore::RenderMeter::shadowAttached):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::supportsMeter):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMeter):
        (WebCore::RenderThemeMac::supportsMeter):
        * rendering/style/RenderStyleConstants.h:

2011-03-31  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Link explicitly with XRender on Linux/Unix
        https://bugs.webkit.org/show_bug.cgi?id=57558

        * GNUmakefile.am: add XRender CFLAGS.

2011-03-31  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Rename BidiResolver::emptyRun to m_emtpyRun to match modern style
        https://bugs.webkit.org/show_bug.cgi?id=57549

        * platform/text/BidiResolver.h:
        (WebCore::BidiResolver::BidiResolver):
        (WebCore::::appendRun):
        (WebCore::::lowerExplicitEmbeddingLevel):
        (WebCore::::raiseExplicitEmbeddingLevel):
        (WebCore::::deleteRuns):
        (WebCore::::createBidiRunsForLine):
        * rendering/InlineIterator.h:
        (WebCore::InlineBidiResolver::appendRun):

2011-03-31  Tom Sepez  <tsepez@chromium.org>

        Reviewed by Eric Seidel.

        Make ContainerNode::insertIntoDocument() collect all nodes before
        operating on any of them.  Add small helper function and use it
        througout the file where this action is already taking place.
        https://bugs.webkit.org/show_bug.cgi?id=57265
        
        Test: svg/dom/range-delete.html

        * dom/ContainerNode.cpp:
        (WebCore::collectNodes):
        (WebCore::collectTargetNodes):
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::willRemoveChildren):
        (WebCore::ContainerNode::insertedIntoDocument):

2011-03-31  Satish Sampath  <satish@chromium.org>

        Reviewed by Steve Block.

        While drawing a speech input button, validate that the node is really a speech input button.
        https://bugs.webkit.org/show_bug.cgi?id=57469

        Test: fast/speech/speech-style-on-non-speech-elements.html

        * dom/Element.h:
        (WebCore::Element::isInputFieldSpeechButtonElement):
        * html/shadow/TextControlInnerElements.h:
        (WebCore::InputFieldSpeechButtonElement::isInputFieldSpeechButtonElement):
        (WebCore::toInputFieldSpeechButtonElement):
        * rendering/RenderInputSpeech.cpp:
        (WebCore::RenderInputSpeech::paintInputFieldSpeechButton):

2011-03-31  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r82588. Reverted unintentional change.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyMovingLeft):

2011-03-31  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Warnings happening because of unhandled switch cases in AccessibilityObjectWrapperAtk
        https://bugs.webkit.org/show_bug.cgi?id=57534

        Fix compilation warnings.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getAttributeSetForAccessibilityObject): Add unhandled cases.

2011-03-30  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove unnecessary newBody output parameter from editScriptSource protocol method.
        https://bugs.webkit.org/show_bug.cgi?id=57444

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::editScriptSource):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::editScriptSource):
        * bindings/v8/ScriptDebugServer.h:
        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::editScriptSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.editScriptSource):
        (WebInspector.DebuggerModel.prototype._didEditScriptSource):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource.didEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._handleSave.didEditScriptSource):
        (WebInspector.SourceFrame.prototype._handleSave):

2011-03-30  MORITA Hajime <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        <meter> can only support horizontal indicator
        https://bugs.webkit.org/show_bug.cgi?id=56001

        - Removed code which deals with the direction and
          left the horizontal path.
        - Removed "horizontal" from related names which is now
          redundant.
        
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/html.css:
        (meter::-webkit-meter-bar):
        (meter::-webkit-meter-optimum-value):
        (meter::-webkit-meter-suboptimal-value):
        (meter::-webkit-meter-even-less-good-value):
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::~RenderMeter):
        (WebCore::RenderMeter::createPart):
        (WebCore::RenderMeter::updateFromElement):
        (WebCore::RenderMeter::layoutParts):
        (WebCore::RenderMeter::styleDidChange):
        (WebCore::RenderMeter::shouldHaveParts):
        (WebCore::RenderMeter::valuePartRect):
        (WebCore::RenderMeter::valuePseudoId):
        (WebCore::RenderMeter::barPseudoId):
        (WebCore::RenderMeter::detachShadows):
        (WebCore::RenderMeter::updateShadows):
        * rendering/RenderMeter.h:
        (WebCore::RenderMeter::shadowAttached):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::supportsMeter):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMeter):
        (WebCore::RenderThemeMac::supportsMeter):
        * rendering/style/RenderStyleConstants.h:

2011-03-30  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Ryosuke Niwa.

        Experiment with moving caret by word in visual order.
        https://bugs.webkit.org/show_bug.cgi?id=57336

        Follow Firefox's convention in Windows, 
        In LTR block, word break visually moves cursor to the left boundary of words,
        In RTL block, word break visually moves cursor to the right boundary of words.

        This is the 1st version of implementing "move caret by word in visual order".
        It only works in the following situation:
        1. For a LTR box in a LTR block or a RTL box in RTL block, 
        when caret is at the left boundary of the box and we are looking for 
        the word boundary in right.
        2. For a LTR or RTL box in a LTR block, when caret is at the left boundary
        of the box and we are looking for the word boundary in left and 
        previous box is a LTR box.
        3. For a LTR or RTL box in a RTL block, when the caret is at the right 
        boundary of the box and we are looking for the word boundary in right and next box is RTL box.

        An experimental granularity is introduced, as a side effect, functions having switch statements
        to handle those granularities have to add more one case to handle this new granularity.
        The experimental granularity is exposed though JS by '-webkit-visual-word".

        The overall algorithm is looping through inline boxes visually and looking
        for the visually nearest word break position. 

        Test: editing/selection/move-by-word-visually.html

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingRight):
        (WebCore::SelectionController::modifyExtendingForward):
        (WebCore::SelectionController::modifyMovingRight):
        (WebCore::SelectionController::modifyMovingForward):
        (WebCore::SelectionController::modifyExtendingLeft):
        (WebCore::SelectionController::modifyExtendingBackward):
        (WebCore::SelectionController::modifyMovingLeft):
        (WebCore::SelectionController::modifyMovingBackward):
        * editing/TextGranularity.h:
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
        * editing/visible_units.cpp:
        (WebCore::previousWordBreakInBoxInsideBlockWithSameDirectionality):
        (WebCore::wordBoundaryInBox):
        (WebCore::wordBoundaryInAdjacentBoxes):
        (WebCore::leftWordBoundary):
        (WebCore::rightWordBoundary):
        (WebCore::leftWordPosition):
        (WebCore::rightWordPosition):
        * editing/visible_units.h:
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::modify):

2011-03-31  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Move coordinate-computing logic into MouseRelatedEvent.
        https://bugs.webkit.org/show_bug.cgi?id=57521

        Refactoring, covered by existing tests.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchWheelEvent): Yank calculation of
            coordinates out.
        (WebCore::EventDispatcher::dispatchMouseEvent): Ditto.
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create): Add coordinate-computing logic.
        * dom/MouseEvent.h: Adjust decl to reflect new meaning of params.
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent): Ditto.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragEvent): Ditto.

2011-03-30  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: document CSS agent.
        https://bugs.webkit.org/show_bug.cgi?id=57435

        * inspector/Inspector.json:

2011-03-31  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: remove periods at the end of error messages
        https://bugs.webkit.org/show_bug.cgi?id=57544

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::makeObjectCall):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::elementForId):
        (WebCore::InspectorCSSAgent::styleSheetForId):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::assertNode):
        (WebCore::InspectorDOMAgent::assertElement):
        (WebCore::InspectorDOMAgent::assertHTMLElement):
        (WebCore::InspectorDOMAgent::querySelector):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::setAttribute):
        (WebCore::InspectorDOMAgent::removeAttribute):
        (WebCore::InspectorDOMAgent::removeNode):
        (WebCore::InspectorDOMAgent::setNodeValue):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsState):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::resourceContent):
        (WebCore::InspectorResourceAgent::resourceContentBase64):
        (WebCore::InspectorResourceAgent::getResourceContent):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::setPropertyValue):

2011-03-31  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel.

        <title> should support dir attribute
        https://bugs.webkit.org/show_bug.cgi?id=50961

        Introduce a new StringWithDirection object that carries a String along
        with the TextDirection associated with the String.  Use this object for
        document titles used within WebCore, because in HTML the direction of
        a title can be set with the 'dir' attribute.

        Put FIXMEs at the WebKit level to expose the new direction information
        to clients.

        No behavioral change intended, so no new tests.  A follow-up will expose
        the title direction and hopefully can be accompanied by tests that
        verify it is correct.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::updateTitle):
        (WebCore::Document::setTitle):
        (WebCore::Document::removeTitle):
        * dom/Document.h:
        (WebCore::Document::title):
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::HTMLTitleElement):
        (WebCore::HTMLTitleElement::childrenChanged):
        (WebCore::HTMLTitleElement::text):
        (WebCore::HTMLTitleElement::textWithDirection):
        * html/HTMLTitleElement.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setTitle):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::title):
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::dispatchDidReceiveTitle):
        (WebCore::EmptyFrameLoaderClient::setTitle):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::setTitle):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateForBackForwardNavigation):
        (WebCore::HistoryController::updateForReload):
        (WebCore::HistoryController::updateForRedirectWithLockedBackForwardList):
        (WebCore::HistoryController::updateForClientRedirect):
        (WebCore::HistoryController::updateForCommit):
        (WebCore::HistoryController::setCurrentItemTitle):
        (WebCore::HistoryController::initializeItem):
        * loader/HistoryController.h:
        * platform/text/StringWithDirection.h: Added.
        (WebCore::StringWithDirection::StringWithDirection):
        (WebCore::StringWithDirection::operator==):
        (WebCore::StringWithDirection::operator!=):
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::insertedIntoDocument):
        (WebCore::SVGTitleElement::childrenChanged):

2011-03-31  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: CSS domain - make a "range" object, get rid of "properties" object for Style objects
        https://bugs.webkit.org/show_bug.cgi?id=57538

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildSourceRangeObject):
        (WebCore::InspectorStyle::buildObjectForStyle):
        (WebCore::InspectorStyle::populateObjectWithStyleProperties):
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.selectorsCallback):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleDeclaration):

2011-03-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82565.
        http://trac.webkit.org/changeset/82565
        https://bugs.webkit.org/show_bug.cgi?id=57541

        Caused assertion failures. (Requested by bbandix on #webkit).

        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::setFloodColor):
        (WebCore::FEFlood::setFloodOpacity):
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::setLightingColor):
        * platform/graphics/filters/FESpecularLighting.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientStyleChanged):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::setFilterEffectAttribute):
        * svg/SVGFEFloodElement.cpp:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::setFilterEffectAttribute):

2011-03-31  Renata Hodovan  <reni@webkit.org>

        Reviewed by Dirk Schulze.

        CSS related SVG*Element changes doesn't require relayout
        https://bugs.webkit.org/show_bug.cgi?id=56906

        The changes of some CSS related SVGFilter properties e.g. lighting-color, flood-color, flood-opacity
        need only repaint. To avoid the default invalidation of filters in SVGResourceCache::clientStyleChange()
        we need an early return. So RenderSVGResourceFilterPrimitive::styleDidChange() can handle these properties
        via RenderSVGResourceFilter::primitiveAttributeChanged() the same way like we do it for the other SVGAttributes.

        Tests: svg/dynamic-updates/SVGFEDiffuseLightingElement-inherit-lighting-color-css-prop.html
               svg/dynamic-updates/SVGFEFloodElement-inherit-flood-color.html
               svg/dynamic-updates/SVGFESpecularLightingElement-inherit-lighting-color-css-prop.html
               svg/dynamic-updates/SVGFESpecularLightingElement-lighting-color-css-prop.html

        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::setFloodColor):
        (WebCore::FEFlood::setFloodOpacity):
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::setLightingColor):
        * platform/graphics/filters/FESpecularLighting.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::styleDidChange):
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientStyleChanged):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::setFilterEffectAttribute):
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::setFilterEffectAttribute):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::setFilterEffectAttribute):

2011-03-29  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        XML Viewer: declared namespaces are not rendered.
        https://bugs.webkit.org/show_bug.cgi?id=56262

        XML viewer rewritten on javascript.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doEnd):
        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/XMLViewer.css: Added.
        * xml/XMLViewer.js: Added.
        * xml/XMLViewer.xsl: Removed.
        * xml/XSLStyleSheet.h:

2011-03-31  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed build fix.

        Fix build break after rolling out r82496
        https://bugs.webkit.org/show_bug.cgi?id=57536

        * platform/efl/RenderThemeEfl.cpp:

2011-03-31  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: execution line is displayed incorrectly after source editing.
        https://bugs.webkit.org/show_bug.cgi?id=57229

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._saveViewerState):
        (WebInspector.SourceFrame.prototype._restoreViewerState):
        (WebInspector.SourceFrame.prototype._startEditing):
        (WebInspector.SourceFrame.prototype._endEditing):
        (WebInspector.SourceFrame.prototype._createTextViewer):
        (WebInspector.SourceFrame.prototype.setExecutionLine):
        (WebInspector.SourceFrame.prototype._handleSave.didEditScriptSource):
        (WebInspector.SourceFrame.prototype._handleSave):
        (WebInspector.SourceFrame.prototype._handleRevertEditing):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorChunkedPanel.prototype.addDecoration):
        (WebInspector.TextEditorChunkedPanel.prototype.removeDecoration):
        (WebInspector.TextEditorMainPanel.prototype.makeLineAChunk):
        (WebInspector.TextEditorMainPanel.prototype._positionToSelection):

2011-03-30  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Make the CSStyle "shorthandValues" name-value map an array
        https://bugs.webkit.org/show_bug.cgi?id=57452

        No new tests, as this is a refactoring.

        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::populateObjectWithStyleProperties):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleDeclaration):
        (WebInspector.CSSStyleDeclaration.buildShorthandValueMap):

2011-03-30  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JavaField should not expose JavaString in its API
        https://bugs.webkit.org/show_bug.cgi?id=55766

        This patch fixes JavaField for V8 only.
        - Factors out a JavaField interface which does not use JNI types.
          This will allow the Java bridge to be used with objects that
          don't use JNI directly. The existing jobject-backed
          implementation is moved to a new JavaFieldJobject class which
          implements the interface.
        - Use WTF::String in place of JavaString in the API, as JavaString
          exposes JNI types in its interface.

        No new tests, refactoring only.

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bridge/jni/JavaMethod.h:
        (JSC::Bindings::JavaMethod::~JavaMethod):
        * bridge/jni/JobjectWrapper.h:
        * bridge/jni/v8/JavaClassV8.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/v8/JavaFieldJobjectV8.cpp:
        (JavaFieldJobject::JavaFieldJobject):
        * bridge/jni/v8/JavaFieldJobjectV8.h:
        (JSC::Bindings::JavaFieldJobject::name):
        (JSC::Bindings::JavaFieldJobject::typeClassName):
        (JSC::Bindings::JavaFieldJobject::type):
        * bridge/jni/v8/JavaFieldV8.h:
        (JSC::Bindings::JavaField::~JavaField):
        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::getField):

2011-03-31  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        Clean up from r82447.
        https://bugs.webkit.org/attachment.cgi?bugid=57532

        No new tests since this doesn't change behavior.

        * rendering/RenderBlock.cpp: Removing unnecessary visible_units.h include.
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::getLogicalStartBoxWithNode): Making const.
        (WebCore::RootInlineBox::getLogicalEndBoxWithNode): Ditto.
        * rendering/RootInlineBox.h:

2011-03-31  Benjamin Kalman  <kalman@chromium.org>

        Reviewed by Ojan Vafai.

        DeleteSelectionCommand::removeNode tries to insert block placeholder in non-editable table cell positions
        https://bugs.webkit.org/show_bug.cgi?id=57079

        Test: editing/execCommand/delete-table-with-empty-contents.html

        This bug results in an ASSERT fail in CompositeEditCommand::insertNodeAt, so is only observable in debug builds
        of WebKit.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::firstEditablePositionInNode):
        (WebCore::DeleteSelectionCommand::removeNode): Use firstEditablePositionInNode rather than firstPositionInNode
        to find anchor node for the placeholder's position, if any.

2011-03-30  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Roben.

        REGRESSION (r82400): Leaks seen beneath CSSParser::createFloatingVectorSelector when parsing UA stylesheet
        https://bugs.webkit.org/show_bug.cgi?id=57478

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::sinkFloatingSelectorVector):
        * css/CSSParser.h:

2011-03-30  Dominic Cooney  <dominicc@google.com>

        Reviewed by Dimitri Glazkov.

        Adds layoutTestController.shadowRoot accessor to Mac DRT.
        https://bugs.webkit.org/show_bug.cgi?id=57415

        * WebCore.exp.in: DRT needs to link WebCore::Element::shadowRoot

2011-03-30  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Simplify HTMLFormElement::validateInteractively() for asynchronous scroll event
        https://bugs.webkit.org/show_bug.cgi?id=57424

        r75555 made 'scroll' event asynchronous. So we don't need to worry about
        deleting or moving a target node in scrollIntoViewIfNeeded().

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively): Remove unnecessary code.

2011-03-30  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION (r74895): Crash if input.type = 'file' twice
        https://bugs.webkit.org/show_bug.cgi?id=57343

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
          Don't call setAttribute() if the type is not changed.

2011-03-30  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Autocorrection panel isn't positioned correctly in Safari (mac) when the zooming is not 1x.
        https://bugs.webkit.org/show_bug.cgi?id=57353
        <rdar://problem/9163983>

        We use Range::textQuads() instead of Range::boundingRect() to compute the position of correction
        panel. The latter function compensates for zooming, which we don't need in this case. We also
        dismiss correction panel when zooming factor is changed. This is done in Frame::setPageAndTextZoomFactors().

        * WebCore.exp.in:
        * dom/Range.cpp:
        (WebCore::Range::textQuads):
        * dom/Range.h:
        * editing/Editor.cpp:
        (WebCore::Editor::windowRectForRange):
        * editing/Editor.h:
        * page/Frame.cpp:
        (WebCore::Frame::setPageAndTextZoomFactors):

2011-03-30  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Dimitri Glazkov.

        Render fonts using skia when requested by platform context.
        https://bugs.webkit.org/show_bug.cgi?id=56441

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::isNativeFontRenderingAllowed):
        * platform/graphics/skia/PlatformContextSkia.h:
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::windowsCanHandleTextDrawing):
        (WebCore::skiaDrawText):
        (WebCore::setupPaintForFont):
        (WebCore::paintSkiaText):

2011-03-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9199518> Crash when focusing a styled editable element

        Test: editing/deleting/delete-button-background-image-none.html

        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement): Check all background layers for background images.
        * rendering/style/RenderStyle.h: Removed backgroundImage() as it was only used, incorrectly,
        in the above function.

2011-03-30  Martin Robinson  <mrobinson@igalia.com>

        Try once more to fix the EFL build.

        * platform/efl/RenderThemeEfl.cpp:

2011-03-30  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Regression: VO cursor doesn't follow KB focus back into HTML view
        https://bugs.webkit.org/show_bug.cgi?id=57509

        In WK2, because the web area never believes focus leave the area, sending the initial
        focus change when moving back into the web area, does not trigger a notification.

        That behavior needs to be overridden by explicitly posting a focused UI element change
        at the appropriate time. This is only used in WK2, hence the absence of a layout test for now.

        * page/FocusController.cpp:
        (WebCore::FocusController::setInitialFocus):

2011-03-30  MORITA Hajime  <morrita@google.com>

        Reviewed by Simon Fraser.

        box-shadow radii stays the same regardless of any spread set
        https://bugs.webkit.org/show_bug.cgi?id=49726

        - Removed special shadowSpread handling path
        - Fixed broken multple inset shadow border computation.

        Test: fast/box-shadow/spread-multiple-inset.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow):

2011-03-29  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Use the Accelerate vImage vectorized (un)premultiplyImageData functions for ImageBufferCG

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

        Test: fast/canvas/getPutImageDataPairTest.html

        * platform/graphics/cg/ImageBufferCG.cpp:

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Share most vsprops between Release and Production builds in releaseproduction.vsprops
        https://bugs.webkit.org/show_bug.cgi?id=57508

        * WebCore.vcproj/QTMovieWinProduction.vsprops:
        * WebCore.vcproj/QTMovieWinRelease.vsprops:
        * WebCore.vcproj/QTMovieWinReleaseCairoCFLite.vsprops:
        * WebCore.vcproj/WebCoreProduction.vsprops:
        * WebCore.vcproj/WebCoreRelease.vsprops:
        * WebCore.vcproj/WebCoreReleaseCairoCFLite.vsprops:

2011-03-30  Timur Iskhodzhanov  <timurrrr@google.com>

        Reviewed by Alexey Proskuryakov.

        Add some dynamic annotations to JavaScriptCore/wtf
        https://bugs.webkit.org/show_bug.cgi?id=53747

        By using these annotations we can improve the precision of finding
        WebKit errors using dynamic analysis tools like ThreadSanitizer and Valgrind.
        These annotations don't affect the compiled binaries unless USE(DYNAMIC_ANNOTATIONS) is "1".

        These files don't add new functionality, so don't need extra tests.

        * ForwardingHeaders/wtf/DynamicAnnotations.h: Added.

2011-03-30  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Simon Fraser.

        Fix wrong type assumptions in editing code. Move code
        from ASSERTs to hard checks.
        https://bugs.webkit.org/show_bug.cgi?id=57348

        Test: editing/execCommand/remove-format-non-html-element-crash.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::getRGBAFontColor):
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
        * editing/DeleteButtonController.cpp:
        (WebCore::enclosingDeletableElement):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::textDirection):
        (WebCore::EditingStyle::prepareToApplyAt):
        * editing/Editor.cpp:
        (WebCore::Editor::textDirectionForSelection):
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::elementForFormatBlockCommand):

2011-03-30  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Speed up clipping in accelerated 2D canvas.
        https://bugs.webkit.org/show_bug.cgi?id=57464

        Instead of clearing the entire stencil buffer when removing clipping paths, we erase the path with a DECR stencil operation.
        Covered by canvas/philip/tests/2d.path.clip.intersect.html, and others.

        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::PathAndTransform::PathAndTransform):
        New structure to keep track of the CTM at the time the clipping path was added.
        (WebCore::GLES2Canvas::State::State):
        Replace m_clippingEnabled with a count of total clipping paths.
        (WebCore::GLES2Canvas::clearRect):
        Check the total clipping path count, instead of m_clippingEnabled.
        (WebCore::GLES2Canvas::fillPath):
        (WebCore::GLES2Canvas::fillRect):
        Perform state application after doing shadows.  This is necessary
        since restore() may now leave clipping enabled.
        (WebCore::GLES2Canvas::clipPath):
        Explicitly specify the stencil operation as INCR.  Store the current
        transformation when saving clipping paths.
        (WebCore::GLES2Canvas::restore):
        Don't clear the stencil buffer and re-draw active paths on each restore.
        Erase the old paths with DECR.
        (WebCore::GLES2Canvas::drawTexturedRect):
        Check m_numClippingPaths instead of m_clippingEnabled.
        (WebCore::GLES2Canvas::beginShadowDraw):
        Perform state application when drawing hard shadows.
        (WebCore::GLES2Canvas::endShadowDraw):
        Check m_numClippingPaths instead of m_clippingEnabled.
        (WebCore::GLES2Canvas::beginStencilDraw):
        Make the stencil op a parameter to beginShadowDraw().
        (WebCore::GLES2Canvas::applyClipping):
        Compare against the total number of stencil paths, not just the ones in
        the current state.
        * platform/graphics/chromium/GLES2Canvas.h:
        Make the stencil op a parameter to beginShadowDraw().

2011-03-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Move factory-like things in EventDispatcher::dispatchMouseEvent to a factory, clean up names and ordering.
        https://bugs.webkit.org/show_bug.cgi?id=57419

        Refactoring, covered by existing tests.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchMouseEvent): Reordered and clarified names.
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create): Added a new factory method that takes PlatformMouseEvent.
        * dom/MouseEvent.h: Added decl.

2011-03-30  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Missing DOM bindings for a ping
        https://bugs.webkit.org/show_bug.cgi?id=51955

        Test: fast/dom/ping-attribute-dom-binding.html

        * html/HTMLAnchorElement.idl:
        * html/HTMLAreaElement.idl:

2011-03-30  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r82465.

        * CMakeListsWinCE.txt:

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Update Windows production build logic for new production configurations
        https://bugs.webkit.org/show_bug.cgi?id=57494

        * WebCore.vcproj/QTMovieWinProduction.vsprops:
        * WebCore.vcproj/WebCore.make:
        * WebCore.vcproj/WebCoreProduction.vsprops:

2011-03-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        WebKit2: Attempting to view css file from url causes it to download
        <rdar://problem/9102611>
        https://bugs.webkit.org/show_bug.cgi?id=57501

        * WebCore.exp.in:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeUnsupportedTextMIMETypes):
        (WebCore::initializeMIMETypeRegistry):
        (WebCore::MIMETypeRegistry::isUnsupportedTextMIMEType):
        (WebCore::MIMETypeRegistry::getUnsupportedTextMIMETypes):
        * platform/MIMETypeRegistry.h:
        Add set of unsupported text MIME types, taken from WebKit/mac.

2011-03-30  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.
        
        Crash when closing "Add Bookmark" dialog using the Enter Key
        https://bugs.webkit.org/show_bug.cgi?id=57294
        <rdar://problem/9044756>

        Protect the FrameView in EventHandler::keyEvent, like we do in other EventHandler
        functions that could destroy the frame.

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

2011-03-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82463.
        http://trac.webkit.org/changeset/82463
        https://bugs.webkit.org/show_bug.cgi?id=57482

        Assertion failure in Node::rendererIsEditable on multiple
        editing tests (Requested by aroben|meeting on #webkit).

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EUnicodeBidi):
        * css/CSSValueKeywords.in:
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:

2011-03-24  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QNetworkReplyHandler refactoring: signal sequence.
        https://bugs.webkit.org/show_bug.cgi?id=57049

        This is the first step in QNetworkReplyHandler. The main objective here is to create simple invariants:

            1 - that the signals metadatachanged, readyRead and finished will come in this order.
            2 - that signals metadatachanged and finished will be called exactly once.

        Having these invariants further simplifications will be possible and will come in future patches.

        Class QNetworkReplyWrapper was created to handle QNetworkReply object. To connect to the signals of it
        instead of connecting to the signals of QNetworkReply is what guarantees the sequence of the signals.
        QNetworkReplyWrapper will be used in future to perform mime type sniffing before sending
        metadatachanged signal.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::~QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::release):
        (WebCore::QNetworkReplyWrapper::resetConnections):
        (WebCore::QNetworkReplyWrapper::receiveMetaData):
        (WebCore::QNetworkReplyWrapper::didReceiveFinished):
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::resetState):
        (WebCore::QNetworkReplyHandler::release):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::redirect):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::sendNetworkRequest):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyWrapper::reply):
        (WebCore::QNetworkReplyWrapper::redirectionTargetUrl):
        (WebCore::QNetworkReplyWrapper::encoding):
        (WebCore::QNetworkReplyWrapper::advertisedMimeType):
        (WebCore::QNetworkReplyHandler::reply):

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Rename Windows configuration Release_LTCG to Production for clarity
        https://bugs.webkit.org/show_bug.cgi?id=57465

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/QTMovieWinProduction.vsprops: Copied from Source/WebCore/WebCore.vcproj/QTMovieWinReleaseLTCG.vsprops.
        * WebCore.vcproj/QTMovieWinReleaseLTCG.vsprops: Removed.
        * WebCore.vcproj/WebCore.sln:
        * WebCore.vcproj/WebCore.submit.sln:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreGenerated.vcproj:
        * WebCore.vcproj/WebCoreProduction.vsprops: Copied from Source/WebCore/WebCore.vcproj/WebCoreReleaseLTCG.vsprops.
        * WebCore.vcproj/WebCoreReleaseLTCG.vsprops: Removed.

2011-03-30  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Anders Carlsson.
        
        ASSERT(cookieStorageAdapter) when calling stopObservingCookieChanges after WebProcess has crashed
        https://bugs.webkit.org/show_bug.cgi?id=57477
        <rdar://problem/9178751>
        
        If someone has called startObservingCookieChanges, and the WebProcess crashes and restarts, the UIProcess
        will call stopObservingCookieChanges when cookieStorageAdapter is nil.
        
        The assert is wrong when the web process crashes, and there is no harm in dispatching a message to nil,
        so remove the assert.
        
        * platform/network/mac/CookieStorageMac.mm:
        (WebCore::stopObservingCookieChanges):

2011-03-30  Sam Weinig  <sam@webkit.org>

        Fix Leopard build.

        * platform/DefaultLocalizationStrategy.cpp:
        (WebCore::DefaultLocalizationStrategy::contextMenuItemTagLookUpInDictionary):

2011-03-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add default localization strategy that can be shared by WebKit1 and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=57406

        Currently, only WebKit2 uses this default strategy, but WebKit1 should be able
        to adopt it soon.

        * platform/DefaultLocalizationStrategy.cpp: Copied from Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp.
        (WebCore::DefaultLocalizationStrategy::DefaultLocalizationStrategy):
        * platform/DefaultLocalizationStrategy.h: Copied from Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h.
        Copy the implementation of the Localization strategy from WebKit2 into a shared default strategy.

        * platform/LocalizedStrings.cpp:
        (WebCore::localizedString):
        Add default implementation of localization bottleneck function.

        * platform/LocalizedStrings.h:
        Add localization macros here, instead of defining them in the above layer.

        * platform/PlatformStrategies.cpp:
        (WebCore::PlatformStrategies::createLocalizationStrategy):
        * platform/PlatformStrategies.h:
        Add default implementation of strategy creation function which creates the default strategy.

        * platform/win/LocalizedStringsWin.cpp: Copied from Source/WebCore/platform/mac/LocalizedStringsMac.mm.
        (WebCore::localizedString):
        Add stub for windows, this will be update to pull from the bundle in a follow up patch.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

2011-03-30  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Darin Adler.

        CSS: Slow parsing of rgb() with percent values
        https://bugs.webkit.org/show_bug.cgi?id=16708

        Implement fast-path parsing for percentage color values.

        Gain ~30% speedup on  http://canvex.lazyilluminati.com/misc/3d.html

        Relanding with rounding fix after it was rolled out in r82315.

        * css/CSSParser.cpp:
        (WebCore::checkForValidDouble): Extend to return the number of characters forming a valid double.
        (WebCore::parseDouble): Function for parsing double values if they are valid.
        (WebCore::parseColorIntOrPercentage): Extend parseColorInt to deal with percentage values.
        (WebCore::parseAlphaValue): Use the new functions.
        (WebCore::CSSParser::parseColor): Ditto.

2011-03-30  Ofri Wolfus  <ofri@dhcp-172-28-40-178.tlv.corp.google.com>

        Reviewed by Eric Seidel.

        Add support for parsing unicode-bidi: -webkit-plaintext.
        https://bugs.webkit.org/show_bug.cgi?id=57457

        Test: css3/unicode-bidi-plaintext-parse.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EUnicodeBidi):
        * css/CSSValueKeywords.in:
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:

2011-03-30  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] Remove unused variables in GraphicsContext::fillRect()

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

2011-03-30  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Eric Seidel.

        REGRESSION(r82419): New pixel test failure fast/box-shadow/basic-shadows.html
        https://bugs.webkit.org/show_bug.cgi?id=57442

        When checking the position of the inline iterator in the logicallyLastRun, we should not consider BR as text.

        No new tests as existing test covers this case.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::reachedEndOfTextRenderer):

2011-03-30  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        AX: GTK: ARIA role is not respected on <p> <label> <div> and <form>
        https://bugs.webkit.org/show_bug.cgi?id=47636

        Define new roles in WebCore and map them to ATK accordingly.

        Test: platform/gtk/accessibility/aria-roles-unignored.html

        * accessibility/AccessibilityObject.h: Added new roles to
        represent paragraphs, labels, forms and div sections.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        Return ParagraphRole, LabelRole, FormRole and DivRole when needed
        for the GTK platform only.
        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::allowsTextRanges): Consider the new
        roles now that those kind of nodes won't return true to isGroup().
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole): Map new WebCore roles to ATK Roles.
        (webkit_accessible_get_role): Remove code to define roles for
        paragraphs, labels, forms and divs based on node's tag name.

        Update mappings for the Mac platform.

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (createAccessibilityRoleMap): Add explicit mappings from the new
        roles introduced to NSAccessibilityGroupRole.

2011-03-30  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Build fix for Efl and Qt Win.

        * inspector/PageDebuggerAgent.cpp: removed ENABLE(WORKERS) guard from code that has nothing to do with workers.

2011-03-30  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: audit run never completes, fails in DOMAgent.js
        https://bugs.webkit.org/show_bug.cgi?id=57349

        - assure document is present before calling DOMAgent.querySelectAll()

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):

2011-03-30  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Build fix.

        * UseJSC.cmake: fix typo PageDebugServer -> PageScriptDebugServer

2011-03-30  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: split debugger agent into Page and Worker-specific ones
        https://bugs.webkit.org/show_bug.cgi?id=57345

        ScriptDebugServer and InspectorDebuggerAgent contain only functionality common
        for Worker and Page debugger. All specifics is moved into Page/WorkerScriptDebugServer
        and Page/WorkerDebuggerAgent.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::currentCallFrame):
        * bindings/js/PageScriptDebugServer.cpp: Added.
        (WebCore::toPage):
        (WebCore::PageScriptDebugServer::shared):
        (WebCore::PageScriptDebugServer::PageScriptDebugServer):
        (WebCore::PageScriptDebugServer::~PageScriptDebugServer):
        (WebCore::PageScriptDebugServer::addListener):
        (WebCore::PageScriptDebugServer::removeListener):
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        (WebCore::PageScriptDebugServer::getListenersForGlobalObject):
        (WebCore::PageScriptDebugServer::didPause):
        (WebCore::PageScriptDebugServer::didContinue):
        (WebCore::PageScriptDebugServer::didRemoveLastListener):
        (WebCore::PageScriptDebugServer::setJavaScriptPaused):
        * bindings/js/PageScriptDebugServer.h: Added.
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::sourceParsed):
        (WebCore::ScriptDebugServer::dispatchFunctionToListeners):
        (WebCore::ScriptDebugServer::createCallFrameAndPauseIfNeeded):
        (WebCore::ScriptDebugServer::updateCallFrameAndPauseIfNeeded):
        (WebCore::ScriptDebugServer::pauseIfNeeded):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.cpp: Added.
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::removeListener):
        * bindings/js/WorkerScriptDebugServer.h: Added.
        (WebCore::WorkerScriptDebugServer::~WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        (WebCore::WorkerScriptDebugServer::getListenersForGlobalObject):
        (WebCore::WorkerScriptDebugServer::didPause):
        (WebCore::WorkerScriptDebugServer::didContinue):
        * bindings/v8/PageScriptDebugServer.cpp: Added.
        (WebCore::retrieveFrame):
        (WebCore::PageScriptDebugServer::shared):
        (WebCore::PageScriptDebugServer::PageScriptDebugServer):
        (WebCore::PageScriptDebugServer::addListener):
        (WebCore::PageScriptDebugServer::removeListener):
        (WebCore::PageScriptDebugServer::setClientMessageLoop):
        (WebCore::PageScriptDebugServer::getDebugListenerForContext):
        (WebCore::PageScriptDebugServer::runMessageLoopOnPause):
        (WebCore::PageScriptDebugServer::quitMessageLoopOnPause):
        * bindings/v8/PageScriptDebugServer.h: Added.
        (WebCore::PageScriptDebugServer::setEnabled):
        (WebCore::PageScriptDebugServer::ClientMessageLoop::~ClientMessageLoop):
        (WebCore::PageScriptDebugServer::~PageScriptDebugServer):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::setPauseOnNextStatement):
        (WebCore::ScriptDebugServer::breakProgram):
        (WebCore::ScriptDebugServer::continueProgram):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::stepOverStatement):
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::editScriptSource):
        (WebCore::toScriptDebugServer):
        (WebCore::ScriptDebugServer::breakProgramCallback):
        (WebCore::ScriptDebugServer::v8DebugEventCallback):
        (WebCore::ScriptDebugServer::handleV8DebugEvent):
        (WebCore::ScriptDebugServer::isPaused):
        * bindings/v8/ScriptDebugServer.h:
        * bindings/v8/WorkerScriptDebugServer.cpp: Added.
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::removeListener):
        * bindings/v8/WorkerScriptDebugServer.h: Added.
        (WebCore::WorkerScriptDebugServer::~WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::getDebugListenerForContext):
        (WebCore::WorkerScriptDebugServer::runMessageLoopOnPause):
        (WebCore::WorkerScriptDebugServer::quitMessageLoopOnPause):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::currentCallFrameCallback):
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::init):
        (WebCore::InjectedScriptHost::debuggerAgent):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::setBreakpointsActive):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::editScriptSource):
        (WebCore::InspectorDebuggerAgent::schedulePauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::cancelPauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::resume):
        (WebCore::InspectorDebuggerAgent::stepOver):
        (WebCore::InspectorDebuggerAgent::stepInto):
        (WebCore::InspectorDebuggerAgent::stepOut):
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsState):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::breakProgram):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::disable):
        (WebCore::InspectorProfilerAgent::enable):
        (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
        * inspector/PageDebuggerAgent.cpp: Added.
        (WebCore::PageDebuggerAgent::create):
        (WebCore::PageDebuggerAgent::PageDebuggerAgent):
        (WebCore::PageDebuggerAgent::~PageDebuggerAgent):
        (WebCore::PageDebuggerAgent::startListeningScriptDebugServer):
        (WebCore::PageDebuggerAgent::stopListeningScriptDebugServer):
        (WebCore::PageDebuggerAgent::scriptDebugServer):
        * inspector/PageDebuggerAgent.h: Added.
        * inspector/WorkerDebuggerAgent.cpp: Added.
        (WebCore::WorkerDebuggerAgent::create):
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::~WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::startListeningScriptDebugServer):
        (WebCore::WorkerDebuggerAgent::stopListeningScriptDebugServer):
        (WebCore::WorkerDebuggerAgent::scriptDebugServer):
        * inspector/WorkerDebuggerAgent.h: Added.

2011-03-30  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        Clicking below last line of right-to-left editable text that puts caret in the wrong place
        https://bugs.webkit.org/show_bug.cgi?id=38087

        Moving getLogical[Start/End]BoxWithNode to RootInlineBox and using it in positionForPointWithInlineChildren
        instead of lastLeafChild, which wasn't correct in the RTL case.

        Test: editing/selection/click-below-rtl-text.html

        * editing/visible_units.cpp:
        (WebCore::logicalStartPositionForLine): Moved to RootInlineBox.
        (WebCore::logicalEndPositionForLine): Ditto.
        * editing/visible_units.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForPointWithInlineChildren): Useing getLogicalEndBoxWithNode instead
        of lastLeafChild.
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::getLogicalStartBoxWithNode): Moved and refactored.
        (WebCore::RootInlineBox::getLogicalEndBoxWithNode): Ditto.
        * rendering/RootInlineBox.h:

2011-03-30  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Rollout r82438 and r82436.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::currentCallFrame):
        * bindings/js/PageScriptDebugServer.cpp: Removed.
        * bindings/js/PageScriptDebugServer.h: Removed.
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::shared):
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::addListener):
        (WebCore::ScriptDebugServer::removeListener):
        (WebCore::ScriptDebugServer::hasListenersInterestedInPage):
        (WebCore::toPage):
        (WebCore::ScriptDebugServer::sourceParsed):
        (WebCore::ScriptDebugServer::dispatchFunctionToListeners):
        (WebCore::ScriptDebugServer::setJavaScriptPaused):
        (WebCore::ScriptDebugServer::createCallFrameAndPauseIfNeeded):
        (WebCore::ScriptDebugServer::updateCallFrameAndPauseIfNeeded):
        (WebCore::ScriptDebugServer::pauseIfNeeded):
        (WebCore::ScriptDebugServer::recompileAllJSFunctions):
        (WebCore::ScriptDebugServer::didAddListener):
        (WebCore::ScriptDebugServer::didRemoveListener):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.cpp: Removed.
        * bindings/js/WorkerScriptDebugServer.h: Removed.
        * bindings/v8/PageScriptDebugServer.cpp: Removed.
        * bindings/v8/PageScriptDebugServer.h: Removed.
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::retrieveFrame):
        (WebCore::ScriptDebugServer::shared):
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::addListener):
        (WebCore::ScriptDebugServer::removeListener):
        (WebCore::ScriptDebugServer::setPauseOnNextStatement):
        (WebCore::ScriptDebugServer::breakProgram):
        (WebCore::ScriptDebugServer::continueProgram):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::stepOverStatement):
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::editScriptSource):
        (WebCore::ScriptDebugServer::setEnabled):
        (WebCore::ScriptDebugServer::breakProgramCallback):
        (WebCore::ScriptDebugServer::v8DebugEventCallback):
        (WebCore::ScriptDebugServer::handleV8DebugEvent):
        (WebCore::ScriptDebugServer::didResume):
        * bindings/v8/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::pageCreated):
        (WebCore::ScriptDebugServer::ClientMessageLoop::~ClientMessageLoop):
        (WebCore::ScriptDebugServer::setClientMessageLoop):
        * bindings/v8/WorkerScriptDebugServer.cpp: Removed.
        * bindings/v8/WorkerScriptDebugServer.h: Removed.
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::currentCallFrameCallback):
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::init):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::create):
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::setBreakpointsActive):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::editScriptSource):
        (WebCore::InspectorDebuggerAgent::schedulePauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::cancelPauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::resume):
        (WebCore::InspectorDebuggerAgent::stepOver):
        (WebCore::InspectorDebuggerAgent::stepInto):
        (WebCore::InspectorDebuggerAgent::stepOut):
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsState):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::breakProgram):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::disable):
        (WebCore::InspectorProfilerAgent::enable):
        (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
        * inspector/PageDebuggerAgent.cpp: Removed.
        * inspector/PageDebuggerAgent.h: Removed.
        * inspector/WorkerDebuggerAgent.cpp: Removed.
        * inspector/WorkerDebuggerAgent.h: Removed.

2011-03-30  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix compilation on Windows and EFL.

        * CMakeLists.txt:
        * bindings/js/JSBindingsAllInOne.cpp:

2011-03-30  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: split debugger agent into Page and Worker-specific ones
        https://bugs.webkit.org/show_bug.cgi?id=57345

        ScriptDebugServer and InspectorDebuggerAgent contain only functionality common
        for Worker and Page debugger. All specifics is moved into Page/WorkerScriptDebugServer
        and Page/WorkerDebuggerAgent.

        * GNUmakefile.am:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::currentCallFrame):
        * bindings/js/PageScriptDebugServer.cpp: Added.
        (WebCore::toPage):
        (WebCore::PageScriptDebugServer::shared):
        (WebCore::PageScriptDebugServer::PageScriptDebugServer):
        (WebCore::PageScriptDebugServer::~PageScriptDebugServer):
        (WebCore::PageScriptDebugServer::addListener):
        (WebCore::PageScriptDebugServer::removeListener):
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        (WebCore::PageScriptDebugServer::getListenersForGlobalObject):
        (WebCore::PageScriptDebugServer::didPause):
        (WebCore::PageScriptDebugServer::didContinue):
        (WebCore::PageScriptDebugServer::didRemoveLastListener):
        (WebCore::PageScriptDebugServer::setJavaScriptPaused):
        * bindings/js/PageScriptDebugServer.h: Added.
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::sourceParsed):
        (WebCore::ScriptDebugServer::dispatchFunctionToListeners):
        (WebCore::ScriptDebugServer::createCallFrameAndPauseIfNeeded):
        (WebCore::ScriptDebugServer::updateCallFrameAndPauseIfNeeded):
        (WebCore::ScriptDebugServer::pauseIfNeeded):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.cpp: Added.
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::removeListener):
        * bindings/js/WorkerScriptDebugServer.h: Added.
        (WebCore::WorkerScriptDebugServer::~WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        (WebCore::WorkerScriptDebugServer::getListenersForGlobalObject):
        (WebCore::WorkerScriptDebugServer::didPause):
        (WebCore::WorkerScriptDebugServer::didContinue):
        * bindings/v8/PageScriptDebugServer.cpp: Added.
        (WebCore::retrieveFrame):
        (WebCore::PageScriptDebugServer::shared):
        (WebCore::PageScriptDebugServer::PageScriptDebugServer):
        (WebCore::PageScriptDebugServer::addListener):
        (WebCore::PageScriptDebugServer::removeListener):
        (WebCore::PageScriptDebugServer::setClientMessageLoop):
        (WebCore::PageScriptDebugServer::getDebugListenerForContext):
        (WebCore::PageScriptDebugServer::runMessageLoopOnPause):
        (WebCore::PageScriptDebugServer::quitMessageLoopOnPause):
        * bindings/v8/PageScriptDebugServer.h: Added.
        (WebCore::PageScriptDebugServer::setEnabled):
        (WebCore::PageScriptDebugServer::ClientMessageLoop::~ClientMessageLoop):
        (WebCore::PageScriptDebugServer::~PageScriptDebugServer):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::setPauseOnNextStatement):
        (WebCore::ScriptDebugServer::breakProgram):
        (WebCore::ScriptDebugServer::continueProgram):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::stepOverStatement):
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::editScriptSource):
        (WebCore::toScriptDebugServer):
        (WebCore::ScriptDebugServer::breakProgramCallback):
        (WebCore::ScriptDebugServer::v8DebugEventCallback):
        (WebCore::ScriptDebugServer::handleV8DebugEvent):
        (WebCore::ScriptDebugServer::isPaused):
        * bindings/v8/ScriptDebugServer.h:
        * bindings/v8/WorkerScriptDebugServer.cpp: Added.
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::removeListener):
        * bindings/v8/WorkerScriptDebugServer.h: Added.
        (WebCore::WorkerScriptDebugServer::~WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::getDebugListenerForContext):
        (WebCore::WorkerScriptDebugServer::runMessageLoopOnPause):
        (WebCore::WorkerScriptDebugServer::quitMessageLoopOnPause):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::currentCallFrameCallback):
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::init):
        (WebCore::InjectedScriptHost::debuggerAgent):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::setBreakpointsActive):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::editScriptSource):
        (WebCore::InspectorDebuggerAgent::schedulePauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::cancelPauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::resume):
        (WebCore::InspectorDebuggerAgent::stepOver):
        (WebCore::InspectorDebuggerAgent::stepInto):
        (WebCore::InspectorDebuggerAgent::stepOut):
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsState):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::breakProgram):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::disable):
        (WebCore::InspectorProfilerAgent::enable):
        (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
        * inspector/PageDebuggerAgent.cpp: Added.
        (WebCore::PageDebuggerAgent::create):
        (WebCore::PageDebuggerAgent::PageDebuggerAgent):
        (WebCore::PageDebuggerAgent::~PageDebuggerAgent):
        (WebCore::PageDebuggerAgent::startListeningScriptDebugServer):
        (WebCore::PageDebuggerAgent::stopListeningScriptDebugServer):
        (WebCore::PageDebuggerAgent::scriptDebugServer):
        * inspector/PageDebuggerAgent.h: Added.
        * inspector/WorkerDebuggerAgent.cpp: Added.
        (WebCore::WorkerDebuggerAgent::create):
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::~WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::startListeningScriptDebugServer):
        (WebCore::WorkerDebuggerAgent::stopListeningScriptDebugServer):
        (WebCore::WorkerDebuggerAgent::scriptDebugServer):
        * inspector/WorkerDebuggerAgent.h: Added.

2011-03-30  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Make the getStylesForNode result "styleAttributes" value an array rather than a map
        https://bugs.webkit.org/show_bug.cgi?id=57440

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getStylesForNode):
        (WebCore::InspectorCSSAgent::buildArrayForAttributeStyles):
        * inspector/InspectorCSSAgent.h:
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.getStylesAsync):

2011-03-30  Evan Martin  <evan@chromium.org>

        Reviewed by Ryosuke Niwa.

        Fix a last-second ASSERT in previous change that was wrong.

        * dom/Document.cpp:
        (WebCore::Document::setTitle):

2011-03-30  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        RTL:  Directionality always reset on hard line break
        https://bugs.webkit.org/show_bug.cgi?id=23124

        No longer clearing all BidiContexts when we hit a hard line break.
        Instead, directionality applied by DOM elements is preserved by
        reconstructing the context stack ignoring those that didn't come
        from the DOM.

        Test: fast/text/international/bidi-br-as-paragraph-separator.html

        * platform/text/BidiContext.cpp:
        (WebCore::BidiContext::createUncached):
        (WebCore::BidiContext::create):
        (WebCore::copyContextAndRebaselineLevel): Helper to make a copy of a context
        and recalculate its bidi level.
        (WebCore::BidiContext::copyStackRemovingUnicodeEmbeddingContexts): Returns the top of
        a BidiContext stack that's equivalent but without contexts from Unicode directional
        characters.
        (WebCore::operator==): Now takes into account embedding source.
        * platform/text/BidiContext.h:
        (WebCore::BidiContext::source): Enum to specify whether an embedded
        bidirectional control came from the DOM/Style or Unicode characters
        (WebCore::BidiContext::BidiContext):
        * platform/text/BidiResolver.h:
        (WebCore::BidiEmbedding::BidiEmbedding): An embedding is now a direction
        and a hint about where it came from so we can differentiate DOM directions
        from unicode direction control characters.
        (WebCore::BidiEmbedding::direction):
        (WebCore::BidiEmbedding::source):
        (WebCore::::embed): Now takes a source as well as a direction.
        (WebCore::::commitExplicitEmbedding):
        (WebCore::::createBidiRunsForLine):
        * rendering/InlineIterator.h:
        (WebCore::bidiNext):
        (WebCore::bidiFirst):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::determineStartPosition):

2011-03-30  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JavaMethod should not expose JavaString in its API
        https://bugs.webkit.org/show_bug.cgi?id=55765

        - Factors out a JavaMethod interface which does not use JNI types.
          This will allow the Java bridge to be used with objects that
          don't use JNI directly. The existing jobject-backed
          implementation is moved to a new JavaMethodJobject class which
          implements the interface.
        - Use WTF::String in place of JavaString in the API, as JavaString
          exposes JNI types in its interface.
        - Remove the method ID as it uses JNI types.

        No new tests, refactoring only.

        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/jni/JavaMethod.h:
        * bridge/jni/JavaMethodJobject.cpp:
        (JavaMethodJobject::JavaMethodJobject):
        (JavaMethodJobject::~JavaMethodJobject):
        (appendClassName):
        (JavaMethodJobject::signature):
        * bridge/jni/JavaMethodJobject.h: Copied from Source/WebCore/bridge/jni/JavaMethod.h.
        (JSC::Bindings::JavaMethodJobject::name):
        (JSC::Bindings::JavaMethodJobject::returnTypeClassName):
        (JSC::Bindings::JavaMethodJobject::parameterAt):
        (JSC::Bindings::JavaMethodJobject::returnType):
        (JSC::Bindings::JavaMethodJobject::isStatic):
        (JSC::Bindings::JavaMethodJobject::numParameters):
        * bridge/jni/jsc/JavaClassJSC.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/v8/JavaClassV8.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::invokeMethod):

2011-03-30  Evan Martin  <evan@chromium.org>

        Reviewed by Ryosuke Niwa.

        clean up Document's handling of title changes
        https://bugs.webkit.org/show_bug.cgi?id=57433

        Document::setTitle has two entry points:
        1) from DOM bindings, like document.title="foo"
        2) from title tags, like <title>foo</title> in HTML

        Split these two code paths to make the code easier to follow.
        Also, replace the repeated pattern of
            m_rawTitle = "foo"; updateTitle();
        with
            updateTitle("foo");

        * dom/Document.cpp:
        (WebCore::Document::updateTitle):
        (WebCore::Document::setTitle):
        (WebCore::Document::setTitleElement):
        (WebCore::Document::removeTitle):
        * dom/Document.h:
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::insertedIntoDocument):
        (WebCore::HTMLTitleElement::childrenChanged):
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::insertedIntoDocument):
        (WebCore::SVGTitleElement::childrenChanged):

2011-03-30  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        BreakBlockQuoteCommand assumes all li tags have list item renderers
        https://bugs.webkit.org/show_bug.cgi?id=57253

        Checking that the renderers of li nodes are actually RenderListItems
        before treating them as such.

        Test: editing/execCommand/crash-breaking-blockquote-with-list.html

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockQuoteCommand::doApply):

2011-03-30  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: fixing typo in the inspector front-end.

        Web Inspector: REGRESSION: Broken live edit errors handling
        https://bugs.webkit.org/show_bug.cgi?id=57436

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype._didEditScriptSource):

2011-03-30  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Eric Seidel.

        Left/Right borders/padding/margins are not always added correctly when rendering multiline inline boxes with bidi elements
        https://bugs.webkit.org/show_bug.cgi?id=9272


        Also fixes https://bugs.webkit.org/show_bug.cgi?id=47210 and https://bugs.webkit.org/show_bug.cgi?id=8392.

        Change how we decide if an InlineFlowBox is the last one for its renderer. Use the position of resolver's logicallyLastRun
        to decide if there is more text in the next line.

        Tests: fast/borders/rtl-border-01.html
               fast/borders/rtl-border-02.html
               fast/borders/rtl-border-03.html
               fast/borders/rtl-border-04.html
               fast/borders/rtl-border-05.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::isAnsectorAndWithinBlock):
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::constructLine):
        (WebCore::reachedEndOfTextRenderer):
        (WebCore::RenderBlock::layoutInlineChildren):

2011-03-29  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Eric Seidel.

        REGRESSION (r68976): Incorrect bidi rendering in SVG text
        https://bugs.webkit.org/show_bug.cgi?id=53980

        Deconvolute SVGTextLayoutEngine code, which was confusing due to the simultaneous processing of the rendered text
        in visual and logical order. Added several helper methods to make the code more readable.

        Fix Unicode directional formatting characters support, now works as expected.

        Test: svg/text/bidi-embedded-direction.svg

        * editing/visible_units.cpp: Refactor getLeafBoxesInLogicalOrder(), move to InlineFlowBox.
        (WebCore::getLogicalStartBoxAndNode): Use new collectLeafBoxesInLogicalOrder() method in InlineFlowBox.
        (WebCore::getLogicalEndBoxAndNode): Ditto.
        * rendering/InlineFlowBox.cpp: Add new helper function, that returns a list of all leaf boxes in logical order.
        (WebCore::InlineFlowBox::collectLeafBoxesInLogicalOrder):
        * rendering/InlineFlowBox.h:
        * rendering/svg/RenderSVGText.cpp: Actually trigger reordering the x/y/dx/dy/rotate value lists, if needed.
        (WebCore::RenderSVGText::RenderSVGText):
        (WebCore::RenderSVGText::layout):
        * rendering/svg/RenderSVGText.h: Ditto.
        (WebCore::RenderSVGText::layoutAttributes):
        (WebCore::RenderSVGText::needsReordering):
        * rendering/svg/SVGRootInlineBox.cpp: Use new InlineFlowBox::collectLeafBoxesINLogicalOrder(), with a custom "inline box reverse" implementation,
                                              which not only reverses the order of InlineBoxes, but also the order of the x/y/dx/dy/rotate value lists, if needed.
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        (WebCore::SVGRootInlineBox::layoutCharactersInTextBoxes):
        (WebCore::swapItems):
        (WebCore::reverseInlineBoxRangeAndValueListsIfNeeded):
        (WebCore::SVGRootInlineBox::reorderValueLists):
        * rendering/svg/SVGRootInlineBox.h:
        * rendering/svg/SVGTextLayoutAttributes.cpp: Store RenderSVGInlineText* pointer, where we belong to.
        (WebCore::SVGTextLayoutAttributes::SVGTextLayoutAttributes):
        (WebCore::SVGTextLayoutAttributes::dump):
        * rendering/svg/SVGTextLayoutAttributes.h:
        (WebCore::SVGTextLayoutAttributes::context):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp: Pass RenderSVGInlineText* object when creating SVGTextLayoutAttributes.
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForTextSubtree):
        (WebCore::SVGTextLayoutAttributesBuilder::propagateLayoutAttributes):
        * rendering/svg/SVGTextLayoutAttributesBuilder.h:
        * rendering/svg/SVGTextLayoutEngine.cpp: Rewrite & cleanup the main layout algorithm, to be less confusing.
        (WebCore::SVGTextLayoutEngine::SVGTextLayoutEngine):
        (WebCore::SVGTextLayoutEngine::updateRelativePositionAdjustmentsIfNeeded):
        (WebCore::SVGTextLayoutEngine::recordTextFragment):
        (WebCore::SVGTextLayoutEngine::currentLogicalCharacterAttributes):
        (WebCore::SVGTextLayoutEngine::currentLogicalCharacterMetrics):
        (WebCore::SVGTextLayoutEngine::currentVisualCharacterMetrics):
        (WebCore::SVGTextLayoutEngine::advanceToNextLogicalCharacter):
        (WebCore::SVGTextLayoutEngine::advanceToNextVisualCharacter):
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath):
        * rendering/svg/SVGTextLayoutEngine.h:

2011-03-30  Ilya Tikhonovsky  <loislo@chromium.org>

        Not reviewed trivial change.

        Web Inspector: Remove unnecessary function arguments after r82281.
        https://bugs.webkit.org/show_bug.cgi?id=57327

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::domContentLoadedEventFired):
        * inspector/InspectorAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):

2011-03-30  Kent Tamura  <tkent@chromium.org>

        Reviewed by Ojan Vafai.

        H1 element should have different default style if it is in HTML5 sectioning elements.
        https://bugs.webkit.org/show_bug.cgi?id=52693

        Test: fast/css/h1-in-section-elements.html

        * css/html.css: Add font-size and margin declarations to follow HTML5 specification.
        (:-webkit-any(article,aside,nav,section) h1):
        (:-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) h1):
        (:-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) h1):
        (:-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) h1):
        (:-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) h1):

2011-03-29  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej Stachowiak.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=57408
        webkit-min-device-pixel-ratio media query doesn't work post-SnowLeopard 
        -and corresponding-
        <rdar://problem/8665411>

        * platform/mac/PlatformScreenMac.mm:
        (WebCore::windowScaleFactor):
        (WebCore::toUserSpace):
        (WebCore::toDeviceSpace):

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        Rename BidiResolver::eor and sor to m_eor and m_sor to match modern style
        https://bugs.webkit.org/show_bug.cgi?id=57369

        I considered renaming these to m_endOfRun and m_startOfRun but decided
        that was too verbose for now (given how often they're used).  I suspect
        with a bit more refactoring we'll find they're not used very often and can be renamed
        if so desired.

        * platform/text/BidiResolver.h:
        (WebCore::::appendRun):
        (WebCore::::checkDirectionInLowerRaiseEmbeddingLevel):
        (WebCore::::lowerExplicitEmbeddingLevel):
        (WebCore::::raiseExplicitEmbeddingLevel):
        (WebCore::::createBidiRunsForLine):
        * rendering/InlineIterator.h:
        (WebCore::InlineBidiResolver::appendRun):

2011-03-29  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Remove exact retained size request in detailed heap snapshots.
        https://bugs.webkit.org/show_bug.cgi?id=57351

        * bindings/js/ScriptHeapSnapshot.h:
        * bindings/v8/ScriptHeapSnapshot.cpp:
        * bindings/v8/ScriptHeapSnapshot.h:
        * inspector/Inspector.json:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get data):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype._mouseClickInContainmentGrid):

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Split more logic out from createBidiRunsForLine for readability
        https://bugs.webkit.org/show_bug.cgi?id=57341

        I marked reorderRunsFromLevels inline, but it probably doesn't actually need to (or want to) be.
        This lops another large hunk off of reorderRunsFromLevels further reducing the size and complexity.

        * platform/text/BidiResolver.h:
        (WebCore::::reorderRunsFromLevels):
        (WebCore::::createBidiRunsForLine):

2011-03-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Make validation message bubble testable
        https://bugs.webkit.org/show_bug.cgi?id=57290

        Introduce a setting for validation message timer so that we can configure
        how long we show a validation message bubble.

        Test: fast/forms/validation-message-appearance.html

        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
          Don't set a timer if the timer magnification value is 0 or negative.
          Otherwise, hides the bubble length * magnification / 1000 seconds.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize the timer magnification value.
        * page/Settings.h:
        (WebCore::Settings::setValidationMessageTimerMagnification): Added.
        (WebCore::Settings::validationMessageTimerMaginification): Added.

2011-03-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Remove the extraneous declaration I accidentally added in r82376.

        * dom/MouseEvent.h: Removed createSimulated decl.

2011-03-29  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Compositor crash with show-layer-borders flag
        https://bugs.webkit.org/show_bug.cgi?id=57292

        Synchronize the debug border color/width with other properties to ensure the appropriate
        CCLayerImpl exists.  Code is only exercised with a debugging command line flag so no layout
        test.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::pushPropertiesTo):
        (WebCore::LayerChromium::setBorderColor):
        (WebCore::LayerChromium::setBorderWidth):
        * platform/graphics/chromium/LayerChromium.h:

2011-03-29  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Teach the preload scanner about &lt;input type=image&gt;
        https://bugs.webkit.org/show_bug.cgi?id=57404

        I did a very rough sample of the top 50 web pages to see how many of each
        HTML resource type they include:
        img src: 1,359
        script src: 276
        link href: 256
        iframe src: 104
        input src: 50
        embed src: 37
        @import: 13
        object data: 11

        Based on this, it seems worthwhile to preload inputs and iframes (possibly embed).
        This patch only does inputs.

        Test: fast/preloader/input.html

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::HTMLNames::PreloadTask::PreloadTask):
        (WebCore::HTMLNames::PreloadTask::processAttributes):
        (WebCore::HTMLNames::PreloadTask::inputTypeAttributeIsImage):
        (WebCore::HTMLNames::PreloadTask::preload):

2011-03-29  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by David Levin.

        Improve the massive switch statement in CSSStyleSelector::applyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=56288

        No new tests are needed because no new functionality exposed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Asserted that cases implemented in the CSSStyleApplyProperty lookup table are unreachable.
        Updated comment.

2011-03-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Introduce SimulatedMouseEvent and teach EventDispatcher how to use it.
        https://bugs.webkit.org/show_bug.cgi?id=57402

        No functional changes, covered by existing tests.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchSimulatedClick): Changed to use SimulatedMouseEvent.
        (WebCore::EventDispatcher::dispatchMouseEvent): Combined two dispatchMouseEvent methods
            into one, now that simulated-click events don't need one.
        * dom/EventDispatcher.h: Updated decls.
        * dom/MouseEvent.cpp:
        (WebCore::SimulatedMouseEvent::create): Added.
        (WebCore::SimulatedMouseEvent::~SimulatedMouseEvent): Added.
        (WebCore::SimulatedMouseEvent::SimulatedMouseEvent): Added.
        * dom/MouseEvent.h: Made constructor protected.

2011-03-29  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebCore.exp.in:

2011-03-29  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JavaInstance should not use jvalue in its API
        https://bugs.webkit.org/show_bug.cgi?id=57019

        This change updates JavaInstance for V8 to use JavaValue, rather than
        jvalue, in its API. This will allow us to create an API for
        JavaInstance that is independent of JNI, to allow it to be
        implemented on platforms that do not use JNI directly.

        Refactoring only, no new tests.

        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::invokeMethod):
        (JavaInstance::getField):
        * bridge/jni/v8/JavaInstanceV8.h:
        * bridge/jni/v8/JavaNPObjectV8.cpp:
        (JSC::Bindings::JavaNPObjectInvoke):
        (JSC::Bindings::JavaNPObjectGetProperty):
        * bridge/jni/v8/JavaValueV8.h:

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        Rename BidiResolver::last to m_last to match modern style
        https://bugs.webkit.org/show_bug.cgi?id=57367

        * platform/text/BidiResolver.h:
        (WebCore::::lowerExplicitEmbeddingLevel):
        (WebCore::::raiseExplicitEmbeddingLevel):
        (WebCore::::createBidiRunsForLine):

2011-03-29  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Maciej Stachowiak.

        SVGComponentTransferFunctionElement should validate type
        https://bugs.webkit.org/show_bug.cgi?id=56960

        Test: svg/filters/feComponentTransfer-style-crash.xhtml

        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::svgAttributeChanged):
        * svg/SVGComponentTransferFunctionElement.h:

2011-03-29  Thomas Klausner  <tk@giga.or.at>

        Reviewed by David Levin.

        png-1.5 fixes
        https://bugs.webkit.org/show_bug.cgi?id=54406

        Fix compilation with png-1.5: struct members were hidden, and
        a new API to terminate data processing was added (especially for
        WebKit).

        Compilation fixes, so no new tests.

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):

2011-03-29  Gavin Peters  <gavinp@chromium.org>

        Reviewed by Tony Gentilcore.

        Add beforeload to icon and prefetch link rel types
        https://bugs.webkit.org/show_bug.cgi?id=56424

        Over in https://lists.webkit.org/pipermail/webkit-dev/2011-February/016034.html , a webkit-dev
        thread, I've discussed my hopes for the link element, and adding the link header.  This
        change helps improve the link header by making it participate in the beforeload event in
        two more important cases.

        Tests: fast/dom/HTMLLinkElement/prefetch-beforeload.html
               http/tests/misc/link-rel-icon-beforeload.html
               webarchive/test-link-rel-icon-beforeload.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::checkBeforeLoadEvent):
        (WebCore::HTMLLinkElement::process):
        * html/HTMLLinkElement.h:

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        Rename BidiResolver::current to BidiResolver::m_current to match modern style
        https://bugs.webkit.org/show_bug.cgi?id=57363

        I was very confused by current until I realized it was a member variable.
        I also did m_reachedEndOfLine since that was small.

        * platform/text/BidiResolver.h:
        (WebCore::BidiResolver::position):
        (WebCore::BidiResolver::setPosition):
        (WebCore::BidiResolver::increment):
        (WebCore::::createBidiRunsForLine):

2011-03-29  Geoff Pike  <gpike@chromium.org>

        Reviewed by Dimitri Glazkov.

        In HitTestResult objects, initialize the ListHashSet<RefPtr<Node> >
        lazily.  In my informal testing it seems to be used hardly at all, so
        it's wasteful to create it eagerly.  Initializing a ListHashSet
        is expensive because a ListHashSet initially has space for 256
        elements, and that space is memset to 0.

        This change should improve performance but have no impact on
        correctness.  On x86-64, for example, the change cuts the
        cost of HitTestResult(IntPoint()) in EventHandler::mouseMoved()
        from ~1700 cycles to ~300 cycles.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::HitTestResult): copy *m_rectBasedTestResult if m_rectBasedTestResult isn't 0
        (WebCore::HitTestResult::operator=): copy *m_rectBasedTestResult if m_rectBasedTestResult isn't 0
        (WebCore::HitTestResult::addNodeToRectBasedTestResult): use mutableRectBasedTestResult() rather than m_rectBasedTestResult
        (WebCore::HitTestResult::append): append *(other.m_rectBasedTestResult) if other.m_rectBasedTestResult isn't 0
        * rendering/HitTestResult.h:
        (WebCore::HitTestResult::rectBasedTestResult): Add a typedef for ListHashSet<RefPtr<Node> > to ease readability.  Change m_rectBasedTestResult from ListHashSet<RefPtr<Node> > to an OwnPtr of same.  Modify rectBasedTestResult() and add mutableRectBasedTestResult().

2011-03-29  Timothy Hatcher  <timothy@apple.com>

        Update the order of the context menu to better match AppKit on Mac.

        <rdar://problem/9054893>

        Reviewed by John Sullivan.

        * English.lproj/Localizable.strings: Updated.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate): Update the order of items on Mac.
        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.cpp:
        (WebCore::contextMenuItemTagLookUpInDictionary): Added argument for selected string.
        * platform/LocalizedStrings.h:
        * platform/android/LocalizedStringsAndroid.cpp:
        (WebCore::contextMenuItemTagLookUpInDictionary): Ditto.
        * platform/brew/LocalizedStringsBrew.cpp:
        (WebCore::contextMenuItemTagLookUpInDictionary): Ditto.
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::contextMenuItemTagLookUpInDictionary): Ditto.
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::contextMenuItemTagLookUpInDictionary): Ditto.
        * platform/haiku/LocalizedStringsHaiku.cpp:
        (WebCore::contextMenuItemTagLookUpInDictionary): Ditto.
        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::contextMenuItemTagLookUpInDictionary): Ditto.

2011-03-29  Dean Jackson  <dino@apple.com>

        Reviewed by Chris Marrin and Ken Russell.

        https://bugs.webkit.org/show_bug.cgi?id=57248
        Occlusion issues with WebGL in Safari

        The depth buffer on Safari ports was being set up with a
        maximum of 16 bits. Now we use a combined 24/8 depth/stencil
        buffer on Mac ports.

        No new tests as this is the setting for a particular port. Other
        ports may use different defaults.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::validateAttributes):
        - use Extensions3D to test for depth and multisample extensions
          rather than querying OpenGL directly.
        (WebCore::GraphicsContext3D::reshape):
        - use a 24bit depth buffer when the extension is enabled.

2011-03-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Sorted XCode project. It's gotten quite out of sorts.

        * WebCore.xcodeproj/project.pbxproj: Ran sort-XCode-project-file.

2011-03-29  Emil A Eklund  <eae@chromium.org>

        Reviewed by Dimitri Glazkov.

        DatasetDOMStringMap::item and ::contains copies attribute name string
        https://bugs.webkit.org/show_bug.cgi?id=55645

        Change propertyNameMatchesAttributeName to match without creating a copy
        of the string.

        * dom/DatasetDOMStringMap.cpp:
        (WebCore::propertyNameMatchesAttributeName):

2011-03-29  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed rollout r82282, part of r82288, r82298.

        * css/CSSParser.cpp:
        (WebCore::parseColorInt):
        (WebCore::isValidDouble):
        (WebCore::parseAlphaValue):
        (WebCore::CSSParser::parseColor):

2011-03-25  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=55981
        Second round of clean-ups, aimed at supporting GTK with the
        same unified FontPlatformData header.  This version removes
        some unneeded WinCairo code, and aligns the WinCairo and
        GTK ports to reduce code duplication.

        * WebCore.vcproj/WebCore.vcproj: Get rid of a dangling reference
          to an old WinCairo file.
        * platform/graphics/FontPlatformData.h: Remove unneeded member
          for m_fontFace, which is a member of m_scaledFont.  Switch to
          standard Cairo hashing.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::font):
        (WebCore::FontPlatformData::scaledFont):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        (WebCore::FontPlatformData::hashTableDeletedFontValue):
        * platform/graphics/win/FontCacheWin.cpp: Update to no longer use
          the unnecessary fontFace() accessor.
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::platformDataAssign):
        (WebCore::FontPlatformData::platformIsEqual):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2011-03-29  Jian Li  <jianli@chromium.org>

        Reviewed by Adam Barth.

        Inline worker powered by blob URL does not work with files URL even if
        allowFileAccessFromFileURLs is enabled
        https://bugs.webkit.org/show_bug.cgi?id=56063

        Test: fast/files/workers/inline-worker-via-blob-url.html

        * fileapi/BlobURL.cpp: Removed unneeded getOrigin() method.
        * fileapi/BlobURL.h: Removed unneeded getOrigin() method.
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin): Extended the logic to handle
        filesystem URL also to blob URL. Also fixed the problem that m_isUnique
        is incorrectly set for blob and filesystem URLs.
        (WebCore::SecurityOrigin::create): Removed the special logic for blob URL
        since we use the same logic in SecurityOrigin constructor as filesystem
        URL.
        (WebCore::SecurityOrigin::canRequest): Removed the special logic for blob
        URL since it is not needed with the fix in SecurityOrigin constructor.

2011-03-29  Timothy Hatcher  <timothy@apple.com>

        Update WebCore Localizable.strings to contain WebCore, WebKit/mac and WebKit2 strings.

        https://webkit.org/b/57354

        Reviewed by Sam Weinig.

        * English.lproj/Localizable.strings: Updated.
        * StringsNotToBeLocalized.txt: Removed. To hard to maintain in WebCore.
        * platform/network/cf/LoaderRunLoopCF.h: Remove a single quote in an #error so
        extract-localizable-strings does not complain about unbalanced single quotes.

2011-03-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82295 and r82300.
        http://trac.webkit.org/changeset/82295
        http://trac.webkit.org/changeset/82300
        https://bugs.webkit.org/show_bug.cgi?id=57380

        This patch breaks compile on Chromium (Requested by
        abarth|gardener on #webkit).

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole):
        (webkit_accessible_get_role):
        * accessibility/mac/AccessibilityObjectWrapper.mm:

2011-03-29  Anders Carlsson  <andersca@apple.com>

        Fix clang build.

        * platform/text/BidiResolver.h:
        (WebCore::::createBidiRunsForLine):

2011-03-29  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Use per-configuration vsprops in WebCore to avoid WebKitVSPropsRedirectionDir removal by MSVC IDE
        https://bugs.webkit.org/show_bug.cgi?id=57378

        Visual Studio's IDE was removing instances of $(WebKitVSPropsRedirectionDir) from
        InheritedPropertySheet rules in our vcproj files when the vcproj was edited from within
        the IDE. To avoid this, add a separate vsprops file for each project configuration that
        contains the required inherited property sheets.

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/QTMovieWinDebug.vsprops: Added.
        * WebCore.vcproj/QTMovieWinDebugAll.vsprops: Added.
        * WebCore.vcproj/QTMovieWinDebugCairoCFLite.vsprops: Added.
        * WebCore.vcproj/QTMovieWinRelease.vsprops: Added.
        * WebCore.vcproj/QTMovieWinReleaseCairoCFLite.vsprops: Added.
        * WebCore.vcproj/QTMovieWinReleaseLTCG.vsprops: Added.
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreDebug.vsprops: Added.
        * WebCore.vcproj/WebCoreDebugAll.vsprops: Added.
        * WebCore.vcproj/WebCoreDebugCairoCFLite.vsprops: Added.
        * WebCore.vcproj/WebCoreRelease.vsprops: Added.
        * WebCore.vcproj/WebCoreReleaseCairoCFLite.vsprops: Added.
        * WebCore.vcproj/WebCoreReleaseLTCG.vsprops: Added.

2011-03-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/9194927> REGRESSION (r81691): Page at www.mondaynote.com lays out incorrectly
        
        Back out the optimization that stopped when it hit the first float. This was an incorrect optimization
        and can't be done without more work.

        Added fast/block/float/float-forced-below-other-floats.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::logicalLeftOffsetForLine):
        (WebCore::RenderBlock::logicalRightOffsetForLine):

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Start to clean up BidiResolver::createBidiRunsForLine so that mere mortals can understand it
        https://bugs.webkit.org/show_bug.cgi?id=57338

        I'm attempting to break createBidiRunsForLine into understandable pieces
        so that we can tell what it's actually doing.  Our implementation of the
        unicode bidi algorithm is slightly different from the spec in that we
        run it per-line (instead of over the entire paragraph at once).  This is
        great for performance (our implementation is resumable), but it makes
        things a bit tricky to understand.  Splitting createBidiRunsForLine into
        pieces should help make our UBA implementation more readable.

        * platform/text/BidiResolver.h:
        (WebCore::::updateStatusLastFromCurrentDirection):
        (WebCore::::createBidiRunsForLine):

2011-03-29  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] Consistent crash from Google/ARIA combobox click
        https://bugs.webkit.org/show_bug.cgi?id=55883

        Do not call to firstChild() to avoid entering into infinite loops.

        This would happen when current item is a WebCore Group and some of
        its children have either role 'option' or 'menuitem'. Other than
        that the logic behind that call to firstChild() seems to be no
        longer needed so it's safe to remove it.

        Test: platform/gtk/accessibility/aria-options-and-menuitems-crash.html

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Remove call to firsChild, which was leading to crashes sometimes.

2011-03-29  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        AX: GTK: ARIA role is not respected on <p> <label> <div> and <form>
        https://bugs.webkit.org/show_bug.cgi?id=47636

        Define new roles in WebCore and map them to ATK accordingly.

        Test: platform/gtk/accessibility/aria-roles-unignored.html

        * accessibility/AccessibilityObject.h: Added new roles to
        represent paragraphs, labels, forms and div sections.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        Return ParagraphRole, LabelRole, FormRole and DivRole when needed.
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole): Map new WebCore roles to ATK Roles.
        (webkit_accessible_get_role): Remove code to define roles for
        paragraphs, labels, forms and divs based on node's tag name.

        Update mappings for the Mac platform.

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (createAccessibilityRoleMap): Add explicit mappings from the new
        roles introduced to NSAccessibilityGroupRole.

2011-03-29  Philippe Normand  <pnormand@igalia.com>

        Unreviewed build fix. Remove ASSERT hitting consitently on GTK.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::moveToStartOf):

2011-03-29  Darin Adler  <darin@apple.com>

        Fix some just-introduced build failures.

        * WebCore.pro: Correct spelling of filename.

        * css/CSSParser.cpp:
        (WebCore::parseColorIntOrPercentage): Fix double/int conversion that fails to compile
        on Leopard. Also renamed one local variabel.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::didCommitLoad): Removed unused argument names to avoid warning.
        (WebCore::InspectorAgent::domContentLoadedEventFired): Ditto.

2011-03-29  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Darin Adler.

        CSS: Slow parsing of rgb() with percent values
        https://bugs.webkit.org/show_bug.cgi?id=16708

        Implement fast-path parsing for percentage color values.

        Gain ~30% speedup on http://canvex.lazyilluminati.com/misc/3d.html.

        * css/CSSParser.cpp:
        (WebCore::checkForValidDouble): Extend to return the number of characters forming a valid double.
        (WebCore::parseDouble): Function for parsing double values if they are valid.
        (WebCore::parseColorIntOrPercentage): Extend parseColorInt to deal with percentage values.
        (WebCore::parseAlphaValue): Use the new functions.
        (WebCore::CSSParser::parseColor): Ditto.

2011-03-29  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: extract InspectorPageAgent from InspectorAgent.
        https://bugs.webkit.org/show_bug.cgi?id=57327

        There are page related methods and inspector related methods in InspectorAgent.
        It would be nice to extract page specific methods for future usage the rest of methods in workers debugger.

        * GNUmakefile.am:
        * WebCore.gypi:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::domContentLoadedEventFired):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::pageAgent):
        * inspector/InspectorPageAgent.cpp: Added.
        (WebCore::InspectorPageAgent::create):
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::setFrontend):
        (WebCore::InspectorPageAgent::clearFrontend):
        (WebCore::InspectorPageAgent::addScriptToEvaluateOnLoad):
        (WebCore::InspectorPageAgent::removeAllScriptsToEvaluateOnLoad):
        (WebCore::InspectorPageAgent::reloadPage):
        (WebCore::InspectorPageAgent::openInInspectedWindow):
        (WebCore::InspectorPageAgent::setUserAgentOverride):
        (WebCore::buildObjectForCookie):
        (WebCore::buildArrayForCookies):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::deleteCookie):
        (WebCore::InspectorPageAgent::inspectedURLChanged):
        (WebCore::InspectorPageAgent::restore):
        (WebCore::InspectorPageAgent::didCommitLoad):
        (WebCore::InspectorPageAgent::domContentEventFired):
        (WebCore::InspectorPageAgent::loadEventFired):
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorPageAgent::applyUserAgentOverride):
        * inspector/InspectorPageAgent.h: Added.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        (WebCore::InspectorInstrumentation::applyUserAgentOverrideImpl):
        (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl):
        (WebCore::InspectorInstrumentation::loadEventFiredImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::retrievePageAgent):
        * inspector/InspectorInstrumentation.h:
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::inspectorPageAgent):
        (WebCore::InstrumentingAgents::setInspectorPageAgent):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype._reloadResources):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._deleteCookie):
        (WebInspector.Cookies.getCookiesAsync):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onReload):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._openInNewTab):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype.ondblclick):
        * inspector/front-end/WorkersSidebarPane.js:
        (WebInspector.WorkersSidebarPane.prototype.setInstrumentation):
        * inspector/front-end/inspector.js:
        (WebInspector.openResource):
        (WebInspector.documentKeyDown):

2011-03-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57276
        
        Add optimizations to make the vertical placement of boxes much faster. Whenever a box is added
        to a line, compare it with the parent box. If we can determine that the child box has the exact
        same height and baseline position as the parent box, then we keep a boolean flag set called
        descendantsHaveSameLineHeightAndBaseline(). If the box is different for any reason then we clear the
        flag up the line box parent chain.

        When it comes time to do computeLogicalboxHeights, we can avoid recurring into the children of
        a box whose descendants all have the same position. When we do placeBoxesInBlockDirection, we
        can do a simplified recursion that just calls adjustBlockDirectionPosition to offset the boxes
        without doing anything else.
        
        Because of the quirks mode rule of only shrinking boxes with no immediate text children, we need
        to track whether a box has text descendants now as well.  When we avoid doing the recursion
        this flag tells us whether the collection of boxes should have an effect on the ascent and descent
        of the line in quirks mode.
 
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (WebCore::InlineFlowBox::hasTextDescendants):
        (WebCore::InlineFlowBox::descendantsHaveSameLineHeightAndBaseline):
        (WebCore::InlineFlowBox::clearDescendantsHaveSameLineHeightAndBaseline):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::createLineBoxes):
        (WebCore::RenderBlock::constructLine):
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Remove a bunch of duplicate code by adding some InlineIterator helper methods
        https://bugs.webkit.org/show_bug.cgi?id=57326

        Once I started adding these it became clear how much crazy duplicated code
        we had due to treating InlineIterator as a struct and accessing its
        members directly.  We can't quite make the members private yet since
        findNextLineBreak still splits out the members.  But this change
        makes the code much cleaner.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::clear):
        (WebCore::InlineIterator::moveToStartOf):i
        (WebCore::InlineIterator::moveTo):
        (WebCore::InlineIterator::increment):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::tryHyphenating):
        (WebCore::RenderBlock::findNextLineBreak):

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Clean up bidiNext by abstracting repeated code
        https://bugs.webkit.org/show_bug.cgi?id=57335

        I also added a comment to explain what bidiNext is actually doing.
        This whole area of code is confusing but need not be.

        * rendering/InlineIterator.h:
        (WebCore::embedCharFromDirection):
        (WebCore::notifyResolverEnteredObject):
        (WebCore::notifyResolverWillExitObject):
        (WebCore::bidiNext):
        (WebCore::bidiFirst):

2011-03-29  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Support external CSS stylesheet freeflow text editing
        https://bugs.webkit.org/show_bug.cgi?id=54397

        In this implementation, Ctrl/Cmd-S commits the current changes into the model.

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.createResourceView):
        (WebInspector.CSSSourceFrameDelegateForResourcesPanel):
        (WebInspector.CSSSourceFrameDelegateForResourcesPanel.prototype.canEditScriptSource):
        (WebInspector.CSSSourceFrameDelegateForResourcesPanel.prototype.editScriptSource):
        (WebInspector.CSSSourceFrameDelegateForResourcesPanel.prototype.editScriptSource.handleInfos):
        (WebInspector.CSSSourceFrameDelegateForResourcesPanel.prototype._saveStyleSheet):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._applyDiffMarkup):
        (WebInspector.FrameResourceTreeElement.prototype._contentChanged):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._createTextViewer):

2011-03-29  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        playbackRate should not be set to defaultPlaybackRate in play()
        https://bugs.webkit.org/show_bug.cgi?id=55943

        Test: media/video-playbackrate.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playbackRate): No need to ask the media engine for the current
            rate, we already have the current value cached.
        (WebCore::HTMLMediaElement::playInternal): Don't reset the engine's playback rate to 
            the default rate.
        (WebCore::HTMLMediaElement::togglePlayState): Do reset the engine's playback rate to 
            the default rate before triggering playback.
        * manual-tests/media-default-playback-rate.html: Added.

2011-03-28  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Remove specialization of EventDispatcher with inversion of control.
        https://bugs.webkit.org/show_bug.cgi?id=57285

        Since some events have extra logic around their dispatch, allow them
        to dispatch themselves and specialize the logic. This change only
        converts KeyboardEvent to this model.

        No functional change, covered by existing tests.

        * dom/Event.cpp:
        (WebCore::Event::dispatch): Added.
        * dom/Event.h: Updated decls.
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent): Changed to ask event to dispatch
            itself.
        * dom/EventDispatcher.h: Updated decls.
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::dispatch): Added, moving code from EventDispatcher.
        * dom/KeyboardEvent.h: Updated decls.
        * dom/Node.cpp:
        (WebCore::Node::dispatchKeyEvent): Changed to use the new ways.

2011-03-29  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: InspectorDOMAgent has unnecessary dependency from InspectorAgent.
        https://bugs.webkit.org/show_bug.cgi?id=57329

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::setFrontend):
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspect):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::setFrontend):
        (WebCore::InspectorDOMAgent::handleMousePress):
        (WebCore::InspectorDOMAgent::inspect):
        (WebCore::InspectorDOMAgent::focusNode):
        (WebCore::InspectorDOMAgent::highlight):
        (WebCore::InspectorDOMAgent::hideHighlight):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Rename InlineIterator::pos to m_pos to match modern style
        https://bugs.webkit.org/show_bug.cgi?id=57342

        Somehow I failed to upload this one earlier, no wonder later patches didn't apply.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::InlineIterator::increment):
        (WebCore::InlineIterator::current):
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::checkMidpoints):
        (WebCore::RenderBlock::appendRunsForObject):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::matchedEndLine):
        (WebCore::tryHyphenating):
        (WebCore::RenderBlock::findNextLineBreak):

2011-03-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: document BrowserDebugger agent.
        https://bugs.webkit.org/show_bug.cgi?id=57331

        * inspector/Inspector.json:

2011-03-29  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Fix handling of the CSSAgent.setStyleSheetText() results in CSSStyleModel.js
        https://bugs.webkit.org/show_bug.cgi?id=56310

        Instead of stylesheet ids, CSSAgent.getAllStyleSheets() now returns metainfo objects containing
        "styleSheetId", "sourceURL", "disabled", and "title" fields. The latter three are not returned
        by CSSAgent.getStyleSheet() anymore.

        Test: inspector/styles/get-set-stylesheet-text.html

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheetInfo):
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.styleSheetCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.allStylesCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleModel.prototype._onRevert):
        (WebInspector.CSSStyleSheet):
        (WebInspector.CSSStyleSheet.prototype.setText):

2011-03-29  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Eric Seidel.

        Implement text-align:match-parent as -webkit-match-parent.
        https://bugs.webkit.org/show_bug.cgi?id=50951

        Add support to the CSS parser.

        Tests: fast/css/text-align-webkit-match-parent-parse.html
               fast/css/text-align-webkit-match-parent.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Rename InlineIterator::nextBreakablePosition to m_nextBreakablePosition to match modern style
        https://bugs.webkit.org/show_bug.cgi?id=57323

        All of these m_nextBreakablePosition = -1 could probably be replaced with
        some new methods.  But I'll do that in a separate change.  Clearly
        m_nextBreakablePosition is just a cached value which should be cleared
        at the right times.  I suspect we may even fail to clear it sometimes when
        we should due to the current used of direct access instead of smarter functions.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::InlineIterator::increment):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::tryHyphenating):
        (WebCore::RenderBlock::findNextLineBreak):

2011-03-29  Jeff Miller  <jeffm@apple.com>

        Reviewed by Jon Honeycutt.

        Add WebCore::copyCertificateToData() on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57296

        Create a new win directory in platform/cf and add CertificateCFWin.cpp and CertificateCFWin.h to it.

        * WebCore.vcproj/WebCore.vcproj: Added CertificateCFWin.cpp and CertificateCFWin.h.
        * WebCore.vcproj/copyForwardingHeaders.cmd: Copy all header files in \platform\cf\win\.
        * platform/cf/win: Added.
        * platform/cf/win/CertificateCFWin.cpp: Added.
        (WebCore::deallocCertContext): Added.
        (WebCore::createCertContextDeallocator): Added.
        (WebCore::copyCertificateToData): Added.
        * platform/cf/win/CertificateCFWin.h: Added.

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Rename InlineIterator::block to m_block to match modern style
        https://bugs.webkit.org/show_bug.cgi?id=57321

        I could have made m_block private, since it's only accessed in
        one place outside of InlineIterator (for an ASSERT).  But I chose
        not to do so in this change.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::InlineIterator::increment):
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2011-03-29  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Nikolas Zimmermann.

        Incorrect offset of svg <use> element which is in <symbol> element
        https://bugs.webkit.org/show_bug.cgi?id=57318

        When webkit expanded a svg <symbol> element in the shadow tree it
        would clone the children of the <symbol>. The children may contain
        SVGShadowTreeContainerElement which was expanded from svg <use>
        element. But the clone operation would clone a
        SVGShadowTreeContainerElement as a svg <g> element. This resulted
        that updateContainerOffset wouldn't update offset for those elements
        which were expand from <use> elements.

        This patch implements cloneElementWithoutAttributesAndChildren for
        SVGShadowTreeContainerElement to make the container clone itself
        correctly.

        Test: svg/custom/use-in-symbol-with-offset.svg

        * rendering/svg/SVGShadowTreeElements.cpp:
        (WebCore::SVGShadowTreeContainerElement::cloneElementWithoutAttributesAndChildren):
        * rendering/svg/SVGShadowTreeElements.h:

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Rename InlineIterator::obj to m_obj to match modern style
        https://bugs.webkit.org/show_bug.cgi?id=57319

        I started this rename after confusion in InlineBidiResolver::appendRun.
        (Which uses an "obj" local in InlineIterator.h.  It's not actually
        masking m_obj because it's a separate class, but I didn't realize
        that at the time because it's in InlineIterator.h which is itself confusing!)

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::InlineIterator::increment):
        (WebCore::InlineIterator::atEnd):
        (WebCore::InlineIterator::current):
        (WebCore::InlineIterator::direction):
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::checkMidpoints):
        (WebCore::RenderBlock::appendRunsForObject):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::matchedEndLine):
        (WebCore::skipNonBreakingSpace):
        (WebCore::RenderBlock::requiresLineBox):
        (WebCore::RenderBlock::skipTrailingWhitespace):
        (WebCore::RenderBlock::skipLeadingWhitespace):
        (WebCore::tryHyphenating):
        (WebCore::RenderBlock::findNextLineBreak):

2011-03-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: document Timeline domain, make timeline event types of type string.
        https://bugs.webkit.org/show_bug.cgi?id=57299

        * inspector/Inspector.json:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::pushGCEventRecords):
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::stop):
        (WebCore::InspectorTimelineAgent::willCallFunction):
        (WebCore::InspectorTimelineAgent::didCallFunction):
        (WebCore::InspectorTimelineAgent::willDispatchEvent):
        (WebCore::InspectorTimelineAgent::didDispatchEvent):
        (WebCore::InspectorTimelineAgent::willLayout):
        (WebCore::InspectorTimelineAgent::didLayout):
        (WebCore::InspectorTimelineAgent::willRecalculateStyle):
        (WebCore::InspectorTimelineAgent::didRecalculateStyle):
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::didPaint):
        (WebCore::InspectorTimelineAgent::willWriteHTML):
        (WebCore::InspectorTimelineAgent::didWriteHTML):
        (WebCore::InspectorTimelineAgent::didInstallTimer):
        (WebCore::InspectorTimelineAgent::didRemoveTimer):
        (WebCore::InspectorTimelineAgent::willFireTimer):
        (WebCore::InspectorTimelineAgent::didFireTimer):
        (WebCore::InspectorTimelineAgent::willChangeXHRReadyState):
        (WebCore::InspectorTimelineAgent::didChangeXHRReadyState):
        (WebCore::InspectorTimelineAgent::willLoadXHR):
        (WebCore::InspectorTimelineAgent::didLoadXHR):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::didEvaluateScript):
        (WebCore::InspectorTimelineAgent::didScheduleResourceRequest):
        (WebCore::InspectorTimelineAgent::willSendResourceRequest):
        (WebCore::InspectorTimelineAgent::willReceiveResourceData):
        (WebCore::InspectorTimelineAgent::didReceiveResourceData):
        (WebCore::InspectorTimelineAgent::willReceiveResourceResponse):
        (WebCore::InspectorTimelineAgent::didReceiveResourceResponse):
        (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
        (WebCore::InspectorTimelineAgent::didMarkTimeline):
        (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent):
        (WebCore::InspectorTimelineAgent::didMarkLoadEvent):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry):
        * inspector/front-end/TimelineAgent.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.get _recordStyles):
        (WebInspector.TimelinePanel.prototype._createEventDivider):
        (WebInspector.TimelinePanel.prototype._findParentRecord):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelineDispatcher.prototype.started):
        (WebInspector.TimelineDispatcher.prototype.stopped):
        (WebInspector.TimelineDispatcher.prototype.eventRecorded):
        (WebInspector.TimelinePanel.FormattedRecord):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):

2011-03-29  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Fixing live edits tests on chromium.
        https://bugs.webkit.org/show_bug.cgi?id=57316

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.editScriptSource):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._handleSave.didEditScriptSource):
        (WebInspector.SourceFrame.prototype._handleSave):
        (WebInspector.SourceFrameDelegate.prototype.editScriptSource):

2011-03-29  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: fix call frames positions in formatted scripts.
        https://bugs.webkit.org/show_bug.cgi?id=57036

        Introduce PresentationCallFrame class that encapsulates source mapping details from UI components.

        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update.didGetSourceLocation):
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype.set selectedCallFrame):
        (WebInspector.CallStackSidebarPane.prototype._placardSelected):
        (WebInspector.CallStackSidebarPane.prototype._contextMenu):
        (WebInspector.CallStackSidebarPane.prototype._copyStackTrace):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype._didEditScriptSource):
        (WebInspector.DebuggerModel.prototype.get debuggerPausedDetails):
        (WebInspector.DebuggerModel.prototype._pausedScript):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource.didEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerPaused):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerResumed):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype.get selectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype._reset):
        (WebInspector.PresenationCallFrame): Call frame wrapper for UI.
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused.else.didGetSourceLocation):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._debuggerResumed):
        (WebInspector.ScriptsPanel.prototype._sourceFrameLoaded):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected.didGetSourceLocation):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.evaluateInSelectedCallFrame):
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile.prototype.get content):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._createTextViewer):
        (WebInspector.SourceFrame.prototype.setExecutionLine):
        (WebInspector.SourceFrame.prototype.clearExecutionLine):
        (WebInspector.SourceFrame.prototype._showPopup.showObjectPopup):
        (WebInspector.SourceFrame.prototype._showPopup):

2011-03-29  Emil A Eklund  <eae@chromium.org>

        Reviewed by Darin Adler.

        Fix for execCommand("Delete") with an empty selection.
        https://bugs.webkit.org/show_bug.cgi?id=56652

        Test: editing/execCommand/delete-empty-container.html

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::makeEditableRootEmpty): Add check for root element.

2011-03-29  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Refactor HeapSnapshot-related code to
        make sure we don't return big amounts of data to forms.
        https://bugs.webkit.org/show_bug.cgi?id=57227

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get _countPercent):
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._createProvider):
        (WebInspector.HeapSnapshotInstanceNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype._createProvider):
        (WebInspector.HeapSnapshotConstructorNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotConstructorNode.prototype.get _countPercent):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider.createProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._createProvider):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype.setDataSource):
        (WebInspector.HeapSnapshotDominatorsDataGrid.prototype.setDataSource):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get dominatorIndex):
        (WebInspector.HeapSnapshotNode.prototype.get retainers):
        (WebInspector.HeapSnapshot):
        (WebInspector.HeapSnapshot.prototype.get _allNodes):
        (WebInspector.HeapSnapshot.prototype.get nodeCount):
        (WebInspector.HeapSnapshot.prototype.get rootNodeIndex):
        (WebInspector.HeapSnapshot.prototype.hasId):
        (WebInspector.HeapSnapshot.prototype.get nodeIds):
        (WebInspector.HeapSnapshot.prototype._retainersForNode):
        (WebInspector.HeapSnapshot.prototype._buildRetainers):
        (WebInspector.HeapSnapshot.prototype._buildAggregates):
        (WebInspector.HeapSnapshot.prototype._buildAggregatesIndexes):
        (WebInspector.HeapSnapshot.prototype._buildIdsList):
        (WebInspector.HeapSnapshot.prototype._buildNodeIndex):
        (WebInspector.HeapSnapshotFilteredOrderedIterator):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.next):
        (WebInspector.HeapSnapshotEdgesProvider):
        (WebInspector.HeapSnapshotNodesProvider):

2011-03-29  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Fix detailed heap snapshots UI.
        https://bugs.webkit.org/show_bug.cgi?id=57235

        Fix two problems:
          1. Text color of grid cells under selection needs to be white, otherwise it's unreadable for some colors;
          2. Long strings need to be truncated in grid, their contents can be shown on hover.

        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype._getHoverAnchor):
        (WebInspector.DetailedHeapshotView.prototype._showStringContentPopup):
        * inspector/front-end/heapProfiler.css:
        (.detailed-heapshot-view .console-formatted-string):
        (.detailed-heapshot-view .data-grid tr.selected *):
        (.detailed-heapshot-view .data-grid:focus tr.selected *):

2011-03-29  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Highlight visible lines first
        https://bugs.webkit.org/show_bug.cgi?id=57013

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorChunkedPanel.prototype._findFirstVisibleChunkNumber):
        (WebInspector.TextEditorChunkedPanel.prototype._findVisibleChunks):
        (WebInspector.TextEditorChunkedPanel.prototype._findFirstVisibleLineNumber.compareLineRowOffsetTops):
        (WebInspector.TextEditorChunkedPanel.prototype._findFirstVisibleLineNumber):
        (WebInspector.TextEditorMainPanel.prototype._paintScheduledLines):
        (WebInspector.TextEditorMainPanel.prototype._paintLines):
        (WebInspector.TextEditorMainPanel.prototype._paintLineChunks):
        (WebInspector.TextEditorMainPanel.prototype._paintLine):
        (WebInspector.TextEditorMainChunk.prototype.set expanded):

2011-03-29  Emil A Eklund  <eae@chromium.org>

        Reviewed by Dimitri Glazkov.

        Relative mouse coordinates recalculated for each target
        https://bugs.webkit.org/show_bug.cgi?id=57130

        Calculate relative coordinates lazily for mouse events instead of doing
        it for each target. Speeds up dispatching of mouse events in deep dom
        structures significantly, O(n^2) to O(n).

        Also fixes https://bugs.webkit.org/show_bug.cgi?id=34973

        Tests: fast/events/mouse-relative-position.html
               perf/mouse-event.html

        * dom/Event.cpp:
        (WebCore::Event::setTarget):
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        (WebCore::MouseRelatedEvent::initCoordinates):
        (WebCore::pageZoomFactor):
        (WebCore::MouseRelatedEvent::receivedTarget):
        (WebCore::MouseRelatedEvent::computeRelativePosition):
        (WebCore::MouseRelatedEvent::layerX):
        (WebCore::MouseRelatedEvent::layerY):
        (WebCore::MouseRelatedEvent::offsetX):
        (WebCore::MouseRelatedEvent::offsetY):
        * dom/MouseRelatedEvent.h:
        * dom/UIEvent.cpp:
        (WebCore::UIEvent::layerX):
        (WebCore::UIEvent::layerY):
        * dom/UIEvent.h:

2011-03-29  Emil A Eklund  <eae@chromium.org>

        Reviewed by Darin Adler.

        getComputedStyle counterIncrement crash @ WebCore::counterToCSSValue
        https://bugs.webkit.org/show_bug.cgi?id=57266

        Add null check to counterToCSSValue.

        Test: fast/css/getComputedStyle/counterIncrement-without-counter.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::counterToCSSValue):

2011-03-29  Gavin Peters  <gavinp@chromium.org>

        Reviewed by Tony Gentilcore.

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

        These events are equired on link elements, see
        http://dev.w3.org/html5/spec/Overview.html#the-link-element

        After a discussion in WebKit-dev about the direction of prefetch in the loader, and about a path
        to adding the Link header, we decided to look at making onerror, onload and onbeforeload events
        more uniformly supported.  See the thread at
        https://lists.webkit.org/pipermail/webkit-dev/2011-February/016034.html .

        It turned out that part of adding onerror for link prefetch was to make the top CachedResource less
        abstract.  It was pure virtual until prefetch became the first consumer to use an unspecialised
        implementation, and this CL continues that by adding a default checkNotify method to it.  As it
        happens there were already two subclasses using what amounted to the generic checkNotify, so I
        also removed those, buying us some code cleanup with the change.

        Test: fast/dom/HTMLLinkElement/prefetch-onerror.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseMappedAttribute):
        (WebCore::HTMLLinkElement::onloadTimerFired):
        (WebCore::HTMLLinkElement::notifyFinished):
        * loader/cache/CachedImage.cpp:
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::checkNotify):
        (WebCore::CachedResource::data):
        (WebCore::CachedResource::error):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedScript.cpp:
        * loader/cache/CachedScript.h:

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Add support for parsing unicode-bidi: -webkit-isolate
        https://bugs.webkit.org/show_bug.cgi?id=57181

        Test: css3/unicode-bidi-insolate-parse.html

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EUnicodeBidi):
        * css/CSSValueKeywords.in:
        * rendering/style/RenderStyleConstants.h:

2011-03-29  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r82193.

        * platform/wince/FileSystemWinCE.cpp:
        (WebCore::openTemporaryFile):

2011-03-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82198.
        http://trac.webkit.org/changeset/82198
        https://bugs.webkit.org/show_bug.cgi?id=57304

        Broke Chromium Win build. (Requested by dave_levin on
        #webkit).

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):

2011-03-28  Ofri Wolfus  <ofri@google.com>

        Reviewed by Eric Seidel.

        RTL: Select elements with a size attribute are always left aligned.
        https://bugs.webkit.org/show_bug.cgi?id=50928

        Added support for alignment in RenderListBox.

        Test: fast/forms/listbox-bidi-align.html

        * rendering/RenderListBox.cpp:
        (WebCore::itemOffsetForAlignment):
        (WebCore::RenderListBox::paintItemForeground): Add support for alignment and directionality.

2011-03-28  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Benjamin Poulain.

        [Qt] Change TextureMapperVideoLayer to TextureMapperMediaLayer
        https://bugs.webkit.org/show_bug.cgi?id=57142

        TextureMapperMediaLayer is a better name here because both video and plugins use this layer.
        Remove ENABLE(VIDEO) guard.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setContentsToMedia):
        * platform/graphics/texmap/TextureMapperNode.h:
        * platform/graphics/texmap/TextureMapperPlatformLayer.h:
        (WebCore::TextureMapperMediaLayer::layerType):

2011-03-28  Thomas Klausner  <tk@giga.or.at>

        Reviewed by David Levin.

        png-1.5 fixes
        https://bugs.webkit.org/show_bug.cgi?id=54406

        Fix compilation with png-1.5: struct members were hidden, and
        a new API to terminate data processing was added (especially for
        WebKit).

        Compilation fixes, so no new tests.

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):

2011-03-28  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Adam Barth.

        Replace fprintf(stderr, ...) with LOG_ERROR
        https://bugs.webkit.org/show_bug.cgi?id=57216

        LOG_ERROR is a better choice here.

        * bridge/jni/v8/JavaClassV8.cpp:
        (JavaClass::JavaClass):

2011-03-28  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Add a new JavaValue to type to represent a Java value in the Java bridge
        https://bugs.webkit.org/show_bug.cgi?id=57022

        This change introduces a new JavaValue type and uses it in place of jvalue
        in the conversions to and from JavaNPObject used in the V8 Java bridge.

        Refactoring only, no new tests.

        * WebCore.gypi:
        * bridge/jni/JNIUtility.cpp:
        (JSC::Bindings::javaTypeFromClassName):
        (JSC::Bindings::signatureFromJavaType):
        (JSC::Bindings::getJNIField):
        (JSC::Bindings::callJNIMethod):
        * bridge/jni/JavaType.h:
        * bridge/jni/v8/JNIUtilityPrivate.cpp:
        (JSC::Bindings::convertNPVariantToJavaValue):
        (JSC::Bindings::convertJavaValueToNPVariant):
        (JSC::Bindings::jvalueToJavaValue):
        (JSC::Bindings::javaValueToJvalue):
        * bridge/jni/v8/JNIUtilityPrivate.h:
        * bridge/jni/v8/JavaNPObjectV8.cpp:
        (JSC::Bindings::JavaNPObjectInvoke):
        (JSC::Bindings::JavaNPObjectGetProperty):
        * bridge/jni/v8/JavaValueV8.h: Added.
        (JSC::Bindings::JavaValue::JavaValue):

2011-03-28  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Use String instead of CString as return value of openTemporaryFile
        https://bugs.webkit.org/show_bug.cgi?id=55332

        We usually store all paths as UTF-16. Do this for temporary files too.

        * WebCore.exp.in
        * platform/FileSystem.h:
        * platform/android/FileSystemAndroid.cpp:
        * platform/brew/FileSystemBrew.cpp:
        * platform/efl/FileSystemEfl.cpp:
        * platform/gtk/FileSystemGtk.cpp:
        * platform/haiku/FileSystemHaiku.cpp:
        * platform/mac/FileSystemMac.mm:
        * platform/qt/FileSystemQt.cpp:
        * platform/win/FileSystemWin.cpp:
        * platform/wince/FileSystemWinCE.cpp:
        * platform/wx/FileSystemWx.cpp:
        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::destroyStream):
        * plugins/PluginStream.h:

2011-03-28  Jeff Johnson  <opendarwin@lapcatsoftware.com>

        Reviewed by Pavel Feldman.

        Web Inspector: empty, non-functional window
        https://bugs.webkit.org/show_bug.cgi?id=56354

        Check whether DOM local storage is enabled
        before attempting to access window.localStorage.

        No new tests.

        * inspector/front-end/Settings.js:
        (WebInspector.Settings.prototype.findSettingForAllProjects):
        (WebInspector.Settings.prototype._get):
        (WebInspector.Settings.prototype._set):

2011-03-28  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=57286 Alternative fix for: 
        Horizontal scroller stops appearing after going Forward
        -and corresponding-
        <rdar://problem/9026946>

        This patch rolls out revision 79053 and fixes the same bug in a  better way.

        New function resetScrollbarsAndClearContentsSize() calls resetScrollbars() and then 
        sets the contents size to 0. This is called when a document is going into the page 
        cache.
        * dom/Document.cpp:
        (WebCore::Document::setInPageCache):
        (WebCore::FrameView::resetScrollbarsAndClearContentsSize):

        Roll-out of 79053.
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::layout):
        * page/FrameView.h:

2011-03-28  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Antti Koivisto.

        fix style sharing with :any and sibling selectors
        https://bugs.webkit.org/show_bug.cgi?id=57211

        Test: fast/css/sibling-selectors.html

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

2011-03-27  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Antti Koivisto.

        fix :-webkit-any(:last-child)
        https://bugs.webkit.org/show_bug.cgi?id=57207

        We were passing the wrong arguments to checkSelector. Also, we were not
        passing through the encounteredLink bool.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * css/CSSStyleSelector.h:

2011-03-27  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Antti Koivisto.

        fix :-webkit-any(:last-child)
        https://bugs.webkit.org/show_bug.cgi?id=57207

        We were passing the wrong arguments to checkSelector. Also, we were not
        passing through the encounteredLink bool.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * css/CSSStyleSelector.h:

2011-03-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        REGRESSION(r82152): fast/dom/HTMLAnchorElement/set-href-attribute-pathname.html
        https://bugs.webkit.org/show_bug.cgi?id=57291

        * platform/KURL.cpp:
        (WebCore::KURL::parse): Instead of considering URLs with
        credentials but no host invalid, consider them to have a host
        ending in @ (which fails down the line)/

2011-03-28  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix some problems of the appearance of form validation message bubble.
        https://bugs.webkit.org/show_bug.cgi?id=57208

        No new tests. Validation message bubble appearance is not testable
        because it depends on a timer.

        * css/html.css:
        (::-webkit-validation-bubble):
        (::-webkit-validation-bubble-message):
        (::-webkit-validation-bubble-arrow):
        (::-webkit-validation-bubble-arrow-clipper):
          - Explicitly set margin, padding, and color.
          - Make the shadow darker.
          - Make the background color darker.
          - Make opacity larger.
          - Make the border color lighter.
          - Add inset shadows
          - Change the implementation of an arrow.
            Stop making a right triangle by the border trick.
            Use -webkit-transform instead.
          - Make min-width workable by changing display property of
            -webkit-validation-bubble to "inline-block".
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree):
          Change the node structure. Before this change, -webkit-validation-bubble
          had three DIVs inside. After this change, it has two DIVs;
          -webkit-validation-bubble-arrow-clipper and
          -webkit-validation-bubble-message, and
          -webkit-validation-bubble-arrow-clipper contains
          -webkit-validation-bubble-arrow.

2011-03-28  Enrica Casucci  <enrica@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION: Can't enter pasted with context or Edit menu text in search or address field in the browser.
        https://bugs.webkit.org/show_bug.cgi?id=57275
        <rdar://problem/8246691>

        We need to classify cut and paste actions as user typing actions even when
        the action is triggered by a context menu selection to
        allow the propagation of the textDidChangeInTextField event.

        * editing/EditorCommand.cpp:
        The following methods have been modified to properly set up
        the UserTypingGestureAction when the command source is the
        menu or a key binding sequence.
        (WebCore::executeCut):
        (WebCore::executePaste):
        (WebCore::executePasteAndMatchStyle):
        (WebCore::executePasteAsPlainText):
        (WebCore::executeDelete):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Changed to
        call execute command instead of referring to the specific method in
        the editor class.

2011-03-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        instanceof Array test fails when using iframes
        https://bugs.webkit.org/show_bug.cgi?id=17250

        Update for new function and date apis

        Test: fast/js/js-constructors-use-correct-global.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsDateOrNull):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):

2011-03-28  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=57124 When the scroller style is 
        changed via delegate method, the page needs a full relayout and repaint
        -and corresponding-
        <rdar://problem/9059129>

        Call into WebKitSystemInterface to associate the new painter with the existing 
        painter controller. Reset the scrollbar frame rects to the new thickness -- normally 
        this only happens when a scrollbar is created, so we have to reset the thickness 
        here to pick up the new theme thickness. Finally, force a full relayout and style 
        recall with setNeedsRecalcStyleInAllFrames()
        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPainterControllerDelegate scrollerImpPair:updateScrollerStyleForNewRecommendedScrollerStyle:]):

        setNeedsRecalcStyleInAllFrames() used to be a static method in Settings.cpp. This 
        patch moves it to be a member function on Page so that it can be called from 
        FrameView when the scrollbar style changes.
        * page/FrameView.cpp:
        (WebCore::FrameView::setNeedsRecalcStyleInAllFrames):
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::setNeedsRecalcStyleInAllFrames):
        * page/Page.h:
        * page/Settings.cpp:
        (WebCore::Settings::setStandardFontFamily):
        (WebCore::Settings::setFixedFontFamily):
        (WebCore::Settings::setSerifFontFamily):
        (WebCore::Settings::setSansSerifFontFamily):
        (WebCore::Settings::setCursiveFontFamily):
        (WebCore::Settings::setFantasyFontFamily):
        (WebCore::Settings::setMinimumFontSize):
        (WebCore::Settings::setMinimumLogicalFontSize):
        (WebCore::Settings::setDefaultFontSize):
        (WebCore::Settings::setDefaultFixedFontSize):
        (WebCore::Settings::setTextAreasAreResizable):
        (WebCore::Settings::setAuthorAndUserStylesEnabled):
        (WebCore::Settings::setFontRenderingMode):
        (WebCore::Settings::setAcceleratedCompositingEnabled):
        (WebCore::Settings::setShowDebugBorders):
        (WebCore::Settings::setShowRepaintCounter):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::setNeedsRecalcStyleInAllFrames):

2011-03-28  Dirk Pranke  <dpranke@chromium.org>

        RS=Tony Chang.

        r81977 moved FontPlatformData.h from
        WebCore/platform/graphics/cocoa to platform/graphics. This
        change updates the chromium build accordingly.

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

        * platform/graphics/chromium/CrossProcessFontLoading.mm:

2011-03-28  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        MediaPlayerPrivateAVFoundation should report that it supportsFullScreen()
        https://bugs.webkit.org/show_bug.cgi?id=57249

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::supportsFullscreen):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

2011-03-28  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        AVFoundation can indeed support full screen.

        MediaPlayerPrivateAVFoundation should report that it supportsFullScreen()
        https://bugs.webkit.org/show_bug.cgi?id=57249

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::supportsFullscreen): Return true if using
            the new full screen APIs.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

2011-03-28  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        http streams don't always display video with AVFoundation backend
        https://bugs.webkit.org/show_bug.cgi?id=57203

        No new tests, we don't currently have tests for http live streams. Changes verified manually.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer): Initialize m_shouldPrepareToRender.
        (WebCore::MediaPlayer::loadWithNextMediaEngine): Call prepareForRendering on new engine
            if m_shouldPrepareToRender is set.
        (WebCore::MediaPlayer::prepareForRendering): Set m_shouldPrepareToRender.
        * platform/graphics/MediaPlayer.h:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::isReadyForVideoSetup): Don't return true until
            m_isAllowedToRender has been set.
        (WebCore::MediaPlayerPrivateAVFoundation::prepareForRendering): Always call setUpVideoRendering,
            it has logic to figure out when setup is required.
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates): Call setUpVideoRendering when we aren't
            using the preferred rendering mode because if we get a file's metadata between the
            time supportsAcceleratedRendering() and paint() are called, we will allocate a software
            renderer even when we prefer a layer backed renderer.
        (WebCore::MediaPlayerPrivateAVFoundation::movieLoadType): Return "unknown" until we have metadata.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): Use itemKVOProperties() instead of
            an explicit list of key path names.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerForURL): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata): metadataKeyNames renamed
            to assetMetadataKeyNames, return an NSArray instead of a CFArrayRef since that is what the
            callers need.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformDuration): Return the duration of the 
            player item, not the asset, because AVAsset.duration always returns an indefinite time
            for all streaming files.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::assetStatus): metadataKeyNames renamed
            to assetMetadataKeyNames.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintCurrentFrameInContext): Do nothing until
            metadata is available.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paint): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Split size calculation logic off
            into sizeChanged().
        (WebCore::MediaPlayerPrivateAVFoundationObjC::sizeChanged): New. Use AVPlayerItem.presentationSize
            until tracks is non-NULL so we have a size as early as possible.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::assetMetadataKeyNames): Renamed from metadataKeyNames.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::itemKVOProperties): New, return an array of
            KVO observable properties.
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): Respond to 
            presentationSize change.

2011-03-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Search field focus ring is missing
        https://bugs.webkit.org/show_bug.cgi?id=57270
        <rdar://problem/8765555>

        Add an _automaticFocusRingDisabled method which returns YES.

        * platform/mac/ThemeMac.mm:
        (-[WebCoreFlippedView _automaticFocusRingDisabled]):

2011-03-28  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Move more events to EventDispatcher.
        https://bugs.webkit.org/show_bug.cgi?id=57247

        No functional changes, covered by existing tests.

        * dom/EventDispatcher.cpp:
        (WebCore::eventTargetRespectingSVGTargetRules): Made a static function,
            since it's not used anywhere outside of the EventDispatcher.
        (WebCore::EventDispatcher::dispatchScopedEvent): Moved from Node.cpp.
        (WebCore::EventDispatcher::dispatchKeyEvent): Ditto.
        (WebCore::EventDispatcher::dispatchWheelEvent): Ditto.
        (WebCore::EventDispatcher::dispatchEvent): Changed to use eventTargetRespectingSVGTargetRules
            as a static function.
        * dom/EventDispatcher.h: Updated decls.
        * dom/Node.cpp:
        (WebCore::Node::dispatchScopedEvent): Replaced with calling EventDispatcher.
        (WebCore::Node::dispatchKeyEvent): Ditto.
        (WebCore::Node::dispatchWheelEvent): Ditto.

2011-03-28  Adele Peterson  <adele@apple.com>

        Reviewed by Eric Seidel.

        Fix for <rdar://problem/9112694> REGRESSION (r79411): "Check grammar with spelling" context menu doesn't check as you type
        https://bugs.webkit.org/show_bug.cgi?id=57173

        Test: editing/spelling/grammar.html

        * WebCore.exp.in: Add symbol for new selectionStartHasMarkerFor method.
        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Every use of paragraph is specific to spelling or grammar, 
         so to avoid confusion, we should explicitly use spellingParagraph or grammarParagraph.  In the case of this bug, 
         when we're consider ambiguous boundary characters (characters that could indicate word boundaries, but are used 
         in the middle of words too, like apostrophes), we should use the use the spellingParagraph since the spellingParagraph 
         is the only one operated on when this information is used.
         (WebCore::Editor::selectionStartHasMarkerFor): Changed from selectionStartHasSpellingMarkerFor so it can check for grammar as well as spelling.
        * editing/Editor.h:

2011-03-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8895977> REGRESSION: multicol crashes with positioned elements
        https://bugs.webkit.org/show_bug.cgi?id=48983

        Test: fast/multicol/paginated-layer-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintPaginatedChildLayer): Bring the logic for finding pagintating layers
        into sync with updatePagination() after r68069.
        (WebCore::RenderLayer::hitTestPaginatedChildLayer): Ditto.

2011-03-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler' .

        URLSs with non-empty username but empty hostname treat first path segment as hostname, potentially enabling XSS
        https://bugs.webkit.org/show_bug.cgi?id=57220

        Test: http/tests/uri/username-with-no-hostname.html

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

2011-03-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        script-src should block inline event handlers
        https://bugs.webkit.org/show_bug.cgi?id=57212

        I considered wrapping this into the canExecute check, but that approach
        would require passing that function a bunch of context information to
        behave correctly once we add support for the "options" directive that
        re-enables these features.

        Test: http/tests/security/contentSecurityPolicy/script-src-none-inline-event.html

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
            - This function was a mess.  I couldn't resist cleaning it up a
              bunch.  Notice that we ASSERT at the beginning of the function
              that scriptExecutionContext is a document and that both ways of
              getting the global object are the same when document->frame() is
              non-zero because the document must be active and there is a
              one-to-one relation between Frames and active Documents.
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers):
        * page/ContentSecurityPolicy.h:

2011-03-28  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        ResourceError::certificate() should return a PCCERT_CONTEXT
        https://bugs.webkit.org/show_bug.cgi?id=57262

        * platform/network/cf/ResourceError.h: certificate() now returns a PCCERT_CONTEXT.
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::certificate): Added.

2011-03-28  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser and Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57221, memory corruption/crashes when positioned objects
        occur at the end of a line.
        
        The old code and new code for dealing with a trailing space object midpoint manipulated a raw
        array instead of the Vector. Otherwise this corruption would have been caught prior to check-in.
        
        I have patched the code to only go through the Vector and to make it handle the case that led to
        the corruption. Trailing positioned objects can occur both prior to and following the trailing space
        object's midpoint, so we have to be prepared to deal with both cases.
        
        This is already tested by fast/block/positioning/052.html, and that test now properly progresses
        like the other positioning tests did.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2011-03-28  Andrei Popescu  <andreip@google.com>

        Reviewed by Steve Block.

        V8IDBKeyCustom.cpp does not compile with INDEXED_DATABASE disabled
        https://bugs.webkit.org/show_bug.cgi?id=57100

        Close the ENABLE guard and the namespace in the right order.

        No new tests, just cleanup.

        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        * bindings/v8/custom/V8IDBKeyCustom.cpp:

2011-03-28  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        Include certificate when sending a WebCore::ResourceError to UI process on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57195

        Add support for tracking the certificate in WebCore::ResourceError.

        * platform/network/ResourceErrorBase.cpp:
        (WebCore::ResourceErrorBase::copy): Call platformCopy() to copy platform-specific fields.
        * platform/network/ResourceErrorBase.h:
        (WebCore::ResourceErrorBase::platformCopy): Added.
        * platform/network/cf/ResourceError.h: Added constructor that takes certificate data, shadowed platformCopy, added m_certificate.
        (WebCore::ResourceError::certificate): Added.
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::ResourceError): Added constructor that takes certificate data.
        (WebCore::ResourceError::platformLazyInit): Read any certificate from the userInfo dictionary.
        (WebCore::ResourceError::platformCopy): Copy m_certificate.
        (WebCore::ResourceError::cfError): Add any certificate data to the userInfo dictionary in the CFErrorRef.

2011-03-28  Jessie Berlin  <jberlin@apple.com>

        Rubber-stamped by Adam Roben.

        Add an extra newline to the end of the generated Inspector.idl file so that it does not
        trigger the Windows "no newline at at end of file" warning.

        * inspector/generate-inspector-idl:

2011-03-28  Csaba Osztrogonác  <ossy@webkit.org>

        Buildfix after r82125.

        [Qt] QtWebKit will not compile with QT_ASCII_CAST_WARNINGS enabled
        https://bugs.webkit.org/show_bug.cgi?id=57087

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp: Convert all char* to QString explicitly.
        (WebCore::MediaPlayerPrivateQt::getSupportedTypes):
        (WebCore::MediaPlayerPrivateQt::commitLoad):

2011-03-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82099.
        http://trac.webkit.org/changeset/82099
        https://bugs.webkit.org/show_bug.cgi?id=57245

        Breaks live edits tests on chromium. (Requested by pfeldman on
        #webkit).

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.editScriptSource):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._handleSave):
        (WebInspector.SourceFrameDelegate.prototype.editScriptSource):

2011-03-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: brush up and rename debugger domain functions.
        https://bugs.webkit.org/show_bug.cgi?id=57240

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::postWorkerNotificationToFrontend):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointsActive):
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::editScriptSource):
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsState):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::failedToParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::didContinue):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.setBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpointBySourceId):
        (WebInspector.DebuggerModel.prototype.removeBreakpoint):
        (WebInspector.DebuggerModel.prototype._didEditScriptSource):
        (WebInspector.DebuggerDispatcher.prototype.paused):
        (WebInspector.DebuggerDispatcher.prototype.resumed):
        (WebInspector.DebuggerDispatcher.prototype.scriptParsed):
        (WebInspector.DebuggerDispatcher.prototype.scriptFailedToParse):
        (WebInspector.DebuggerDispatcher.prototype.breakpointResolved):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.toggleBreakpointsClicked):
        * inspector/front-end/inspector.js:
        (WebInspector.didCreateWorker):
        (WebInspector.didDestroyWorker):

2011-03-28  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/57239> Use forward class declaration instead of including header

        Reviewed by Dan Bernstein.

        Adding a "using namespace WebCore;" statement in a header may
        cause issues when <WebCore/Length.h> is included before
        <CoreText/CoreText.h>.

        Length.h defines the LengthType enum with a 'Fixed' value.
        CoreText.h includes MacTypes.h, which has a
        "typedef SInt32 Fixed;" statement, and then CoreText.h includes
        other headers that also use 'Fixed', but expect the typedef to
        be defined, not the enum.  If another header includes
        "using namespace WebCore;" before CoreText.h, the
        following compiler errors result (paths abbreviated):

            CoreText.framework/Headers/SFNTLayoutTypes.h:689: error: reference to 'Fixed' is ambiguous
            MacTypes.h:184: error: candidates are: typedef SInt32 Fixed
            Length.h:37: error:                 WebCore::LengthType WebCore::Fixed
            SFNTLayoutTypes.h:689: error: 'Fixed' does not name a type

        * platform/mac/HTMLConverter.h: Use forward declaration of
        DocumentLoader class instead of including header.  Remove the
        unused "using namespace WebCore;" statement.

2011-03-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Introduce EventDispatcher, the new common way to fire events.
        https://bugs.webkit.org/show_bug.cgi?id=57168

        The goal here is two-fold:
        1) reduce the need to randomly sprinkle guards around the dispatch code
        by creating a well-scoped abstraction for dispatching events.
        2) create a place where fiddly event-related things like creating event
        contexts for ancestors can be done lazily.

        Additionally, with all the free-standing static functions, this code was
        just begging to come out of Node.cpp.

        The first step is a near-mechanical extraction of mouse-related events
        from Node.cpp to EventDispatcher. For now, the call sites are just
        replaced with invoking EventDispatcher. Later, we can remove these methods
        from Node.

        Refactoring, no functional changes.

        * Android.mk: Added EventDispatcher to build system.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/DOMAllInOne.cpp: Ditto.
        * dom/EventDispatcher.cpp: Added.
        * dom/EventDispatcher.h: Added.
        * dom/Node.cpp:
        (WebCore::Node::dispatchScopedEvent): Replaced to use EventDispatcher.
        (WebCore::Node::dispatchEvent): Ditto.
        (WebCore::Node::dispatchMouseEvent): Ditto.
        (WebCore::Node::dispatchSimulatedClick): Ditto.
        * dom/Node.h: Updated decls.

2011-03-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9003382> Incomplete repaint of overflow in flipped lines writing modes
        https://bugs.webkit.org/show_bug.cgi?id=57197

        Tests: fast/repaint/overflow-flipped-writing-mode-block.html
               fast/repaint/overflow-flipped-writing-mode-table.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint): Flip the overflow rect before testing for intersection
        with the damage rect.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint): Made the intersection check more like the one in
        RenderBlock::paint().

2011-03-28  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Ryosuke Niwa.

        move directionOfEnclosingBlock() to be global so that it could be reused.
        https://bugs.webkit.org/show_bug.cgi?id=57233.

        Provide global function directionOfEnclosingBlock(Node*) so that it could be
        reused in SelectionController and other functionalities that need enclosing
        block's direcionality, such as moving caret by word in visual order.
      
        No new functionality, so no new tests.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::directionOfEnclosingBlock):
        * editing/htmlediting.cpp:
        (WebCore::directionOfEnclosingBlock):
        * editing/htmlediting.h:

2011-03-28  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Benjamin Poulain.

        [Qt] fast/canvas/webgl/context-attributes-alpha-depth-stencil-antialias.html fails
        https://bugs.webkit.org/show_bug.cgi?id=56825

        Fixes for context attribute handling:
        - Initialize depth and stencil buffer depending on whether they
        are enabled in context attributes.
        - Always enable depth buffer when stencil buffer is enabled.
        - Disable stencil buffer on OpenGL ES 2.0
        - Cleaned up clutter code from initialization. Made code paths 
        more sane.
        - Clear mask is now set correctly in reshape().

        Tests: fast/canvas/webgl/context-attributes-alpha-depth-stencil-antialias.html

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::isValid):
        (WebCore::GraphicsContext3DInternal::GraphicsContext3DInternal):
        (WebCore::GraphicsContext3DInternal::reshape):
        (WebCore::GraphicsContext3DInternal::paint):
        (WebCore::GraphicsContext3DInternal::getProcAddress):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::GraphicsContext3D::bindFramebuffer):

2011-03-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: rename network domain events from didHappenSomething to somethingHappened.
        https://bugs.webkit.org/show_bug.cgi?id=57226

        * inspector/Inspector.json:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::markResourceAsCached):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didReceiveContentLength):
        (WebCore::InspectorResourceAgent::didFinishLoading):
        (WebCore::InspectorResourceAgent::didFailLoading):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::setInitialContent):
        (WebCore::InspectorResourceAgent::didCommitLoad):
        (WebCore::InspectorResourceAgent::frameDetachedFromParent):
        (WebCore::InspectorResourceAgent::didCreateWebSocket):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorResourceAgent::didCloseWebSocket):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype.requestWillBeSent):
        (WebInspector.NetworkDispatcher.prototype.resourceMarkedAsCached):
        (WebInspector.NetworkDispatcher.prototype.responseReceived):
        (WebInspector.NetworkDispatcher.prototype.dataReceived):
        (WebInspector.NetworkDispatcher.prototype.loadingFinished):
        (WebInspector.NetworkDispatcher.prototype.loadingFailed):
        (WebInspector.NetworkDispatcher.prototype.resourceLoadedFromMemoryCache):
        (WebInspector.NetworkDispatcher.prototype.frameDetached):
        (WebInspector.NetworkDispatcher.prototype.initialContentSet):
        (WebInspector.NetworkDispatcher.prototype.frameNavigated):
        (WebInspector.NetworkDispatcher.prototype.webSocketCreated):
        (WebInspector.NetworkDispatcher.prototype.webSocketWillSendHandshakeRequest):
        (WebInspector.NetworkDispatcher.prototype.webSocketHandshakeResponseReceived):
        (WebInspector.NetworkDispatcher.prototype.webSocketClosed):

2011-03-28  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: [Chromium] Delete native CPU profiles and heap snapshots on binding disposal.
        https://bugs.webkit.org/show_bug.cgi?id=57099

        * bindings/v8/ScriptHeapSnapshot.cpp:
        (WebCore::ScriptHeapSnapshot::~ScriptHeapSnapshot):
        * bindings/v8/ScriptHeapSnapshot.h:
        * bindings/v8/ScriptProfile.cpp:
        (WebCore::ScriptProfile::~ScriptProfile):
        * bindings/v8/ScriptProfile.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::resetState):

2011-03-24  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: fix console messages positions in formatted scripts.
        https://bugs.webkit.org/show_bug.cgi?id=57010

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype.addConsoleMessage.didRequestMapping):
        (WebInspector.DebuggerPresentationModel.prototype.addConsoleMessage):
        (WebInspector.DebuggerPresentationModel.prototype.clearConsoleMessages):
        (WebInspector.DebuggerPresentationModel.prototype._reset):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype.addConsoleMessage):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.addConsoleMessage):
        (WebInspector.ScriptsPanel.prototype.clearConsoleMessages):
        (WebInspector.ScriptsPanel.prototype._consoleMessageAdded):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype._sourceFrameLoaded):
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.addMessage):
        (WebInspector.SourceFrame.prototype._addExistingMessagesToSource):
        (WebInspector.SourceFrame.prototype.addMessageToSource):

2011-03-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor ResourceTreeModel to remove poor dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=57186

        - ResourceTreeModel is now event target (Object)
        - There is no ResourceTreeModel -> UI dependencies
        - NetworkManager -> ResourceTreeModel dependencies has been removed
        - NetworkManager is no longer dealing with the resources tree, it is only responsible for network events
        - ResourceTreeModel requests tree structure from the backend separately
        - Cached resources tree payload is now limited to url and type (no headers involved)
        - Resources tree is being rendered lazily upon request from the panel.

        * inspector/Inspector.json:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::resourceContent):
        (WebCore::InspectorResourceAgent::resourceContentBase64):
        (WebCore::buildObjectForFrameTree):
        (WebCore::InspectorResourceAgent::enable):
        (WebCore::InspectorResourceAgent::getCachedResources):
        (WebCore::InspectorResourceAgent::getResourceContent):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::resourceStyleSheetText):
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.sendMessageToBackend):
        (.WebInspector.InspectorFrontendHostStub.prototype.loadSessionSetting):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager):
        (WebInspector.NetworkManager.prototype.frontendReused):
        (WebInspector.NetworkManager.prototype.requestContent):
        (WebInspector.NetworkDispatcher):
        (WebInspector.NetworkDispatcher.prototype.didReceiveResponse):
        (WebInspector.NetworkDispatcher.prototype.didLoadResourceFromMemoryCache):
        (WebInspector.NetworkDispatcher.prototype.frameDetachedFromParent):
        (WebInspector.NetworkDispatcher.prototype.didCommitLoadForFrame):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype._updateSummaryBar):
        (WebInspector.NetworkPanel.prototype._onFrameCommitLoad):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype.frontendReused):
        (WebInspector.ResourceTreeModel.prototype._processCachedResources):
        (WebInspector.ResourceTreeModel.prototype._addOrUpdateFrame):
        (WebInspector.ResourceTreeModel.prototype.frames):
        (WebInspector.ResourceTreeModel.prototype.subframes):
        (WebInspector.ResourceTreeModel.prototype.resources):
        (WebInspector.ResourceTreeModel.prototype._onCommitLoad):
        (WebInspector.ResourceTreeModel.prototype._onFrameDetachedFromParent):
        (WebInspector.ResourceTreeModel.prototype._onResourceUpdated):
        (WebInspector.ResourceTreeModel.prototype._addResourceToFrame):
        (WebInspector.ResourceTreeModel.prototype.resourceForURL):
        (WebInspector.ResourceTreeModel.prototype._bindResourceURL):
        (WebInspector.ResourceTreeModel.prototype._clearChildFramesAndResources):
        (WebInspector.ResourceTreeModel.prototype._clearResources):
        (WebInspector.ResourceTreeModel.prototype._callForFrameResources):
        (WebInspector.ResourceTreeModel.prototype._unbindResourceURL):
        (WebInspector.ResourceTreeModel.prototype._addFramesRecursively):
        (WebInspector.ResourceTreeModel.prototype._createResource):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.show):
        (WebInspector.ResourcesPanel.prototype._populateResourceTree.populateFrame):
        (WebInspector.ResourcesPanel.prototype._populateResourceTree):
        (WebInspector.ResourcesPanel.prototype._frameAdded):
        (WebInspector.ResourcesPanel.prototype._frameDetached):
        (WebInspector.ResourcesPanel.prototype._resourceAdded):
        (WebInspector.ResourcesPanel.prototype._frameNavigated):
        (WebInspector.FrameTreeElement.prototype.setTitles):
        * inspector/front-end/inspector.js:
        (WebInspector.frontendReused):

2011-03-27  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        WebKit's behavior for text-align inherit differs from other browsers
        https://bugs.webkit.org/show_bug.cgi?id=56377

        The bug was caused by WebKit's resolving text-align: start and text-align: end too early.
        As discussed on the bug, when text-align: start and text-align: end are inherited by descendent nodes,
        the alignment of the text in those nodes should be determined based on the directionality of the text,
        not by the directionality of the ancestor node from which text-align property is inherited.

        Fixed the bug by introducing new enum values to ETextAlign: TASTART and TAEND. These two values will
        align text to the left in a LTR context and to the right in a RTL context respectively.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Added the support for TASTART and TAEND.
        (WebCore::CSSPrimitiveValue::operator ETextAlign): Ditto.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): No longer processes CSSValueStart and CSSValueEnd.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::localCaretRect): Added the support for TASTART and TAEND.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Added the support for TASTART and TAEND.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect): Ditto.
        * rendering/style/RenderStyle.h: ETextAlign now has 10 values and requires 4 bits.
        * rendering/style/RenderStyleConstants.h: Added TASTART and TAEND to ETextAlign.

2011-03-28  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: fix breakpoints positions in formatted scripts.
        https://bugs.webkit.org/show_bug.cgi?id=56931

        Add async requestMapping method to SourceFile interface as required for populating
        breakpoints sidebar pane when in "format all scripts" mode.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.continueToLine):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.PresentationBreakpoint): Breakpoint wrapper for UI.
        (WebInspector.PresentationBreakpoint.prototype.get sourceFileId):
        (WebInspector.PresentationBreakpoint.prototype.get lineNumber):
        (WebInspector.PresentationBreakpoint.prototype.get condition):
        (WebInspector.PresentationBreakpoint.prototype.get enabled):
        (WebInspector.PresentationBreakpoint.prototype.get url):
        (WebInspector.PresentationBreakpoint.prototype.get resolved):
        (WebInspector.PresentationBreakpoint.prototype.loadSnippet):
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter.prototype.formatContent.didFormatChunks):
        (WebInspector.ScriptFormatter.prototype.formatContent):
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile.prototype.requestSourceMapping):
        (WebInspector.FormattedSourceFile.prototype.requestSourceMapping):
        (WebInspector.FormattedSourceFile.prototype._didRequestContent):
        (WebInspector.SourceMapping):
        (WebInspector.SourceMapping.prototype.scriptLocationToSourceLocation):
        (WebInspector.SourceMapping.prototype.sourceLocationToScriptLocation):
        (WebInspector.FormattedSourceMapping):
        (WebInspector.FormattedSourceMapping.prototype.scriptLocationToSourceLocation):
        (WebInspector.FormattedSourceMapping.prototype.sourceLocationToScriptLocation):
        (WebInspector.FormattedSourceMapping.prototype._convertPosition):

2011-03-28  Nancy Piedra  <nancy.piedra@nokia.com>

        Reviewed by Csaba Osztrogonác.

        This patch fixes linking errors on Qt Webkit Windows MinGW builds.
        This patch sets the BUILDING_WEBKIT & QT_MAKEDLL macros so that
        QWEBKIT_EXPORT is defined as follows:
        #define QWEBKIT_EXPORT Q_DECL_EXPORT

        No new tests needed since only changing .pro file.

        * WebCore.pro:

2011-03-28  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: source frame should show the error to user when live edit is failed
        https://bugs.webkit.org/show_bug.cgi?id=57002

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.editScriptSource):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._handleSave.didSaveScriptSource):
        (WebInspector.SourceFrame.prototype._handleSave):
        (WebInspector.SourceFrameDelegate.prototype.editScriptSource):

2011-03-26  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Expose the AtkValue interface for WAI-ARIA sliders
        https://bugs.webkit.org/show_bug.cgi?id=56655

        Implement AtkValue interface for WAI-ARIA sliders.

        Test: platform/gtk/accessibility/aria-slider-required-attributes.html

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification): Emit the
        'property-change::accessible-value' signal when needed.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (core): New, returns a core object from an AtkValue.
        (webkitAccessibleValueGetCurrentValue): New, implements AtkValue.
        (webkitAccessibleValueGetMaximumValue): Ditto.
        (webkitAccessibleValueGetMinimumValue): Ditto.
        (webkitAccessibleValueSetCurrentValue): Ditto.
        (webkitAccessibleValueGetMinimumIncrement): Ditto.
        (atkValueInterfaceInit): Ditto.
        (GetAtkInterfaceTypeFromWAIType): Add ATK_TYPE_VALUE.
        (getInterfaceMaskFromObject): Set the WAI_VALUE bit for sliders.

2011-03-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Assigning location.path to something that doesn't start with / mangles the authority
        https://bugs.webkit.org/show_bug.cgi?id=57209
        <rdar://problem/9195132>
        
        Tests: http/tests/uri/assign-path-with-leading-slash.html
               http/tests/uri/assign-path-without-leading-slash.html

        * platform/KURL.cpp:
        (WebCore::KURL::setPath): If the new path does not have a leading slash, add one.

2011-03-28  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Extract functions to update logical width from computeInlineDirectionPositionsForLine
        https://bugs.webkit.org/show_bug.cgi?id=57213

        Extracted updateLogicalWidthForLeftAlignedBlock, updateLogicalWidthForRightAlignedBlock,
        and updateLogicalWidthForCenterAlignedBlock from computeInlineDirectionPositionsForLine.

        They are used to update logical widths, logical left, and total logical width for left,
        right, and center aligned blocks.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::updateLogicalWidthForLeftAlignedBlock):
        (WebCore::updateLogicalWidthForRightAlignedBlock):
        (WebCore::updateLogicalWidthForCenterAlignedBlock):
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):

2011-03-28  Evan Martin  <evan@chromium.org>

        Reviewed by Ryosuke Niwa.

        Refactor duplicate code in HTMLTextElement
        https://bugs.webkit.org/show_bug.cgi?id=57215

        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::childrenChanged):
        This method did an equivalent loop to the text() method on
        the same object.

2011-03-27  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Don't call WebSocket::didClose() more than once.
        https://bugs.webkit.org/show_bug.cgi?id=57081

        If WebSocket close() is called, and connection is established, then
        it will call didClose() that resets m_channel to 0.
        After that, when connection is closed, WebSocketChannel will call
        didClose for the WebSocket instance.

        Call WebSocketChannel::disconnect() before m_channel = 0 to make sure
        WebSocketChannel suppress the second didClose().

        Test: http/tests/websocket/tests/close-unref-websocket.html

        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::didClose):

2011-03-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix script-src redirect handling
        https://bugs.webkit.org/show_bug.cgi?id=57196

        Resource-loading requirements in CSP apply to each hop in the redirect
        chain.  To make that work properly, we need to move enforcement into
        the loader.  Fortunately, we already have a choke-point in the loader
        for enforcing this kind of policy.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestScript):
        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLScriptRunnerHost.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowScriptFromSource):
        * page/ContentSecurityPolicy.h:

2011-03-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Full Screen: disable keyboard access by default
        https://bugs.webkit.org/show_bug.cgi?id=56684

        Pass whether keyboard access was requested up to ChromeClient when asking
        if fullscreen mode is supported.

        * dom/Document.cpp:
        (WebCore::Document::webkitRequestFullScreenForElement):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::supportsFullscreenForElement):

2011-03-27  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [CMake] Generate WebKitVersion.h
        https://bugs.webkit.org/show_bug.cgi?id=57128

        This file will be used for the user agent string by the CMake based ports.

        * CMakeLists.txt:

2011-03-27  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=57170  Fix last elements
        in an enum to remove a trailing comma. Sun Studio 12 CC errors out.

        Compile fix only, no actual code change.

        * dom/ExceptionCode.h:
        * editing/EditorInsertAction.h:
        * loader/FrameLoaderTypes.h:
        * platform/PlatformKeyboardEvent.h:
        * platform/ScrollTypes.h:
        * platform/graphics/BitmapImage.h:
        * platform/image-decoders/ImageDecoder.h:
        * platform/network/ProtectionSpace.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/ResourceRequestBase.h:
        * platform/text/TextCodec.h:

2011-03-27  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Nikolas Zimmermann.

        Text on path positioning at zero startOffset
        https://bugs.webkit.org/show_bug.cgi?id=56245

        Since for length 0 no previous point is set, choose epsilon
        length to get normal at starting point of the path.

        Test: svg/text/text-path-middle-align.svg

        * platform/graphics/Path.cpp:
        (WebCore::Path::normalAngleAtLength):

2011-03-27  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=57151, patch derived from set
        created by Thiago Macieria in bug https://bugs.webkit.org/show_bug.cgi?id=24932

        Fix compile issue on Solaris 10/Sun Studio 12 regarding ambiguity on ?: functions

        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::thisObject):

2011-03-26  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix.

        Fix a bug which was causing the "skip back" button to be missing, causing 
        the media layout tests to fail.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::shouldRenderMediaControlPart):

2011-03-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9180716> REGRESSION (r80582): Angle bracket rendered upright in vertical mode
        https://bugs.webkit.org/show_bug.cgi?id=57169

        Test: fast/blockflow/fallback-orientation.html

        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataForCharacter): If the font has vertical glyphs, use it, rather
        than continuing down the fallback list.

2011-03-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        Follow-up fix for crash with giant inline stylesheets - actually don't crash, and add test
        https://bugs.webkit.org/show_bug.cgi?id=56150

        Test: fast/css/giant-stylesheet-crash.html

        * dom/StyleElement.cpp:
        (WebCore::StyleElement::process):

2011-03-22  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Media controls must use full screen style when in new full screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=56851

        Add new full screen styles for the full screen media elements.

        * DerivedSources.make: Add fullScreenQuickTime.css.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * css/CSSStyleSelector.cpp: Removed loadFullScreenRulesIfNeeded().
        (WebCore::CSSStyleSelector::CSSStyleSelector): Ditto.
        (WebCore::CSSStyleSelector::styleForElement): Load full screen rules 
            if needed.
        * css/fullscreenQuickTime.css: Added.
        * css/mediaControls.css:
        * html/shadow/MediaControls.cpp:
        (WebCore::isFullScreen): Added.
        (WebCore::MediaControls::create): Add new full screen volume controls.
        (WebCore::MediaControls::updateStyle): Ditto.
        (WebCore::MediaControls::update): Ditto.
        (WebCore::MediaControls::updateVolumeSliderContainer): Ditto.
        (WebCore::MediaControls::forwardEvent): Ditto.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlFullscreenVolumeSliderElement::MediaControlFullscreenVolumeSliderElement): Added.
        (WebCore::MediaControlFullscreenVolumeSliderElement::create): Added.
        (WebCore::MediaControlFullscreenVolumeSliderElement::shadowPseudoId): Added.
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::MediaControlFullscreenVolumeMinButtonElement): Addet
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::create): Added.
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::defaultEventHandler): Added.
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::shadowPseudoId): Added.
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::MediaControlFullscreenVolumeMaxButtonElement): Added.
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::create): Added.
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::defaultEventHandler): Added.
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::shadowPseudoId): Added.
        * rendering/MediaControlElements.h:
            Added m_overridePosition.
        (WebCore::MediaControlVolumeSliderContainerElement::setOverridesPosition): Added.
        * rendering/MediaControlElements.h:
        (WebCore::MediaControlVolumeSliderContainerElement::overridesPosition): Added.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::extraFullScreenStyleSheet): Added.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::extraFullScreenStyleSheet): Added.
        (WebCore::RenderThemeMac::shouldRenderMediaControlPart): Render seek forward and backward 
            buttons.

2011-03-26  Jer Noble  <jer.noble@apple.com>

        Reviewed by Dan Bernstein.

        RenderMedia should obey the view's flattening bit.
        https://bugs.webkit.org/show_bug.cgi?id=57156

        Paint the current frame in software when the associated FrameView
        has its flattening bit set.

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::paintReplaced):

2011-03-26  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix for !ENABLE(DOM_STORAGE).

        * storage/StorageTracker.cpp:
            Added #if ENABLE(DOM_STORAGE) like in the other storage files.

2011-03-26  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Benjamin Poulain.

        [Qt] Remove GraphicsLayerTextureMapper::nativeLayer
        https://bugs.webkit.org/show_bug.cgi?id=57141

        GraphicsLayer::nativeLayer was removed in r73380.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:

2011-03-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Teach Content Security Policy how to parse source-list
        https://bugs.webkit.org/show_bug.cgi?id=54799

        This patch is larger than I would like, but I wasn't sure how to make
        it any smaller while still being reasonably testable.  I've left out
        some features (such as host wildcarding and 'self') so I can add them
        in later patches with tests.

        Test: http/tests/security/contentSecurityPolicy/source-list-parsing.html

        * bindings/ScriptControllerBase.cpp:
        * dom/ScriptElement.cpp:
        * html/parser/HTMLDocumentParser.cpp:
        * loader/FrameLoader.cpp:
            - Add include explicitly now that we're not spamming the include
              everywhere.
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
            - We need to pass the SecurityOrigin object to
              ContentSecurityPolicy so that it can resolve implicit parts of
              source patterns, such as the scheme.
        * dom/Document.h:
            - Forward declare ContentSecurityPolicy rather than including the
              header.  Technically this could be a separate change, but I was
              getting annoyed at the world re-builds.
        * page/ContentSecurityPolicy.cpp:
        (WebCore::skipExactly):
        (WebCore::skipUtil):
        (WebCore::skipWhile):
            - Clean up these parser helper functions.  We might consider moving
              them to a more general location.  They're very helpful for
              writing secure HTTP header parsers.
        (WebCore::CSPSource::CSPSource):
            - New class to represent one source in a source-list.
        (WebCore::CSPSource::matches):
        (WebCore::CSPSource::schemeMatches):
        (WebCore::CSPSource::hostMatches):
        (WebCore::CSPSource::portMatches):
        (WebCore::CSPSource::isSchemeOnly):
            - Currently we represent scheme-only sources using with an empty
              m_host.  Another approach I considered was using another bool,
              but that seemed slighly messier.
        (WebCore::CSPSourceList::CSPSourceList):
            - CSPSourceList doesn't need to ref SecurityOrigin because
              CSPSourceList is owned by ContentSecurityPolicy, which holds a
              ref.
        (WebCore::CSPSourceList::parse):
        (WebCore::CSPSourceList::matches):
        (WebCore::CSPSourceList::parseSource):
        (WebCore::CSPSourceList::parseScheme):
        (WebCore::CSPSourceList::parseHost):
        (WebCore::CSPSourceList::parsePort):
            - A basic "segment and recurse" parser.  This parser causes us to
              take more branches than we need, but I don't think we need to
              squeeze every last ouch of performance out of this parser.  This
              approach is more simple than some of the other approaches I
              tried.
        (WebCore::CSPSourceList::addSourceSelf):
        (WebCore::CSPDirective::CSPDirective):
        (WebCore::CSPDirective::allows):
        (WebCore::ContentSecurityPolicy::ContentSecurityPolicy):
        (WebCore::ContentSecurityPolicy::parse):
        (WebCore::ContentSecurityPolicy::parseDirective):
        (WebCore::ContentSecurityPolicy::addDirective):
            - I couldn't resist re-writing this parser to use the helper
              functions and to match the style of the source-list parser.
        * page/ContentSecurityPolicy.h:
        (WebCore::ContentSecurityPolicy::create):
            - Accept a SecurityOrigin context object.

2011-03-26  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed EFL and WinCE build fix for r81977.

        * platform/graphics/FontPlatformData.h:

2011-03-26  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r82000.

        * platform/wince/FileSystemWinCE.cpp:
        (WebCore::openFile): Added missing function.

2011-03-25  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, don't use the new FPD implementation yet, until we can merge ours with it.

        * platform/graphics/FontPlatformData.h:

2011-03-25  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        MediaPlayerPrivateQuickTimeVisualContext should use the Application Cache during load.
        https://bugs.webkit.org/show_bug.cgi?id=57047

        No new tests.
        
        When loading a URL, checkk osee if the Appplication Cache has a version of that URL
        stored; if so, use the local path to that cached media instead of the remote URL.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::loadInternal):
        * platform/graphics/win/QTMovie.cpp:
        (QTMovie::loadPath):
        * platform/graphics/win/QTMovie.h:

2011-03-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9134330> Missing expansion before ideograph at the beginning or end of a text run
        https://bugs.webkit.org/show_bug.cgi?id=57106

        Test: fast/text/justify-ideograph-leading-expansion.html

        * platform/graphics/TextRun.h:
        Replaced TrailingExpansionBehavior enum with ExpansionBehavior flags.
        (WebCore::TextRun::TextRun): Constructors now take an expansionBehavior parameter.
        (WebCore::TextRun::allowsLeadingExpansion): Added this accessor.
        (WebCore::TextRun::allowsTrailingExpansion): Changed to use the m_expansionBehavior member.
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator): Initialize m_isAfterExpansion from the TextRun, allowing
        leading expansion when appropriate.
        (WebCore::WidthIterator::advance): Moved the last-glyph-in-run check to only apply to expansion
        after the glyph, not expansion before the glyph, since that is not trailing expansion. Added code
        to handle expansion before the first glyph.
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController): Initialize m_afterExpansion from the
        TextRun, allowing leading expansion when appropriate. Set m_runWidthSoFar to the leading expansion.
        (WebCore::ComplexTextController::offsetForPosition): Account for leading expansion.
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances): Similar to WidthIterator::advance()
        * platform/graphics/mac/ComplexTextController.h: Added m_leadingExpansion member variable.
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox): Renamed m_hasSelectedChildren to m_hasSelectedChildrenOrCanHaveLeadingExpansion
        to reflect the use of this bit by InlineTextBox.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect): Replaced calls to trailingExpansionBehavior() with expansionBehavior().
        (WebCore::InlineTextBox::paint): Ditto.
        (WebCore::InlineTextBox::paintSelection): Ditto.
        (WebCore::InlineTextBox::paintCompositionBackground): Ditto.
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker): Ditto.
        (WebCore::InlineTextBox::paintTextMatchMarker): Ditto.
        (WebCore::InlineTextBox::computeRectForReplacementMarker): Ditto.
        (WebCore::InlineTextBox::offsetForPosition): Ditto.
        (WebCore::InlineTextBox::positionForOffset): Ditto.
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::canHaveLeadingExpansion): Added this accessor.
        (WebCore::InlineTextBox::setCanHaveLeadingExpansion): Ditto.
        (WebCore::InlineTextBox::expansionBehavior): Replaced trailingExpansionBehavior() with this function,
        which also considers canHaveLeadingExpansion().
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Call setCanHaveLeadingExpansion() on
        text boxes that can have leading expansion. Avoid negative expansion.
        * rendering/RootInlineBox.cpp:
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::hasSelectedChildren): Updated for renaming of the flag.
        (WebCore::RootInlineBox::setHasSelectedChildren): Ditto.

2011-03-23  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        MediaPlayerPrivateAVFoundation should use the Application Cache during load.
        https://bugs.webkit.org/show_bug.cgi?id=56997

        No new tests.

        When loading a URL, check to see if the Application Cache has a version of that URL
        stored; if so, use the local path to that cached media instead of the remote URL.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::prepareToPlay): Check to see if the media should be loaded
            from the application cache.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerForCacheResource): Added.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): Split out from createAVPlayerForURL.

2011-03-25  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57122. Solaris 10/SunStudio 12 expect
        both sides of a ?: operation to have the same types.  Extracted from original
        https://bugs.webkit.org/show_bug.cgi?id=24932, patch 13 of 17, and originally
        created by Thiago Macieira.

        fixes a compile issue on Solaris 10/SunStudio 12

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::serverRedirectSourceForHistory):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithNavigationAction):

2011-02-03  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        MediaPlayerPrivateQTKit should use the Application Cache during load.        
        https://bugs.webkit.org/show_bug.cgi?id=53818

        No new tests.

        When loading a URL, check to see if the Application Cache has a version of that URL
        stored; if so, use that data instead of the remote URL.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::commonMovieAttributes):
        (WebCore::MediaPlayerPrivateQTKit::createQTMovie):
        (WebCore::MediaPlayerPrivateQTKit::loadInternal):

2011-03-25  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Move draw implementations to CCLayerImpl for everything except content layers
        https://bugs.webkit.org/show_bug.cgi?id=56793

        Moves the implementation of the layer's draw() function from LayerChromium subclasses to CCLayerImpl subclasses for
        all layer types except content layers.  This gets us closer to decoupling the composite step itself from updating the layers.

        The biggest change in this patch is adding a set of CCLayerImpl subclasses to implement the different drawing routines
        and moving the code from each XXXLayerChromium to CCXXXLayerImpl.  In order to render from the CCLayerImpl side all state
        needed at draw time also has to be synchronized, which is performed in pushPropertiesTo().

        On the LayerRendererChromium side there are a few changes.  I've split the updateContents calls on LayerChromiums into two operations
        tentatively named 'paintContentsIfNeeded' and 'updateCompositorResources'.  paintContents() is used for any code that calls into WebKit in order to generate
        new pixel data.  It's expected that this call may take a long period of time and may involve "odd" side effects.  updateCompositorResources() is used for
        code that needs to update the compositor's texture data or other state.  It is not expected that this callback will take long (since it's just inserting
        commands into the GL command stream, ideally) and this call is expected to have access to the compositor's context, unlike paintContents().

        The updateAndDrawLayers cycle now looks like this:
        1.) update the root content layer
        2.) update the root layer scrollbars
        3.) for each LayerChromium in tree order:
          a.) ensure a CCLayerImpl of the correct type exists for this layer
          b.) push all draw time properties from the LayerChromium to the CCLayerImpl
          c.) construct the appropriate draw transforms, render surfaces and render surface z-order sublayer lists
        4.) for each LayerChromium in tree order, paint the layer's contents
        5.) for each LayerChromium in tree order, update the associate compositor resources (textures, etc)
        6.) draw the root layer and its scrollbars
        7.) for each CCLayerImpl in render surface order, draw it

        Step 3 should really happen after step 5, but right now painting a content layer requires knowledge of the render surface properties and draw transforms
        in order to paint.  We also currently push layer properties from LayerChromium->CCLayerImpls twice now - once at 3.b and once after 5 so we can pick
        up any texture updates.  This will also get fixed when the paint dependency on render surfaces is resolved.

        I haven't modified the root layer or content layers in order to minimize conflicts with the other pending work in that area.

        Tests: compositing/

        * WebCore.gypi:
        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::createCCLayerImpl):
        (WebCore::CanvasLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::requiresClippedUpdateRect):
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        (WebCore::ContentLayerChromium::updateCompositorResources):
        (WebCore::ContentLayerChromium::bindContentsTexture):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::cleanupResources):
        (WebCore::LayerChromium::setLayerRenderer):
        (WebCore::LayerChromium::setName):
        (WebCore::LayerChromium::pushPropertiesTo):
        (WebCore::LayerChromium::dumpLayer):
        (WebCore::LayerChromium::createCCLayerImpl):
        (WebCore::LayerChromium::createCCLayerImplIfNeeded):
        (WebCore::LayerChromium::ccLayerImpl):
        (WebCore::LayerChromium::layerRenderer):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::paintContentsIfDirty):
        (WebCore::LayerChromium::updateCompositorResources):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateLayers):
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):
        (WebCore::LayerRendererChromium::paintContentsRecursive):
        (WebCore::LayerRendererChromium::updateCompositorResourcesRecursive):
        (WebCore::LayerRendererChromium::drawLayer):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::canvasLayerProgram):
        (WebCore::LayerRendererChromium::pluginLayerProgram):
        (WebCore::LayerRendererChromium::videoLayerRGBAProgram):
        (WebCore::LayerRendererChromium::videoLayerYUVProgram):
        * platform/graphics/chromium/PluginLayerChromium.cpp:
        (WebCore::PluginLayerChromium::createCCLayerImpl):
        (WebCore::PluginLayerChromium::setTextureId):
        (WebCore::PluginLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/PluginLayerChromium.h:
        (WebCore::PluginLayerChromium::textureId):
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::createCCLayerImpl):
        (WebCore::VideoLayerChromium::updateCompositorResources):
        (WebCore::VideoLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/VideoLayerChromium.h:
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp: Copied from Source/WebCore/platform/graphics/chromium/PluginLayerChromium.cpp.
        (WebCore::CCCanvasLayerImpl::CCCanvasLayerImpl):
        (WebCore::CCCanvasLayerImpl::~CCCanvasLayerImpl):
        (WebCore::CCCanvasLayerImpl::draw):
        (WebCore::CCCanvasLayerImpl::dumpLayerProperties):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.h: Copied from Source/WebCore/platform/graphics/chromium/PluginLayerChromium.h.
        (WebCore::CCCanvasLayerImpl::create):
        (WebCore::CCCanvasLayerImpl::setTextureId):
        (WebCore::CCCanvasLayerImpl::setPremultipliedAlpha):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::descendantsDrawsContent):
        (WebCore::CCLayerImpl::updateCompositorResources):
        (WebCore::CCLayerImpl::writeIndent):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::setAnchorPoint):
        (WebCore::CCLayerImpl::setAnchorPointZ):
        (WebCore::CCLayerImpl::setMasksToBounds):
        (WebCore::CCLayerImpl::setOpacity):
        (WebCore::CCLayerImpl::setPosition):
        (WebCore::CCLayerImpl::setPreserves3D):
        (WebCore::CCLayerImpl::setSublayerTransform):
        (WebCore::CCLayerImpl::setTransform):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp: Copied from Source/WebCore/platform/graphics/chromium/PluginLayerChromium.cpp.
        (WebCore::CCPluginLayerImpl::CCPluginLayerImpl):
        (WebCore::CCPluginLayerImpl::~CCPluginLayerImpl):
        (WebCore::CCPluginLayerImpl::draw):
        (WebCore::CCPluginLayerImpl::dumpLayerProperties):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.h: Copied from Source/WebCore/platform/graphics/chromium/PluginLayerChromium.h.
        (WebCore::CCPluginLayerImpl::create):
        (WebCore::CCPluginLayerImpl::setTextureId):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp: Added.
        (WebCore::CCVideoLayerImpl::CCVideoLayerImpl):
        (WebCore::CCVideoLayerImpl::~CCVideoLayerImpl):
        (WebCore::CCVideoLayerImpl::setTexture):
        (WebCore::CCVideoLayerImpl::draw):
        (WebCore::CCVideoLayerImpl::drawYUV):
        (WebCore::CCVideoLayerImpl::drawRGBA):
        (WebCore::CCVideoLayerImpl::dumpLayerProperties):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h: Copied from Source/WebCore/platform/graphics/chromium/PluginLayerChromium.h.
        (WebCore::CCVideoLayerImpl::create):
        (WebCore::CCVideoLayerImpl::setSkipsDraw):
        (WebCore::CCVideoLayerImpl::setFrameFormat):

2011-03-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Allow defineOwnProperty to work on DOMObjects
        https://bugs.webkit.org/show_bug.cgi?id=57129

        As other engines are allowing defineOwnProperty to be applied
        to host objects there's no reason for us to retain this
        restriction.

        * bindings/js/JSDOMWrapper.cpp:
        * bindings/js/JSDOMWrapper.h:

2011-03-25  Andy Estes  <aestes@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION (r70748): latest nightly builds kills AC_QuickTime.js
        https://bugs.webkit.org/show_bug.cgi?id=49016

        AC_QuickTime.js uses the common <object>/<embed> paradigm to embed the 
        QuickTime plug-in in web pages. r70748 removed our mapping of classids 
        to MIME types, which causes WebKit to fall back from the object to the 
        embed tag when QuickTime is embedded by this script. The script emits 
        the following embed tag to embed a QuickTime movie with a poster frame: 

        <embed src="poster-frame.png" target="quicktimeplayer" href="movie.mov"> 

        The expectation is that a QuickTime plug-in is instantiated to display the 
        poster frame, since QuickTime registers for many common image MIME 
        types. This is how Gecko behaves for embed. However, WebKit prefers to 
        use its native image rendering for image embeds, in which case no movie 
        is played when the poster frame is clicked. 

        Fix this by changing embed to check for a plug-in that can handle the 
        image type before rendering the image natively. This matches Gecko. 

        Test: plugins/embed-prefers-plugins-for-images.html

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::HTMLEmbedElement):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::HTMLObjectElement):
        (WebCore::HTMLObjectElement::parametersForPlugin):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::isImageType):
        (WebCore::HTMLPlugInImageElement::wouldLoadAsNetscapePlugin):
        * html/HTMLPlugInImageElement.h:
        (WebCore::HTMLPlugInImageElement::shouldPreferPlugInsForImages):
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::objectContentType):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::defaultObjectContentType):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::resourceWillUsePlugin):
        (WebCore::SubframeLoader::requestPlugin):
        (WebCore::SubframeLoader::requestObject):
        (WebCore::SubframeLoader::shouldUsePlugin):
        * loader/SubframeLoader.h:

2011-03-23  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Application Cache should save audio/ and video/ mime types as flat files
        https://bugs.webkit.org/show_bug.cgi?id=53784
        <rdar://problem/8932473>

        No new tests, as this behavior is not possible to test without changes to the MediaPlayer engines.

        Store certain mime types as flat files alongside the Application Cache database.
        This requires plumbing the saved file path from ApplicationCacheStorage through
        to ApplicationCacheResource.

        (WebCore::ApplicationCacheStorage::openDatabase): Modify the CacheResourceData schema and
            add a new DeletedCacheResources table, add a new CacheResourceDataDeleted trigger.
        (WebCore::ApplicationCacheStorage::store): Add the new path data when adding new rows in 
            CacheResourceData, and store media resources as flat files.
        (WebCore::ApplicationCacheStorage::loadCache): Pull the "path" column from CacheResourceData
            when loading cache items.
        (WebCore::ApplicationCacheStorage::remove): Call checkForDeletedResources.
        (WebCore::ApplicationCacheStorage::empty): Ditto.
        (WebCore::ApplicationCacheStorage::storeCopyOfCache): Ditto.
        (WebCore::ApplicationCacheStorage::deleteCacheGroup): Ditto.
        (WebCore::ApplicationCacheStorage::checkForDeletedResources): Walk through DeletedCacheResourceData
            looking for entries with non-empty "path" columns; if found, delete.
        (WebCore::ApplicationCacheStorage::flatFileAreaSize): Walk through CacheResourceData rows
            and sum the file size of those rows with flat file storage.
        (WebCore::ApplicationCacheStorage::verifySchemaVersion): Call deleteTables() instead of 
            clearAllTables() directly.
        (WebCore::ApplicationCacheStorage::deleteTables): Call empty() before deleting the tables,
            so that flat files get deleted.
        (WebCore::ApplicationCacheStorage::shouldStoreResourceAsFlatFile): Added.
        (WebCore::ApplicationCacheStorage::writeDataToUniqueFileInDirectory): Added.
        * loader/appcache/ApplicationCacheStorage.h:
        * platform/win/FileSystemWin.cpp:
        (WebCore::openFile): Implement openFile on Windows.

2011-03-24  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=56909
        
        Add a simplified normal flow layout path optimization for overflow recomputation
        and for positioned objects inside relative positioned containers.

        Currently there is an optimized code path for positioned objects, but as soon as
        we encounter a normal flow object in the containing block chain, we lose the
        optimization.

        This patch adds a new type of style difference called SimplifiedLayout that is
        returned when only overflow needs to be recomputed. Whenever a transform changes,
        this is the hint returned now instead of a full layout.
        
        In addition, when positioned objects need layout and start marking up the
        containing block chain, we now propagate the fact that the layout is simplified
        all the way up to the root, even when we encounter normal flow containing
        blocks.
        
        The layoutOnlyPositionedObjects function has been renamed to simplifiedLayout()
        and is now used for all of these cases (in addition to what it handled before).
        
        The simplified layout optimization (even in ToT) did not work correctly when
        static distances needed to be recomputed. In order to make static distance
        computations work with simplified layout, positioned objects now always compute
        their static offsets, even if they explicitly specify left/top.  That way normal
        flow layout never has to re-run when the positioned object moves.  This makes
        movement of a positioned object along a single non-auto axis much faster when the
        other axis is auto. Because this code kicked in more often for absolutely positioned
        objects whose original display was inline, I went ahead and fixed the trailing space
        issue with those objects.  This causes a bunch of layout tests to progress.

        Added fast/block/positioning/static-inline-position-dynamic.html and trailing-space-test.html.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::adjustPositionedBlock):
        (WebCore::RenderBlock::simplifiedNormalFlowLayout):
        (WebCore::RenderBlock::simplifiedLayout):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setStaticPositions):
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::positionLineBox):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::styleWillChange):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::adjustStyleDifference):
        (WebCore::RenderObject::setStyle):
        (WebCore::RenderObject::styleDidChange):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::needsLayout):
        (WebCore::RenderObject::needsPositionedMovementLayoutOnly):
        (WebCore::RenderObject::needsSimplifiedNormalFlowLayout):
        (WebCore::RenderObject::setNeedsLayout):
        (WebCore::RenderObject::setChildNeedsLayout):
        (WebCore::RenderObject::setNeedsSimplifiedNormalFlowLayout):
        (WebCore::RenderObject::markContainingBlocksForLayout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyleConstants.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):

2011-03-25  Martin Robinson  <mrobinson@igalia.com>

        Fix the GTK+ build until we can implement the new cross-platform
        FontPlatformData.h bits.

        * platform/graphics/FontPlatformData.h: Include the proper old font headers.
        (WebCore::FontPlatformData::FontPlatformData): Eliminate GTK+ specific bits of this file
        which reference our obsolete font implementation.
        (WebCore::FontPlatformData::hash): Ditto.

2011-03-25  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Brian Weinstein.

        Microsoft Windows Presentation Foundation (WPF) plug-in complains about missing xpcom.dll
        https://bugs.webkit.org/show_bug.cgi?id=57119
        <rdar://problem/9054148>
        
        This plug-in from Microsoft links against xpcom.dll, which is a Firefox-specific DLL
        not available in WebKit. The plug-in is fairly widespread, since it was included in
        a Windows Update push at one point.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::isPluginBlacklisted): Blacklist npwpf.dll.

2011-03-25  Tony Chang  <tony@chromium.org>

        Try to fix the chromium mac build.
        We used the mac FontPlatformData on chromium mac.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/graphics/FontPlatformData.h:

2011-03-25  Tony Chang  <tony@chromium.org>

        Build fix:
        have chromium and qt use the correct FontPlatformData.h
        https://bugs.webkit.org/show_bug.cgi?id=57115

        * platform/graphics/FontPlatformData.h:

2011-03-25  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=57057 Overlay scrollbars in overflow 
        areas paint behind positive z-index content
        -and corresponding-
        <rdar://problem/9070500>

        Since overlay scrollbars don't clip the scrollable content like other scrollbars do, 
        the only way to get them to paint on top of all possible scrollable content is to 
        make them paint on top of everything. To do this, this patch adds a second trip 
        through the layer tree if it contains overlay scrollbars that need painting.

        After calling paint() on the rootLayer, call paintOverlayScrollers() if 
        containsDirtyOverlayScrollbars() is true. 
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):

        RenderLayer has two new member variable. m_containsDirtyOverlayScrollbars is a bool 
        that is set on the root layer when it has child layers that need overlay scrollbars 
        to be painted. m_cachedOverlayScrollbarOffset is an IntPoint to cache the tx and ty 
        of the overlay scrollbars on the first (normal) pass through the layer tree. This 
        prevents us from having to re-enter the render tree during the second (overlay-only) 
        pass. Finally, there is also a new paint flag: PaintLayerPaintingOverlayScrollbars.
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::containsDirtyOverlayScrollbars):
        (WebCore::RenderLayer::setContainsDirtyOverlayScrollbars):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::paintOverlayScrollbars):
        (WebCore::RenderLayer::paintLayer):

2011-03-25  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Need to be able to set and get the Cookie Storage Policy.
        https://bugs.webkit.org/show_bug.cgi?id=50780

        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::privateCookieStorage):
        Rename privateBrowsingCookieStorage to privateCookieStorage.
        (WebCore::currentCookieStorage):
        Ditto.
        (WebCore::setCurrentCookieStorage):
        Ditto.
        (WebCore::setCookieStoragePrivateBrowsingEnabled):
        Ditto.
        (WebCore::defaultCookieStorage):
        Return the default cookie storage.
        (WebCore::privateBrowsingCookieStorage):
        Return privateCookieStorage().get()
        * platform/network/cf/CookieStorageCFNet.h:

2011-03-25  Emil A Eklund  <eae@chromium.org>

        Reviewed by Dimitri Glazkov.

        Text field "onchange" event is triggered if actual value unchanged
        https://bugs.webkit.org/show_bug.cgi?id=36314

        Change RenderTextControl::subtreeHasChanged to only return true if the
        subtree has changed since the last event was triggered.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::insertedIntoDocument):
        (WebCore::HTMLTextFormControlElement::dispatchFormControlChangeEvent):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLTextFormControlElement::setTextAsOfLastFormControlChangeEvent):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::setValue):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setValue):
        (WebCore::HTMLTextAreaElement::setNonDirtyValue):

2011-03-25  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by David Hyatt.

        Clean up FontPlatformData structure so that a single implementation
        is used across all ports.  This first patch works for the Windows
        build (both CG and WinCairo), and Cocoa.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/FontPlatformData.cpp: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        * platform/graphics/FontPlatformData.h: Added.
        (WebCore::toCTFontRef):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hfont):
        (WebCore::FontPlatformData::useGDI):
        (WebCore::FontPlatformData::font):
        (WebCore::FontPlatformData::cgFont):
        (WebCore::FontPlatformData::size):
        (WebCore::FontPlatformData::setSize):
        (WebCore::FontPlatformData::syntheticBold):
        (WebCore::FontPlatformData::syntheticOblique):
        (WebCore::FontPlatformData::isColorBitmapFont):
        (WebCore::FontPlatformData::orientation):
        (WebCore::FontPlatformData::textOrientation):
        (WebCore::FontPlatformData::widthVariant):
        (WebCore::FontPlatformData::setOrientation):
        (WebCore::FontPlatformData::scaledFont):
        (WebCore::FontPlatformData::fontFace):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        (WebCore::FontPlatformData::hashTableDeletedFontValue):
        * platform/graphics/cg/FontPlatformData.h: Removed.
        * platform/graphics/cocoa/FontPlatformData.h: Removed.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::~FontPlatformData):
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::platformDataAssign):
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::platformDataAssign):
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::platformDataAssign):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/win/cairo/FontPlatformData.h: Removed.

2011-03-25  Enrica Casucci  <enrica@apple.com>

        Reviewed by Oliver Hunt.

        Pasteboard data's RTF data doesn't always include URLs via NSLinkAttributeName.
        https://bugs.webkit.org/show_bug.cgi?id=57107
        <rdar://problem/9084267>

        If the selection is at the beginning of content inside an anchor tag
        we move the selection start to include the anchor.
        
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection): Modified to change the selection
        start according to the new rule.

2011-03-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor Network domain's frame tree API
        https://bugs.webkit.org/show_bug.cgi?id=57103

        * inspector/Inspector.json:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForFrameResource):
        (WebCore::buildObjectForCachedResource):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::buildObjectForFrame):
        (WebCore::buildObjectForFrameTree):
        (WebCore::InspectorResourceAgent::didCommitLoad):
        (WebCore::InspectorResourceAgent::enable):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype.requestContent):
        (WebInspector.NetworkDispatcher):
        (WebInspector.NetworkDispatcher.prototype.willSendRequest):
        (WebInspector.NetworkDispatcher.prototype.didReceiveResponse):
        (WebInspector.NetworkDispatcher.prototype.didLoadResourceFromMemoryCache):
        (WebInspector.NetworkDispatcher.prototype.frameDetachedFromParent):
        (WebInspector.NetworkDispatcher.prototype.didCommitLoadForFrame):
        (WebInspector.NetworkDispatcher.prototype.didCreateWebSocket):
        (WebInspector.NetworkDispatcher.prototype._appendRedirect):
        (WebInspector.NetworkDispatcher.prototype._addFramesRecursively):
        (WebInspector.NetworkDispatcher.prototype._createResource):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype.addOrUpdateFrame):
        (WebInspector.ResourceTreeModel.prototype.didCommitLoadForFrame):
        (WebInspector.ResourceTreeModel.prototype._clearChildFramesAndResources):
        (WebInspector.ResourceTreeModel.prototype._clearResources):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.addOrUpdateFrame):
        (WebInspector.ResourcesPanel.prototype.addResourceToFrame):

2011-03-25  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION(r77257): Only first page of a document is printed
        https://bugs.webkit.org/show_bug.cgi?id=56958

        Test: printing/page-count-layout-overflow.html

        * page/FrameView.cpp:
        (WebCore::FrameView::forceLayoutForPagination): Moved clearing of overflow
            to the right place.

2011-03-25  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QtWebKit will not compile with QT_ASCII_CAST_WARNINGS enabled
        https://bugs.webkit.org/show_bug.cgi?id=57087

        Use explicit conversion for string to avoid depending on the default codec
        installed by the user code.

        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapToDataUrlMethod::invoke):
        (JSC::Bindings::QtPixmapInstance::valueOf):
        * platform/qt/LanguageQt.cpp:
        (WebCore::platformDefaultLanguage):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeSelection):
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::initializeGtk):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::getPluginDisplay):

2011-03-25  Chang Shu  <cshu@webkit.org>

        Reviewed by Ryosuke Niwa.

        rename Node::isContentEditable and all call sites to rendererIsEditable
        https://bugs.webkit.org/show_bug.cgi?id=54290

        This is part of the effort to separate JS API HTMLElement isContentEditable from
        internal Node::rendererIsEditable.

        Code refactoring. No new tests.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isReadOnly):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        * dom/Document.cpp:
        (WebCore::acceptsEditingFocus):
        * dom/Node.cpp:
        (WebCore::Node::rendererIsEditable):
        (WebCore::Node::shouldUseInputMethod):
        (WebCore::Node::canStartSelection):
        (WebCore::Node::rootEditableElement):
        * dom/Node.h:
        (WebCore::Node::isContentEditable):
        (WebCore::Node::rendererIsEditable):
        (WebCore::Node::rendererIsRichlyEditable):
        * dom/Position.cpp:
        (WebCore::nextRenderedEditable):
        (WebCore::previousRenderedEditable):
        (WebCore::Position::atEditingBoundary):
        (WebCore::Position::parentEditingBoundary):
        (WebCore::Position::upstream):
        (WebCore::Position::downstream):
        (WebCore::Position::isCandidate):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate):
        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::AppendNodeCommand):
        (WebCore::AppendNodeCommand::doApply):
        (WebCore::AppendNodeCommand::doUnapply):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::containsNonEditableRegion):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement):
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem):
        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement):
        (WebCore::enclosingDeletableElement):
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::doApply):
        (WebCore::DeleteFromTextNodeCommand::doUnapply):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeNode):
        * editing/Editor.cpp:
        (WebCore::Editor::canDeleteRange):
        (WebCore::Editor::markMisspellingsOrBadGrammar):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        * editing/EditorCommand.cpp:
        (WebCore::verticalScrollDistance):
        * editing/FormatBlockCommand.cpp:
        (WebCore::enclosingBlockToSplitTreeTo):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph):
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doApply):
        (WebCore::InsertIntoTextNodeCommand::doUnapply):
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::InsertNodeBeforeCommand):
        (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/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::selectFrameElementInParentIfFullySelected):
        (WebCore::SelectionController::setSelectionFromNone):
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::executeApply):
        (WebCore::SplitElementCommand::doUnapply):
        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::doApply):
        (WebCore::SplitTextNodeCommand::doUnapply):
        (WebCore::SplitTextNodeCommand::doReapply):
        * editing/SplitTextNodeContainingElementCommand.cpp:
        (WebCore::SplitTextNodeContainingElementCommand::doApply):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::canonicalPosition):
        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::doUnapply):
        (WebCore::WrapContentsInDummySpanCommand::doReapply):
        * editing/htmlediting.cpp:
        (WebCore::highestEditableRoot):
        (WebCore::lowestEditableAncestor):
        (WebCore::isEditablePosition):
        (WebCore::isRichlyEditablePosition):
        (WebCore::firstEditablePositionAfterPositionInRoot):
        (WebCore::extendRangeToWrappingNodes):
        (WebCore::enclosingNodeWithTag):
        (WebCore::enclosingNodeOfType):
        (WebCore::highestEnclosingNodeOfType):
        (WebCore::canMergeLists):
        * editing/visible_units.cpp:
        (WebCore::previousLeafWithSameEditability):
        (WebCore::previousLinePosition):
        (WebCore::nextLeafWithSameEditability):
        (WebCore::nextLinePosition):
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::supportsFocus):
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::HTMLAnchorElement::setActive):
        (WebCore::HTMLAnchorElement::canStartSelection):
        (WebCore::HTMLAnchorElement::treatLinkAsLiveForEventType):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::supportsFocus):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::supportsFocus):
        (WebCore::HTMLElement::isContentEditable):
        (WebCore::HTMLElement::contentEditable):
        * html/HTMLElement.h:
        * page/DragController.cpp:
        (WebCore::DragController::operationForLoad):
        (WebCore::DragController::canProcessDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::selectCursor):
        * page/FocusController.cpp:
        (WebCore::relinquishesEditingFocus):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::isContentEditable):
        * rendering/RenderBlock.cpp:
        (WebCore::positionForPointRespectingEditingBoundaries):
        (WebCore::RenderBlock::hasLineIfEmpty):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::addOverflowFromInlineChildren):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::canBeProgramaticallyScrolled):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createVisiblePosition):
        * rendering/RootInlineBox.cpp:
        (WebCore::isEditableLeaf):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::supportsFocus):

2011-03-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Antti Koivisto.

        Crash when a wbr element is inserted inside mroot
        https://bugs.webkit.org/show_bug.cgi?id=56352

        Test: mathml/wbr-in-mroot-crash.html

        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::layout): Look for the first box model child of the first
        child, instead of just assuming.

2011-03-25  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        XML Viewer: extensions can't render original XML
        https://bugs.webkit.org/show_bug.cgi?id=56263

        Added source xml to transformed document, renamed onload function.

        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/XMLViewer.xsl:

2011-03-25  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Get rid of the invalid string conversion with ::fromAscii()
        https://bugs.webkit.org/show_bug.cgi?id=57102

        Replace ::fromAscii() with ::fromLatin1() to make sure the codec does not depend on the user code.

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

2011-03-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81953.
        http://trac.webkit.org/changeset/81953
        https://bugs.webkit.org/show_bug.cgi?id=57096

        "inspector test breakage: part 2/2" (Requested by apavlov on
        #webkit).

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getAllStyles):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.styleSheetCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.allStylesCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleModel.prototype._onRevert):
        (WebInspector.CSSStyleSheet):
        (WebInspector.CSSStyleSheet.prototype.setText):

2011-03-15  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Fix handling of the CSSAgent.setStyleSheetText() results in CSSStyleModel.js
        https://bugs.webkit.org/show_bug.cgi?id=56310

        Instead of stylesheet ids, CSSAgent.getAllStyleSheets() now returns metainfo objects containing
        "styleSheetId", "sourceURL", "disabled", and "title" fields. The latter three are not returned
        by CSSAgent.getStyleSheet() anymore.

        Test: inspector/styles/get-set-stylesheet-text.html

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheetInfo):
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.styleSheetCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.allStylesCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleModel.prototype._onRevert):
        (WebInspector.CSSStyleSheet):
        (WebInspector.CSSStyleSheet.prototype.setText):

2011-03-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: extension server should not convert all resources to HAR when there are no extensions.
        https://bugs.webkit.org/show_bug.cgi?id=57044

        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._notifyResourceFinished):
        (WebInspector.ExtensionServer.prototype._hasSubscribers):

2011-03-25  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Nikolas Zimmermann.

        SVG <use> element performance improvement
        https://bugs.webkit.org/show_bug.cgi?id=57077

        SVG <use> element was expanding nesting <use> and <symbol> elements
        in an inefficient way. After it expanded an <use> or a <symbol>
        element it would restart expanding from the shadow tree root.
        This behavior was leading about 160 millions of calls to
        expandUseElementInShadowTree or expandSymbolElementInShadowTree for
        a single shadow tree which is illustrated by
        http://upload.wikimedia.org/wikipedia/commons/4/4e/Sierpinski_carpet_6.svg.
        But the effective calls, which really expand <use> or <symbol>
        elements, were about 5200; others were passing-by calls, which are
        recursively down to the children.

        This patch is altering the expanding path to reduce the passing-by
        calls. It will expand elements in sibling chain where there is an
        effective call, because the effective call replaces element which is
        expanded and the replacement results lose of the sibling chain of
        the replaced on the upper recursion stack. With this patch the
        passing-by calls are reduced from about 160 millions to about 30
        thousands.

        No functionality change, no new tests.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree):
        * svg/SVGUseElement.h:

2011-03-25  Dominic Cooney  <dominicc@google.com>

        Reviewed by Kent Tamura.

        Makes keygen support autofocus attribute.
        https://bugs.webkit.org/show_bug.cgi?id=57091

        Test: fast/forms/autofocus-keygen.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::attach):

2011-03-24  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Add sound / mute button to MediaControl UI
        https://bugs.webkit.org/show_bug.cgi?id=56726

        Add sound / mute button to MediaControl UI.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::edjeGroupFromFormType):
        (WebCore::RenderThemeEfl::emitMediaButtonSignal):
        (WebCore::RenderThemeEfl::paintMediaMuteButton):
        * platform/efl/RenderThemeEfl.h:

2011-03-24  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Darin Adler.

        Introduce WTF HexNumber.h
        https://bugs.webkit.org/show_bug.cgi?id=56099

        Introduce a set of functions that ease converting from a bye or a number to a hex string,
        replacing several of these conversions and String::format("%x") usages all over WebCore.

        * ForwardingHeaders/wtf/HexNumber.h: Added.
        * css/CSSOMUtils.cpp:
        (WebCore::serializeCharacterAsCodePoint):
        * css/CSSParser.cpp:
        (WebCore::quoteCSSString):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::createReadableStringFromBinary):
        * platform/FileSystem.cpp:
        (WebCore::encodeForFileName):
        * platform/KURL.cpp:
        (WebCore::appendEscapedChar):
        * platform/UUID.cpp:
        (WebCore::createCanonicalUUIDString):
        * platform/graphics/Color.cpp:
        (WebCore::Color::serialized):
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::encodeStringAsFormData):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::quoteAndEscapeNonPrintables):

2011-03-24  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        <rdar://problem/9146716> REGRESSION: ~10 MB increase in memory under CachedScripts
        Add back a call to destroy decoded data after access.  Keep the SourceProviderCache 
        around as long as their are still clients to use it.

        No new tests because there is no change in behavior.  Current tests pass.

        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::script):
        (WebCore::CachedScript::destroyDecodedData):

2011-03-24  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=57073
        Rework the AtomicHTMLConstructor to reserve space for attributes based on the size of the attribute list.
        Saves 1.5 MB on Membuster.

        No new tests because there was no change in behavior.  Current tests pass.

        * html/parser/HTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        (WebCore::AtomicHTMLToken::initializeAttributes):

2011-03-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81916 and r81917.
        http://trac.webkit.org/changeset/81916
        http://trac.webkit.org/changeset/81917
        https://bugs.webkit.org/show_bug.cgi?id=57071

        broke a test on platforms that do not have QuickTime installed
        (Requested by estes on #webkit).

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::HTMLEmbedElement):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::HTMLObjectElement):
        (WebCore::HTMLObjectElement::parametersForPlugin):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::isImageType):
        (WebCore::HTMLPlugInImageElement::wouldLoadAsNetscapePlugin):
        * html/HTMLPlugInImageElement.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::objectContentType):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::defaultObjectContentType):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::resourceWillUsePlugin):
        (WebCore::SubframeLoader::requestObject):
        (WebCore::SubframeLoader::shouldUsePlugin):
        * loader/SubframeLoader.h:

2011-03-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Eliminate Node::dispatchGenericEvent.
        https://bugs.webkit.org/show_bug.cgi?id=57045

        No functional change, covered by existing tests.

        * dom/Node.cpp:
        (WebCore::Node::dispatchEvent): Combined with the body of dispatchGenericEvent,
            removed unnecessary extra refs and a stale comment.
        * dom/Node.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent): Changed to use dispatchEvent.
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::sendSVGLoadEventIfPossible): Ditto.
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::dispatchEvent): Ditto. The code here still
            works thanks to SVG-aware retargeting in Node.

2011-03-24  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        web audio: Properly sample-rate convert audio assets in chromium port
        https://bugs.webkit.org/show_bug.cgi?id=56980

        No new tests since audio API is not yet implemented.

        * WebCore.gypi:
        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::createBySampleRateConverting):
        (WebCore::AudioBus::createByMixingToMono):
        * platform/audio/AudioBus.h:
        * platform/audio/HRTFKernel.cpp:
        (WebCore::extractAverageGroupDelay):
        (WebCore::HRTFKernel::HRTFKernel):
        * platform/audio/SincResampler.cpp:
        * platform/audio/chromium/AudioBusChromium.cpp:
        (WebCore::AudioBus::loadPlatformResource):
        (WebCore::createBusFromInMemoryAudioFile):

2011-03-24  Rik Cabanier  <cabanier@adobe.com>

        Reviewed by David Hyatt.

        REGRESSION (r81625): fast/css/percentage-non-integer.html fails on Windows
        https://bugs.webkit.org/show_bug.cgi?id=56829

        Test: fast/css/percentage-non-integer.html

        * platform/Length.h:
        (WebCore::Length::calcValue):
        (WebCore::Length::calcMinValue):
        (WebCore::Length::calcFloatValue):

2011-03-24  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by James Robinson.

        [Chromium] Vertical Japanese text is not displayed on Snow Leopard
        https://bugs.webkit.org/show_bug.cgi?id=56962

        Make Snow Leopard check added by r80740 into a runtime check for
        Chromium, since it uses the same binary on both Leopard and Snow Leopard.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::hasBrokenCTFontGetVerticalTranslationsForGlyphs):
        (WebCore::showGlyphsWithAdvances):

2011-03-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=57058
        Hookup the UIProcess WebIconDatabase to a WebCore::IconDatabase as its implementation

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::synchronousLoadDecisionForIconURL): Only add the DocumentLoader to the set if it's non-zero.
        (WebCore::IconDatabase::IconDatabase): Add more logging.
        (WebCore::IconDatabase::performURLImport): Dispatch the "didFinishURLImport" client callback using the following 3 methods.
        (WebCore::FinishedURLImport::FinishedURLImport):
        (WebCore::FinishedURLImport::performWork):
        (WebCore::IconDatabase::dispatchDidFinishURLImportOnMainThread):

        * loader/icon/IconDatabase.h:
        (WebCore::IconDatabase::create): Expose a PassOwnPtr<> creator.

        * WebCore.exp.in:

2011-03-23  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Application Cache should save audio/ and video/ mime types as flat files
        https://bugs.webkit.org/show_bug.cgi?id=53784
        <rdar://problem/8932473>

        No new tests.

        ApplicationCacheResource::create() now takes an additional "path" parameter.  To facilitate 
        extracting this path information, two functions in ApplicationCacheHost have been made public.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponse): Pass along new "path" parameter.
        (WebCore::ApplicationCacheGroup::didFail): Ditto.
        * loader/appcache/ApplicationCacheHost.h:
        (WebCore::ApplicationCacheHost::shouldLoadResourceFromApplicationCache): Made public.
        (WebCore::ApplicationCacheHost::getApplicationCacheFallbackResource): Made public.
        * loader/appcache/ApplicationCacheResource.cpp:
        (WebCore::ApplicationCacheResource::ApplicationCacheResource): Add new "path" parameter.
        * loader/appcache/ApplicationCacheResource.h:
        (WebCore::ApplicationCacheResource::create): Ditto.
        (WebCore::ApplicationCacheResource::path): New accessor.

2011-03-24  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r70748): latest nightly builds kills AC_QuickTime.js
        https://bugs.webkit.org/show_bug.cgi?id=49016

        AC_QuickTime.js uses the common <object>/<embed> paradigm to embed the
        QuickTime plug-in in web pages. r70748 removed our mapping of classids
        to MIME types, which causes WebKit to fall back from the object to the
        embed tag when QuickTime is embedded by this script. The script emits
        the following embed tag to embed a QuickTime movie with a poster frame:

        <embed src="poster-frame.png" target="quicktimeplayer" href="movie.mov">

        The expectation is that a QuickTime plug-in is instantiated to display the
        poster frame, since QuickTime registers for many common image MIME
        types. This is how Gecko behaves for embed. However, WebKit prefers to
        use its native image rendering for image embeds, in which case no movie
        is played when the poster frame is clicked.

        Fix this by changing embed to check for a plug-in that can handle the
        image type before rendering the image natively. This matches Gecko.

        Test: fast/images/embed-image-plugins-disabled.html

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parametersForPlugin):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::isImageType):
        (WebCore::HTMLPlugInImageElement::wouldLoadAsNetscapePlugin):
        * html/HTMLPlugInImageElement.h:
        (WebCore::HTMLPlugInImageElement::preferPluginsForImages):
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::objectContentType):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::defaultObjectContentType):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::resourceWillUsePlugin):
        (WebCore::SubframeLoader::requestPlugin):
        (WebCore::SubframeLoader::requestObject):
        (WebCore::SubframeLoader::shouldUsePlugin):
        * loader/SubframeLoader.h:

2011-03-24  Mike Reed  <reed@google.com>

        Reviewed by James Robinson.

        Move lifetime management of grContext from a global to being
        per-SharedGraphicsContext3D, which correctly is 1:1 with the
        underlying opengl context.
        https://bugs.webkit.org/show_bug.cgi?id=54330

        No new tests. Existing <canvas> tests exercise this:

        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::~DrawingBuffer):
        (WebCore::DrawingBuffer::publishToPlatformLayer):
        (WebCore::DrawingBuffer::setGrContext):
        * platform/graphics/gpu/DrawingBuffer.h:
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::~SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::getGrContext):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::~PlatformContextSkia):
        (WebCore::PlatformContextSkia::setSharedGraphicsContext3D):

2011-03-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Untangle dependency between event ancestor chain computation and InspectorDOMAgent.
        https://bugs.webkit.org/show_bug.cgi?id=57050

        Inspector's list of event listeners does not need to invoke Node::getEventListeners,
        because it simply wants to collect all ancestors and never uses EventContext bits.

        No functional change, covered by existing tests.

        * dom/Node.cpp:
        (WebCore::getEventAncestors): Converted into a static function.
        (WebCore::Node::dispatchGenericEvent): Changed to pass node to getEventAncestors.
        * dom/Node.h: Removed decl, moved EventDispatchBehavior enum inside.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListenersForNode): Replaced the call
            to getEventAncestors with a simple ancestor traversal loop.

2011-03-24  Adam Klein  <adamk@chromium.org>

        Reviewed by David Levin.

        [fileapi] Make FileError and FileException accessible from WorkerContext
        https://bugs.webkit.org/show_bug.cgi?id=57041

        * workers/WorkerContext.idl:

2011-03-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove legacy version of findPlainText.
        https://bugs.webkit.org/show_bug.cgi?id=57056

        * editing/TextIterator.cpp:
        * editing/TextIterator.h:
        Remove legacy overload of findPlainText that doesn't
        take an options parameter.

2011-03-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Ensure that all compilation takes place within a dynamic global object scope
        https://bugs.webkit.org/show_bug.cgi?id=57054

        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent): Updated for signature change.

2011-03-24  John Bauman  <jbauman@chromium.org>

        Reviewed by Kenneth Russell.

        preserveDrawingBuffer=true is ignored
        https://bugs.webkit.org/show_bug.cgi?id=56987

        Add code to the V8 and JSC bindings to support grabbing the value of
        preserveDrawingBuffer from the input context attributes. Also, in
        WebGLRenderingContext use the WebGLContextAttributes that were input
        directly, not those from the GraphicsContext3D which could have been
        changed.

        No new tests, as this can't be tested with DRT. However, this works
        when tested manually.

        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextCallback):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::clearIfComposited):
        (WebCore::WebGLRenderingContext::paintRenderingResultsToCanvas):

2011-03-24  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        WebKit2:Services menu item to convert selected Simplified/Traditional Chinese Text is not working.
        https://bugs.webkit.org/show_bug.cgi?id=56975
        <rdar://problem/8915066>
        
        Adding support in WebCore to implement readSelectionFromPasteboard
        to support Mac OS X services from WebKit2.

        * WebCore.exp.in:
        * editing/Editor.h:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::readSelectionFromPasteboard): Added entry point
        to call the paste functions with the specified pasteboard.

2011-03-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Inspector does not show correct transfer size for synchronous requests
        https://bugs.webkit.org/show_bug.cgi?id=56951

        Fixed transfer size for synchronous load.

        Test: http/tests/inspector/network/network-size-sync.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::willLoadMediaElementURL):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages):
        * loader/ResourceLoadNotifier.h:

2011-03-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=57030
        REGRESSION (r81782): http/tests/inspector/extensions-resources-redirect.html sometimes crashes WebKit2's 
        web process while handling a WebIconDatabaseProxy::ReceivedIconLoadDecision message

        The callback objects had some bogus ASSERTs and missed a relevant null check. If a callback was waiting on
        a message back from the UIProcess, but was invalidated from within the WebProcess in the meantime, it's
        perfectly valid to attempt to performCallback() after the callback function pointer has been cleared.

        * loader/icon/IconDatabaseBase.h:
        (WebCore::EnumCallback::performCallback):
        (WebCore::EnumCallback::invalidate):
        (WebCore::EnumCallback::EnumCallback):
        (WebCore::ObjectCallback::performCallback):
        (WebCore::ObjectCallback::invalidate):
        (WebCore::ObjectCallback::ObjectCallback):

2011-03-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Dictionary text extraction is not correctly detecting word boundaries on bing.com
        <rdar://problem/9078569>
        https://bugs.webkit.org/show_bug.cgi?id=56995

        * WebCore.exp.in:
        Add some editing related exports needed by WebKit2.

2011-03-24  Andy Estes  <aestes@apple.com>

        Reviewed by Eric Seidel.

        REGRESSION (r80231): Bad cast in HTMLTreeBuilder with closed </form> tags
        https://bugs.webkit.org/show_bug.cgi?id=56836

        During fragment parsing, HTMLConstructionSite holds a reference to the
        fragment context's closest form ancestor. If a misnested form end tag is
        then encountered as the first node of the fragment, we will check to see
        if a corresponding form start tag is in scope even though no such tag
        exists. This led to isScope() walking the HTMLElementStack all the way
        to the root DocumentFragment and attempting to cast it to Element*.

        Fix this by ensuring that the inScope() family of functions operate in
        terms of ContainerNodes to account for the fragment case.

        Test: fast/parser/fragment-closest-form-ancestor.html

        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isRootNode):
        (WebCore::HTMLNames::isScopeMarker):
        (WebCore::HTMLNames::isTableScopeMarker):
        (WebCore::HTMLNames::isTableBodyScopeMarker):
        (WebCore::HTMLNames::isTableRowScopeMarker):
        (WebCore::HTMLElementStack::hasOnlyHTMLElementsInScope):
        (WebCore::HTMLElementStack::inScope):

2011-03-24  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Repeated copy and paste-in-place operation results in increasingly verbose HTML.
        <rdar://problem/8690506>
        https://bugs.webkit.org/show_bug.cgi?id=56874
        
        When we calculate the style to apply at the insertion point we compare the initial
        style at the insertion point against the style calculated at the span we wrap the
        copied markup fragment with. We could end up with a series of unnecessary spans
        to remove the initial style that simply grow our markup.
        The consists in moving the insertion point outside any inline element that could
        affect the fragment being inserted when we are not pasting and matching the style.

        Test: editing/pasteboard/paste-text-with-style.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isInlineNodeWithStyle): Added.
        (WebCore::ReplaceSelectionCommand::doApply): Added logic to change the insertion
        point according to the new rules.

2011-03-24  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] When we render WebGL offscreen, color conversion cost a lot of CPU cycles
        https://bugs.webkit.org/show_bug.cgi?id=40884

        The software fallback is now only needed for corner cases like a manual rendering
        of the page to QImage.

        Keeping the image with the last pixel values is no longer needed. Removing it reduce the
        performance for real-time rendering on software surface, but this case should no longer be
        supported.

        The conversion from OpenGL color space and coordinates is done manually for performance. This
        also fix the bug of the inverted X axis due to the transformation.

        The tests and benchmarks are done through Qt API tests.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::swapBgrToRgb):
        (WebCore::GraphicsContext3DInternal::paint):
        (WebCore::GraphicsContext3D::reshape):

2011-03-24  Nat Duca  <nduca@chromium.org>

        Reviewed by James Robinson.

        [chromium] Remove bool that forces compositor HUD to always be enabled
        https://bugs.webkit.org/show_bug.cgi?id=57034

        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h:
        (WebCore::CCHeadsUpDisplay::enabled):

2011-03-24  Nat Duca  <nduca@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Add traceEvents to compositor
        https://bugs.webkit.org/show_bug.cgi?id=56965

        * WebCore.gypi:
        * platform/chromium/TraceEvent.h: Added.
        (WebCore::internal::ScopeTracer::ScopeTracer):
        (WebCore::internal::ScopeTracer::~ScopeTracer):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateRootLayerContents):
        (WebCore::LayerRendererChromium::updateRootLayerScrollbars):
        (WebCore::LayerRendererChromium::updateLayers):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::finish):
        (WebCore::LayerRendererChromium::present):
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::update):

2011-03-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: render XHRs matching JSON regex as JSON.
        https://bugs.webkit.org/show_bug.cgi?id=57035

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/NetworkItemView.js:
        (WebInspector.NetworkItemView):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.LocalJSONObject.prototype.get description.switch.case):
        (WebInspector.LocalJSONObject.prototype.get description):
        (WebInspector.LocalJSONObject.prototype._concatenate):
        (WebInspector.LocalJSONObject.prototype.getProperties):
        (WebInspector.LocalJSONObject.prototype._children):
        * inspector/front-end/ResourceJSONView.js: Added.
        (WebInspector.ResourceJSONView):
        (WebInspector.ResourceJSONView.parseJSON.WebInspector.ResourceJSONView.prototype.hasContent):
        (WebInspector.ResourceJSONView.parseJSON.WebInspector.ResourceJSONView.prototype.show):
        (WebInspector.ResourceJSONView.parseJSON.WebInspector.ResourceJSONView.prototype._initialize):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.resource-view.json):
        * inspector/front-end/inspector.html:

2011-03-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Move media controls subtree creation into one method.
        https://bugs.webkit.org/show_bug.cgi?id=56969

        Mechanical move, no changes in functionality.

        The purpose of this patch is to align existing code closer with its
        future version, when MediaControls is an element whose tree is created
        at the instantiation.

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::create): Added, consolidating all subtree generation logic into one place.
        (WebCore::MediaControls::update): Replaced methods with one call.
        * html/shadow/MediaControls.h: Updated decls.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineElement::create): Moved setting of attributes here.
        (WebCore::MediaControlVolumeSliderElement::create): Ditto.

2011-03-24  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Use proper string method to generate webloc string.
        https://bugs.webkit.org/show_bug.cgi?id=57028
        <rdar://problem/9181955>

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::getWebLocData):

2011-03-24  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=32821
        Fix conditionals which had an int for one case and a pointer for another.
        Fix is similar to https://bugs.webkit.org/show_bug.cgi?id=56198

        No new tests. Fix compilation on Solaris 10 with SunStudio 12 C++

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForShadow):

2011-03-24  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: provide live edit callback to source frame delegate.
        https://bugs.webkit.org/show_bug.cgi?id=57003

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.editScriptSource):
        (WebInspector.DebuggerModel.prototype._didEditScriptSource):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.canEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource.didEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._updateBreakpointsAfterLiveEdit):
        (WebInspector.DebuggerPresentationModel.prototype._scriptForSourceFileId):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        (WebInspector.SourceFrameDelegateForScriptsPanel):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.canEditScriptSource):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.editScriptSource):

2011-03-24  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        Regression: WebKit does not build with Python 3 following 56807
        https://bugs.webkit.org/show_bug.cgi?id=56923

        The module string does not have the function replace in Python 3. The str.replace function
        can do the same operation in this case and works with the versions 2 and 3.

        * inspector/generate-inspector-idl:

2011-03-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: brush up Network agent API.
        https://bugs.webkit.org/show_bug.cgi?id=57001

        * inspector/Inspector.json:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willSendRequestImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willSendRequest):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceRequest):
        (WebCore::buildObjectForResourceResponse):
        (WebCore::buildObjectForCachedResource):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorResourceAgent::setExtraHeaders):
        * inspector/InspectorResourceAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createResourceReceiveResponseData):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithRequest):
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithResponse):
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithCachedResource):
        (WebInspector.NetworkDispatcher.prototype.willSendRequest):
        (WebInspector.NetworkDispatcher.prototype.didReceiveWebSocketHandshakeResponse):
        (WebInspector.NetworkDispatcher.prototype.didCloseWebSocket):
        * inspector/front-end/Resource.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::assignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createResourceHandle):

2011-03-11  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JNIType is not specific to JNI so should be renamed
        https://bugs.webkit.org/show_bug.cgi?id=56197

        This patch renames JNIType to JavaType, renames the values of
        the enum, and moves it out of JNIUtility.h to its own file.
        Also renames the corresponding JavaField and JavaMethod getters.

        No new tests, refactoring only.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/jni/JNIUtility.cpp:
        (JSC::Bindings::javaTypeFromClassName):
        (JSC::Bindings::signatureFromJavaType):
        (JSC::Bindings::javaTypeFromPrimitiveType):
        (JSC::Bindings::getJNIField):
        (JSC::Bindings::callJNIMethod):
        * bridge/jni/JNIUtility.h:
        * bridge/jni/JavaMethod.cpp:
        (JavaMethod::JavaMethod):
        (JavaMethod::signature):
        * bridge/jni/JavaMethod.h:
        (JSC::Bindings::JavaMethod::returnTypeClassName):
        (JSC::Bindings::JavaMethod::returnType):
        * bridge/jni/JavaType.h: Copied from Source/WebCore/bridge/jni/JavaMethod.h.
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::toString):
        * bridge/jni/jni_objc.mm:
        (JSC::Bindings::dispatchJNICall):
        * bridge/jni/jsc/JNIUtilityPrivate.cpp:
        (JSC::Bindings::convertArrayInstanceToJavaArray):
        (JSC::Bindings::convertValueToJValue):
        * bridge/jni/jsc/JNIUtilityPrivate.h:
        * bridge/jni/jsc/JavaArrayJSC.cpp:
        (JavaArray::setValueAt):
        (JavaArray::valueAt):
        * bridge/jni/jsc/JavaClassJSC.cpp:
        * bridge/jni/jsc/JavaFieldJSC.cpp:
        (JavaField::JavaField):
        (JavaField::dispatchValueFromInstance):
        (JavaField::valueFromInstance):
        (JavaField::dispatchSetValueToInstance):
        (JavaField::setValueToInstance):
        * bridge/jni/jsc/JavaFieldJSC.h:
        (JSC::Bindings::JavaField::typeClassName):
        (JSC::Bindings::JavaField::type):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/v8/JNIUtilityPrivate.cpp:
        (JSC::Bindings::convertNPVariantToJValue):
        (JSC::Bindings::convertJValueToNPVariant):
        * bridge/jni/v8/JNIUtilityPrivate.h:
        * bridge/jni/v8/JavaFieldV8.cpp:
        (JavaField::JavaField):
        * bridge/jni/v8/JavaFieldV8.h:
        (JSC::Bindings::JavaField::typeClassName):
        (JSC::Bindings::JavaField::type):
        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::invokeMethod):
        (JavaInstance::getField):
        * bridge/jni/v8/JavaNPObjectV8.cpp:
        (JSC::Bindings::JavaNPObjectInvoke):
        (JSC::Bindings::JavaNPObjectGetProperty):

2011-03-24  Ojan Vafai  <ojan@chromium.org>

        Was being a little braindead when I committed this.
        Only simple selectors are allowed, but sibling selectors
        are sibling selectors.

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

2011-03-23  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        Spellcheck feature specific symbols should be defined.
        https://bugs.webkit.org/show_bug.cgi?id=56818
        
        * Introduced USE(UNIFIED_TEXT_CHECKING), USE(GRAMMAR_CHECKING) and USE(AUTOMATIC_TEXT_REPLACEMENT)
        * Replaced a part of of BUILDING_ON_* conditionals with them.

        Note that small amount of code path on Editor.cpp is now compiled under USE(GRAMMAR_CHECKING)
        because these code path is already built under non-Mac ports and
        Keeping them buildable for such platforms reduces the build breakage risk.
        These path is guarded by Settings thus should never get reached.

        No new tests. No behavioral change.

        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::isSelectionUngrammatical):
        (WebCore::Editor::guessesForUngrammaticalSelection):
        (WebCore::Editor::guessesForMisspelledOrUngrammaticalSelection):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markMisspellingsOrBadGrammar):
        (WebCore::Editor::markBadGrammar):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::changeBackToReplacedString):
        (WebCore::Editor::markMisspellingsAndBadGrammar):
        * editing/Editor.h:
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar):
        (WebCore::TextCheckingHelper::findFirstGrammarDetail):
        (WebCore::TextCheckingHelper::findFirstBadGrammar):
        (WebCore::TextCheckingHelper::isUngrammatical):
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange):
        (WebCore::TextCheckingHelper::markAllBadGrammar):
        * loader/EmptyClients.h:
        * platform/text/TextCheckerClient.h:
        * platform/text/TextChecking.h: Added.

2011-03-23  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] Force to make validation bubble DIV position:absolute
        https://bugs.webkit.org/show_bug.cgi?id=56901

        Test: fast/forms/interactive-validation-crash-by-style-override.html

        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree): Add position:absolute
          because we need to move the validation message to a good position.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::addChild):

2011-03-23  Mike Lawther  <mikelawther@chromium.org>

        Reviewed by Ojan Vafai.

        flex/bison tokens and grammar for CSS calc
        https://bugs.webkit.org/show_bug.cgi?id=54412

        Tests: css3/calc/calc-errors.html
               css3/calc/minmax-errors.html
               css3/calc/simple-calcs.html
               css3/calc/simple-minmax.html

        * css/CSSGrammar.y:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValueList::insertValueAt):
        (WebCore::CSSParserValueList::extend):
        * css/CSSParserValues.h:
        * css/tokenizer.flex:

2011-03-23  Adam Klein  <adamk@chromium.org>

        Reviewed by David Levin.

        Fix resolveLocalFileSystemURL (and sync version) error codes to match the spec
        https://bugs.webkit.org/show_bug.cgi?id=56961

        See error code listing in the Files & Directories spec:
        http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#widl-LocalFileSystemSync-resolveLocalFileSystemSyncURL

        Note that the spec currently only specifies errors for the sync
        version; I've used the same codes for the async version.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::resolveLocalFileSystemURL):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::resolveLocalFileSystemURL):
        (WebCore::WorkerContext::resolveLocalFileSystemSyncURL):

2011-03-23  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Hook up new AppKit autocorrection UI with WK2.
        https://bugs.webkit.org/show_bug.cgi?id=56055
        <rdar://problem/8947463>

        This patch is to enable WK2 to utilize autocorrection UI on Mac OS X. It contains following
        major changes:

        1. All but one autocorrection related message is synchronous. Since dismissing autocorrection
        panel can potentially cause editing to occur, a synchronous dismissCorrectionPanelSoon() function
        is introduced to ensure all editing commands occur in correct order.

        2. Additional condition variable is needed to implement dismissCorrectionPanelSoon().
        To improve maintainability, CorrectionPanel class is introduced to manage the
        internal state related to correction panel. This change is applied to both WK1 and WK2.

        3. EditorClient::isShowingCorrectionPanel() has been removed. The original purpose is to allow
        editor to know when to handle ESC key event. Now this is handled internally in AppKit, so
        EditorClient::isShowingCorrectionPanel() isn't necessary anymore.

        4. The Editor* argument in EditorClient::showCorrectionPanel() has been removed, since we can
        access object via WebView or WKView.

        * editing/Editor.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::correctionPanelTimerFired):
        (WebCore::Editor::dismissCorrectionPanel):
        (WebCore::Editor::dismissCorrectionPanelSoon):
        (WebCore::Editor::applyAutocorrectionBeforeTypingIfAppropriate):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap):
        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::showCorrectionPanel):
        (WebCore::EmptyEditorClient::dismissCorrectionPanelSoon):
        * manual-tests/autocorrection/close-window-when-correction-is-shown.html: Added.
        * page/EditorClient.h:

2011-03-22  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Antti Koivisto.

        move :not over to using selectorList instead of simpleSelector
        https://bugs.webkit.org/show_bug.cgi?id=56894

        Saves memory and simplifies code.

        No new tests since existing tests cover this code.

        * css/CSSGrammar.y:
        Also removed extranenous calls to updateLastSelectorLineAndPosition in
        simple_selector_list. These happened to work, but are only actually
        needed in selector_list.
        * css/CSSParserValues.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::specificityForOneSelector):
        Removed null-check. The parser null-checks, I don't see why we need to here.
        (WebCore::CSSSelector::selectorText):
        Ditto.
        (WebCore::CSSSelector::setArgument):
        (WebCore::CSSSelector::isSimple):
        * css/CSSSelector.h:
        * css/CSSSelectorList.cpp:
        (WebCore::forEachTagSelector):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        (WebCore::collectFeaturesFromSelector):
        (WebCore::collectFeaturesFromList):

2011-03-23  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Hyatt.

        Made sure that renderers displaying counters are invalidated upon
        counter destruction.

        Assertion and incorrect rendering of counters.
        https://bugs.webkit.org/show_bug.cgi?id=56896

        Test: fast/css/counters/2displays.html

        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::~CounterNode):
        Added to make sure that its display renderers are always reset when
        the node is deleted.
        (WebCore::CounterNode::resetRenderers):
        Fixed bug that would prevent reset of second and subsequent
        display renderers.
        * rendering/CounterNode.h:
        * rendering/RenderCounter.cpp:
        (WebCore::destroyCounterNodeWithoutMapRemoval):
        removed unnecessary calls to resetRenderers() as the CounterNode
        destructor takes care of that now.

2011-03-23  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Need API to manage the Media Cache
        https://bugs.webkit.org/show_bug.cgi?id=56878
        <rdar://problem/9082503>

        Add functions that need to be exported.

        * WebCore.exp.in:

2011-03-23  Robert Kroeger  <rjkroege@chromium.org>

        Reviewed by James Robinson.

        Correct use of ENABLE() Macro

        In http://trac.webkit.org/changeset/81618, I mis-used the ENABLE()
        macro. This patch corrects.

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

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::handleTouchEvent):
        * page/EventHandler.h:

2011-03-23  Jer Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        Scrubbing <video> with HTTP Live Stream resizes element to 0x0
        https://bugs.webkit.org/show_bug.cgi?id=55702

        QTKit will occasionally set the natural size of a QTMovie to 0x0 while scrubbing
        an HTTP Live Stream.  So we will cache the last valid value returned by QTKit
        and use that as our naturalSize until a new valid value is returned.

        Unfortunately, QTKit will also fail to generate a notification when the natural size
        changes, so we are forced to cache the natural size from within naturalSize(), which
        is a const function, necessitating a const_cast to set m_cachedNaturalSize.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h: Added m_cachedNaturalSize.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::MediaPlayerPrivateQTKit): Initialize m_cachedNaturalSize.
        (WebCore::MediaPlayerPrivateQTKit::naturalSize): 

2011-03-23  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        Removed a stray parenthesis.

2011-03-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION: Infinite recursion in recursiveCheckLoadComplete()/checkLoadCompleteForThisFrame()/stopLoading()
        https://bugs.webkit.org/show_bug.cgi?id=56978
        <rdar://problem/9041670>

        No new tests, because there is no known way to reproduce.

        Removed strange code that was trying to stop a non-loading provisional document loader and
        even its subframes (?!). Added assertions to catch it if we can actually be loading here in
        some sense.
        Rewrote a condition for clarity - starting with r43148, it was acting as an opposite of a
        recursion guard (but that didn't cause immediate problems then).

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::checkLoadCompleteForThisFrame):

2011-03-23  Brady Eidson  <beidson@apple.com>

        Attempt to fix the build for platforms that have the icon database 
        disabled but still provide settings API for it...?

        * loader/icon/IconDatabase.h:
        (WebCore::IconDatabase::defaultDatabaseFilename):

2011-03-23  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        * WebCore.exp.in: Export the new version of IconDatabase::open.

2011-03-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Change IconDatabase opening to allow for arbitrary filenames
        https://bugs.webkit.org/show_bug.cgi?id=56977

        * WebCore.exp.in:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):
        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabaseBase.cpp:
        (WebCore::IconDatabaseBase::open):
        * loader/icon/IconDatabaseBase.h:
        * loader/icon/IconDatabaseClient.h:

2011-03-23  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        [chromium] WebGLRenderingContext and other DOMWindow properties should remain if WebGL is disabled
        https://bugs.webkit.org/show_bug.cgi?id=56947

        Removed the RuntimeEnabledFeatures setting for WebGL and the
        EnabledAtRuntime extended attribute from the WebGL-related
        properties on the DOMWindow. WebGL support is now controlled
        exclusively through the page's Settings.

        No new tests; tested manually in Chromium with --disable-webgl
        command line argument and blacklist.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        * page/DOMWindow.idl:

2011-03-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81802.
        http://trac.webkit.org/changeset/81802
        https://bugs.webkit.org/show_bug.cgi?id=56963

        Broke a layout test, and this fix is not trivial. (Requested
        by dhyatt on #webkit).

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::layoutOnlyPositionedObjects):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::styleWillChange):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::adjustStyleDifference):
        (WebCore::RenderObject::setStyle):
        (WebCore::RenderObject::styleDidChange):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::needsLayout):
        (WebCore::RenderObject::needsPositionedMovementLayoutOnly):
        (WebCore::RenderObject::setNeedsLayout):
        (WebCore::RenderObject::setChildNeedsLayout):
        (WebCore::RenderObject::markContainingBlocksForLayout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyleConstants.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):

2011-03-23  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by David Hyatt.

        REGRESSION(81035): crash in RenderDetails::removeChild
        https://bugs.webkit.org/show_bug.cgi?id=56773

        Test: fast/html/details-children-merge-crash.html

        Preventing merging of RenderDetails's anonymous children.

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

        Fixing RenderDetails::removeChild and cleaning m_marker in RenderDetails::destroy.

        * rendering/RenderDetails.cpp:
        (WebCore::RenderDetails::destroy):
        (WebCore::RenderDetails::removeChild):

2011-03-23  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Hyatt.

        Preserve unicode-bidi:bidi-override in anonymous block.
        https://bugs.webkit.org/show_bug.cgi?id=21440

        unicode-bidi:bidi-override should be preserved in anonymous block
        according to http://www.w3.org/TR/CSS21/visuren.html#propdef-unicode-bidi.

        Introduce a helper function RenderStyle()::createAnonymousStyle() which
        creates a default RenderStyle, inherits the inherited style from parent,
        and inherit unicode-bidi:bidi-override from parent.
        And replace the style creation when anonymous block is created.

        Note: the TABLE releated anonymous blocks are untouched, including:
        TABLE, TABLE_CELL, TABLE_ROW, TABLE_ROW_GROUP anonymous blocks created in
        RenderObject, RenderTable, RenderTableRow, and RenderTableSection,
        due to the expected behavior is not clear.
        Please refer to https://bugs.webkit.org/show_bug.cgi?id=56594.
        
        Test: fast/css/bidi-override-in-anonymous-block.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::removeChild):
        (WebCore::RenderBlock::createAnonymousBlock):
        (WebCore::RenderBlock::createAnonymousColumnsBlock):
        (WebCore::RenderBlock::createAnonymousColumnSpanBlock):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChildIgnoringContinuation):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::createRubyBase):
        (WebCore::RenderRubyRun::staticCreateRubyRun):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::createAnonymousStyle):
        * rendering/style/RenderStyle.h:

2011-03-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=56909
        
        Add a simplified normal flow layout path optimization for overflow recomputation
        and for positioned objects inside relative positioned containers.

        Currently there is an optimized code path for positioned objects, but as soon as
        we encounter a normal flow object in the containing block chain, we lose the
        optimization.

        This patch adds a new type of style difference called SimplifiedLayout that is
        returned when only overflow needs to be recomputed. Whenever opacity changes or
        a transform changes, this is the hint returned now instead of a full layout.
        
        In addition, when positioned objects need layout and start marking up the
        containing block chain, we now propagate the fact that the layout is simplified
        all the way up to the root, even when we encounter normal flow containing
        blocks.
        
        The layoutOnlyPositionedObjects function has been renamed to simplifiedLayout()
        and is now used for all of these cases (in addition to what it handled before).
        
        No new tests, since existing tests covered this very well (especially the opacity
        and transforms repaint tests in fast/repaint).

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::simplifiedNormalFlowLayout):
        (WebCore::RenderBlock::simplifiedLayout):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::styleWillChange):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::adjustStyleDifference):
        (WebCore::RenderObject::setStyle):
        (WebCore::RenderObject::styleDidChange):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::needsLayout):
        (WebCore::RenderObject::needsPositionedMovementLayoutOnly):
        (WebCore::RenderObject::needsSimplifiedNormalFlowLayout):
        (WebCore::RenderObject::setNeedsLayout):
        (WebCore::RenderObject::setChildNeedsLayout):
        (WebCore::RenderObject::setNeedsSimplifiedNormalFlowLayout):
        (WebCore::RenderObject::markContainingBlocksForLayout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyleConstants.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):

2011-03-23  Tyler Close  <tjclose@chromium.org>

        Reviewed by Jeremy Orlow.

        Fix ambiguous method call in V8 IDL generated code for DOMStringList callback parameter
        https://bugs.webkit.org/show_bug.cgi?id=56950

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/CPP/WebDOMTestCallback.cpp:
        (WebDOMTestCallback::callbackWithStringList):
        * bindings/scripts/test/CPP/WebDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (webkit_dom_test_callback_callback_with_string_list):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::callbackWithStringList):
        * bindings/scripts/test/JS/JSTestCallback.h:
        * bindings/scripts/test/ObjC/DOMTestCallback.h:
        * bindings/scripts/test/ObjC/DOMTestCallback.mm:
        (-[DOMTestCallback callbackWithStringList:]):
        * bindings/scripts/test/TestCallback.idl:
        * bindings/scripts/test/V8/V8TestCallback.cpp:
        (WebCore::V8TestCallback::callbackWithStringList):
        * bindings/scripts/test/V8/V8TestCallback.h:

2011-03-23  Cris Neckar  <cdn@chromium.org>

        Reviewed by Eric Seidel.

        Add refptr for widget. Mutations can happen within the event handler.
        https://bugs.webkit.org/show_bug.cgi?id=56774

        Test: plugins/change-widget-and-click-crash.html

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler):

2011-03-23  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Add combine text cast checks since style property is insufficient
        in telling object types.
        https://bugs.webkit.org/show_bug.cgi?id=56358

        Test: fast/text/input-box-text-fragment-combine-text-crash.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):

2011-03-23  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] "Unwavering" HTML5 game freezes the web page.
        https://bugs.webkit.org/show_bug.cgi?id=56944

        For canvas's getImageData() API, we don't want to make a deep-copy of
        the pixels, which is the case on Qt's "raster" graphics system.

        To work around this, we trick QPixmap::toImage() into giving us the
        QPixmap's backing QImage by temporarily pointing the paint engine to
        a null paint device.

        * platform/graphics/qt/ImageBufferData.h:
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBufferData::toQImage): Added, returns the
        ImageBufferData as a QImage, avoiding a backend deep-copy if possible.
        (WebCore::ImageBuffer::platformTransformColorSpace):
        (WebCore::getImageData):

2011-03-23  Viet-Trung Luu  <viettrungluu@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Add FormatPlainText to WebClipboard::Format enumeration.
        https://bugs.webkit.org/show_bug.cgi?id=56868

        Chromium's WebClipboard::isFormatAvailable() will be correspondingly
        extended.

        * platform/chromium/PasteboardPrivate.h: Add corresponding enum entry.
            This part of the change is inert and should have no effect.

2011-03-23  Tyler Close  <tjclose@chromium.org>

        Reviewed by Jeremy Orlow.

        run-bindings-tests reference files are out of sync with CodeGenerator*.pm
        https://bugs.webkit.org/show_bug.cgi?id=56934

        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::createStructure):
        (WebCore::JSTestInterfaceConstructor::JSTestInterfaceConstructor):
        (WebCore::JSTestInterface::createPrototype):
        * bindings/scripts/test/JS/JSTestInterface.h:
        (WebCore::JSTestInterface::createStructure):
        (WebCore::JSTestInterfacePrototype::createStructure):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::createStructure):
        (WebCore::JSTestMediaQueryListListenerConstructor::JSTestMediaQueryListListenerConstructor):
        (WebCore::JSTestMediaQueryListListener::createPrototype):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        (WebCore::JSTestMediaQueryListListener::createStructure):
        (WebCore::JSTestMediaQueryListListenerPrototype::createStructure):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::createStructure):
        (WebCore::JSTestObjConstructor::JSTestObjConstructor):
        (WebCore::JSTestObj::createPrototype):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore::JSTestObj::createStructure):
        (WebCore::JSTestObjPrototype::createStructure):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::createStructure):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::JSTestSerializedScriptValueInterfaceConstructor):
        (WebCore::JSTestSerializedScriptValueInterface::createPrototype):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        (WebCore::JSTestSerializedScriptValueInterface::createStructure):
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::createStructure):
        * bindings/scripts/test/V8/V8TestCallback.cpp:
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::wrapSlow):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::wrapSlow):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::wrapSlow):

2011-03-23  Daniel Bates  <dbates@rim.com>

        Reviewed by Antonio Gomes.

        Clean up: Rename HTMLFrameSetElement::{noresize, frameborder, and frameBorderSet}
        to conform to the WebKit Code style guidelines
        https://bugs.webkit.org/show_bug.cgi?id=56871

        No functionality changed. So, no new tests.

        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::HTMLFrameSetElement):
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        (WebCore::HTMLFrameSetElement::attach):
        (WebCore::HTMLFrameSetElement::defaultEventHandler):
        * html/HTMLFrameSetElement.h:
        (WebCore::HTMLFrameSetElement::hasFrameBorder):
        (WebCore::HTMLFrameSetElement::noResize):

2011-03-23  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dan Bernstein.

        Replace height with logicalHeight when removing items from
        gPercentHeightDescendantMap so that it is writing mode aware.
        https://bugs.webkit.org/show_bug.cgi?id=56902

        Test: fast/block/percent-height-descendant-not-removed-crash.html

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

2011-03-23  Anders Carlsson  <andersca@apple.com>

        Fix clang build.

        * inspector/DOMNodeHighlighter.cpp:
        Remove an unused function.

2011-03-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Add asynchronous load decision call to WebKit2 IconDatabase
        https://bugs.webkit.org/show_bug.cgi?id=56887

        Clear the callback when it's made:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::continueIconLoadWithDecision):

        Don't load icons when using new-style icon database if in private browsing:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueIconLoadWithDecision):
        
        Enhance the IconDatabase callbacks to have an ID and inherit from a common base:
        * loader/icon/IconDatabaseBase.h:
        (WebCore::CallbackBase::~CallbackBase):
        (WebCore::CallbackBase::callbackID):
        (WebCore::CallbackBase::CallbackBase):
        (WebCore::CallbackBase::context):
        (WebCore::CallbackBase::generateCallbackID):
        (WebCore::EnumCallback::performCallback):
        (WebCore::EnumCallback::EnumCallback):
        (WebCore::ObjectCallback::performCallback):
        (WebCore::ObjectCallback::ObjectCallback):

2011-03-21  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move scripts concatenation logic to SourceFile.
        https://bugs.webkit.org/show_bug.cgi?id=56756

        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile.prototype._requestContent):
        (WebInspector.SourceFile.prototype._loadResourceContent):
        (WebInspector.SourceFile.prototype._loadAndConcatenateScriptsContent):
        (WebInspector.SourceFile.prototype._concatenateScriptsContent):

2011-03-23  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Steve Block.

        Media Stream API: add a flag to RuntimeEnabledFeatures.
        https://bugs.webkit.org/show_bug.cgi?id=56921

        Add a flag to RuntimeEnabledFeatures to check if the Media Stream API is enabled at runtime.

        Tests for the Media Stream API will be provided by the bug 56587.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::mediaStreamEnabled):
        (WebCore::RuntimeEnabledFeatures::setMediaStreamEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitGetUserMediaEnabled):

2011-03-23  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Hyatt.

        Modified RenderCounter::originalText() to correctly attach
        the created counter to the before/after container even when
        that is not the RenderCounter's direct parent.

        CSS 2.1 failure: various before-after-* tests fail
        https://bugs.webkit.org/show_bug.cgi?id=47207

        Test: fast/css/counters/complex-before.html

        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::originalText):

2011-03-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Add play / pause button to media control
        https://bugs.webkit.org/show_bug.cgi?id=55463

        Add play|pause button to media control.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::edjeGroupFromFormType):
        (WebCore::RenderThemeEfl::emitMediaButtonSignal): Added.
        (WebCore::RenderThemeEfl::paintMediaPlayButton):
        * platform/efl/RenderThemeEfl.h:

2011-03-23  Aparna Nandyal  <aparna.nand@wipro.com>

        Reviewed by Andreas Kling.

        [Qt] QtWebKit rendering problem when maximizing and doing a back
        https://bugs.webkit.org/show_bug.cgi?id=56669

        Contents of the page are not re-sized on going back after
        maximizing. ContentsResized() is not getting called. Hence old
        document width and height are used. Corrected this behaviour by 
        calling setBoundsSize() which calls contentsSize(). 

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::open):

2011-03-21  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add support for formating source files in debugger presentation model.
        https://bugs.webkit.org/show_bug.cgi?id=56558

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.reset):
        (WebInspector.DebuggerModel.prototype.get scripts):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._addScript):
        (WebInspector.DebuggerPresentationModel.prototype._refreshBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype.continueToLine):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype._sourceFileForScript):
        (WebInspector.DebuggerPresentationModel.prototype._reset):
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter.prototype.formatContent.didFormatChunks):
        (WebInspector.ScriptFormatter.prototype.formatContent):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype._toggleFormatSourceFiles):
        * inspector/front-end/Settings.js:
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile.prototype.scriptLocationToSourceLocation):
        (WebInspector.SourceFile.prototype.sourceLocationToScriptLocation):
        (WebInspector.FormattedSourceFile):
        (WebInspector.FormattedSourceFile.prototype.scriptLocationToSourceLocation):
        (WebInspector.FormattedSourceFile.prototype.sourceLocationToScriptLocation):
        (WebInspector.FormattedSourceFile.prototype._didRequestContent):

2011-03-23  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: use unsigned char instead of char when storing script source
        https://bugs.webkit.org/show_bug.cgi?id=56920

        * bindings/v8/DebuggerScript.js:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ensureDebuggerScriptCompiled):
        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::injectedScriptSource):
        * inspector/InjectedScriptSource.js: whitespace change to trigger compilation
        * inspector/xxd.pl:
        * xml/XMLViewer.xsl:

2011-03-23  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move node searching and node highlight related methods from InspectorAgent to InspectorDOMAgent.
        https://bugs.webkit.org/show_bug.cgi?id=56912

        The next functions were moved:
            setSearchingForNode
            highlightDOMNode
            hideDOMNodeHighlight
            highlightFrame
            hideFrameHighlight
            mouseDidMoveOverElement
            handleMousePress

        The code which does real highlight in Graphic context was moved to new files DOMNodeHighlighter.*

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/DOMNodeHighlighter.cpp: Added.
        (WebCore::DOMNodeHighlighter::DrawNodeHighlight):
        * inspector/DOMNodeHighlighter.h: Added.
        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::~InspectorAgent):
        (WebCore::InspectorAgent::inspectedPageDestroyed):
        (WebCore::InspectorAgent::disconnectFrontend):
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::drawNodeHighlight):
        (WebCore::InspectorController::hideHighlight):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::~InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::clearFrontend):
        (WebCore::InspectorDOMAgent::handleMousePress):
        (WebCore::InspectorDOMAgent::mouseDidMoveOverElement):
        (WebCore::InspectorDOMAgent::searchingForNodeInPage):
        (WebCore::InspectorDOMAgent::setSearchingForNode):
        (WebCore::InspectorDOMAgent::highlight):
        (WebCore::InspectorDOMAgent::highlightDOMNode):
        (WebCore::InspectorDOMAgent::highlightFrame):
        (WebCore::InspectorDOMAgent::hideHighlight):
        (WebCore::InspectorDOMAgent::drawNodeHighlight):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::hideDOMNodeHighlight):
        (WebCore::InspectorDOMAgent::hideFrameHighlight):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::mouseDidMoveOverElementImpl):
        (WebCore::InspectorInstrumentation::handleMousePressImpl):
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::inspectorAgent):
        (WebCore::InstrumentingAgents::setInspectorAgent):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.setSearchingForNode):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameTreeElement.prototype.onselect):
        (WebInspector.FrameTreeElement.prototype.set hovered):
        * inspector/front-end/inspector.js:
        (WebInspector.highlightDOMNode):

2011-03-23  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Rollout r81768 which broke compilation on Win.

        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/XMLViewer.xsl:

2011-03-23  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove unnecessary reinterpret_cast in XMLTreeViewer
        https://bugs.webkit.org/show_bug.cgi?id=56919

        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/XMLViewer.xsl: whitespace change to trigger compilation.

2011-03-21  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move content loading logic to a new SourceFile class.
        https://bugs.webkit.org/show_bug.cgi?id=56748

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.requestSourceFileContent):
        (WebInspector.DebuggerPresentationModel.prototype._addScript.contentChanged):
        (WebInspector.DebuggerPresentationModel.prototype._addScript):
        (WebInspector.DebuggerPresentationModel.prototype._scriptSourceChanged):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        * inspector/front-end/SourceFile.js: Added.
        (WebInspector.SourceFile):
        (WebInspector.SourceFile.prototype.addScript):
        (WebInspector.SourceFile.prototype.requestContent):
        (WebInspector.SourceFile.prototype.forceLoadContent):
        (WebInspector.SourceFile.prototype.reload):
        (WebInspector.SourceFile.prototype._requestContent):
        (WebInspector.SourceFile.prototype._loadResourceContent):
        (WebInspector.SourceFile.prototype._loadScriptContent):
        (WebInspector.SourceFile.prototype._loadAndConcatenateScriptsContent):
        (WebInspector.SourceFile.prototype._didRequestContent):
        (WebInspector.SourceFile.prototype._hasPendingResource):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-03-23  Pavel Podivilov  <podivilov@chromium.org>

        Unreviewed, fix compilation broken by r81758.

        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):

2011-03-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: define array types properly in the Inspector.json
        https://bugs.webkit.org/show_bug.cgi?id=56915

        * inspector/Inspector.json:
        * inspector/generate-inspector-idl:

2011-03-23  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [V8] Web Inspector: compile DebuggerScript.js into DebuggerScriptSource.h
        https://bugs.webkit.org/show_bug.cgi?id=56843

        * inspector/front-end/WebKit.qrc:

2011-03-23  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Add a star while editing a source code
        https://bugs.webkit.org/show_bug.cgi?id=56743

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.setScriptSourceIsBeingEdited):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.setScriptSourceIsBeingEdited):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._startEditing):
        (WebInspector.SourceFrame.prototype._registerShortcuts):
        (WebInspector.SourceFrame.prototype._handleSave):
        (WebInspector.SourceFrame.prototype._handleRevertEditing):
        (WebInspector.SourceFrameDelegate.prototype.setScriptSourceIsBeingEdited):

2011-03-23  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Scrolling and navigation is not smooth on a script with many long lines
        https://bugs.webkit.org/show_bug.cgi?id=56559

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorChunkedPanel.prototype._expandChunks):
        (WebInspector.TextEditorMainPanel.prototype._expandChunks):
        (WebInspector.TextEditorMainPanel.prototype._highlightDataReady):
        (WebInspector.TextEditorMainPanel.prototype._schedulePaintLines):
        (WebInspector.TextEditorMainPanel.prototype._paintScheduledLines):
        (WebInspector.TextEditorMainPanel.prototype._restorePaintLinesOperationsCredit):
        (WebInspector.TextEditorMainPanel.prototype._paintLines):
        (WebInspector.TextEditorMainPanel.prototype._paintLine):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):

2011-03-22  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [V8] Web Inspector: compile DebuggerScript.js into DebuggerScriptSource.h
        https://bugs.webkit.org/show_bug.cgi?id=56843

        DebuggerScript.js is now translated into a char[] array before inspector compilation.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ensureDebuggerScriptCompiled):
        * bindings/v8/ScriptDebugServer.h:
        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::injectedScriptSource):
        * inspector/InjectedScriptSource.js: whitespace change to trigger InjectedScriptSource.h generation.
        * inspector/xxd.pl:

2011-03-23  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::initializeNewContext):

2011-03-22  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Ojan Vafai.

        [chromium] skia image encoders should use <wtf/Vector.h>
        https://bugs.webkit.org/show_bug.cgi?id=56893

        No new tests. Covered by existing canvas.toDataURL tests.

        * platform/image-encoders/skia/JPEGImageEncoder.h:
        * platform/image-encoders/skia/PNGImageEncoder.h:

2011-03-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        Move the cellWidthChanged bit out of RenderObject and back down into RenderTableCell in order to
        free up a bit for another performance optimization I have planned.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::setHasColumns):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::cellWidthChanged):
        (WebCore::RenderTableCell::setCellWidthChanged):

2011-03-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=56892
        
        Adding floats to an empty block is O(n^2). 

        If you just add floats back to back to an empty block, the addition is essentially O(n^2)
        once the floats move below your current line position.  This is because we repeatedly ask for the
        available width for the line from scratch every time we add a float, regardless of whether the
        float even vertically intersected our current line position.
        
        Change positionNewFloatOnLine to update left and right line offsets intelligently and to only
        do it based off the single new float that just got added.
        
        This fix cuts the IE MazeSolver time in half.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionNewFloatOnLine):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::skipLeadingWhitespace):
        (WebCore::RenderBlock::findNextLineBreak):

2011-03-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=56890 It is possible to calculate a 
        NaN value for "value" in ScrollbarThemeMac::paint()
        -and corresponding-
        <rdar://problem/9160621>

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

2011-03-17  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Antti Koivisto.

        webkit should implement -moz-any selector (as -webkit-any obviously)
        https://bugs.webkit.org/show_bug.cgi?id=38095

        For now, match the Mozilla implementation with respect to specificity
        and only allowing simple selectors. Both of these are likely to change
        pending discussion on www-style@. 

        Tests: fast/css/pseudo-any.html
               fast/dom/SelectorAPI/unknown-pseudo.html

        * css/CSSGrammar.y:
        Create simple_selector_list. This is exactly like selector_list
        except it only allows simple selectors and creates a new vector
        instead of a reusable one since there can be multiple in one rule.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::~CSSParser):
        (WebCore::CSSParser::lex):
        (WebCore::CSSParser::createFloatingSelectorVector):
        (WebCore::CSSParser::sinkFloatingSelectorVector):
        * css/CSSParser.h:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::adoptSelectorVector):
        * css/CSSParserValues.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::specificityForOneSelector):
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        (WebCore::CSSSelector::selectorText):
        (WebCore::CSSSelector::setSelectorList):
        (WebCore::CSSSelector::RareData::RareData):
        (WebCore::CSSSelector::RareData::~RareData):
        These need to be moved into the cpp file so that we can
        have an OwnPtr<CSSSelectorList> in CSSSelector::RareData.
        * css/CSSSelector.h:
        (WebCore::CSSSelector::selectorList):
        * css/CSSSelectorList.cpp:
        (WebCore::forEachTagSelector):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        (WebCore::collectFeaturesFromSelector):
        * css/tokenizer.flex:

2011-03-22  John Bauman  <jbauman@chromium.org>

        Reviewed by Kenneth Russell.

        Add support for preserveDrawingBuffer context creation attribute
        https://bugs.webkit.org/show_bug.cgi?id=56431

        For the accelerated compositing case, only prepare the texture if it
        has been updated since the last composite. For the non-accelerated case, make sure to
        grab a copy of the image buffer and paint from that if the backbuffer
        would be cleared.

        In both cases, make sure to clear the context's backbuffer before the
        first operation that uses it.

        No new tests. It seems to be difficult/impossible to trigger an early
        compositing operation in DumpRenderTree, making this hard to
        test automatically. However, Chromium and Safari (Mac) have been
        tested manually on the webgl conformance test for this.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::makePresentationCopy):
        (WebCore::HTMLCanvasElement::clearPresentationCopy):
        * html/HTMLCanvasElement.h:
        * html/canvas/WebGLContextAttributes.cpp:
        (WebCore::WebGLContextAttributes::preserveDrawingBuffer):
        (WebCore::WebGLContextAttributes::setPreserveDrawingBuffer):
        * html/canvas/WebGLContextAttributes.h:
        * html/canvas/WebGLContextAttributes.idl:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::initializeNewContext):
        (WebCore::WebGLRenderingContext::markContextChanged):
        (WebCore::WebGLRenderingContext::clearIfComposited):
        (WebCore::WebGLRenderingContext::markLayerComposited):
        (WebCore::WebGLRenderingContext::paintRenderingResultsToCanvas):
        (WebCore::WebGLRenderingContext::paintRenderingResultsToImageData):
        (WebCore::WebGLRenderingContext::clear):
        (WebCore::WebGLRenderingContext::clearColor):
        (WebCore::WebGLRenderingContext::clearDepth):
        (WebCore::WebGLRenderingContext::clearStencil):
        (WebCore::WebGLRenderingContext::colorMask):
        (WebCore::WebGLRenderingContext::disable):
        (WebCore::WebGLRenderingContext::drawArrays):
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::enable):
        (WebCore::WebGLRenderingContext::readPixels):
        * html/canvas/WebGLRenderingContext.h:
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::Attributes::Attributes):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::updateContentsIfDirty):
        (WebCore::WebGLLayerChromium::textureUpdated):
        (WebCore::WebGLLayerChromium::setContext):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        * platform/graphics/mac/GraphicsContext3DMac.mm
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::GraphicsContext3D::prepareTexture):
        (WebCore::GraphicsContext3D::activeTexture):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::markContextChanged):
        (WebCore::GraphicsContext3D::markLayerComposited):
        (WebCore::GraphicsContext3D::layerComposited):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::GraphicsContext3DInternal):
        (WebCore::GraphicsContext3D::markLayerComposited):
        (WebCore::GraphicsContext3D::markContextChanged):
        (WebCore::GraphicsContext3D::layerComposited):

2011-03-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Remove USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER.
        <rdar://problem/8944718> 

        * DerivedSources.make:
        Remove generation of HeaderDetection.h.

        * WebCore.xcodeproj/project.pbxproj:
        Remove HeaderDetection.h.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        Replace use of USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER with USE(WK_SCROLLBAR_PAINTER).

2011-03-22  Victoria Kirst  <vrk@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Properly reset VideoLayerChromium textures after lost renderer context
        https://bugs.webkit.org/show_bug.cgi?id=56514

        The VideoLayerChromium textures were still mapped to the old
        renderer's context when LayerRendererChromium was being recreated
        i.e. when GPU process is killed. This patch allows VideoLayerChromium
        it recreate textures in the new context when the old renderer is lost.
        Patch also does a bit of refactoring and code clean-up.

        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::~VideoLayerChromium):
        (WebCore::VideoLayerChromium::cleanupResources):
        (WebCore::VideoLayerChromium::updateContentsIfDirty):
        (WebCore::VideoLayerChromium::allocateTexturesIfNeeded):
        (WebCore::VideoLayerChromium::computeVisibleSize):
        (WebCore::VideoLayerChromium::drawYUV):
        (WebCore::VideoLayerChromium::drawRGBA):
        (WebCore::VideoLayerChromium::resetFrameParameters):
        (WebCore::VideoLayerChromium::saveCurrentFrame):
        * platform/graphics/chromium/VideoLayerChromium.h:

2011-03-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should export the headers needed by WebKit
        https://bugs.webkit.org/show_bug.cgi?id=56883

        * WebCore.gypi:
        * gyp/WebCore.gyp:
            - Export a couple more headers.
            - Remove FIXME comments for things we've already fixed.

2011-03-22  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        Add +[WebApplicationCache getOriginsWithCache]
        https://bugs.webkit.org/show_bug.cgi?id=56722

        Added test that exercises WebCore API to get origins with application cache.

        Test: http/tests/appcache/origins-with-appcache.html

        * loader/appcache/ApplicationCacheStorage.cpp: 
        (WebCore::ApplicationCacheStorage::getOriginsWithCache):
        * loader/appcache/ApplicationCacheStorage.h:

2011-03-22  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Hyatt.

        Introduced double linkage between a CounterNode and its display renderer.

        use of freed pointer in WebCore::RenderCounter::originalText()
        https://bugs.webkit.org/show_bug.cgi?id=56065

        No new tests. This bug could only be reproduced manually by
        refreshing the page during load at a critical point.
        See bug attachment for testing.

        * rendering/CounterNode.cpp:
        Introduced new member "m_owner" to store the renderer that has the
        style directives that produce the CounterNode.
        Repurposed m_renderer to reffer to the RenderCounter that shows the
        CounterNode.
        (WebCore::CounterNode::CounterNode):
        Updated member initialization.
        (WebCore::CounterNode::create):
        (WebCore::CounterNode::addRenderer):
        (WebCore::CounterNode::removeRenderer):
        Introduced to manage the renderer list associated wit this CounterNode.
        (WebCore::CounterNode::resetRenderers):
        This is the old resetRenderer. Renamed to take into account that there may be
        more than one renderer to a CounterNode.
        (WebCore::CounterNode::resetThisAndDescendantsRenderers):
        This is the old resetRenderers renamed for clarity.
        (WebCore::CounterNode::recount):
        (WebCore::CounterNode::insertAfter):
        (WebCore::CounterNode::removeChild):
        No functional changes.
        (WebCore::showTreeAndMark):
        Added flushing to ensure that the output is complete.
        * rendering/CounterNode.h:
        (WebCore::CounterNode::owner):
        Renamed from renderer()
        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):
        Fixed comments. No functional changes.
        (WebCore::RenderCounter::~RenderCounter):
        Made sure that the CounterNode that this renderers displays is
        detached from this.
        (WebCore::RenderCounter::originalText):
        (WebCore::RenderCounter::invalidate):
        Changed to maintain the bidirectional relationship with the displayed CounterNode.
        Also made "invalidate" private as it should be used only by CounterNode.
        (WebCore::destroyCounterNodeWithoutMapRemoval):
        (WebCore::RenderCounter::destroyCounterNodes):
        (WebCore::RenderCounter::destroyCounterNode):
        (WebCore::updateCounters):
        No change, just kept code in line with the changes above.
        (showCounterRendererTree):
        Added fflush to ensure complete display.
        * rendering/RenderCounter.h:
        * rendering/RenderObjectChildList.cpp:
        * rendering/RenderObjectChildList.h:
        Removed unneeded invalidateCounters related functions.

2011-03-22  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=56242
        Interrupted accelerated animations/transitions were causing
        subsequent animations to not start (because they were stuck
        waiting for a response from the compositing layer). I renamed
        the instance variable that indicates whether or not to
        notify animations of start time, from m_waitingForStartTimeResponse
        to m_waitingForAsyncStartNotification, so that it makes more sense.
        The actual bug fix was changing the logic so that the flag is reset
        when the list of waiting animations becomes empty. I mistakenly committed
        the bad logic in r81613.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):
        - Always set paused time as we enter the paused state
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate):
        (WebCore::AnimationControllerPrivate::endAnimationUpdate):
        (WebCore::AnimationControllerPrivate::receivedStartTimeResponse):
        (WebCore::AnimationControllerPrivate::addToAnimationsWaitingForStartTimeResponse):
        (WebCore::AnimationControllerPrivate::removeFromAnimationsWaitingForStartTimeResponse):
        - reset the waiting flag when the list is empty (rather than not empty)
        (WebCore::AnimationControllerPrivate::startTimeResponse):
        * page/animation/AnimationControllerPrivate.h:
        - rename m_waitingForStartTimeResponse to m_waitingForAsyncStartNotification

2011-03-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8648311> and https://bugs.webkit.org/show_bug.cgi?id=56876
        WK2 Icon DB: Expand IconDatabaseClient interface and move it to the main thread

        * loader/icon/IconDatabase.cpp:
        Add a dummy client implementation for non-Mac, non-Win ports:
        (WebCore::DefaultIconDatabaseClient::performImport):
        (WebCore::DefaultIconDatabaseClient::didImportIconURLForPageURL):
        (WebCore::DefaultIconDatabaseClient::didImportIconDataForPageURL):
        (WebCore::DefaultIconDatabaseClient::didChangeIconForPageURL):
        (WebCore::DefaultIconDatabaseClient::didRemoveAllIcons):
        (WebCore::DefaultIconDatabaseClient::didFinishURLImport):
        (WebCore::defaultClient):

        Either call the client directly when on the main thread, or use the dispatch functions below
        if on the background thread:
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::setIconURLForPageURL):
        (WebCore::IconDatabase::performURLImport):
        (WebCore::IconDatabase::readFromDatabase):
        (WebCore::IconDatabase::removeAllIconsOnThread):

        Add a very targeted WorkItem interface for dispatching client calls on the main thread:
        (WebCore::ClientWorkItem::ClientWorkItem):
        (WebCore::ClientWorkItem::~ClientWorkItem):
        (WebCore::ImportedIconURLForPageURLWorkItem::ImportedIconURLForPageURLWorkItem):
        (WebCore::ImportedIconURLForPageURLWorkItem::~ImportedIconURLForPageURLWorkItem):
        (WebCore::ImportedIconURLForPageURLWorkItem::performWork):
        (WebCore::ImportedIconDataForPageURLWorkItem::ImportedIconDataForPageURLWorkItem):
        (WebCore::ImportedIconDataForPageURLWorkItem::~ImportedIconDataForPageURLWorkItem):
        (WebCore::ImportedIconDataForPageURLWorkItem::performWork):
        (WebCore::RemovedAllIconsWorkItem::RemovedAllIconsWorkItem):
        (WebCore::RemovedAllIconsWorkItem::performWork):
        (WebCore::performWorkItem):

        Use the client WorkItem interface to perform these callbacks on the main thread:
        (WebCore::IconDatabase::dispatchDidImportIconURLForPageURLOnMainThread):
        (WebCore::IconDatabase::dispatchDidImportIconDataForPageURLOnMainThread):
        (WebCore::IconDatabase::dispatchDidRemoveAllIconsOnMainThread):
        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabaseClient.h:

2011-03-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=56869
        
        Make horizontal writing mode a bit on RenderObject with a fast inlined method for access. This should be
        a little faster than having to access the information from the RenderStyle's sub-structure.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::addOverflowFromChildren):
        (WebCore::RenderBlock::computeOverflow):
        (WebCore::RenderBlock::adjustPositionedBlock):
        (WebCore::RenderBlock::setLogicalLeftForChild):
        (WebCore::RenderBlock::setLogicalTopForChild):
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::paintColumnRules):
        (WebCore::RenderBlock::paintColumnContents):
        (WebCore::RenderBlock::flipFloatForWritingMode):
        (WebCore::blockDirectionOffset):
        (WebCore::inlineDirectionOffset):
        (WebCore::RenderBlock::logicalRectToPhysicalRect):
        (WebCore::RenderBlock::inlineSelectionGaps):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::addIntrudingFloats):
        (WebCore::RenderBlock::hitTestColumns):
        (WebCore::positionForPointRespectingEditingBoundaries):
        (WebCore::RenderBlock::positionForPointWithInlineChildren):
        (WebCore::RenderBlock::positionForPoint):
        (WebCore::RenderBlock::columnRectAt):
        (WebCore::RenderBlock::adjustPointToColumnContents):
        (WebCore::RenderBlock::adjustRectForColumns):
        (WebCore::RenderBlock::flipForWritingModeIncludingColumns):
        (WebCore::RenderBlock::adjustForColumns):
        (WebCore::RenderBlock::lastLineBoxBaseline):
        (WebCore::RenderBlock::nextPageLogicalTop):
        (WebCore::RenderBlock::adjustForUnsplittableChild):
        (WebCore::RenderBlock::adjustLinePositionForPagination):
        (WebCore::RenderBlock::collapsedMarginBeforeForChild):
        (WebCore::RenderBlock::collapsedMarginAfterForChild):
        (WebCore::RenderBlock::marginStartForChild):
        (WebCore::RenderBlock::marginEndForChild):
        (WebCore::RenderBlock::setMarginStartForChild):
        (WebCore::RenderBlock::setMarginEndForChild):
        (WebCore::RenderBlock::marginValuesForChild):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::logicalWidthForChild):
        (WebCore::RenderBlock::logicalHeightForChild):
        (WebCore::RenderBlock::logicalTopForChild):
        (WebCore::RenderBlock::logicalRightOffsetForContent):
        (WebCore::RenderBlock::logicalLeftOffsetForContent):
        (WebCore::RenderBlock::logicalTopForFloat):
        (WebCore::RenderBlock::logicalBottomForFloat):
        (WebCore::RenderBlock::logicalLeftForFloat):
        (WebCore::RenderBlock::logicalRightForFloat):
        (WebCore::RenderBlock::logicalWidthForFloat):
        (WebCore::RenderBlock::setLogicalTopForFloat):
        (WebCore::RenderBlock::setLogicalLeftForFloat):
        (WebCore::RenderBlock::setLogicalHeightForFloat):
        (WebCore::RenderBlock::setLogicalWidthForFloat):
        (WebCore::RenderBlock::xPositionForFloatIncludingMargin):
        (WebCore::RenderBlock::yPositionForFloatIncludingMargin):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::createLineBoxes):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::checkFloatsInCleanLine):
        (WebCore::setStaticPositions):
        (WebCore::RenderBlock::findNextLineBreak):
        (WebCore::RenderBlock::beforeSideVisualOverflowForLine):
        (WebCore::RenderBlock::afterSideVisualOverflowForLine):
        (WebCore::RenderBlock::beforeSideLayoutOverflowForLine):
        (WebCore::RenderBlock::afterSideLayoutOverflowForLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::marginStart):
        (WebCore::RenderBox::marginEnd):
        (WebCore::RenderBox::setMarginStart):
        (WebCore::RenderBox::setMarginEnd):
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::logicalScroll):
        (WebCore::RenderBox::computeLogicalWidth):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned):
        (WebCore::RenderBox::computePositionedLogicalWidth):
        (WebCore::computeLogicalLeftPositionedOffset):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        (WebCore::computeLogicalTopPositionedOffset):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced):
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::flipForWritingMode):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::updateBoxModelInfoFromStyle):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::styleWillChange):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isHorizontalWritingMode):
        (WebCore::RenderObject::setHorizontalWritingMode):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paddingTop):
        (WebCore::RenderTableCell::paddingBottom):
        (WebCore::RenderTableCell::paddingLeft):
        (WebCore::RenderTableCell::paddingRight):
        (WebCore::RenderTableCell::scrollbarsChanged):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        (WebCore::RootInlineBox::lineSelectionGap):
        (WebCore::RootInlineBox::verticalPositionForBox):

2011-03-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Beth Dakin.

        Incorrect rendering of composited element with negative z-index child
        https://bugs.webkit.org/show_bug.cgi?id=56846
        
        When a composited element has a child with negative z-index, we make
        a separate layer for that element's foreground content. This layer
        was positioned incorrectly (but the content happened to paint at
        the right location), resulting in right/bottom clipping.
        
        Fix this, remove the little-used graphicsLayerToContentsCoordinates()
        contentsToGraphicsLayerCoordinates() methods, and optimize incremental
        repaints in the foreground and mask layers.

        Tests: compositing/geometry/foreground-layer.html
               compositing/geometry/repaint-foreground-layer.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setNeedsDisplayInRect): Cull repaints
        which fall outside the layer bounds, so callers don't have to,
        and to avoid unnecessary layer commits.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): If
        we have a foreground layer inside a clipping layer, the foreground
        layer's offset is zero, since the clipping layer is its parent.
        
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect): Use
        offsetFromRenderer() directly instead of contentsToGraphicsLayerCoordinates().
        Also do incremental repaints of the foreground and mask layers.
        
        (WebCore::RenderLayerBacking::paintContents): It was incorrect to always
        use compositedBounds() to compute the painting offset, since that's
        per-RenderLayerBacking, but a single RenderLayerBacking can have different
        GraphicsLayers with different offsets (e.g. the foreground layer).
        Instead, use offsetFromRenderer(), which gives has the correct offset.

        * rendering/RenderLayerBacking.h: Remove unused methods.

2011-03-22  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Use default-output instead of default-input to get hardware sample-rate
        https://bugs.webkit.org/show_bug.cgi?id=56858

        No new tests since audio API is not yet implemented.

        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestination::hardwareSampleRate):

2011-03-22  Pratik Solanki  <psolanki@apple.com>

        Reviewed by David Kilzer.

        Implement -connection:didReceiveDataArray: NSURLConnection delegate method
        https://bugs.webkit.org/show_bug.cgi?id=56838

        Add experimental support for the didReceiveDataArray callback on
        NSURLConnection. A RessourceHandleClient indicates its ability to
        handle this callback by returning true from supportsDataArray() method.
        Currently only SubresourceLoader uses this so we get the benefit for
        CSS, JS and image loads. For other clients we call didReceiveData with
        the CFData contents as before.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.h:
        (WebCore::SubresourceLoader::supportsDataArray):
        * loader/cf/SubresourceLoaderCF.cpp: Added.
        (WebCore::SubresourceLoader::didReceiveDataArray):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::didReceiveDataArray):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::clear):
        (WebCore::SharedBuffer::buffer):
        * platform/SharedBuffer.h:
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::copyDataArrayAndClear):
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::supportsDataArray):
        (WebCore::ResourceHandleClient::didReceiveDataArray):
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveDataArray:]):

2011-03-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make it possible to build JavaScriptCore and WebCore gyp builds outside of Source
        https://bugs.webkit.org/show_bug.cgi?id=56867

        This should make it possible to build the gyp-generated WebCore.xcodeproj
        from a WebCore directory outside of Source.

        * gyp/WebCore.gyp:
        * gyp/run-if-exists.sh: Added.
        * gyp/update-info-plist.sh: Added.

2011-03-22  Anders Carlsson  <andersca@apple.com>

        Fix WebKit2 build.

        * WebCore.exp.in:
        Export a symbol needed by WebKit2.

2011-03-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add the remaining steps to WebCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=56864

        These steps match the normal build.  After this patch, I believe the
        WebCore GYP build is complete.

        * WebCore.gypi:
        * gyp/WebCore.gyp:
        * gyp/copy-inspector-resources.sh: Added.

2011-03-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=56856 RenderListBox needs to be 
        added to Page::scrollableAreaSet()

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::RenderListBox):
        (WebCore::RenderListBox::~RenderListBox):
        * rendering/RenderListBox.h:
        (WebCore::RenderListBox::disconnectFromPage):

2011-03-22  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add high-quality band-limited audio resampling algorithm
        https://bugs.webkit.org/show_bug.cgi?id=56692

        No new tests since audio API is not yet implemented.

        * platform/audio/SincResampler.cpp: Added.
        (WebCore::SincResampler::SincResampler):
        (WebCore::SincResampler::initializeKernel):
        (WebCore::SincResampler::consumeSource):
        (WebCore::SincResampler::process):
        * platform/audio/SincResampler.h: Added.

2011-03-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should build without help from normal WebCore build
        https://bugs.webkit.org/show_bug.cgi?id=56860

        Before this patch, the WebCore GYP build wasn't generating the derived
        sources quite right because the ENABLE macros were not being
        communicated to the "Derived Sources" target.

        This patch also adds the "Copy Forwarding and ICU Headers" as well as
        the "Streamline Inspector Source" steps, which are present in the
        normal build.  Unlike the normal build, these steps occur in a new
        target, called "WebCore Support", which is less than aesthetically
        beautiful.  Hopefully we'll be able to move them into the WebCore
        target proper in the future, but that will likely require some GYP
        changes.

        This patch probably could have been broken down into a couple smaller
        patches, but that doesn't seem necessary.

        * WebCore.gypi:
            - This file appears to no longer exist.
        * gyp/WebCore.gyp:
        * gyp/copy-forwarding-and-icu-headers.sh: Added.
        * gyp/streamline-inspector-source.sh: Added.

2011-03-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=56859
        
        Floats in the floating object list occur in the order that they are positioned. This means
        that for a given vertical offset, the last left object in the list that intersects that offset
        will be the rightmost float. There is no need to check any previous floats, since they have to be
        further left than that rightmost float. The same rules hold true for right-aligned floats.
        
        Change logicalLeft/RightOffsetForLine to iterate backwards instead of forwards and to stop the moment
        they encounter a float that intersects the vertical range.
        
        This cuts the maze solving time for a 20x20 maze in the IE MazeSolver test in half.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::logicalLeftOffsetForLine):
        (WebCore::RenderBlock::logicalRightOffsetForLine):

2011-03-22  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Dirk Schulze.

        SVG displacement map should validate channel selections
        https://bugs.webkit.org/show_bug.cgi?id=56794

        Test: svg/filters/feDisplacementMap-crash-test.xhtml

        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::svgAttributeChanged):

2011-03-22  Huahui Wu  <mediadependent@gmail.com>

        Reviewed by Steve Block.

        [Android] Update PlatformTouchEvent for android so it can pass IDs and states around.
        https://bugs.webkit.org/show_bug.cgi?id=56763

        No new tests as no new functionality is exposed.

        * platform/PlatformTouchEvent.h:
        * platform/android/PlatformTouchEventAndroid.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):

2011-03-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        Implement the CSS3 line-box-contain property. This property provides authors with more control over spacing between lines. For example,
        you can fix the height of lines and cause all line contents to be ignored. You can make lines fit to glyphs. You can ignore leading and
        fit to the font size. You can ignore replaced elements, etc.

        Refactor the code in computeLogicalBoxHeights into helper methods on RootInlineBox. verticalPositionForBox moved over to RootInlineBox
        so that it could be called from RenderBlockLineLayout. ascentAndDescentForBox is the new method that computes the appropriate box
        height based off the block's line-box-contain value.
        
        GlyphOverflow can now have a computeBounds parameter set, in which case glyph bounds will be computed and stored in the overflow struct.
        
        RenderInline no longer returns 0 margins in the block direction, since line-box-contain can size around the margin box.
        
        Added new tests in fast/block/lineboxcontain

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createLineBoxContainValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSLineBoxContainValue.cpp: Added.
        (WebCore::CSSLineBoxContainValue::CSSLineBoxContainValue):
        (WebCore::CSSLineBoxContainValue::cssText):
        * css/CSSLineBoxContainValue.h: Added.
        (WebCore::CSSLineBoxContainValue::create):
        (WebCore::CSSLineBoxContainValue::value):
        (WebCore::CSSLineBoxContainValue::isCSSLineBoxContainValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseLineBoxContain):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValue.h:
        (WebCore::CSSValue::isCSSLineBoxContainValue):
        * css/CSSValueKeywords.in:
        * platform/graphics/Font.cpp:
        (WebCore::Font::width):
        * platform/graphics/Font.h:
        (WebCore::GlyphOverflow::GlyphOverflow):
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::floatWidthForSimpleText):
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::floatWidthForComplexText):
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::floatWidthForComplexText):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::marginLeft):
        (WebCore::RenderInline::marginRight):
        (WebCore::RenderInline::marginTop):
        (WebCore::RenderInline::marginBottom):
        (WebCore::RenderInline::marginBefore):
        (WebCore::RenderInline::marginAfter):
        * rendering/RenderInline.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::width):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        (WebCore::setAscentAndDescent):
        (WebCore::RootInlineBox::ascentAndDescentForBox):
        (WebCore::RootInlineBox::verticalPositionForBox):
        (WebCore::RootInlineBox::includeLeadingForBox):
        (WebCore::RootInlineBox::includeFontForBox):
        (WebCore::RootInlineBox::includeGlyphsForBox):
        (WebCore::RootInlineBox::includeMarginForBox):
        (WebCore::RootInlineBox::fitsToGlyphs):
        (WebCore::RootInlineBox::includesRootLineBoxFontOrLeading):
        * rendering/RootInlineBox.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::lineBoxContain):
        (WebCore::InheritedFlags::setLineBoxContain):
        (WebCore::InheritedFlags::initialLineBoxContain):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:

2011-03-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81653.
        http://trac.webkit.org/changeset/81653
        https://bugs.webkit.org/show_bug.cgi?id=56839

        Breaks fast/text/drawBidiText.html on Chromium. (Requested by
        pfeldman on #webkit).

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):

2011-03-22  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Rolling out 81657, 81654, 81651 for breaking tests on chromium.

        * inspector/Inspector.json:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/front-end/Database.js:
        (WebInspector.DatabaseDispatcher.prototype.addDatabase):

2011-03-21  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [REGRESSION] scripts panel is broken when frontend is reopened.
        https://bugs.webkit.org/show_bug.cgi?id=56747

        Debugger should be enabled on front-end side to guarantee initialization sequence (resources come before scripts).

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::showProfilesPanel):
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::showAndEnableDebugger):
        * inspector/InspectorController.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setFrontend):
        (WebCore::InspectorDebuggerAgent::clearFrontend):
        * inspector/InspectorDebuggerAgent.h:

2011-03-22  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Benjamin Poulain.

        [Qt] WebGL: renderbufferStorage() fails with internal format GL_RGBA4
        https://bugs.webkit.org/show_bug.cgi?id=56824

        On desktop OpenGL substitute in renderbufferStorage:
        - GL_DEPTH24_STENCIL8 for GL_DEPTH_STENCIL
        - GL_DEPTH_COMPONENT for GL_DEPTH_COMPONENT16
        - GL_RGBA for GL_RGBA4 and GL_RGBA565
        - GL_RGB for RGB5_A1.

        Tests: fast/canvas/webgl/uninitialized-test.html

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::renderbufferStorage):

2011-03-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Move volume slider positioning logic to a custom renderer.
        https://bugs.webkit.org/show_bug.cgi?id=56498

        No functional change, covered by existing tests.

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::updateVolumeSliderContainer): Removed positioning logic.
        * rendering/MediaControlElements.cpp:
        (WebCore::RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer): Added.
        (WebCore::RenderMediaVolumeSliderContainer::layout): Added.
        (WebCore::MediaControlVolumeSliderContainerElement::MediaControlVolumeSliderContainerElement): Removed storing of coordinates.
        (WebCore::MediaControlVolumeSliderContainerElement::createRenderer): Added.
        (WebCore::MediaControlVolumeSliderContainerElement::styleForElement): Removed setting of coordinates.
        * rendering/MediaControlElements.h: Changed corresponding decls.

2011-03-22  Andrew Wason  <rectalogic@rectalogic.com>

        Reviewed by Benjamin Poulain.

        [Qt] QWebPage with WebGL content crashes when rendering if no QWebView parent
        https://bugs.webkit.org/show_bug.cgi?id=54138

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::getViewportGLWidget):
         Check if we actually have a QWebPageClient before dereferencing it.

2011-03-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: document DOM domain types and protocol methods.
        https://bugs.webkit.org/show_bug.cgi?id=56807

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::wrapNode):
        * inspector/InjectedScript.h:
        * inspector/Inspector.json:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::removeNode):
        (WebCore::InspectorDOMAgent::setNodeValue):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode.resolvedNode):
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode):
        * inspector/front-end/EventListenersSidebarPane.js:
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.nodeResolved):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.resolveNode):

2011-03-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Production configuration in GYP isn&apos;t set up correctly
        https://bugs.webkit.org/show_bug.cgi?id=56786

        Update WebCore.gyp with information mined from WebCore.xcodeproj.

        * WebCore.gypi:
        * gyp/WebCore.gyp:

2011-03-22  Ofri Wolfus  <ofri@google.com>

        Reviewed by Eric Seidel.

        RTL: Select elements with a size attribute are always left aligned.
        https://bugs.webkit.org/show_bug.cgi?id=50928

        Added support for alignment in RenderListBox.

        Test: fast/forms/listbox-bidi-align.html

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground): Add support for alignment and directionality.

2011-03-22  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Kent Tamura.

        Clear autofilled flag when reseting a form
        In service of https://code.google.com/p/chromium/issues/detail?id=70037
        https://bugs.webkit.org/show_bug.cgi?id=56802

        Test: fast/forms/reset-autofilled.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::reset): Clear the autofilled flag.

2011-03-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: protocol cleanup. DatabaseAgent.
        https://bugs.webkit.org/show_bug.cgi?id=56815

        see protocol metabug:
        - All events should use notification wording, not command wording:

        addDatabase was renamed to DatabaseOpened.

        Test: inspector/protocol/database-agent.html

        * inspector/Inspector.json:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/front-end/Database.js:
        (WebInspector.DatabaseDispatcher.prototype.DatabaseOpened):

2011-03-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: protocol cleanup. ConsoleAgent.
        https://bugs.webkit.org/show_bug.cgi?id=56806

        renamed method: void setConsoleMessagesEnabled(in boolean enabled, out boolean newState); => void enable(out long expiredMessagesCount);
        new method: disable()
        deleted method: [event] void consoleMessageExpiredCountUpdate(out unsigned long count); delete it. The counter will be transfered as out argument of enable command.

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::updateRepeatCountInConsole):
        * inspector/Inspector.json:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::enable):
        (WebCore::InspectorConsoleAgent::disable):
        * inspector/InspectorConsoleAgent.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.consoleMessageRepeatCountUpdated):
        (WebInspector.ConsoleView.prototype.setConsoleMessageExpiredCount):
        * inspector/front-end/inspector.js:

2011-03-22  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        REGRESSION(r80096): Number type input unexpectedly rounds fractional values
        https://bugs.webkit.org/show_bug.cgi?id=56367

        Because the default value of the maximum fractional digits of NSNumberFormatter
        and ICU NumberFormat is 3, the value 0.55555 is rounded to 0.556 in a
        localized representation. This bug affects only in Mac and Chromium.

        To fix this bug,
         - Add "maximum fractional digits" parameter to formatLocalizedNumber(), and
         - NumberInputType::visibleValue uses parseToDoubleForNumberTypeWithDecimalPlaces()
          instead of parseToDoubleForNumberType().

        No automated tests because the behavior is locale-dependent. This change
        updates a manual test.

        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::visibleValue):
          Use parseToDoubleForNumberTypeWithDecimalPlaces() and passing fractional
          part length to formatLocalizedNumber().
        * manual-tests/input-number-localization.html:
          Update the test to cover this change.
        * platform/text/LocalizedNumber.h: Add a parameter to formatLocalizedNumber().
        * platform/text/LocalizedNumberICU.cpp:
        (WebCore::formatLocalizedNumber): Call setMaximumFractionalDigits().
        * platform/text/LocalizedNumberNone.cpp:
        (WebCore::formatLocalizedNumber):
        * platform/text/mac/LocalizedNumberMac.mm:
        (WebCore::formatLocalizedNumber): Call setMaximumFractionalDigits().

2011-03-21  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Eric Seidel.

        Anonymous blocks need isRenderBlock cast check. Also, need
        to allow display BOX for flexible boxes.
        https://bugs.webkit.org/show_bug.cgi?id=56709

        Test: accessibility/anchor-linked-anonymous-block-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::canMergeContiguousAnonymousBlocks): remove specific
        fix in r81088 which is no longer needed.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isAnonymousBlock): Add isRenderBlock cast
        check.

2011-03-21  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Eric Seidel.

        Revert small change made in r78846 of replacing move with positionLineBox
        in the adjusting position function for inline box.
        https://bugs.webkit.org/show_bug.cgi?id=56300

        The change in r78846 caused positioning line boxes during the step of adjusting
        position for inline box, thereby causing line boxes to be nuked. This happens as
        part of aligning boxes in block direction in RenderBlock::computeBlockDirectionPositionsForLine.
        Later on, we do the positioning of line boxes again later in that function. This
        causes use of removed inline box leading to crash. Also, it is unnecessary to do
        this twice.

        Tests: fast/inline/inline-box-adjust-position-crash.html
               fast/inline/inline-box-adjust-position-crash2.html

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::adjustPosition):

2011-03-21  Adam Klein  <adamk@chromium.org>

        Reviewed by David Levin.

        [fileapi] Add URI resolution support to WorkerContext
        https://bugs.webkit.org/show_bug.cgi?id=55644

        Tests: http/tests/filesystem/workers/resolve-url-sync.html
               http/tests/filesystem/workers/resolve-url.html

        * fileapi/LocalFileSystem.cpp:
        (WebCore::LocalFileSystem::readFileSystem):
        Add support for workers.
        * fileapi/LocalFileSystem.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::resolveLocalFileSystemURL):
        (WebCore::WorkerContext::resolveLocalFileSystemSyncURL):
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:

2011-03-21  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        XHR in Workers doesn't set the referrer correctly.
        https://bugs.webkit.org/show_bug.cgi?id=24683

        Tests: http/tests/xmlhttprequest/workers/referer.html
               http/tests/xmlhttprequest/workers/shared-worker-referer.html

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadResourceSynchronously): Fill in empty string for the outgoing referrer.
        (WebCore::DocumentThreadableLoader::create): Added the ability to set the outgoing referrer.
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): Ditto.
        (WebCore::DocumentThreadableLoader::loadRequest): Ditto.
        * loader/DocumentThreadableLoader.h: Ditto.
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::scheduleSubresourceLoad): Ditto.
        * loader/ResourceLoadScheduler.h: Ditto.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create): Fixed bug (caught by the test) in last minute change done in previous check-in.
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader): Fill in the outgoing referrer.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge): Plumbing for the outgoing referrer.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader): Plumbing for the outgoing referrer.
        * loader/WorkerThreadableLoader.h:

2011-03-21  Nate Chapin  <japhet@chromium.org>

        Reviewed by Brady Eidson.

        Do not check the DocumentLoader's request cache policy
        in determining whether we should force revalidation of a cached
        subresource. If the main resource received headers telling it not
        to cache, that policy will be propagated to subresources.

        The previous behavior is left in behind a flag in Settings, since
        QuickLook depends on it.

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

        Tests: http/tests/cache/post-redirect-get.php
               http/tests/cache/post-with-cached-subresources.php

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::subresourceCachePolicy):
        (WebCore::FrameLoader::loadPostRequest):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setUseQuickLookResourceCachingQuirks):
        (WebCore::Settings::useQuickLookResourceCachingQuirks):

2011-03-21  Rik Cabanier  <cabanier@adobe.com>

        Reviewed by James Robinson.

        bug 56052: percentages are incorrectly rounded in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=56052

        test: fast/css/percentage-non-integer.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageProperty):
        * platform/Length.h:
        (WebCore::Length::Length):
        (WebCore::Length::operator*=):
        (WebCore::Length::value):
        (WebCore::Length::percent):
        (WebCore::Length::setValue):
        (WebCore::Length::calcValue):
        (WebCore::Length::calcMinValue):
        (WebCore::Length::isUndefined):
        (WebCore::Length::isZero):
        (WebCore::Length::isPositive):
        (WebCore::Length::isNegative):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::computePreferredLogicalWidths):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        (WebCore::AutoTableLayout::layout):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        (WebCore::FixedTableLayout::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addCell):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/style/BorderData.h:
        (WebCore::BorderData::hasBorderRadius):

2011-03-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add WebCoreExportFileGenerator to WebCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=56778

        This target mirrors the eponymous target from WebCore.xcodeproj.

        * WebCore.gypi:
        * gyp/WebCore.gyp:
        * generate-webcore-export-file-generator.sh: Added.

2011-03-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        WebCore GYP build shouldn&apos;t crash on startup
        https://bugs.webkit.org/show_bug.cgi?id=56776

        Debug builds shouldn't define NDEBUG.  This same logic exists in the
        project.pbxproj file.

        * gyp/WebCore.gyp:

2011-03-21  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Implement glue between DataTransferItems and the pasteboard.
        https://bugs.webkit.org/show_bug.cgi?id=56330

        Support retrieving clipboard data in a paste through DataTransferItems.

        Test: editing/pasteboard/data-transfer-items.html

        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::items):
        * platform/chromium/DataTransferItemChromium.cpp:
        (WebCore::DataTransferItemChromium::createFromPasteboard):
        (WebCore::DataTransferItemChromium::create):
        (WebCore::DataTransferItemChromium::DataTransferItemChromium):
        (WebCore::DataTransferItemChromium::getAsString):
        * platform/chromium/DataTransferItemChromium.h:
        * platform/chromium/DataTransferItemsChromium.cpp:
        (WebCore::DataTransferItemsChromium::addPasteboardItem):
        * platform/chromium/DataTransferItemsChromium.h:

2011-03-21  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: showContextMenu not working in WK2
        https://bugs.webkit.org/show_bug.cgi?id=56734

        WebKit2 is not able to directly open a context menu because the UI is in the other process.
        Instead the chrome client should be used. This also means implementing showContextMenu() in WebKit1
        code.
        
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityShowContextMenu]):

2011-03-21  Robert Kroeger  <rjkroege@chromium.org>

        Reviewed by Antonio Gomes.

        Add Support to WebCore to optionally call a platform-specific gesture recognizer
        https://bugs.webkit.org/show_bug.cgi?id=49345

        Added an ability for the EventHandler to invoke an optional platform
        specific gesture recognizer.

        No tests added because the change should be functionally invisible.

        * WebCore.gypi:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::handleTouchEvent):
        * page/EventHandler.h:
        * platform/PlatformGestureRecognizer.cpp: Added.
        (WebCore::PlatformGestureRecognizer::PlatformGestureRecognizer):
        (WebCore::PlatformGestureRecognizer::~PlatformGestureRecognizer):
        (WebCore::PlatformGestureRecognizer::create):
        * platform/PlatformGestureRecognizer.h: Added.

2011-03-21  Dean Jackson  <dino@apple.com>

        Reviewed by Chris Marrin and Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=56325
        ASSERTION FAILED: paused() in AnimationBase::updateStateMachine()

        AnimationBase had a custom linked-list/self-pointer for keeping
        track of animations that needed to be notified of style updates
        and start progress. This caused problems when AnimationBase was
        destroyed, since the pointer wasn't managed in any way. I replaced
        these pointers with HashSets and moved the code that removes animations
        from the sets into AnimationControllerPrivate, where it belongs.
        CompositeAnimation is also more careful to tell AnimationControllerPrivate
        when it no longer needs to keep track of waiting animations.

        This should stop the style updates being called on non-active animations
        (which was the cause of the state machine error here) and should also
        stop a few of the related flakey test failures and occasional crashes.

        Test: animations/body-removal-crash.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::AnimationBase):
        (WebCore::AnimationBase::updateStateMachine):
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::~AnimationBase):
        - Remove the linked-list
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate):
        (WebCore::AnimationControllerPrivate::addToAnimationsWaitingForStyle):
        (WebCore::AnimationControllerPrivate::removeFromAnimationsWaitingForStyle):
        (WebCore::AnimationControllerPrivate::styleAvailable):
        (WebCore::AnimationControllerPrivate::addToAnimationsWaitingForStartTimeResponse):
        (WebCore::AnimationControllerPrivate::removeFromAnimationsWaitingForStartTimeResponse):
        (WebCore::AnimationControllerPrivate::startTimeResponse):
        (WebCore::AnimationControllerPrivate::animationWillBeRemoved):
        - New method to remove animations from the waiting lists
        * page/animation/AnimationControllerPrivate.h:
        - use a HashSet rather than an AnimationBase* pointer.
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::~CompositeAnimation):
        (WebCore::CompositeAnimation::clearRenderer):
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        - remove the animations and transitions from the lists when we know
          they are no longer active (rather than waiting for the AnimationBase
          to do it when destructing)

2011-03-21  Justin Schuh  <jschuh@chromium.org>

        Reviewed by James Robinson.

        Stop inserting when the parent is removed
        https://bugs.webkit.org/show_bug.cgi?id=56690

        Tests: fast/dom/insertedIntoDocument-child.html
               fast/dom/insertedIntoDocument-iframe.html
               fast/dom/insertedIntoDocument-sibling.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertedIntoDocument):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::insertedIntoDocument):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::insertedIntoDocument):

2011-03-07  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        SubresourceLoader should expose a way to set the outgoing referer/origin
        https://bugs.webkit.org/show_bug.cgi?id=55903

        No new tests as no new functionality is exposed.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * loader/SubresourceLoader.h:

2011-03-21  Daniel Sievers  <sievers@google.com>

        Reviewed by Simon Fraser.

        [Chromium] Make RenderAsTextBehavior and LayerTreeAsTextBehavior tweakable from the DumpRenderTree commandline
        https://bugs.webkit.org/show_bug.cgi?id=56139

        * WebCore.exp.in:
        * WebCore.order:
        * page/Frame.cpp:
        (WebCore::Frame::layerTreeAsText):
        * page/Frame.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        * rendering/RenderLayerCompositor.h:

2011-03-21  Chang Shu  <cshu@webkit.org>

        Reviewed by Alexey Proskuryakov.

        REGRESSION (r79953): Can't type in MS Outlook 2011
        https://bugs.webkit.org/show_bug.cgi?id=56665

        r79953 removed the WebView level editablity which is persistent no matter whether
        underlying document itself is changed and editability gets lost. The resolution is to
        set this WebView editable value to WebCore. This avoids the callback from WebCore to
        WebKit which was the main goal in r79953 to improve performance.

        * WebCore.exp.in:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isReadOnly):
        * dom/Node.cpp:
        (WebCore::Node::isContentEditable):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelectionFromNone):
        * page/DragController.cpp:
        (WebCore::DragController::operationForLoad):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::setEditable):
        (WebCore::Page::isEditable):

2011-03-21  Eric Uhrhane <ericu@chromium.org>

        Reviewed by David Levin.

        [fileapi/chromium] Fetch platform path using GetMetadata before creating File from FileEntry*
        https://bugs.webkit.org/show_bug.cgi?id=56704

        * fileapi/DOMFileSystemSync.cpp
        (DOMFileSystemSync::createFile)
        (class GetPathHelper): Added, to look up path before creating File.
        * fileapi/DOMFileSystem.cpp
        (DOMFileSystem::createFile)
        (GetPathCallback): Added, to look up path before creating File.
        * platform/FileMetadata.h
        (struct FileMetadata): Added new field platformPath.

2011-03-21  Dominic Cooney  <dominicc@google.com>

        Reviewed by Jeremy Orlow.

        Establishes a V8 context before executing MediaQueryList callbacks.
        https://bugs.webkit.org/show_bug.cgi?id=56166

        MediaQueryList listener callbacks didn't establish a V8 context
        before running script, causing crashes on C++-only
        callstacks (such as user resizing, printing, etc.) I believe this
        could also be contrived to execute media query list listener
        callbacks across domain.

        Test: fast/media/media-query-list-callback.html

        * css/MediaQueryListListener.cpp:
        (WebCore::MediaQueryListListener::queryChanged):

2011-03-21  Andreas Kling  <kling@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] Add QNetworkReplyHandler::wasAborted()

        Instead of checking if the ResourceHandle is null everywhere,
        use a wasAborted() method to make the code readable.

        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyHandler::wasAborted):
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::redirect):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::uploadProgress):

2011-03-21  Christian Dywan  <christian@lanedo.com>

        Reviewed by Martin Robinson.

        WebKitIconDatabase may trigger crash in cairoImageSurfaceToGdkPixbuf
        https://bugs.webkit.org/show_bug.cgi?id=56201

        * platform/graphics/gtk/ImageGtk.cpp: Don't attempt to make a pixbuf
            if there is no image.

2011-03-21  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] [Stable] AtkHypertext exposes wrong offsets for links placed inside <span> nodes
        https://bugs.webkit.org/show_bug.cgi?id=56737

        Only consider parent objects not ignoring accessibility.

        * accessibility/gtk/WebKitAccessibleHyperlink.cpp:
        (webkitAccessibleHyperlinkGetStartIndex): Look for the parent
        object not ignoring accessibility for the current hyperlink.
        (webkitAccessibleHyperlinkGetEndIndex): Ditto.

2011-03-21  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] Remove handling of QNetworkAccessManager::UnknownOperation

        Now that Qt 4.7 is required we never have to fall back to UnknownOperation.
        Custom verb requests are using CustomOperation already, so this was dead code.

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

2011-03-21  Adam Roben  <aroben@apple.com>

        Fix multiple-definition linker warnings on Windows

        * WebCore.vcproj/WebCore.vcproj: Exclude RenderSVGPath.cpp from the build, since it is
        already being compiled via RenderingAllInOne.cpp. Let VS have its way with the rest of the
        file.

2011-03-21  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] Clean up QNetworkReplyHandler::release()

        Since QNetworkReplyHandler no longer uses queued connections to
        the QNetworkReply, it's not necessary to mess with the event
        queue when releasing a reply.

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

2011-03-21  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Inspector does not always show correct transfer size (for compressed/chunked data)
        https://bugs.webkit.org/show_bug.cgi?id=56691

        Added transfer size support in inspector for compressed data.

        Test: http/tests/inspector/network/network-size-chunked.html

        * inspector/Inspector.idl:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didReceiveContentLengthImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didReceiveContentLength):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didReceiveContentLength):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype.didReceiveContentLength):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.get transferSize):
        (WebInspector.Resource.prototype.increaseTransferSize):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didReceiveData):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveContentLength):
        (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages):
        * loader/ResourceLoadNotifier.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveData):
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveData:lengthReceived:]):
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::forwardData):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::gotChunkCallback):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::onRequestComplete):
        (WebCore::ResourceHandle::fileLoadTimer):

2011-03-21  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Dirk Schulze.

        symbol display <use> at wrong scale
        https://bugs.webkit.org/show_bug.cgi?id=54538

        SVG spec: http://www.w3.org/TR/SVG/struct.html#UseElement
        Quotation for referenced <symbol>: "If attributes 'width'
        and/or 'height' are provided on the 'use' element, then
        these attributes will be transferred to the generated 'svg'."
        Quotation for referenced <svg>: "If attributes 'width'
        and/or 'height' are provided on the 'use' element, then
        these values will override the corresponding attributes
        on the 'svg' in the generated tree."
        For above quotations, we should treat 'use' element as referencing
        'use' element, just like Firefox 3.6 and Opera 11, instead of
        corrensponding 'use' element.

        Tests: svg/custom/use-transfer-width-height-properties-to-svg.svg
               svg/custom/use-transfer-width-height-properties-to-svg1.svg
               svg/custom/use-transfer-width-height-properties-to-svg2.svg
               svg/custom/use-transfer-width-height-properties-to-symbol.svg
               svg/custom/use-transfer-width-height-properties-to-symbol1.svg
               svg/custom/use-transfer-width-height-properties-to-symbol2.svg

        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::SVGElementInstance):
        * svg/SVGElementInstance.h:
        (WebCore::SVGElementInstance::create):
        (WebCore::SVGElementInstance::correspondingUseElement):
        (WebCore::SVGElementInstance::directUseElement):
        (WebCore::SVGElementInstance::clearUseElements):
        * svg/SVGUseElement.cpp:
        (WebCore::updateContainerSize):
        (WebCore::SVGUseElement::updateContainerSizes):
        (WebCore::dumpInstanceTree):
        (WebCore::SVGUseElement::detachInstance):
        (WebCore::SVGUseElement::buildInstanceTree):

2011-03-21  Jaehun Lim  <ljaehun.lim@samsung.com>

        Reviewed by Pavel Feldman.

        Fix build break when inspector is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=56735

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): Add ENABLE(INSPECTOR).

2011-03-21  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK distcheck build fix.

        * GNUmakefile.am:

2011-03-21  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric Seidel.

        Bug 51465 - chrome.dll!WebCore::RenderLayer::currentTransform
        ReadAV@NULL (8968fc97874fa23b6799ff8f09c142e4)

        Test: fast/css/webkit-empty-transform-preserve3d-crash.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::layoutOverflowRectForPropagation): Mimicked the
        rest of the code and check that the RenderBox has a layer to avoid
        crashing on the layer() call.

2011-03-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move cookie processing and appcache from DOMAgent.js
        https://bugs.webkit.org/show_bug.cgi?id=56713

        * inspector/front-end/ApplicationCacheItemsView.js:
        (WebInspector.ApplicationCacheDispatcher):
        (WebInspector.ApplicationCacheDispatcher.getApplicationCachesAsync):
        (WebInspector.ApplicationCacheDispatcher.prototype.updateApplicationCacheStatus):
        (WebInspector.ApplicationCacheDispatcher.prototype.updateNetworkState):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.Cookies.getCookiesAsync):
        (WebInspector.Cookies.buildCookiesFromString):
        (WebInspector.Cookies.cookieMatchesResourceURL):
        (WebInspector.Cookies.cookieDomainMatchesResourceDomain):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.eventListeners):
        * inspector/front-end/EventListenersSidebarPane.js:
        (WebInspector.EventListenersSidebarPane.prototype.update):

2011-03-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: migrate Inspector.json to valid JSON types.
        https://bugs.webkit.org/show_bug.cgi?id=56651

        This change migrates inspector from long to int as
        dom, storage, database and other id types.

        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::inspectedNode):
        (WebCore::InjectedScriptHost::databaseIdImpl):
        (WebCore::InjectedScriptHost::storageIdImpl):
        (WebCore::InjectedScriptHost::didCreateWorker):
        (WebCore::InjectedScriptHost::didDestroyWorker):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::highlightDOMNode):
        * inspector/InspectorAgent.h:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent):
        (WebCore::InspectorBrowserDebuggerAgent::hasBreakpoint):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getStylesForNode):
        (WebCore::InspectorCSSAgent::getInlineStyleForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::addRule):
        (WebCore::InspectorCSSAgent::elementForId):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::count):
        (WebCore::InspectorConsoleAgent::addInspectedNode):
        (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::bind):
        (WebCore::InspectorDOMAgent::unbind):
        (WebCore::InspectorDOMAgent::assertNode):
        (WebCore::InspectorDOMAgent::assertElement):
        (WebCore::InspectorDOMAgent::assertHTMLElement):
        (WebCore::InspectorDOMAgent::nodeToSelectOn):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::nodeForId):
        (WebCore::InspectorDOMAgent::getChildNodes):
        (WebCore::InspectorDOMAgent::querySelector):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::boundNodeId):
        (WebCore::InspectorDOMAgent::setAttribute):
        (WebCore::InspectorDOMAgent::removeAttribute):
        (WebCore::InspectorDOMAgent::removeNode):
        (WebCore::InspectorDOMAgent::setNodeName):
        (WebCore::InspectorDOMAgent::getOuterHTML):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        (WebCore::InspectorDOMAgent::setNodeValue):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::pushNodeToFrontend):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::loadEventFired):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMAgent::didModifyDOMAttr):
        (WebCore::InspectorDOMAgent::characterDataModified):
        (WebCore::InspectorDOMAgent::didInvalidateStyleAttr):
        (WebCore::InspectorDOMAgent::reportNodesAsSearchResults):
        (WebCore::InspectorDOMAgent::copyNode):
        (WebCore::InspectorDOMAgent::pushNodeByPathToFrontend):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageEntries):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::storageId):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageResourceForId):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDOMStorageResource.cpp:
        * inspector/InspectorDOMStorageResource.h:
        (WebCore::InspectorDOMStorageResource::id):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        (WebCore::InspectorDatabaseAgent::executeSQL):
        (WebCore::InspectorDatabaseAgent::databaseId):
        (WebCore::InspectorDatabaseAgent::databaseForId):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.cpp:
        * inspector/InspectorDatabaseResource.h:
        (WebCore::InspectorDatabaseResource::id):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsState):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getExactHeapSnapshotNodeRetainedSize):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::identifierForInitialRequest):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::markResourceAsCached):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didReceiveContentLength):
        (WebCore::InspectorResourceAgent::didFinishLoading):
        (WebCore::InspectorResourceAgent::didFailLoading):
        (WebCore::InspectorResourceAgent::setInitialContent):
        (WebCore::InspectorResourceAgent::didCreateWebSocket):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorResourceAgent::didCloseWebSocket):
        * inspector/generate-inspector-idl:

2011-03-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make frameId in network agent of type string, not unsigned long.
        https://bugs.webkit.org/show_bug.cgi?id=56708

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::highlightFrame):
        * inspector/InspectorAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::pointerAsId):
        (WebCore::buildObjectForDocumentLoader):
        (WebCore::buildObjectForFrame):
        (WebCore::InspectorResourceAgent::frameDetachedFromParent):
        (WebCore::InspectorResourceAgent::frameForId):
        (WebCore::InspectorResourceAgent::resourceContent):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.addOrUpdateFrame):

2011-03-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: expose object id as string, not JSON struct in the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=56681

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::inspect):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::inspectCallback):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluateOn):
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::nodeForObjectId):
        (WebCore::InjectedScript::setPropertyValue):
        (WebCore::InjectedScript::releaseObject):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::inspectImpl):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::injectedScriptForObjectId):
        (WebCore::InjectedScriptManager::releaseObjectGroup):
        * inspector/InjectedScriptManager.h:
        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.json:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::clearConsoleMessages):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::pushNodeToFrontend):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluateOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        (WebCore::InspectorRuntimeAgent::setPropertyValue):
        (WebCore::InspectorRuntimeAgent::releaseObject):
        (WebCore::InspectorRuntimeAgent::releaseObjectGroup):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions.evaluatedProperties):
        (WebInspector.ConsoleView.prototype.completions):
        * inspector/front-end/PropertiesSidebarPane.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.releaseEvaluationResult):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):
        * inspector/front-end/inspector.js:
        (WebInspector.inspect):

2011-03-20  Bill Budge  <bbudge@chromium.org>

        Reviewed by Adam Barth.

        Rename ThreadSafeShared to ThreadSafeRefCounted
        https://bugs.webkit.org/show_bug.cgi?id=56714

        No new tests. Exposes no new functionality.

        * ForwardingHeaders/wtf/ThreadSafeRefCounted.h: Copied from ForwardingHeaders/wtf/ThreadSafeShared.h.
        * ForwardingHeaders/wtf/ThreadSafeShared.h: Removed.
        * bindings/v8/SerializedScriptValue.h:
        * dom/Document.cpp:
        * dom/default/PlatformMessagePortChannel.h:
        * fileapi/FileThread.h:
        * loader/ThreadableLoaderClientWrapper.h:
        (WebCore::ThreadableLoaderClientWrapper::create):
        (WebCore::ThreadableLoaderClientWrapper::clearClient):
        (WebCore::ThreadableLoaderClientWrapper::done):
        (WebCore::ThreadableLoaderClientWrapper::didSendData):
        (WebCore::ThreadableLoaderClientWrapper::didReceiveResponse):
        (WebCore::ThreadableLoaderClientWrapper::didReceiveData):
        (WebCore::ThreadableLoaderClientWrapper::didReceiveCachedMetadata):
        (WebCore::ThreadableLoaderClientWrapper::didFinishLoading):
        (WebCore::ThreadableLoaderClientWrapper::didFail):
        (WebCore::ThreadableLoaderClientWrapper::didFailRedirectCheck):
        (WebCore::ThreadableLoaderClientWrapper::didReceiveAuthenticationCancellation):
        (WebCore::ThreadableLoaderClientWrapper::ThreadableLoaderClientWrapper):
        * page/SecurityOrigin.h:
        * platform/CrossThreadCopier.h:
        * platform/network/BlobData.h:
        * platform/network/cf/SocketStreamHandle.h:
        * storage/AbstractDatabase.h:
        * storage/DatabaseAuthorizer.h:
        * storage/DatabaseCallback.h:
        * storage/DatabaseThread.h:
        * storage/IDBCallbacks.h:
        * storage/IDBCursorBackendInterface.h:
        * storage/IDBDatabaseBackendInterface.h:
        * storage/IDBFactoryBackendInterface.h:
        * storage/IDBIndexBackendInterface.h:
        * storage/IDBKey.h:
        * storage/IDBKeyRange.h:
        * storage/IDBObjectStoreBackendInterface.h:
        * storage/IDBRequest.h:
        * storage/IDBTransactionBackendInterface.h:
        * storage/SQLError.h:
        * storage/SQLResultSet.h:
        * storage/SQLStatement.h:
        * storage/SQLStatementCallback.h:
        * storage/SQLStatementErrorCallback.h:
        * storage/SQLTransaction.h:
        * storage/SQLTransactionCallback.h:
        * storage/SQLTransactionErrorCallback.h:
        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        * workers/DefaultSharedWorkerRepository.cpp:

2011-03-20  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Clean up redirection logic in QNetworkReplyHandler
        https://bugs.webkit.org/show_bug.cgi?id=56717

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        Use resetState() when constructing QNRH as well.

        (WebCore::QNetworkReplyHandler::resetState):
        Delete (deferred) the m_reply if one exists (only when redirecting.)

        (WebCore::QNetworkReplyHandler::finish):
        Return early when redirecting.

        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::redirect):
        Move the redirection logic from sendResponseIfNeeded() into a
        separate redirect() method.

2011-03-19  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] Rename ignoreHttpError() to shouldIgnoreHttpError()

        The function doesn't ignore anything, thus it shouldn't have an imperative name.

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

2011-03-19  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] Kill layer violation FIXME in ResourceHandleQt.

        We were including qwebframe_p.h from WebKit/qt for no reason.

        * platform/network/qt/ResourceHandleQt.cpp:

2011-03-19  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] Refactor handling of deferred loads
        https://bugs.webkit.org/show_bug.cgi?id=56715

        Split QNetworkReplyHandler's "load mode" into two parameters
        instead of trying to fit the deferral mechanism into it.

        Loads are now AsynchronousLoad (default) or SynchronousLoad (for sync XHR.)

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::setLoadingDeferred):
        (WebCore::QNetworkReplyHandler::resumeDeferredLoad):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        (WebCore::QNetworkReplyHandler::resetState):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        (WebCore::ResourceHandle::platformSetDefersLoading):

2011-03-19  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        ApplicationCacheGroup is not obsolete after being deleted via ApplicationCacheStorage::deleteEntriesForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=56415

        To delete all Application Cache for an origin, we must obsolete all
        in-memory cache groups for that origin. If a cache group isn't in memory,
        then it must be deleted from disk. The previous implementation correctly
        removed on-disk cache groups, but did not mark in-memory cache groups as obsolete.
        This caused an assertion failure in ApplicationCacheStorage::cacheGroupDestroyed()
        when the DocumentLoader was destroyed.

        Test: http/tests/appcache/origin-delete.html

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::clearStorageID):
        (WebCore::ApplicationCache::deleteCacheForOrigin):
        * loader/appcache/ApplicationCache.h:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::findInMemoryCacheGroup):
        * loader/appcache/ApplicationCacheStorage.h:

2011-03-19  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Add dummy GeolocationServiceEfl. cpp | h
        https://bugs.webkit.org/show_bug.cgi?id=56710

        Add dummy GeolocationServiceEfl.cpp | h to platform/efl.

        * CMakeListsEfl.txt:
        * platform/efl/GeolocationServiceEfl.cpp: Added.
        (WebCore::GeolocationServiceEfl::create):
        (WebCore::GeolocationServiceEfl::GeolocationServiceEfl):
        (WebCore::GeolocationServiceEfl::~GeolocationServiceEfl):
        (WebCore::GeolocationServiceEfl::startUpdating):
        (WebCore::GeolocationServiceEfl::stopUpdating):
        (WebCore::GeolocationServiceEfl::suspend):
        (WebCore::GeolocationServiceEfl::resume):
        (WebCore::GeolocationServiceEfl::lastPosition):
        (WebCore::GeolocationServiceEfl::lastError):
        * platform/efl/GeolocationServiceEfl.h: Added.

2011-03-19  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed, rolling out r81551.
        http://trac.webkit.org/changeset/81551
        https://bugs.webkit.org/show_bug.cgi?id=55336

        Broke some storage tests on Win32.

        * platform/win/FileSystemWin.cpp:
        (WebCore::statFile):
        (WebCore::getFileSize):
        (WebCore::getFileModificationTime):
        (WebCore::fileExists):

2011-03-19  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] Remove support for Qt 4.6
        https://bugs.webkit.org/show_bug.cgi?id=56712

        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::drawTextCommon):
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::floatWidthForSimpleText):
        (WebCore::Font::offsetForPositionForSimpleText):
        (WebCore::Font::selectionRectForSimpleText):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::paint):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::getImageData):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::internalHandleCurrentImage):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::transform):
        * platform/network/qt/DnsPrefetchHelper.h:
        (WebCore::DnsPrefetchHelper::DnsPrefetchHelper):
        (WebCore::DnsPrefetchHelper::lookup):
        * platform/network/qt/NetworkStateNotifierPrivate.h:
        * platform/network/qt/NetworkStateNotifierQt.cpp:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::httpMethod):
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/ResourceRequestQt.cpp:
        (WebCore::ResourceRequest::toNetworkRequest):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintMediaSliderTrack):

2011-03-19  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Use Win32 API to get file information
        https://bugs.webkit.org/show_bug.cgi?id=55336

        Use GetFileInformationByHandle() in favour over _wstat64(), GetFileSizeEx()
        and GetFileAttributesEx() so we can share the code with WinCE.

        * platform/win/FileSystemWin.cpp:
        (WebCore::createFileHandle):
        (WebCore::getFileInformation):
        (WebCore::getFileSize):
        (WebCore::getFileModificationTime):
        (WebCore::fileExists):

2011-03-19  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Simplify GObjectEventListener
        https://bugs.webkit.org/show_bug.cgi?id=56698

        Get rid of special case for DOMWindow, since it's also an
        EventTarget.

        * bindings/gobject/GObjectEventListener.cpp:
        (WebCore::GObjectEventListener::GObjectEventListener): remove
        DOMWindow special casing.
        (WebCore::GObjectEventListener::~GObjectEventListener): ditto.
        (WebCore::GObjectEventListener::gobjectDestroyed):
        * bindings/gobject/GObjectEventListener.h:
        (WebCore::GObjectEventListener::addEventListener): ditto.
        (WebCore::GObjectEventListener::removeEventListener): ditto.

2011-03-19  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Nikolas Zimmermann.

        https://bugs.webkit.org/show_bug.cgi?id=56195
        Fix conditional which had an int for one case and a pointer for another.
        Similar fix as https://bugs.webkit.org/show_bug.cgi?id=56198

        No new tests. Fix compilation on Solaris 10 with Sun Studio C++

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::sendSVGLoadEventIfPossible):

2011-03-19  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Rename WTF::StringHasher methods
        https://bugs.webkit.org/show_bug.cgi?id=53532

        Rename createHash to computeHash and createBlobHash to hashMemory.
        Also add a using WTF::StringHasher in the header file.

        * dom/Document.cpp:
        (WebCore::FormElementKeyHash::hash):
        * dom/QualifiedName.h:
        (WebCore::hashComponents):
        * dom/StyledElement.cpp:
        (WebCore::MappedAttributeHash::hash):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::urlHostHash):
        * page/SecurityOriginHash.h:
        (WebCore::SecurityOriginHash::hash):
        * platform/LinkHash.cpp:
        (WebCore::visitedLinkHashInline):
        * platform/cf/BinaryPropertyList.cpp:
        (WebCore::IntegerArrayHash::hash):
        * platform/cf/SchedulePair.h:
        (WebCore::SchedulePairHash::hash):
        * platform/graphics/FontCache.cpp:
        (WebCore::computeHash):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        (WebCore::FontPlatformData::RefCountedHFONT::hash):
        * platform/graphics/cocoa/FontPlatformData.h:
        (WebCore::FontPlatformData::hash):
        * platform/graphics/pango/FontPlatformData.h:
        (WebCore::FontPlatformData::hash):
        * platform/graphics/wince/FontPlatformData.cpp:
        (WebCore::FixedSizeFontDataKeyHash::hash):
        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::computeHash):
        * platform/network/ProtectionSpaceHash.h:
        (WebCore::ProtectionSpaceHash::hash):
        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::hash):
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::hash):
        * svg/properties/SVGAnimatedPropertyDescription.h:
        (WebCore::SVGAnimatedPropertyDescriptionHash::hash):

2011-03-18  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/56688> Fix clang static analyzer warning in WebCoreViewFactory.m

        Reviewed by Anders Carlsson.

        Fixes the following static analyzer warning:

            Source/WebCore/page/mac/WebCoreViewFactory.m:45:5: warning: Returning 'self' while it is not set to the result of '[(super or self) init...]'
                 return self;
                 ^

        * page/mac/WebCoreViewFactory.m:
        (-[WebCoreViewFactory init]): Assign the result of [super init]
        to self.

2011-03-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        WebCore GYP build should build
        https://bugs.webkit.org/show_bug.cgi?id=56696

        After this patch, the WebCore GYP build successfully compiles and
        links.  I haven't trying executing it yet.

        * WebCore.gypi:
            - DOMMouseEvent should be included as part of the Objective-C bindings.
        * WebCore.xcodeproj/project.pbxproj:
            - RenderSVGPath.cpp was mistakenly included directly in the project
              instead of being built by RenderSVGAllInOne.
        * gyp/WebCore.gyp:
            - Exclude some more files from the build.  These files are absent
              in the normal build.  I didn't see them earlier because the dead
              code stripping was hiding them.  (They're probably unreferenced.)
            - Switch to using RenderSVGAllInOne.  I'm not entirely sure if this
              part of the patch is necessary, but it matches the normal build
              more closely.
        * platform/mac/WebCoreObjCExtras.mm:
            - The normal build passes the -Wdeprecated-declarations flag when
              compiling this file.  The GYP folks explicitly do not want to add
              that feature to GYP, and there does not appear to be a way to
              remove the deprecated call from this file.
        * rendering/svg/RenderSVGAllInOne.cpp:
            - Add RenderSVGPath.cpp, which was missing previously.

2011-03-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        WebCore GYP build should (almost!) link
        https://bugs.webkit.org/show_bug.cgi?id=56689

        This patch is a grab-bag of small changes to bring the WebCore GYP
        build down to two link errors or one compile error (take your pick).
        We might need a GYP change to get this last file to compile, however.

        * WebCore.gypi:
        * gyp/WebCore.gyp:

2011-03-16  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Ojan Vafai.

        Add a test for r81266 and fix HTML Editing for fallback contents in object element
        https://bugs.webkit.org/show_bug.cgi?id=56505

        The bug was caused by canHaveChildrenForEditing's always returning false even when
        object element used fallback content. Fixed the bug by adding a check.

        Test: editing/editability/ignored-content.html

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

2011-03-18  Andy Estes  <aestes@apple.com>

        Reviewed by Eric Seidel.

        REGRESSION (r80231): Bad cast in HTMLTreeBuilder::processStartTag
        https://bugs.webkit.org/show_bug.cgi?id=56380
        
        Fix two issues with parsing a fragment that has a foreign content
        element as its context element. The first issue is that the parser will
        initially be in the InForeignContentMode insertion mode when processing
        the first tag in the fragment in this case so one call site needs to
        change from currentElement() to currentNode(). The second issue is that
        when we changed fragments from using a fake HTML root element to a
        DocumentFragment we broke checks that assumed the root element was in
        the HTML namespace. Fix this by claiming that the DocumentFragment is
        also in the HTML namespace.

        Test: fast/parser/fragment-foreign-content-context.html

        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isForeignContentScopeMarker):
        (WebCore::HTMLElementStack::hasOnlyHTMLElementsInScope):
        * html/parser/HTMLElementStack.h:
        (WebCore::isInHTMLNamespace):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):

2011-03-18  James Robinson  <jamesr@chromium.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION(78846) [chromium] Justified text renders at incorrect offsets on windows
        https://bugs.webkit.org/show_bug.cgi?id=56629

        Preserves offsets as absolute floating point offsets and rounds to
        advances at the last possible second.  I can't prove to myself that
        this is sound but it seems to work on the test cases I've constructed.

        Will probably change the pixel tests on chromium windows given that we
        were horribly broken before this patch.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):

2011-03-18  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION(81374, 81384): editing/deleting/5206311-1.html hits assertion on non-Mac platforms
        https://bugs.webkit.org/show_bug.cgi?id=56599

        Debug build fix.

        * dom/Position.cpp:
        (WebCore::Position::parentAnchoredEquivalent): If the original position was a position before a node,
        then we can't necessarily instantiate a position inside the node.
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::toNormalizedRange): Even if s and e were not null, container nodes of s and e
        could be null. Exit early in those cases as well.

2011-03-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add ObjC bindings to the WebCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=56671

        It turns out we generate a bunch of ObjC bindings files that we don't
        actually build.  I've manually synced the list of ObjC derived source
        files to match the existing list.  This brings us down to 19 link
        errors.

        * WebCore.gypi:
        * gyp/WebCore.gyp:

2011-03-18  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Eric Seidel.

        [CMAKE] Split JSC related configurations from WebCore/CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=56624

        No new tests, just splitting jsc related configuration.

        * CMakeLists.txt:
        * UseJSC.cmake: Added.

2011-03-16  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Implement GPU-accelerated shadows.
        https://bugs.webkit.org/show_bug.cgi?id=56476

        For hard shadows, we simply offset the CTM and draw in the shadow
        color.  For soft shadows, we use a separable Gaussian convolution,
        with a bilinear downsample and Mitchell-Netravali upsample in order to
        preserve quality.

        * WebCore.gypi:
        Add BicubicShader and ConvolutionShader to the build.
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::State::State):
        Add shadow-related members to the GLES2Canvas::State
        (WebCore::GLES2Canvas::State::shadowActive):
        Add a helper function to know if shadows are active.
        (WebCore::GLES2Canvas::clearRect):
        (WebCore::GLES2Canvas::scissorClear):
        Refactor the scissor clearing function out of clearRect().
        (WebCore::GLES2Canvas::fillPath):
        Add hook for shadow rendering in paths.  Bind framebuffer at this level.
        (WebCore::GLES2Canvas::fillRect):
        Add hook for shadow rendering in rects.  Bind framebuffer at this level.
        (WebCore::GLES2Canvas::fillRectInternal):
        Rename fillRect() -> fillRectInternal(), which does bind its vertex 
        buffer, but does not bind the framebuffer.
        (WebCore::GLES2Canvas::setShadowColor):
        (WebCore::GLES2Canvas::setShadowOffset):
        (WebCore::GLES2Canvas::setShadowBlur):
        (WebCore::GLES2Canvas::setShadowsIgnoreTransforms):
        Implement graphicsContext-style setters for shadow parameters.
        (WebCore::GLES2Canvas::clipPath):
        Call fillPathInternal(), not fillPath().
        (WebCore::GLES2Canvas::restore):
        (WebCore::GLES2Canvas::drawTexturedRect):
        Bind the framebuffer at this level.  Do not bind vertices here (will
        be done in drawTexturedQuad).
        (WebCore::GLES2Canvas::drawTexturedRectTile):
        drawQuad() -> drawTexturedQuad().
        (WebCore::GLES2Canvas::convolveRect):
        Implement one pass of a convolution filter (X or Y).
        (WebCore::gauss):
        (WebCore::buildKernel):
        Some helper functions to build a Gaussian convolution kernel.
        (WebCore::GLES2Canvas::drawTexturedQuad):
        Rename drawQuad() -> drawTexturedQuad(), to be more clear.  Do not
        bind the framebuffer at this level (it will be done higher).
        (WebCore::GLES2Canvas::drawTexturedQuadMitchell):
        Implement Mitchell-Netravali bicubic sampling, using BicubicShader.
        (WebCore::GLES2Canvas::fillPathInternal):
        Rename fillPath() -> fillPathInternal(), which does use quad vertices,
        but does not bind the framebuffer or set the compositing mode.
        (WebCore::GLES2Canvas::flipRect):
        Implement a helper function to flip a rectangle in Y within the canvas.
        (WebCore::GLES2Canvas::clearBorders):
        Implement a helper function to clear an n-pixel border around a rect.
        (WebCore::GLES2Canvas::beginShadowDraw):
        Setup before drawing a primitive's shadow:  for hard shadows, just
        offset the CTM by the shadow offset.  For soft shadows, bind to an
        offscreen DrawingBuffer.
        (WebCore::GLES2Canvas::endShadowDraw):
        Tear-down after drawing a primitive's shadow:  for hard shadows, just
        restore the CTM.  For soft shadows, downsample (if necessary), then
        blur in X, blur in Y, upsample if necessary).
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/gpu/BicubicShader.cpp: Added.
        (WebCore::BicubicShader::BicubicShader):
        (WebCore::BicubicShader::create):
        (WebCore::BicubicShader::use):
        * platform/graphics/gpu/BicubicShader.h: Added.
        Implement a bicubic image filtering shader.
        * platform/graphics/gpu/ConvolutionShader.cpp: Added.
        (WebCore::ConvolutionShader::ConvolutionShader):
        (WebCore::ConvolutionShader::create):
        (WebCore::ConvolutionShader::use):
        * platform/graphics/gpu/ConvolutionShader.h: Added.
        Implement a 1-dimensional convolution shader.  In order to minimize
        texture samples, this shader is parameterized at compile time by the
        width of the convolution kernel.
        * platform/graphics/gpu/DrawingBuffer.h:
        (WebCore::DrawingBuffer::colorBuffer):
        Add an accessor to retrieve a DrawingBuffer's texture ID.
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):
        (WebCore::SharedGraphicsContext3D::SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::useBicubicProgram):
        (WebCore::SharedGraphicsContext3D::useConvolutionProgram):
        Create BicubicShader and cMaxKernelWidth ConvolutionShader's (one for
        each possible kernel width).
        (WebCore::SharedGraphicsContext3D::getOffscreenBuffer):
        Implement a simple cache of offscreen DrawingBuffers, integer-indexed.
        This is done to minimize the VRAM usage:  only 2 buffers are used for
        all canvases.
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        Add bicubic and convolution shader members, and useXXX() functions.
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        Hook into GraphicsContextSkia's platform shadow setters to set
        parameters on GLES2Canvas.
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::canAccelerate):
        Remove shadows (loopers) from the list of things we can't accelerate.

2011-03-18  Andreas Kling  <kling@webkit.org>

        Reviewed by Darin Adler.

        Remove unused method FontFallbackList::fontDataForCharacters()
        https://bugs.webkit.org/show_bug.cgi?id=56657

        * platform/graphics/Font.h:
        * platform/graphics/FontFallbackList.cpp:
        * platform/graphics/FontFallbackList.h:

2011-03-18  Andreas Kling  <kling@webkit.org>

        Reverting accidental changes in r81498.

2011-03-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: rename console agent events.
        https://bugs.webkit.org/show_bug.cgi?id=56646

        addConsoleMessage -> consoleMessage
        updateConsoleMessageExpiredCount -> consoleMessageExpiredCountUpdate
        updateConsoleMessageRepeatCount -> consoleMessageRepeatCountUpdate

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::updateRepeatCountInConsole):
        * inspector/Inspector.json:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.consoleMessage):
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.consoleMessageExpiredCountUpdate):
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.consoleMessageRepeatCountUpdate):

2011-03-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81487.
        http://trac.webkit.org/changeset/81487
        https://bugs.webkit.org/show_bug.cgi?id=56662

        "Breaks inspector/styles/styles-add-blank-property.html"
        (Requested by apavlov on #webkit).

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getAllStyles):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.styleSheetCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.allStylesCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleModel.prototype._onRevert):
        (WebInspector.CSSStyleSheet):
        (WebInspector.CSSStyleSheet.prototype.setText):

2011-03-18  Justin Novosad  <junov@chromium.org>

        Reviewed by Kenneth Russell.

        [Chromium] Canvas shadow is not working with drawImage
        https://bugs.webkit.org/show_bug.cgi?id=55506

        Patch also fixes shadow blur quality and color. 
        Affects Chromium win/linux. Also fixes the following bugs:
        https://bugs.webkit.org/show_bug.cgi?id=50112
        https://bugs.webkit.org/show_bug.cgi?id=51989
        https://bugs.webkit.org/show_bug.cgi?id=55410
        No tests were added, impact is already covered by multiple layout tests.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap):

2011-03-15  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Fix handling of the CSSAgent.setStyleSheetText() results in CSSStyleModel.js
        https://bugs.webkit.org/show_bug.cgi?id=56310

        Instead of stylesheet ids, CSSAgent.getAllStyleSheets() now returns metainfo objects containing
        "styleSheetId", "sourceURL", "disabled", and "title" fields. The latter three are not returned
        by CSSAgent.getStyleSheet() anymore.

        Test: inspector/styles/get-set-stylesheet-text.html

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheetInfo):
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.styleSheetCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.allStylesCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleModel.prototype._onRevert):
        (WebInspector.CSSStyleSheet):
        (WebInspector.CSSStyleSheet.prototype.setText):

2011-03-18  David Keijser  <keijser@gmail.com> and Xan Lopez <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] On-demand event-listeners for DOM event signals
        https://bugs.webkit.org/show_bug.cgi?id=49649

        Add explicit EventTarget API to add/remove event listeners instead
        of using GSignal, which due to internal limitations in glib makes
        us preemptively add listeners for all event types.

        * bindings/gobject/GObjectEventListener.cpp: add new
        addEventListener/removeEventListener methods, and small
        refactoring to store an EventTarget internally instead of a DOM
        node, which is more generic and can be reused in more cases.
        * bindings/gobject/GObjectEventListener.h: ditto.
        * bindings/gobject/WebKitDOMEventTarget.cpp:
        (webkit_dom_event_target_add_event_listener): new iface method to
        add an event listener.
        (webkit_dom_event_target_remove_event_listener): new iface method
        to remove an event listener.
        * bindings/gobject/WebKitDOMEventTarget.h: add new iface methods.
        * bindings/scripts/CodeGeneratorGObject.pm: change code generation
        accordingly.

2011-03-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=56425
        More groundwork for WebKit2 IconDatabase

        -Update the synchronous method names to be prefixed with "synchronous."
        -Call asynchronous versions of the appropriate methods if the IconDatabase supports them.

        Update icon database calls to be prefixed with "synchronous":
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/icon/IconDatabaseBase.h:
        (WebCore::IconDatabaseBase::synchronousIconDataKnownForIconURL):
        (WebCore::IconDatabaseBase::synchronousLoadDecisionForIconURL):
        (WebCore::IconDatabaseBase::synchronousIconForPageURL):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::synchronousIconForPageURL):
        (WebCore::IconDatabase::readIconForPageURLFromDisk):
        (WebCore::IconDatabase::synchronousIconURLForPageURL):
        (WebCore::IconDatabase::synchronousLoadDecisionForIconURL):
        (WebCore::IconDatabase::synchronousIconDataKnownForIconURL):
        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabaseBase.cpp:
        (WebCore::IconDatabaseBase::synchronousIconURLForPageURL):

        Add nascent support for an asynchronous icon database mode:
        * loader/icon/IconDatabaseBase.h:
        (WebCore::EnumCallback::create):
        (WebCore::EnumCallback::~EnumCallback):
        (WebCore::EnumCallback::performCallback):
        (WebCore::EnumCallback::invalidate):
        (WebCore::EnumCallback::EnumCallback):
        (WebCore::ObjectCallback::create):
        (WebCore::ObjectCallback::~ObjectCallback):
        (WebCore::ObjectCallback::performCallback):
        (WebCore::ObjectCallback::invalidate):
        (WebCore::ObjectCallback::ObjectCallback):
        (WebCore::IconDatabaseBase::supportsAsynchronousMode):
        (WebCore::IconDatabaseBase::loadDecisionForIconURL):
        (WebCore::IconDatabaseBase::iconDataForIconURL):

        Add interfaces to use the asynchronous versions of certain IconDatabase calls:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::iconLoadDecisionAvailable):
        (WebCore::iconLoadDecisionCallback):
        (WebCore::DocumentLoader::getIconLoadDecisionForIconURL):
        (WebCore::DocumentLoader::continueIconLoadWithDecision):
        (WebCore::iconDataCallback):
        (WebCore::DocumentLoader::getIconDataForIconURL):
        * loader/DocumentLoader.h:

        Break "startIconLoader" into two pieces so it can be used from both the synchronous and asynchronous 
        icon database modes:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::iconLoadDecisionReceived):
        (WebCore::FrameLoader::startIconLoader):
        (WebCore::FrameLoader::continueIconLoadWithDecision):
        * loader/FrameLoader.h:

        * WebCore.exp.in:

2011-03-18  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: add missing brace to the generated Inspector.idl.

        * inspector/generate-inspector-idl:

2011-03-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: migrate from Inspector.idl to InspectorAPI.json for protocol schema definition meta bug.
        https://bugs.webkit.org/show_bug.cgi?id=56294

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * inspector/Inspector.idl: Removed.
        * inspector/Inspector.json: Added.
        * inspector/generate-inspector-idl: Added.

2011-03-18  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: implement inspector session storage.
        https://bugs.webkit.org/show_bug.cgi?id=56643

        We would like to enable debugger/profiler from frontend side only.
        However, when user clicks "Start Debugging JavaScript" in Safari, we
        need to enable debugger when frontend is opened or re-opened for the
        same page. The idea is to store debugger-enabled setting in session
        storage and check it on frontend load.

        * inspector/InspectorFrontendClient.h:
        (WebCore::InspectorFrontendClient::saveSessionSetting):
        (WebCore::InspectorFrontendClient::loadSessionSetting):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::saveSessionSetting):
        (WebCore::InspectorFrontendHost::loadSessionSetting):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:

2011-03-18  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Enable GraphicsContext3D only when the window surface support OpenGL
        https://bugs.webkit.org/show_bug.cgi?id=56555

        Allow creation of WebGLRenderingContext in the HTMLCanvasElement
        only if accelerated compositing is enabled. In GraphicsContext3D,
        while blitting the surface check that viewport hasn't changed from
        creation and painter is associated to the viewport.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::GraphicsContext3DInternal):
        (WebCore::GraphicsContext3DInternal::getViewportGLWidget):
        (WebCore::GraphicsContext3DInternal::paint):

2011-03-17  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: extract content loading logic from scripts panel.
        https://bugs.webkit.org/show_bug.cgi?id=55237

        Encapsulate source files creation logic in debugger presentation model
        to support source mappings in a pluggable way.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.sourceFile):
        (WebInspector.DebuggerPresentationModel.prototype.requestSourceFileContent.else.didRequestSource):
        (WebInspector.DebuggerPresentationModel.prototype.requestSourceFileContent):
        (WebInspector.DebuggerPresentationModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._failedToParseScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._addScript.else.resourceFinished):
        (WebInspector.DebuggerPresentationModel.prototype._addScript):
        (WebInspector.DebuggerPresentationModel.prototype._ensureSourceFileAdded):
        (WebInspector.DebuggerPresentationModel.prototype._resourceForURL):
        (WebInspector.DebuggerPresentationModel.prototype._scriptSourceChanged):
        (WebInspector.DebuggerPresentationModel.prototype._sourceFileAdded):
        (WebInspector.DebuggerPresentationModel.prototype.breakpointsForSourceFileId):
        (WebInspector.DebuggerPresentationModel.prototype.findBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointRemoved):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointResolved):
        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype._actualLocationToSourceLocation):
        (WebInspector.DebuggerPresentationModel.prototype.reset):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._sourceFileAdded):
        (WebInspector.ScriptsPanel.prototype._showSourceFrame):
        (WebInspector.ScriptsPanel.prototype._sourceFileChanged):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.requestContent):

2011-03-18  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: console doesn&apos;t scroll when multiline expression is being evaluated
        https://bugs.webkit.org/show_bug.cgi?id=56639

        Always scoll in the console when command result is received.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.addMessage):

2011-03-18  Adam Roben  <aroben@apple.com>

        Fix a CFNumber leak seen on the leaks bot

        Reviewed by Gavin Barraclough.

        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::advanceCurrentStream): Use a RetainPtr to cause the CFNumber we allocate to be
        released.

2011-03-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add some of the remaining platform/mac files to WebCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=56616

        These files used to be hard, but are now magically easy.  76 link errors.

        * gyp/WebCore.gyp:

2011-03-17  Adam Klein  <adamk@chromium.org>

        Reviewed by Adam Barth.

        [filesystem] Rename toURI->toURL, resolveLocalFileSystemURI->resolveLocalFileSystemURL
        https://bugs.webkit.org/show_bug.cgi?id=56502

        * fileapi/Entry.idl:
        * fileapi/EntryBase.cpp:
        (WebCore::EntryBase::toURL):
        * fileapi/EntryBase.h:
        * fileapi/EntrySync.idl:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::resolveLocalFileSystemURL):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2011-03-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Update CSP directive parser to match spec
        https://bugs.webkit.org/show_bug.cgi?id=56582

        Brandon updated the CSP spec.  I've updated our implementation to
        match.  In the process, I found a couple bugs in the spec, which I've
        sent to the working group.  This patch assumes that the bugs will be
        fixed in the way I suggested.  If they get fixed a different way, we
        might need to update the parser again.

        Test: http/tests/security/contentSecurityPolicy/directive-parsing.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::isDirectiveNameCharacter):
        (WebCore::isDirectiveValueCharacter):
        (WebCore::advanceUntil):
        (WebCore::ContentSecurityPolicy::parse):
        (WebCore::ContentSecurityPolicy::parseDirective):
        * page/ContentSecurityPolicy.h:

2011-03-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should have PrivateHeaders
        https://bugs.webkit.org/show_bug.cgi?id=56604

        I've manually verified that this produces the correct set of
        PrivateHeaders (modulo the ForwardingHeaders and icu issue).
        Unforunately, this patch breakes compile slightly, but I'll fix that
        in a followup patch.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * gyp/WebCore.gyp:

2011-03-17  Victoria Kirst  <vrk@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Video colors have wrong brightness/contrast
        https://bugs.webkit.org/show_bug.cgi?id=56598

        This patch changes the YUV to RGB color conversion matrix
        to have brighter whites and darker blacks in accordance to
        the BT.601 standard.

        * platform/graphics/chromium/ShaderChromium.cpp:
        (WebCore::FragmentShaderYUVVideo::FragmentShaderYUVVideo):
        (WebCore::FragmentShaderYUVVideo::init):
        (WebCore::FragmentShaderYUVVideo::getShaderString):
        * platform/graphics/chromium/ShaderChromium.h:
        (WebCore::FragmentShaderYUVVideo::yuvAdjLocation):
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::drawYUV):
        * platform/graphics/chromium/VideoLayerChromium.h:

2011-03-17  Zhenyao Mo  <zmo@google.com>

        Reviewed by Adam Barth.

        RequestAnimationFrame callbacks prevent Document from being released on detach
        https://bugs.webkit.org/show_bug.cgi?id=56607

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef): Remove RequestAnimationFrame callbacks.
        (WebCore::Document::detach): Ditto.

2011-03-17  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=56596 Overlay scrollbars sometimes 
        fail to appear
        -and corresponding-
        <rdar://problem/8953779>

        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPainterDelegate setUpAnimation:scrollerPainter:part:WebCore::animateAlphaTo:duration:]):

2011-03-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/9052166> Emphasis marks appear over combined text rather than beside it
        https://bugs.webkit.org/show_bug.cgi?id=56480

        Test: fast/text/emphasis-combined-text.html

        * rendering/InlineTextBox.cpp:
        (WebCore::rotation): Added this helper.
        (WebCore::InlineTextBox::paint): Paint a single emphasis mark beside the combined text,
        centered vertically.

2011-03-17  Jian Li  <jianli@chromium.org>

        Reviewed by Adam Barth.

        Blob URL should not be allow to get created from the code running from data URI
        https://bugs.webkit.org/show_bug.cgi?id=56600

        Test: http/tests/fileapi/create-blob-url-from-data-url.html

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::createPublicBlobURL):
        * fileapi/BlobURL.cpp:
        (WebCore::BlobURL::createBlobURL):
        * fileapi/EntryBase.cpp:
        (WebCore::EntryBase::toURI):
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::start):

2011-03-17  Jeff Miller  <jeffm@apple.com>

        Use a consistent set of file patterns in the svn:ignore property for all .xcodeproj directories, specifically:
        
        *.mode*
        *.pbxuser
        *.perspective*
        project.xcworkspace
        xcuserdata

        * WebCore.xcodeproj: Modified property svn:ignore.
        * manual-tests/NPN_Invoke/NPN_Invoke.xcodeproj: Modified property svn:ignore.

2011-03-17  Sam Weinig  <sam@webkit.org>

        Fix Mac build.

        * WebCore.exp.in:
        Add missing symbol.

2011-03-17  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Adele Peterson and Enrica Casucci.

        Assert that editing does not ignore position's anchorNode if position is an offset in anchor
        https://bugs.webkit.org/show_bug.cgi?id=56027

        Debug build fix.

        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance): "this" can be an input element so can't always instantiate
        a position inside the node. Call firstPositionInOrBeforeNode instead.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::positionAvoidingPrecedingNodes): Exit early when a node's content is ignored by editing instead
        of just when the node is br.
        * editing/htmlediting.cpp:
        (WebCore::lastEditablePositionBeforePositionInRoot): The shadow ancestor node is usually an input element
        so don't instantiate a position inside it. Call firstPositionInOrBeforeNode instead.

2011-03-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81369.
        http://trac.webkit.org/changeset/81369
        https://bugs.webkit.org/show_bug.cgi?id=56579

        breaks debugger test (Requested by podivilov on #webkit).

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._failedToParseScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._scriptSourceChanged):
        (WebInspector.DebuggerPresentationModel.prototype.breakpointsForSourceFileId):
        (WebInspector.DebuggerPresentationModel.prototype.findBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointRemoved):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointResolved):
        (WebInspector.DebuggerPresentationModel.prototype._encodeSourceLocation):
        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype._actualLocationToSourceLocation):
        (WebInspector.DebuggerPresentationModel.prototype.reset):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._parsedScriptSource):
        (WebInspector.ScriptsPanel.prototype._failedToParseScriptSource):
        (WebInspector.ScriptsPanel.prototype._scriptSourceChanged):
        (WebInspector.ScriptsPanel.prototype._addScript):
        (WebInspector.ScriptsPanel.prototype._resourceForURL):
        (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelectAndShowSourceFrameIfNeeded):
        (WebInspector.ScriptsPanel.prototype._showSourceFrame):
        (WebInspector.ScriptsPanel.prototype._recreateSourceFrame):
        (WebInspector.ScriptsPanel.prototype._sourceFileIdForScript):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.requestContent):

2011-03-17  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Justin Garcia.

        Assert that editing does not ignore position's anchorNode if position is an offset in anchor
        https://bugs.webkit.org/show_bug.cgi?id=56027

        Added the assertion in Position::Position and Position::moveToPosition. This assertion catches
        places where we instantiate positions inside a node on which editingIgnoresContent returns true.

        Test: editing/execCommand/button.html

        * dom/Position.cpp:
        (WebCore::Position::Position): Added an assertion.
        (WebCore::Position::moveToPosition): Ditto.
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::operator Position): Avoid creating a position immediately below
        a node whose content is ignored by editing. While this does not avoid creation of positions
        inside ignored contents completely, it works in most cases. Filed the bug 56027 to resolve
        the underlying problem. Without this change, the assertion hits in existing layout tests.
        cannot be tested directly.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded): Call firstPositionInOrBeforeNode
        instead of firstPositionInNode because startNode may as well be a br element. Without this change,
        the assertion hits in existing layout tests.
        * editing/htmlediting.cpp:
        (WebCore::canHaveChildrenForEditing): button is editable so content is not ignored. Added a test
        for this.
        * editing/visible_units.cpp:
        (WebCore::previousBoundary): Added a FIXME.
        (WebCore::startPositionForLine): Because br can also have an inline text box, checking that
        startBox is an inline text box isn't an adequate to instantiate a position inside startNode.
        Call startNode->isTextNode() instead. Without this change, the assertion hits in existing layout
        tests.

2011-03-17  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: extract content loading logic from scripts panel.
        https://bugs.webkit.org/show_bug.cgi?id=55237

        Encapsulate source files creation logic in debugger presentation model
        to support source mappings in a pluggable way.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.sourceFile):
        (WebInspector.DebuggerPresentationModel.prototype.requestSourceFileContent.else.didRequestSource):
        (WebInspector.DebuggerPresentationModel.prototype.requestSourceFileContent):
        (WebInspector.DebuggerPresentationModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._failedToParseScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._addScript.else.resourceFinished):
        (WebInspector.DebuggerPresentationModel.prototype._addScript):
        (WebInspector.DebuggerPresentationModel.prototype._ensureSourceFileAdded):
        (WebInspector.DebuggerPresentationModel.prototype._resourceForURL):
        (WebInspector.DebuggerPresentationModel.prototype._scriptSourceChanged):
        (WebInspector.DebuggerPresentationModel.prototype._sourceFileAdded):
        (WebInspector.DebuggerPresentationModel.prototype.breakpointsForSourceFileId):
        (WebInspector.DebuggerPresentationModel.prototype.findBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointRemoved):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointResolved):
        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype._actualLocationToSourceLocation):
        (WebInspector.DebuggerPresentationModel.prototype.reset):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._sourceFileAdded):
        (WebInspector.ScriptsPanel.prototype._showSourceFrame):
        (WebInspector.ScriptsPanel.prototype._sourceFileChanged):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.requestContent):

2011-03-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add types markup to the IDL, remove Value types from the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=56562

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluate):
        (WebCore::InjectedScript::evaluateOn):
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::setPropertyValue):
        (WebCore::InjectedScript::callFrames):
        (WebCore::InjectedScript::makeCall):
        (WebCore::InjectedScript::makeObjectCall):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.idl:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::getApplicationCaches):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getStylesForNode):
        (WebCore::InspectorCSSAgent::getInlineStyleForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::getStyleSheet):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::addRule):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::resolveNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::editScriptSource):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::identifierForInitialRequest):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::evaluateOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        (WebCore::InspectorRuntimeAgent::setPropertyValue):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::buildInspectorArray):
        * inspector/ScriptCallStack.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype._createResource):

2011-03-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81350.
        http://trac.webkit.org/changeset/81350
        https://bugs.webkit.org/show_bug.cgi?id=56560

        "Breaks twenty Chromium Webkit Win builder webkit_gpu_tests"
        (Requested by apavlov on #webkit).

        * WebCore.gypi:
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::State::State):
        (WebCore::GLES2Canvas::clearRect):
        (WebCore::GLES2Canvas::fillPath):
        (WebCore::GLES2Canvas::fillRect):
        (WebCore::GLES2Canvas::clipPath):
        (WebCore::GLES2Canvas::restore):
        (WebCore::GLES2Canvas::drawTexturedRect):
        (WebCore::GLES2Canvas::drawTexturedRectTile):
        (WebCore::GLES2Canvas::drawQuad):
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/gpu/BicubicShader.cpp: Removed.
        * platform/graphics/gpu/BicubicShader.h: Removed.
        * platform/graphics/gpu/ConvolutionShader.cpp: Removed.
        * platform/graphics/gpu/ConvolutionShader.h: Removed.
        * platform/graphics/gpu/DrawingBuffer.h:
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):
        (WebCore::SharedGraphicsContext3D::SharedGraphicsContext3D):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::canAccelerate):

2011-03-17  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Clean up Inspector strings.
        https://bugs.webkit.org/show_bug.cgi?id=56557

        * English.lproj/localizedStrings.js:

2011-03-14  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor event listener breakpoints.
        https://bugs.webkit.org/show_bug.cgi?id=56305

        - restore event listener breakpoints one by one instead of using setAllBrowserBreakpoints
        - store event listener breakpoints in a separate separate setting
        - move presentation-related code from BreakpointManager to EventListenerBreakpointsSidebarPane

        Test: inspector/debugger/event-listener-breakpoints.html

        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::setFrontend):
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::setEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorBrowserDebuggerAgent::clear):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.setEventListenerBreakpoint):
        (WebInspector.BreakpointManager.prototype.removeEventListenerBreakpoint):
        (WebInspector.BreakpointManager.prototype.breakpointViewForEventData):
        (WebInspector.BreakpointManager.prototype._projectChanged):
        (WebInspector.BreakpointManager.prototype._saveBreakpoints):
        (WebInspector.BreakpointManager.prototype._validateBreakpoints):
        (WebInspector.BreakpointManager.prototype._createDOMBreakpointId):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.EventListenerBreakpointsSidebarPane):
        (WebInspector.EventListenerBreakpointsSidebarPane.eventNameForUI):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._createCategory):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._categoryCheckboxClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._breakpointCheckboxClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._removeBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._updateCategoryCheckbox):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype.highlightBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype.clearBreakpointHighlight):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._saveBreakpoints):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._restoreBreakpoints):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype.setStatus):
        (WebInspector.CallStackSidebarPane.prototype._domBreakpointHit):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._clearInterface):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):

2011-03-16  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Implement GPU-accelerated shadows.
        https://bugs.webkit.org/show_bug.cgi?id=56476

        For hard shadows, we simply offset the CTM and draw in the shadow
        color.  For soft shadows, we use a separable Gaussian convolution,
        with a bilinear downsample and Mitchell-Netravali upsample in order to
        preserve quality.

        * WebCore.gypi:
        Add BicubicShader and ConvolutionShader to the build.
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::State::State):
        Add shadow-related members to the GLES2Canvas::State
        (WebCore::GLES2Canvas::State::shadowActive):
        Add a helper function to know if shadows are active.
        (WebCore::GLES2Canvas::clearRect):
        (WebCore::GLES2Canvas::scissorClear):
        Refactor the scissor clearing function out of clearRect().
        (WebCore::GLES2Canvas::fillPath):
        Add hook for shadow rendering in paths.  Bind framebuffer at this level.
        (WebCore::GLES2Canvas::fillRect):
        Add hook for shadow rendering in rects.  Bind framebuffer at this level.
        (WebCore::GLES2Canvas::fillRectInternal):
        Rename fillRect() -> fillRectInternal(), which does bind its vertex 
        buffer, but does not bind the framebuffer.
        (WebCore::GLES2Canvas::setShadowColor):
        (WebCore::GLES2Canvas::setShadowOffset):
        (WebCore::GLES2Canvas::setShadowBlur):
        (WebCore::GLES2Canvas::setShadowsIgnoreTransforms):
        Implement graphicsContext-style setters for shadow parameters.
        (WebCore::GLES2Canvas::clipPath):
        Call fillPathInternal(), not fillPath().
        (WebCore::GLES2Canvas::restore):
        (WebCore::GLES2Canvas::drawTexturedRect):
        Bind the framebuffer at this level.  Do not bind vertices here (will
        be done in drawTexturedQuad).
        (WebCore::GLES2Canvas::drawTexturedRectTile):
        drawQuad() -> drawTexturedQuad().
        (WebCore::GLES2Canvas::convolveRect):
        Implement one pass of a convolution filter (X or Y).
        (WebCore::gauss):
        (WebCore::buildKernel):
        Some helper functions to build a Gaussian convolution kernel.
        (WebCore::GLES2Canvas::drawTexturedQuad):
        Rename drawQuad() -> drawTexturedQuad(), to be more clear.  Do not
        bind the framebuffer at this level (it will be done higher).
        (WebCore::GLES2Canvas::drawTexturedQuadMitchell):
        Implement Mitchell-Netravali bicubic sampling, using BicubicShader.
        (WebCore::GLES2Canvas::fillPathInternal):
        Rename fillPath() -> fillPathInternal(), which does use quad vertices,
        but does not bind the framebuffer or set the compositing mode.
        (WebCore::GLES2Canvas::flipRect):
        Implement a helper function to flip a rectangle in Y within the canvas.
        (WebCore::GLES2Canvas::clearBorders):
        Implement a helper function to clear an n-pixel border around a rect.
        (WebCore::GLES2Canvas::beginShadowDraw):
        Setup before drawing a primitive's shadow:  for hard shadows, just
        offset the CTM by the shadow offset.  For soft shadows, bind to an
        offscreen DrawingBuffer.
        (WebCore::GLES2Canvas::endShadowDraw):
        Tear-down after drawing a primitive's shadow:  for hard shadows, just
        restore the CTM.  For soft shadows, downsample (if necessary), then
        blur in X, blur in Y, upsample if necessary).
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/gpu/BicubicShader.cpp: Added.
        (WebCore::BicubicShader::BicubicShader):
        (WebCore::BicubicShader::create):
        (WebCore::BicubicShader::use):
        * platform/graphics/gpu/BicubicShader.h: Added.
        Implement a bicubic image filtering shader.
        * platform/graphics/gpu/ConvolutionShader.cpp: Added.
        (WebCore::ConvolutionShader::ConvolutionShader):
        (WebCore::ConvolutionShader::create):
        (WebCore::ConvolutionShader::use):
        * platform/graphics/gpu/ConvolutionShader.h: Added.
        Implement a 1-dimensional convolution shader.  In order to minimize
        texture samples, this shader is parameterized at compile time by the
        width of the convolution kernel.
        * platform/graphics/gpu/DrawingBuffer.h:
        (WebCore::DrawingBuffer::colorBuffer):
        Add an accessor to retrieve a DrawingBuffer's texture ID.
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):
        (WebCore::SharedGraphicsContext3D::SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::useBicubicProgram):
        (WebCore::SharedGraphicsContext3D::useConvolutionProgram):
        Create BicubicShader and cMaxKernelWidth ConvolutionShader's (one for
        each possible kernel width).
        (WebCore::SharedGraphicsContext3D::getOffscreenBuffer):
        Implement a simple cache of offscreen DrawingBuffers, integer-indexed.
        This is done to minimize the VRAM usage:  only 2 buffers are used for
        all canvases.
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        Add bicubic and convolution shader members, and useXXX() functions.
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        Hook into GraphicsContextSkia's platform shadow setters to set
        parameters on GLES2Canvas.
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::canAccelerate):
        Remove shadows (loopers) from the list of things we can't accelerate.

2011-03-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Andreas Kling.

        Tiled backing store should only request repaint for updated areas
        https://bugs.webkit.org/show_bug.cgi?id=56464

        Reuse updateBackBuffer's dirty rectangle calculations to only
        invalidate the necessary parts of the window.

        * platform/graphics/Tile.h:
        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::updateTileBuffers):
        * platform/graphics/qt/TileQt.cpp:
        (WebCore::Tile::updateBackBuffer):

2011-03-17  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Reduce memory consumption by detailed heap snapshots indexes.
        https://bugs.webkit.org/show_bug.cgi?id=56395

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider.createProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotRetainerEdge): Added
        (WebInspector.HeapSnapshotRetainerEdgeIterator): Added
        (WebInspector.HeapSnapshotNode.prototype.get retainers):
        (WebInspector.HeapSnapshot.prototype.dispose):
        (WebInspector.HeapSnapshot.prototype.hasId):
        (WebInspector.HeapSnapshot.prototype.retainers):
        (WebInspector.HeapSnapshot.prototype._buildRetainers):
        (WebInspector.HeapSnapshot.prototype._buildIdsList):
        (WebInspector.HeapSnapshot.prototype._buildNodeIndex):
        (WebInspector.HeapSnapshot.prototype._findNodePositionInIndex):
        (WebInspector.HeapSnapshot.prototype._findNearestNodeIndex):
        (WebInspector.HeapSnapshot.prototype._getRetainerIndex):
        (WebInspector.HeapSnapshot.prototype._markInvisibleEdges):
        (WebInspector.HeapSnapshot.prototype._numbersComparator):
        (WebInspector.HeapSnapshotPathFinder.prototype.get _lastEdge):
        (WebInspector.HeapSnapshotPathFinder.prototype._nextEdgeIter):
        (WebInspector.HeapSnapshotPathFinder.prototype._buildNextPath):
        (WebInspector.HeapSnapshotPathFinder.prototype._pathToString):

2011-03-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81243.
        http://trac.webkit.org/changeset/81243
        https://bugs.webkit.org/show_bug.cgi?id=56471

        Breaks GTK 64-bit Debug tests (Requested by podivilov on
        #webkit).

        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::setFrontend):
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::setFrontend):
        (WebCore::InspectorBrowserDebuggerAgent::setAllBrowserBreakpoints):
        (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):
        (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::discardBindings):
        (WebCore::InspectorBrowserDebuggerAgent::setEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorBrowserDebuggerAgent::clear):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.createEventListenerBreakpoint):
        (WebInspector.BreakpointManager.prototype._createEventListenerBreakpoint):
        (WebInspector.BreakpointManager.prototype.setXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype.removeXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype.breakpointViewForEventData):
        (WebInspector.BreakpointManager.prototype._projectChanged):
        (WebInspector.BreakpointManager.prototype._saveBreakpoints):
        (WebInspector.BreakpointManager.prototype._validateBreakpoints):
        (WebInspector.BreakpointManager.prototype._createDOMBreakpointId):
        (WebInspector.BreakpointManager.prototype._createEventListenerBreakpointId):
        (WebInspector.EventListenerBreakpoint):
        (WebInspector.EventListenerBreakpoint.prototype._enable):
        (WebInspector.EventListenerBreakpoint.prototype._disable):
        (WebInspector.EventListenerBreakpoint.prototype._serializeToJSON):
        (WebInspector.EventListenerBreakpointView):
        (WebInspector.EventListenerBreakpointView.eventNameForUI):
        (WebInspector.EventListenerBreakpointView.prototype.get eventName):
        (WebInspector.EventListenerBreakpointView.prototype.compareTo):
        (WebInspector.EventListenerBreakpointView.prototype.populateLabelElement):
        (WebInspector.EventListenerBreakpointView.prototype.populateStatusMessageElement):
        (WebInspector.EventListenerBreakpointView.prototype._uiEventName):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.XHRBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._removeBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._createCategory):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._categoryCheckboxClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._breakpointCheckboxClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._breakpointAdded):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._breakpointHitStateChanged):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._breakpointRemoved):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._updateCategoryCheckbox):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._projectChanged):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype._scriptBreakpointHit):
        (WebInspector.CallStackSidebarPane.prototype._xhrBreakpointHit):
        (WebInspector.CallStackSidebarPane.prototype._nativeBreakpointHit):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._clearInterface):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):

2011-03-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add more ObjC++ files to the build
        https://bugs.webkit.org/show_bug.cgi?id=56548

        96 link errors.

        * WebCore.gypi:
        * gyp/WebCore.gyp:

2011-03-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add a few Objective-C++ files to the WebCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=56547

        464 link errors.

        * gyp/WebCore.gyp:

2011-03-17  Yuta Kitamura  <yutak@chromium.org>

        Unreviewed build fix.

        Non-ASCII characters in XMLTreeViewer.{cpp,h}
        https://bugs.webkit.org/show_bug.cgi?id=56549

        * xml/XMLTreeViewer.cpp: Replace non-ASCII characters with ASCII equivalents.
        * xml/XMLTreeViewer.h: Ditto.

2011-03-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add plugins and bridge to the WebCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=56546

        506 link errors.

        * gyp/WebCore.gyp:

2011-03-16  Jeff Johnson  <github@lapcatsoftware.com>

        Reviewed by Alexey Proskuryakov.

        Logic error in -[WebHTMLView close]
        https://bugs.webkit.org/show_bug.cgi?id=56445

        The function setDraggingImageURL() is no longer called and can be deleted.

        No new tests. Deleting dead code.

        * page/DragController.h:

2011-03-16  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Ryosuke Niwa.

        Textarea maxlength doesn't account for newlines
        https://bugs.webkit.org/show_bug.cgi?id=54443

        When a user presses a return key, TypingCommand::insertLineBreak() is called.
        So before append a new line, check if we can add the new line.

        * editing/TypingCommand.cpp:
        (WebCore::canAppendNewLineFeed): Implement new helper function to check if we can add new line.
        (WebCore::TypingCommand::insertLineBreak): Added check logic before adding the new line.
        (WebCore::TypingCommand::insertParagraphSeparator): Added check logic before adding the new line.

2011-03-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should build more derived sources
        https://bugs.webkit.org/show_bug.cgi?id=56529

        This patch brings us down to 597 link errors.

        * gyp/WebCore.gyp:

2011-03-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP should build (most) remaining source files
        https://bugs.webkit.org/show_bug.cgi?id=56515

        We're still not building all the files and we have 1305 link errors,
        but this patch is progress.

        * WebCore.gypi:
        * gyp/WebCore.gyp:
        * plugins/PluginStream.cpp:

2011-03-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        Update the default navigator.vendor value
        https://bugs.webkit.org/show_bug.cgi?id=56449

        * page/NavigatorBase.cpp: Updated the default value of
        WEBCORE_NAVIGATOR_VENDOR.

2011-03-16  John Bauman  <jbauman@chromium.org>

        Reviewed by James Robinson.

        texImage2D gets old contents of canvas
        https://bugs.webkit.org/show_bug.cgi?id=56414

        Always update the canvas contents in copiedImage, as there's no reason
        to ask for an out-of-date image.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::copiedImage):

2011-03-16  Adam Barth  <abarth@webkit.org>

        Reviewed by James Robinson.

        Remove USE(BUILTIN_UTF8_CODEC)
        https://bugs.webkit.org/show_bug.cgi?id=56508

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerEncodingNames):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):

2011-03-16  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Viewport no longer allows an auto value for "user-scalable"
        https://bugs.webkit.org/show_bug.cgi?id=55416

        This restores our behavior before r67376 the default "user-scalable"
        behavior can be defined by a WebKit client if a value was not
        explicitly provided in web content (via the viewport <meta> tag).
        Here, all WebKit ports default to "yes" after computing
        viewport arguments. However, in the future they may consider
        changing the default user-scalable value based on the type
        of the document being viewed, a user preference, or other reasons.

        Covered by existing tests. Should be no changes.

        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes): be explicit about 0.
        (WebCore::findUserScalableValue): convert to return a float, the instance variable type.
        * dom/ViewportArguments.h:
        (WebCore::ViewportArguments::ViewportArguments): convert the boolean back to a float to
        allow for 3 states. Explicit no, explicit yes, and ValueAuto to be defined by the
        WebKit client.

2011-03-16  David Levin  <levin@chromium.org>

        Reviewed by Dmitry Titov.

        REGRESSION(r81289): Fix valgrind error (and crashes) when running the chromium unit test "test_shell_test".

        Conditional jump or move depends on uninitialised value(s)
            WebCore::RenderLayerCompositor::RenderLayerCompositor(WebCore::RenderView*) (third_party/WebKit/Source/WebCore/rendering/RenderLayerCompositor.cpp:117)

        * page/Settings.cpp:
        (WebCore::Settings::Settings):

2011-03-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=56493 Drag-scrolling overlay 
        scrollbars thumb in overflow regions does not work
        -and corresponding-
        <rdar://problem/9112688> Drag-scrolling overlay scrollbars thumb in overflow 
        regions does not work

        Up until now, overlay scrollbars have always been treated in the Render Tree as if 
        they have a thickness of 0 because they should not affect layout. However, it is 
        important to consider their size when hit-testing because otherwise, we have this 
        bug! This patch adds a boolean parameter to overflowClipRect(), 
        RenderLayer::verticalScrollbarWidth(), and 
        RenderLayer::horizontalScrollbarHeight(). This bool indicates whether to include 
        the actual overlay scrollbar thickness. It defaults to false and is only sent is 
        as true from RenderBloc::nodeAtPoint().

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::overflowClipRect):
        * rendering/RenderBox.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::verticalScrollbarWidth):
        (WebCore::RenderLayer::horizontalScrollbarHeight):
        * rendering/RenderLayer.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::overflowClipRect):
        * rendering/RenderTable.h:

2011-03-16  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Fix std::swap not found issue on mobile Qt devices.
        https://bugs.webkit.org/show_bug.cgi?id=56463

        Include <algorithm> in TextBreakIteratorQt.cpp so std::swap is found
        on some Qt mobile devices.

        No new tests: No tests needed - compilation verified manually.

        * platform/text/qt/TextBreakIteratorQt.cpp:
        (WebCore::acquireLineBreakIterator):

2011-03-16  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] WebGL content not shown when accelerated compositing is enabled
        https://bugs.webkit.org/show_bug.cgi?id=56339

        Removed all previously implemented WebGL code from GraphicsLayerQt
        because API has changed. GraphicsContext3D provides PlatformLayer
        that is added as a child of GraphicsLayer and is therefore painted
        through QGraphicsView pipeline.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::GraphicsContext3DInternal):
        (WebCore::GraphicsContext3DInternal::paint):
        (WebCore::GraphicsContext3DInternal::boundingRect):
        (WebCore::GraphicsContext3D::platformLayer):
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::reshape):
        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl):
        (WebCore::GraphicsLayerQtImpl::paint):
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        (WebCore::GraphicsLayerQt::setContentsToCanvas):
        * platform/graphics/qt/GraphicsLayerQt.h:

2011-03-16  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        Get rid of nearestMailBlockquote
        https://bugs.webkit.org/show_bug.cgi?id=56439

        Removed nearestMailBlockquote and replaced the calls to the function by calls
        to enclosingNodeOfType and highestEnclosingNodeOfType.
        
        Also fixed a bug in BreakBlockquoteCommand and DeleteSelectionCommand not to
        respect editing boundaries.  Added a test for the former command.

        Test: editing/execCommand/break-non-editable-blockquote.html

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply): No longer crosses editing boundary
        when looking for a Mail blockquote.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::saveTypingStyleState): Ditto.
        (WebCore::DeleteSelectionCommand::calculateTypingStyleAfterDelete):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::hasMatchingQuoteLevel):
        (WebCore::handleStyleSpansBeforeInsertion):
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/htmlediting.cpp:
        (WebCore::enclosingNodeOfType): Check rule upfront to improve the performance.
        (WebCore::highestEnclosingNodeOfType): Ditto; also add the missing check.
        * editing/htmlediting.h:
        (WebCore::firstPositionInOrBeforeNode): Added a null pointer check.
        (WebCore::lastPositionInOrAfterNode): Ditto.
        * editing/markup.cpp:
        (WebCore::highestAncestorToWrapMarkup):
        (WebCore::createMarkup):

2011-03-16  Jer Noble  <jer.noble@apple.com>

        Reviewed by Beth Dakin.

        RenderFullScreen::createFullScreenStyle() leaks
        https://bugs.webkit.org/show_bug.cgi?id=53384

        Two problems: a) not calling release() on the style returned in setFullScreenRenderer
        causes an unnecessary ref/deref, and b) the fullscreen renderer needs to be destroyed,
        not just detached, when it is no longer needed.

        * dom/Document.cpp:
        (WebCore::Document::setFullScreenRenderer): Destroy the current renderer when a new one is set.
        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::createFullScreenStyle): release() the return value.

2011-03-16  Mike Reed  <reed@google.com>

        Reviewed by James Robinson.

        Reestablish typeface/size/encoding when drawing stroked text
        https://bugs.webkit.org/show_bug.cgi?id=56481

        No new tests. LayoutTests/svg/css/composite-shadow-text.svg

        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::paintSkiaText):

2011-03-16  Daniel Sievers  <sievers@google.com>

        Reviewed by James Robinson.

        Add setting to always force compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=56156

        No new tests needed as this defaults to disabled (and is unfeasible
        to be tested through property overriding at runtime).

        * page/Settings.h:
        (WebCore::Settings::setForceCompositingMode):
        (WebCore::Settings::forceCompositingMode):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        * rendering/RenderLayerCompositor.h:

2011-03-16  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Fixing backface visibility for transformed layers.
        https://bugs.webkit.org/show_bug.cgi?id=56237

        Test: platform/chromium/compositing/backface-visibility-transformed.html

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayer):

2011-03-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION(r76147): Dragging slider thumb is impossible or results in drawing artifacts.
        https://bugs.webkit.org/show_bug.cgi?id=56469

        Technically, this is not a regression, but rather uncovering of an old
        problem. When the RenderSlider::layout was written, the layout state was
        pushed with a wrong offset. However, since the whole slider track was
        always repainted, the problem didn't manifest itself until we actually
        started being more precise in our repaints.

        Test: fast/repaint/slider-thumb-float.html

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::layout): Changed to pass actual thumb offset
        to the LayoutStateMaintainer, rather than thumb size.

2011-03-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        Add play state callbacks to MediaControls, kill timeUpdate timer.
        https://bugs.webkit.org/show_bug.cgi?id=56473

        No change in behavior, covered by existing tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playbackProgressTimerFired): Added a call to
            media controls.
        (WebCore::HTMLMediaElement::updatePlayState): Ditto.
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::MediaControls): Removed initialization of the timer.
        (WebCore::MediaControls::playbackProgressed): Added.
        (WebCore::MediaControls::playbackStarted): Added, for now routing to just
            call playbackProgressed.
        (WebCore::MediaControls::playbackStopped): Ditto.
        (WebCore::MediaControls::update): Removed the code to start/stop the
            timer that's now gone.
        * html/shadow/MediaControls.h: Removed timer decls.

2011-03-16  Bill Budge  <bbudge@chromium.org>

        Reviewed by David Levin.

        DocumentThreadableLoaderClient needs a protected default Constructor
        https://bugs.webkit.org/show_bug.cgi?id=56479

        No new tests. Exposes no new functionality.

        * loader/DocumentThreadableLoaderClient.h:
        (WebCore::DocumentThreadableLoaderClient::DocumentThreadableLoaderClient):

2011-03-16  David Levin  <levin@chromium.org>

        Chromium Leopard build fix attempt #2.

        Same error as before.
        * bindings/v8/V8GCController.cpp:

2011-03-16  David Levin  <levin@chromium.org>

        Chromium Leopard build fix attempt.

        The error was 'WebCore::GrouperVisitor' has a field 'WebCore::GrouperVisitor::m_grouper' whose type uses the anonymous namespace.

        * bindings/v8/V8GCController.cpp:

2011-03-16  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Dimitri Glazkov and Darin Adler.

        Node::isContentEditable should always call parentNode() instead of parentOrHostNode()
        https://bugs.webkit.org/show_bug.cgi?id=56472

        Replaced the call to parentOrHostNode() in Node::isContentEditable by a call to parentNode().
        Node::isContentEditable now calls parentNode() on all nodes.

        No tests are added since this behavior change is not visible to scripts at the moment.

        * dom/Node.cpp:
        (WebCore::Node::isContentEditable):

2011-03-16  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        WK2: Need to propagate enhanced accessibility flag from UI -> web process
        https://bugs.webkit.org/show_bug.cgi?id=56379

        Allow the enhanced accessibility flag to be toggleable. 

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::setEnhancedUserInterfaceAccessibility):

2011-03-16  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Buildfix after r81230.

        * WebCore.pri: Missing include path added.

2011-03-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make Structure creation require a JSGlobalData
        https://bugs.webkit.org/show_bug.cgi?id=56438

        Mechanical change to make all structure creation use GlobalData

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSAudioConstructor.h:
        (WebCore::JSAudioConstructor::createStructure):
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWithGlobalPointer::createStructure):
        (WebCore::DOMConstructorObject::createStructure):
        (WebCore::getDOMStructure):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::JSDOMGlobalObject::createStructure):
        * bindings/js/JSDOMWindowBase.h:
        (WebCore::JSDOMWindowBase::createStructure):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::createStructure):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSImageConstructor.h:
        (WebCore::JSImageConstructor::createStructure):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        * bindings/js/JSOptionConstructor.h:
        (WebCore::JSOptionConstructor::createStructure):
        * bindings/js/JSWorkerContextBase.h:
        (WebCore::JSWorkerContextBase::createStructure):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/CRuntimeObject.h:
        (JSC::Bindings::CRuntimeObject::createStructure):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CRuntimeMethod::createStructure):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaRuntimeMethod::createStructure):
        * bridge/jni/jsc/JavaRuntimeObject.h:
        (JSC::Bindings::JavaRuntimeObject::createStructure):
        * bridge/objc/ObjCRuntimeObject.h:
        (JSC::Bindings::ObjCRuntimeObject::createStructure):
        * bridge/objc/objc_instance.mm:
        (ObjCRuntimeMethod::createStructure):
        * 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::Bindings::RuntimeObject::createStructure):

2011-03-16  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Alexey Proskuryakov.

        REGRESSION: Crash in adjustMIMETypeIfNecessary since r81001
        https://bugs.webkit.org/show_bug.cgi?id=56345

        Add NULL check for Content-Type header field.

        Test: http/tests/xmlhttprequest/xmlhttprequest-no-content-type.html

        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::adjustMIMETypeIfNecessary):

2011-03-15  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        REGRESSION (r81165): Assert running editing/style/iframe-onload-crash.html with non-Mac editing behavior
        https://bugs.webkit.org/show_bug.cgi?id=56407

        Fixing the creation of incorrect ranges from TextIterator due to passing node/offset pairs that
        weren't parent-anchored. Also changing canHaveChildrenForEditing to properly handle nodes that
        have had children appended to them that editing wouldn't normally allow.

        Tests: editing/style/iframe-onload-crash-mac.html
               editing/style/iframe-onload-crash-unix.html
               editing/style/iframe-onload-crash-win.html

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::rangeFromLocationAndLength): Passing parent-anchored values to range.
        * editing/htmlediting.cpp:
        (WebCore::canHaveChildrenForEditing): Adding a condition that the nodes don't already have children
        for hr and datagrid, as you can append any node to another using javascript.

2011-03-16  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        [Chromium] Report object groups and single DOM-related objects
        to the new heap profiler.
        https://bugs.webkit.org/show_bug.cgi?id=53659

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * WebCore.pro:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/RetainedDOMInfo.cpp: Added.
        (WebCore::RetainedDOMInfo::RetainedDOMInfo):
        * bindings/v8/RetainedDOMInfo.h: Added.
        * bindings/v8/RetainedObjectInfo.h: Added.
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::retainedDOMInfo):
        (WebCore::ScriptProfiler::initialize):
        * bindings/v8/ScriptProfiler.h:
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initContextIfNeeded):
        * bindings/v8/V8GCController.cpp:
        (WebCore::GroupId::GrouperItem::GrouperItem):
        (WebCore::GroupId::GrouperItem::groupId):
        (WebCore::GroupId::GrouperItem::createRetainedObjectInfo):
        (WebCore::calculateGroupId):
        (WebCore::GrouperVisitor::visitDOMWrapper):
        (WebCore::GrouperVisitor::applyGrouping):
        * bindings/v8/WrapperTypeInfo.h:
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotConstructorNode):
        (WebInspector.HeapSnapshotConstructorNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotDiffNode):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider.createProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.setDataSource):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.refresh):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.showNext.startSearching):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.showNext):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype._setRootChildrenForFinder):
        (WebInspector.DetailedHeapshotView.prototype._changeRetainingPathsRoot):
        (WebInspector.DetailedHeapshotView.prototype.get isTracingToWindowObjects):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get className):
        (WebInspector.HeapSnapshot.prototype._buildAggregates):
        (WebInspector.HeapSnapshotPathFinder.prototype.updateRoots):
        (WebInspector.HeapSnapshotPathFinder.prototype._fillRootChildren):
        * inspector/front-end/heapProfiler.css:
        (.detailed-heapshot-view .retaining-paths-view .title > span):
        (.detailed-heapshot-view .retaining-paths-to-windows):

2011-03-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add WebKit2 API to figure out if an input or textarea was edited
        https://bugs.webkit.org/show_bug.cgi?id=56474

        Add HTMLInputElement::lastChangeWasUserEdit and HTMLTextAreaElement::lastChangeWasUserEdit
        and use them to implement -[DOMHTMLInputElement _isEdited] and -[DOMHTMLTextAreaElement _isEdited]
        as well as API in WebKit2.

        * WebCore.exp.in:
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _isEdited]):
        (-[DOMHTMLTextAreaElement _isEdited]):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::lastChangeWasUserEdit):
        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::lastChangeWasUserEdit):
        * html/HTMLTextAreaElement.h:

2011-03-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: ASSERTION FAILED: !HashTranslator::equal(KeyTraits::emptyValue(), key)
        https://bugs.webkit.org/show_bug.cgi?id=56376

        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::willRemoveDOMNode):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._setDocument):

2011-03-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        text-combine text retains compressed font after adding characters to it
        https://bugs.webkit.org/show_bug.cgi?id=56448

        Test: fast/dynamic/text-combine.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Allow styles with text-combine to be shared, since
        only the clones on the RenderCombineText will be mutated.
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::styleDidChange): Clone the style, to avoid mutating the parent’s
        style.
        (WebCore::RenderCombineText::combineText): Start off with the original font; restore it if
        the text cannot be combined.
        * rendering/RenderCombineText.h:
        (WebCore::RenderCombineText::originalFont): Added. Returns the parent’s font.

2011-03-14  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor event listener breakpoints.
        https://bugs.webkit.org/show_bug.cgi?id=56305

        - restore event listener breakpoints one by one instead of using setAllBrowserBreakpoints
        - store event listener breakpoints in a separate separate setting
        - move presentation-related code from BreakpointManager to EventListenerBreakpointsSidebarPane

        Test: inspector/debugger/event-listener-breakpoints.html

        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::setFrontend):
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::setEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorBrowserDebuggerAgent::clear):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.setEventListenerBreakpoint):
        (WebInspector.BreakpointManager.prototype.removeEventListenerBreakpoint):
        (WebInspector.BreakpointManager.prototype.breakpointViewForEventData):
        (WebInspector.BreakpointManager.prototype._projectChanged):
        (WebInspector.BreakpointManager.prototype._saveBreakpoints):
        (WebInspector.BreakpointManager.prototype._validateBreakpoints):
        (WebInspector.BreakpointManager.prototype._createDOMBreakpointId):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.EventListenerBreakpointsSidebarPane):
        (WebInspector.EventListenerBreakpointsSidebarPane.eventNameForUI):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._createCategory):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._categoryCheckboxClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._breakpointCheckboxClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._removeBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._updateCategoryCheckbox):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype.highlightBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype.clearBreakpointHighlight):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._saveBreakpoints):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._restoreBreakpoints):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype.setStatus):
        (WebInspector.CallStackSidebarPane.prototype._domBreakpointHit):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._clearInterface):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):

2011-03-16  David Kilzer  <ddkilzer@apple.com>

        Minor clean-up after r81156, r81172

        Follow-up for:
        <http://webkit.org/b/56381> Objective-C classes should be typedef-ed as structs (not void*) in C++

        * platform/graphics/GraphicsLayer.h: Removed unused @class
        WebLayer declaration.
        * platform/graphics/ca/PlatformCAAnimation.h: Changed typedef
        struct CAPropertyAnimation to class declaration.

2011-03-16  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Remove live-edit code
        https://bugs.webkit.org/show_bug.cgi?id=56177

        * inspector/front-end/Settings.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype._doubleClick):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.set readOnly):

2011-03-16  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Martin Robinson.

        [GStreamer] There is no need to set the state of the pipeline to playing, HTMLMediaElement will do it.
        https://bugs.webkit.org/show_bug.cgi?id=56403

        In case of a seek on a live pipeline there is no need to call gst_element_set_state(m_playBin, GST_STATE_PLAYING);
        As soon as HTMLMediaElement::updatePlayState() is called (like when the data comes in) the playback will be relaunched
        i.e the pause() made when beginScrubbing is done is just internal.

        No new tests: Verified manually.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):

2011-03-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should build platform/
        https://bugs.webkit.org/show_bug.cgi?id=56430

        Adding platform/ to the GYP build required disabling
        ALWAYS_SEARCH_USER_PATHS, which in turn required fixing some latent
        style issues.  I suspect we'll end up excluding some of these files
        from the build in the final analysis, but we might as well fix the
        style errors while we're here.

        * bindings/js/JSMainThreadExecState.h:
        * bindings/js/ScheduledAction.h:
        * css/CSSPrimitiveValueCache.cpp:
        * gyp/WebCore.gyp:
        * platform/KillRingNone.cpp:
        (WebCore::KillRing::append):
        (WebCore::KillRing::prepend):
        * platform/graphics/ContextShadow.h:
        * platform/graphics/gpu/LoopBlinnPathProcessor.cpp:
        (WebCore::LoopBlinnPathProcessor::buildContours):
        (WebCore::TessellationState::combineCallback):
        * platform/graphics/gpu/PODRedBlackTree.h:
        (WebCore::PODRedBlackTree::updateNode):
        (WebCore::PODRedBlackTree::logIfVerbose):
        * platform/graphics/opengl/TextureMapperGL.cpp:
        * platform/graphics/opengl/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::BitmapTexture::save):
        (WebCore::TextureMapper::paintToTarget):
        * platform/graphics/texmap/TextureMapperNode.h:

2011-03-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GStreamer] http/tests/media/video-play-stall-before-meta-data.html fails
        https://bugs.webkit.org/show_bug.cgi?id=56370

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateMessageCallback): Let the
        mediaPlayerClient handle the stream error, in this case the
        HTMLMediaElement will emit a stalled event.

2011-03-10  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] Frame accurate seeking isn't always accurate
        https://bugs.webkit.org/show_bug.cgi?id=55217

        Attempt to build the seek GstClockTime position by converting the
        float time value to a GTimeVal value rounded at microsecond
        precision. Additionally perform the seek with the ACCURATE seek
        flag. These modifications at least fix this manual-test:
        http://www.massive-interactive.nl/html5_video/smpte_test_universal.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::currentTime):
        (WebCore::MediaPlayerPrivateGStreamer::seek):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2011-03-15  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: split InspectorAgent.populateScriptObjects into more granular agent-specific requests
        https://bugs.webkit.org/show_bug.cgi?id=56389

        Instead of sending one big request populateScriptObjects each agent requests
        for initial data in its constructor.
        
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::pushDataCollectedOffline):
        (WebCore::InspectorAgent::getPreferredPanel):
        * inspector/InspectorAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::setFrontend):
        (WebCore::InspectorDOMAgent::restore):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setFrontend):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorProfilerAgent.h:
        (WebCore::InspectorProfilerAgent::isEnabled):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        * inspector/front-end/inspector.js:

2011-03-15  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Devirtualize isContentEditable and isRichlyContentEditable
        https://bugs.webkit.org/show_bug.cgi?id=56421

        Rewrote Node::isContentEditable as a non-recursive non-virtual function.

        * dom/Document.cpp: Removed isContentEditable and isContentRichlyEditable.
        * dom/Document.h: Ditto.
        * dom/Node.cpp:
        (WebCore::Node::isContentEditable): Rewritten.
        * dom/Node.h:
        (WebCore::Node::isContentEditable): Calls isContentEditable(Editable).
        (WebCore::Node::isContentRichlyEditable): Calls isContentEditable(RichlyEditable).
        * html/HTMLElement.cpp: Removed isContentEditable and isContentRichlyEditable.
        * html/HTMLElement.h: Ditto.

2011-03-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should build inspector/ loader/ mathml/ notifications/ and page/
        https://bugs.webkit.org/show_bug.cgi?id=56412

        Yay for smooth sailing.

        * gyp/WebCore.gyp:

2011-03-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        REGRESSION(r76147): A slider thumb that is styled cannot be programmatically moved
        https://bugs.webkit.org/show_bug.cgi?id=56059

        Test: fast/dom/HTMLInputElement/input-slider-update-styled.html

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::valueChanged): Changed to use setPositionFromValue.
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::setPositionFromValue): Added.
        (WebCore::SliderThumbElement::dragFrom): Changed to use setPositionFromPoint.
        (WebCore::SliderThumbElement::setPositionFromPoint): Ditto.
        (WebCore::SliderThumbElement::defaultEventHandler): Ditto.
        * html/shadow/SliderThumbElement.h: Added decls.

2011-03-15  David Levin  <levin@chromium.org>

        Attempted build fix following r81213. Same song second verse.

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

2011-03-15  David Levin  <levin@chromium.org>

        Attempted build fix for Chromium OSX release build following r81213.

        * platform/image-encoders/skia/JPEGImageEncoder.cpp:
        (WebCore::encodePixels): Change scoping of |pixels| to be after setjmp call.

2011-03-15  John Bauman  <jbauman@chromium.org>

        Reviewed by Kenneth Russell.

        Non-premultiplied-alpha canvas attribute is ignore for toDataURL, drawImage, texImage2D
        https://bugs.webkit.org/show_bug.cgi?id=56238

       Attempt to get an ImageData (non-premultiplied) from a WebGL canvas
       instead of getting an ImageBuffer, so there's a chance the data can be
       passed straight through to the consumer with no premultiplication
       necessary. Fixes Chromium and Safari.

        Test: fast/canvas/webgl/premultiplyalpha-test.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toDataURL):
        (WebCore::HTMLCanvasElement::getImageData):
        * html/HTMLCanvasElement.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::paintRenderingResultsToImageData):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        * html/canvas/WebGLRenderingContext.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::CGImageToDataURL):
        (WebCore::ImageBuffer::toDataURL):
        (WebCore::ImageDataToDataURL):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::validateAttributes):
        (WebCore::GraphicsContext3D::readRenderingResults):
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::paintRenderingResultsToImageData):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToImageData):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageToDataURL):
        (WebCore::ImageBuffer::toDataURL):
        (WebCore::ImageDataToDataURL):
        * platform/image-encoders/skia/JPEGImageEncoder.cpp:
        (WebCore::preMultipliedBGRAtoRGB):
        (WebCore::RGBAtoRGB):
        (WebCore::encodePixels):
        (WebCore::JPEGImageEncoder::encode):
        * platform/image-encoders/skia/JPEGImageEncoder.h:
        * platform/image-encoders/skia/PNGImageEncoder.cpp:
        (WebCore::preMultipliedBGRAtoRGBA):
        (WebCore::encodePixels):
        (WebCore::PNGImageEncoder::encode):
        * platform/image-encoders/skia/PNGImageEncoder.h:

2011-03-15  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, only compile the methods when the INDEXED_DATABASE feature is enabled.
        
        * storage/IDBDatabaseCallbacksImpl.cpp:

2011-03-15  Brady Eidson  <beidson@apple.com>

        Build fix after r81208 for https://bugs.webkit.org/show_bug.cgi?id=56425

        * loader/icon/IconDatabaseBase.h: #include instead of forward declare.

2011-03-15  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/8944558> Overlay scrollers in overflow areas need to 
        send notifications appropriate times (showing up, resizing)
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=56067

        The general strategy here is to add a HashSet of ScrollableAreas to the page that 
        can be accessed when necessary to send notifications to all ScrollableAreas. In 
        turn, all of the ScrollableArea classes that add themselves to the HashSet must 
        keep a weak pointer to Page so that they can remove themselves without relying on 
        Frames or Renderers to still have references.

        Find layers for relevant node and if the layers are in the Page's ScrollableArea 
        set, then send the relevant notification.
        * page/EventHandler.cpp:
        (WebCore::layerForNode):
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::updateMouseEventTargetNode):

        When the page is set active or not active, iterate through the Page's 
        ScrollableAreas to send hide/show notifications. 
        * page/FocusController.cpp:
        (WebCore::FocusController::setActive):

        When a FrameView is created, add it to the ScrollableArea set. When it's 
        destroyed, remove it.
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::~FrameView):

        Iterate through the Page's ScrollableAreas to send the paint notification.
        (WebCore::FrameView::notifyPageThatContentAreaWillPaint):
        * page/FrameView.h:
        (WebCore::FrameView::disconnectFromPage):

        Add the new ScrollableArea set.
        * page/Page.cpp:
        (WebCore::Page::~Page):
        (WebCore::Page::addScrollableArea):
(WebCore::Page::removeScrollableArea):
        (WebCore::Page::containsScrollableArea):
        * page/Page.h:
        (WebCore::Page::scrollableAreaSet):

        notifyPageThatContentAreaWillPaint() is a dummy function implemented in FrameView.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::notifyPageThatContentAreaWillPaint):
        
        Call notifyPageThatContentAreaWillPaint() instead of calling 
        contentAreaWillPaint() just for the ScrollView.
        (WebCore::ScrollView::paint):
        * platform/ScrollView.h:

        Add/remove ScrollableAreas to the set. Add new disconnectFromPage().
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::disconnectFromPage):
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::RenderDataGrid):
        (WebCore::RenderDataGrid::~RenderDataGrid):
        * rendering/RenderDataGrid.h:
        (WebCore::RenderDataGrid::disconnectFromPage):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::disconnectFromPage):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::RenderListBox):
        (WebCore::RenderListBox::~RenderListBox):
        * rendering/RenderListBox.h:
        (WebCore::RenderListBox::disconnectFromPage):

        Should have implemented this ScrollableArea-interface function a while ago.
        (WebCore::RenderLayer::currentMousePosition):

2011-03-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=56425
        WebKit2 icon database.

        * WebCore.exp.in:

2011-03-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        WebCore GYP build should build editing, fileapi, history, and html
        https://bugs.webkit.org/show_bug.cgi?id=56411

        These all went smoothly.

        * gyp/WebCore.gyp:

2011-03-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should build dom/
        https://bugs.webkit.org/show_bug.cgi?id=56409

        * gyp/WebCore.gyp:

2011-03-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should build css/
        https://bugs.webkit.org/show_bug.cgi?id=56408

        CSSParser.cpp #includes tokenizer.cpp, which we haven't included in the
        build yet.  I've punted on that problem for now, but we'll come back to
        it.

        * gyp/WebCore.gyp:

2011-03-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        WebCore GYP build should build bindings/
        https://bugs.webkit.org/show_bug.cgi?id=56406

        I wanted to include bindings/objc in this patch, but they were somewhat
        complicated.  It looks like they include headers from the output
        directory (via PrivateHeaders), but we haven't wired up the
        PrivateHeaders yet.

        * gyp/WebCore.gyp:

2011-03-15  James Simonsen  <simonjam@chromium.org>

        Reviewed by Tony Gentilcore.

        Need different behavior for ensuring execution order of dynamically loaded scripts
        https://bugs.webkit.org/show_bug.cgi?id=50115

        Dynamically added scripts with async=false will load in parallel, but execute in order.
        See: http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#force-async

        Tests: fast/dom/HTMLScriptElement/script-async-attr.html
               http/tests/misc/script-async-load-execute-in-order.html

        * Android.mk: Rename AsyncScriptRunner -> ScriptRunner.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/DOMAllInOne.cpp: Ditto.
        * dom/Document.cpp:
        (WebCore::Document::Document): Ditto.
        (WebCore::Document::~Document): Ditto.
        * dom/Document.h:
        (WebCore::Document::scriptRunner): Ditto.
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::ScriptElement): Added forceAsync and willExecuteInOrder.
        (WebCore::ScriptElement::handleAsyncAttribute): Called by HTMLScriptElement when async attribute changes.
        (WebCore::ScriptElement::prepareScript): Added support for forceAsync.
        (WebCore::ScriptElement::notifyFinished): Tell ScriptRunner to execute in order if needed.
        * dom/ScriptElement.h:
        (WebCore::ScriptElement::forceAsync): Added.
        * dom/ScriptRunner.cpp: Renamed from Source/WebCore/dom/AsyncScriptRunner.cpp.
        (WebCore::ScriptRunner::ScriptRunner): Added in-order script queue.
        (WebCore::ScriptRunner::~ScriptRunner): Ditto.
        (WebCore::ScriptRunner::executeScriptSoon):
        (WebCore::ScriptRunner::queueScriptForInOrderExecution): Added.
        (WebCore::ScriptRunner::suspend):
        (WebCore::ScriptRunner::resume):
        (WebCore::ScriptRunner::timerFired): Execute in-order scripts if ready.
        * dom/ScriptRunner.h: Renamed from Source/WebCore/dom/AsyncScriptRunner.h.
        (WebCore::ScriptRunner::create):
        (WebCore::ScriptRunner::hasPendingScripts): Check for in-order scripts too.
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::attributeChanged): Notify ScriptElement when async changes.
        (WebCore::HTMLScriptElement::setAsync): Ditto.
        (WebCore::HTMLScriptElement::async): Include forceAsync in calculation.
        * html/HTMLScriptElement.h:
        * html/HTMLScriptElement.idl: Removed Reflect from async for custom behavior.
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer): Rename AsyncScriptRunner -> ScriptRunner.
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer): Ditto.

2011-03-15  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        pngcrush images used by inspector
        https://bugs.webkit.org/show_bug.cgi?id=56426

        This saves 120k in WebCore and 8k in WebKit/chromium.  I ran
        pngcrush -brute, so none of the meta data (ancillary chunks)
        are modified.

        No new tests, just compressing png files.

        * inspector/front-end/Images/applicationCache.png:
        * inspector/front-end/Images/auditsIcon.png:
        * inspector/front-end/Images/back.png:
        * inspector/front-end/Images/breakpointBorder.png:
        * inspector/front-end/Images/breakpointConditionalBorder.png:
        * inspector/front-end/Images/breakpointConditionalCounterBorder.png:
        * inspector/front-end/Images/breakpointCounterBorder.png:
        * inspector/front-end/Images/breakpointsActivateButtonGlyph.png:
        * inspector/front-end/Images/breakpointsDeactivateButtonGlyph.png:
        * inspector/front-end/Images/checker.png:
        * inspector/front-end/Images/clearConsoleButtonGlyph.png:
        * inspector/front-end/Images/closeButtons.png:
        * inspector/front-end/Images/consoleButtonGlyph.png:
        * inspector/front-end/Images/consoleIcon.png:
        * inspector/front-end/Images/cookie.png:
        * inspector/front-end/Images/database.png:
        * inspector/front-end/Images/databaseTable.png:
        * inspector/front-end/Images/debuggerContinue.png:
        * inspector/front-end/Images/debuggerPause.png:
        * inspector/front-end/Images/debuggerStepInto.png:
        * inspector/front-end/Images/debuggerStepOut.png:
        * inspector/front-end/Images/debuggerStepOver.png:
        * inspector/front-end/Images/disclosureTriangleSmallDown.png:
        * inspector/front-end/Images/disclosureTriangleSmallDownBlack.png:
        * inspector/front-end/Images/disclosureTriangleSmallDownWhite.png:
        * inspector/front-end/Images/disclosureTriangleSmallRight.png:
        * inspector/front-end/Images/disclosureTriangleSmallRightBlack.png:
        * inspector/front-end/Images/disclosureTriangleSmallRightDown.png:
        * inspector/front-end/Images/disclosureTriangleSmallRightDownBlack.png:
        * inspector/front-end/Images/disclosureTriangleSmallRightDownWhite.png:
        * inspector/front-end/Images/disclosureTriangleSmallRightWhite.png:
        * inspector/front-end/Images/dockButtonGlyph.png:
        * inspector/front-end/Images/elementsIcon.png:
        * inspector/front-end/Images/enableOutlineButtonGlyph.png:
        * inspector/front-end/Images/enableSolidButtonGlyph.png:
        * inspector/front-end/Images/errorIcon.png:
        * inspector/front-end/Images/errorMediumIcon.png:
        * inspector/front-end/Images/errorRedDot.png:
        * inspector/front-end/Images/excludeButtonGlyph.png:
        * inspector/front-end/Images/focusButtonGlyph.png:
        * inspector/front-end/Images/forward.png:
        * inspector/front-end/Images/frame.png:
        * inspector/front-end/Images/garbageCollectButtonGlyph.png:
        * inspector/front-end/Images/gearButtonGlyph.png:
        * inspector/front-end/Images/glossyHeader.png:
        * inspector/front-end/Images/glossyHeaderPressed.png:
        * inspector/front-end/Images/glossyHeaderSelected.png:
        * inspector/front-end/Images/glossyHeaderSelectedPressed.png:
        * inspector/front-end/Images/goArrow.png:
        * inspector/front-end/Images/graphLabelCalloutLeft.png:
        * inspector/front-end/Images/graphLabelCalloutRight.png:
        * inspector/front-end/Images/helpButtonGlyph.png:
        * inspector/front-end/Images/largerResourcesButtonGlyph.png:
        * inspector/front-end/Images/localStorage.png:
        * inspector/front-end/Images/networkIcon.png:
        * inspector/front-end/Images/nodeSearchButtonGlyph.png:
        * inspector/front-end/Images/paneAddButtons.png:
        * inspector/front-end/Images/paneBottomGrow.png:
        * inspector/front-end/Images/paneBottomGrowActive.png:
        * inspector/front-end/Images/paneGrowHandleLine.png:
        * inspector/front-end/Images/paneSettingsButtons.png:
        * inspector/front-end/Images/pauseOnExceptionButtonGlyph.png:
        * inspector/front-end/Images/percentButtonGlyph.png:
        * inspector/front-end/Images/popoverArrows.png:
        * inspector/front-end/Images/popoverBackground.png:
        * inspector/front-end/Images/profileGroupIcon.png:
        * inspector/front-end/Images/profileIcon.png:
        * inspector/front-end/Images/profileSmallIcon.png:
        * inspector/front-end/Images/profilesIcon.png:
        * inspector/front-end/Images/profilesSilhouette.png:
        * inspector/front-end/Images/programCounterBorder.png:
        * inspector/front-end/Images/radioDot.png:
        * inspector/front-end/Images/recordButtonGlyph.png:
        * inspector/front-end/Images/recordToggledButtonGlyph.png:
        * inspector/front-end/Images/reloadButtonGlyph.png:
        * inspector/front-end/Images/resourceCSSIcon.png:
        * inspector/front-end/Images/resourceDocumentIcon.png:
        * inspector/front-end/Images/resourceDocumentIconSmall.png:
        * inspector/front-end/Images/resourceJSIcon.png:
        * inspector/front-end/Images/resourcePlainIcon.png:
        * inspector/front-end/Images/resourcePlainIconSmall.png:
        * inspector/front-end/Images/resourcesIcon.png:
        * inspector/front-end/Images/resourcesSizeGraphIcon.png:
        * inspector/front-end/Images/resourcesTimeGraphIcon.png:
        * inspector/front-end/Images/scriptsIcon.png:
        * inspector/front-end/Images/scriptsSilhouette.png:
        * inspector/front-end/Images/searchSmallBlue.png:
        * inspector/front-end/Images/searchSmallBrightBlue.png:
        * inspector/front-end/Images/searchSmallGray.png:
        * inspector/front-end/Images/searchSmallWhite.png:
        * inspector/front-end/Images/segment.png:
        * inspector/front-end/Images/segmentEnd.png:
        * inspector/front-end/Images/segmentHover.png:
        * inspector/front-end/Images/segmentHoverEnd.png:
        * inspector/front-end/Images/segmentSelected.png:
        * inspector/front-end/Images/segmentSelectedEnd.png:
        * inspector/front-end/Images/sessionStorage.png:
        * inspector/front-end/Images/splitviewDimple.png:
        * inspector/front-end/Images/splitviewDividerBackground.png:
        * inspector/front-end/Images/statusbarButtons.png:
        * inspector/front-end/Images/statusbarMenuButton.png:
        * inspector/front-end/Images/statusbarMenuButtonSelected.png:
        * inspector/front-end/Images/statusbarResizerHorizontal.png:
        * inspector/front-end/Images/statusbarResizerVertical.png:
        * inspector/front-end/Images/successGreenDot.png:
        * inspector/front-end/Images/thumbActiveHoriz.png:
        * inspector/front-end/Images/thumbActiveVert.png:
        * inspector/front-end/Images/thumbHoriz.png:
        * inspector/front-end/Images/thumbHoverHoriz.png:
        * inspector/front-end/Images/thumbHoverVert.png:
        * inspector/front-end/Images/thumbVert.png:
        * inspector/front-end/Images/timelineBarBlue.png:
        * inspector/front-end/Images/timelineBarGray.png:
        * inspector/front-end/Images/timelineBarGreen.png:
        * inspector/front-end/Images/timelineBarOrange.png:
        * inspector/front-end/Images/timelineBarPurple.png:
        * inspector/front-end/Images/timelineBarRed.png:
        * inspector/front-end/Images/timelineBarYellow.png:
        * inspector/front-end/Images/timelineCheckmarks.png:
        * inspector/front-end/Images/timelineDots.png:
        * inspector/front-end/Images/timelineHollowPillBlue.png:
        * inspector/front-end/Images/timelineHollowPillGray.png:
        * inspector/front-end/Images/timelineHollowPillGreen.png:
        * inspector/front-end/Images/timelineHollowPillOrange.png:
        * inspector/front-end/Images/timelineHollowPillPurple.png:
        * inspector/front-end/Images/timelineHollowPillRed.png:
        * inspector/front-end/Images/timelineHollowPillYellow.png:
        * inspector/front-end/Images/timelineIcon.png:
        * inspector/front-end/Images/timelinePillBlue.png:
        * inspector/front-end/Images/timelinePillGray.png:
        * inspector/front-end/Images/timelinePillGreen.png:
        * inspector/front-end/Images/timelinePillOrange.png:
        * inspector/front-end/Images/timelinePillPurple.png:
        * inspector/front-end/Images/timelinePillRed.png:
        * inspector/front-end/Images/timelinePillYellow.png:
        * inspector/front-end/Images/toolbarItemSelected.png:
        * inspector/front-end/Images/trackHoriz.png:
        * inspector/front-end/Images/trackVert.png:
        * inspector/front-end/Images/treeDownTriangleBlack.png:
        * inspector/front-end/Images/treeDownTriangleWhite.png:
        * inspector/front-end/Images/treeRightTriangleBlack.png:
        * inspector/front-end/Images/treeRightTriangleWhite.png:
        * inspector/front-end/Images/treeUpTriangleBlack.png:
        * inspector/front-end/Images/treeUpTriangleWhite.png:
        * inspector/front-end/Images/undockButtonGlyph.png:
        * inspector/front-end/Images/userInputIcon.png:
        * inspector/front-end/Images/userInputPreviousIcon.png:
        * inspector/front-end/Images/userInputResultIcon.png:
        * inspector/front-end/Images/warningIcon.png:
        * inspector/front-end/Images/warningMediumIcon.png:
        * inspector/front-end/Images/warningOrangeDot.png:
        * inspector/front-end/Images/warningsErrors.png:

2011-03-15  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        Crash in ReplaceSelectionCommand::doApply when inserting a node under a document node
        https://bugs.webkit.org/show_bug.cgi?id=56372

        The bug was caused by insertNodeAfter's calling parentElement on document's child.
        Fixed this by changing the node that AppendNodeCommand takes.

        There was also a bug that document node always returned false for isContentEditable
        and isContentRichlyEditable because they never overrode Node's default implementation.
        Fixed this by overriding them in Document.

        Test: editing/execCommand/append-node-under-document.html

        * dom/Document.cpp:
        (WebCore::Document::isContentEditable): Added.
        (WebCore::Document::isContentRichlyEditable): Added.
        * dom/Document.h:
        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::AppendNodeCommand): Takes ContainerNode instead of Element.
        * editing/AppendNodeCommand.h:
        (WebCore::AppendNodeCommand::create): Ditto.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::appendNode): Ditto.
        (WebCore::CompositeEditCommand::insertNodeAfter): Calls parentNode instead of parentElement.
        * editing/CompositeEditCommand.h:

2011-03-15  David Grogan  <dgrogan@chromium.org>

        Reviewed by Jeremy Orlow.

        Fix crash caused by Invalid call to destroyActiveDOMObject during stopActiveDOMObjects
        https://bugs.webkit.org/show_bug.cgi?id=56350

        When a frame is unloaded, ScriptExecutionContext::stopActiveDOMObjects
        calls stop() on each ActiveDOMObject.

        Calling IDBDatabase::stop() can cause IDBDatabase to be destroyed:
        * IDBDatabase::stop() causes the chrome message dispatcher to remove
        its reference to IDBDatabase, which it has as type
        IDBDatabaseCallbacks.
        * If that reference is the last one, the IDBDatabase is destroyed.
        * Destroying an ActiveDOMObject while they are being iterated over causes
        a defensive crash.
        
        This change creates a separate IDBDatabaseCallbacks object that is not
        an ActiveDOMObject, so it can be destroyed by
        ScriptExecutionContext::stopActiveDOMObjects.
        
        Because the chrome message dispatcher is only used in multi-process
        chromium, that's the only platform affected.  Chromium browser tests
        forthcoming.

        * WebCore.gypi:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::IDBDatabase):
        (WebCore::IDBDatabase::~IDBDatabase):
        (WebCore::IDBDatabase::setVersion):
        (WebCore::IDBDatabase::close):
        (WebCore::IDBDatabase::open):
        * storage/IDBDatabase.h:
        * storage/IDBDatabaseCallbacks.h:
        (WebCore::IDBDatabaseCallbacks::unRegisterDatabase):
        * storage/IDBDatabaseCallbacksImpl.cpp: Copied from Source/WebCore/storage/IDBDatabaseCallbacks.h.
        (WebCore::IDBDatabaseCallbacksImpl::create):
        (WebCore::IDBDatabaseCallbacksImpl::IDBDatabaseCallbacksImpl):
        (WebCore::IDBDatabaseCallbacksImpl::onVersionChange):
        (WebCore::IDBDatabaseCallbacksImpl::unRegisterDatabase):
        * storage/IDBDatabaseCallbacksImpl.h: Copied from Source/WebCore/storage/IDBDatabaseCallbacks.h.
        (WebCore::IDBDatabaseCallbacksImpl::~IDBDatabaseCallbacksImpl):

2011-03-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        accessibility should build in WebCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=56405

        This patch changes our include/exclude strategy to more closely match
        the strategy used by the Chromium GYP build system.  Ideally, we'd find
        a way to share more of these patterns.  In the meantime, I'm going to
        slowly increase the number of translation units in the project and
        adjust the include/exclude filters appropriately.

        * gyp/WebCore.gyp:

2011-03-15  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (WebKit2): keygen element doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=56402
        <rdar://problem/9006545>

        Covered by existing regresison tests.

        * English.lproj/Localizable.strings:

        * WebCore.exp.in: Removed WebCoreKeyGenerator, which no longer exists. Added
        _wkSignedPublicKeyAndChallengeString, so that this WKSI function could be used in WebCore.

        * platform/mac/SSLKeyGeneratorMac.mm: Removed.
        * platform/mac/WebCoreKeyGenerator.h: Removed.
        * platform/mac/WebCoreKeyGenerator.m: Removed.
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * WebCore.xcodeproj/project.pbxproj:
        Renamed SSLKeyGeneratorMac.mm to .cpp, as it doesn't use any Objective C any more.
        Removed WebCoreKeyGenerator, as we no longer need an interface to WebKit.

        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.cpp:
        (WebCore::keygenMenuItem512):
        (WebCore::keygenMenuItem1024):
        (WebCore::keygenMenuItem2048):
        (WebCore::keygenKeychainItemName):
        * platform/LocalizedStrings.h:
        Added strings used by keygen element, now that the code using them is in WebCore.

        * platform/mac/SSLKeyGeneratorMac.cpp: Copied from Source/WebCore/platform/mac/SSLKeyGeneratorMac.mm.
        (WebCore::getSupportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):
        Moved the code from WebKit. There is never any need to provide implementation at runtime,
        like old code was doing.

        * platform/win/SSLKeyGeneratorWin.cpp: (WebCore::WebCore::getSupportedKeySizes):
        Added a FIXME about localization. Note that Safari for Windows doesn't support keygen.

2011-03-15  Anders Carlsson  <andersca@apple.com>

        Fix clang build.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsLayer.h:

2011-03-15  Simon Fraser  <simon.fraser@apple.com>

        Fix Lion build after r81161.
        
        Pass the PlatformCALayer down into drawLayerContents()
        so we can use its acceleratesDrawing() method.

        * platform/graphics/mac/WebLayer.h:
        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):
        (-[WebLayer drawInContext:]):
        * platform/graphics/mac/WebTiledLayer.mm:
        (-[WebTiledLayer drawInContext:]):

2011-03-15  Alok priyadarshi  <alokp@chromium.org>

        Reviewed by James Robinson.

        Valgrind error due to uninitialized PluginLayerChromium::m_textureId
        https://bugs.webkit.org/show_bug.cgi?id=56390

        * platform/graphics/chromium/PluginLayerChromium.cpp:
        (WebCore::PluginLayerChromium::PluginLayerChromium):
        * platform/graphics/chromium/PluginLayerChromium.h:
        (WebCore::PluginLayerChromium::textureId):

2011-03-14  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        REGRESSION (r68976): Incorrect bidi rendering in SVG text
        https://bugs.webkit.org/show_bug.cgi?id=53980

        rework the test engine or SVG "text-intro" tests so we can turn them back on
        https://bugs.webkit.org/show_bug.cgi?id=6524

        svg/W3C-SVG-1.1/text-intro-0*.svg fail when MS Office fonts are present
        https://bugs.webkit.org/show_bug.cgi?id=11662

        svg/batik/text/textBiDi.svg failing
        https://bugs.webkit.org/show_bug.cgi?id=17392

        SVG bidi examples at w3C I18N WG tutorials are not rendered correctly.
        https://bugs.webkit.org/show_bug.cgi?id=24374

        Implement proper bidirectionality support for SVG text.

        BiDi didn't work properly until now, because the x/y/dx/dy/rotate value lists are stored in logical order (aka. in
        the order the characters appear in the markup), and when laying out bidi text, we associated the current character
        in visual order with the current x/y/dx/dy/rotate value in logical order, messing up RTL text layout.
        The BiDi algorithm itself, inherited by RenderBlockLineLayout, works just fine, the inline box tree is correct.

        Long story:
        Before the inline box tree is created, SVGTextLayoutAttributesBuilder builds a list of x/y/dx/dy/rotate/<text metrics>
        for each RenderSVGInlineText* object, called SVGTextLayoutAttributes. This happens in logical order, as specified in
        the markup. <text x="10 20" y="10">abcdef</text> creates a SVGTextLayoutAttributes object in the renderer associated with
        "abcdef" that contains (10, 20) for x, (10) for y, the dx/dy/rotate lists are empty, and the SVGTextMetrics list holds 6
        width/height values for each of the glyphs (and some other infromation, see SVGTextMetrics class).
        The SVGTextLayoutAttributes object is _used by_ RenderBlockLineLayout when applying the BiDi algorithm as SVG demands
        that BiDi reordering does not happen across text chunks (a text chunk is defined by an absolute position, eg. x="10").

        To summarize: SVGTextLayoutAttributes are stored in all RenderSVGInlineText renderers, caching the metrics of all
        characters, their position based on the DOM attributes x/y/dx/dy/rotate. Using that information it's possible to
        determine whether a position starts a new text chunk, and that's used by RenderBlockLineLayout to create the 
        inline box tree, in _visual order_, as it will appear on screen.

        After the inline box tree is created, the SVGRootInlineBox traverses its children in visual order and feeds the
        found text boxes to SVGTextLayoutEngine, which lays out the text on a line or a path, according to SVG text layout
        rules. For each character of the passed in InlineTextBox, it determines the x/y/dx/dy/rotate value, and the position
        in the <text metrics> list of the renderer. The problem here is that the passed in text boxes are in visual order,
        the x/y/.. lists are all in logical order.

        Example: <text direction="rtl" unicde-bidi="bidi-override" x="10 20">abcdef</text>, reverse the text direction:
                 the visual order now is: "fedcba", where 'f' should be associated with x="10" and 'e' with x="20".

        Fix that problem, by computing a list of text boxes in _logical_ order in advance and pass it to SVGTextLayoutEngine,
        before it starts processing the boxes in visual order, fed by SVGRootInlineBox. When laying oout text, we can now
        process text in visual order, but grab the x/y/.. coordinates from the renderer in logical order.

        Some more work was needed to truly fix Arabic. The SVGTextLayoutAttributesBuilder measured all characters isolated,
        which is not a problem with latin text, but results in wrong advances for Arabic text, as isolated forms, instead of
        shaped forms are measured. This broke text-anchor support, text queries on Arabic text etc. Fixed now, covered by
        dozens of new tests.

        Tests: svg/W3C-I18N/g-dirLTR-ubNone.svg
               svg/W3C-I18N/g-dirLTR-ubOverride.svg
               svg/W3C-I18N/g-dirRTL-ubNone.svg
               svg/W3C-I18N/g-dirRTL-ubOverride.svg
               svg/W3C-I18N/text-anchor-dirLTR-anchorEnd.svg
               svg/W3C-I18N/text-anchor-dirLTR-anchorMiddle.svg
               svg/W3C-I18N/text-anchor-dirLTR-anchorStart.svg
               svg/W3C-I18N/text-anchor-dirNone-anchorEnd.svg
               svg/W3C-I18N/text-anchor-dirNone-anchorMiddle.svg
               svg/W3C-I18N/text-anchor-dirNone-anchorStart.svg
               svg/W3C-I18N/text-anchor-dirRTL-anchorEnd.svg
               svg/W3C-I18N/text-anchor-dirRTL-anchorMiddle.svg
               svg/W3C-I18N/text-anchor-dirRTL-anchorStart.svg
               svg/W3C-I18N/text-anchor-inherited-dirLTR-anchorEnd.svg
               svg/W3C-I18N/text-anchor-inherited-dirLTR-anchorMiddle.svg
               svg/W3C-I18N/text-anchor-inherited-dirLTR-anchorStart.svg
               svg/W3C-I18N/text-anchor-inherited-dirRTL-anchorEnd.svg
               svg/W3C-I18N/text-anchor-inherited-dirRTL-anchorMiddle.svg
               svg/W3C-I18N/text-anchor-inherited-dirRTL-anchorStart.svg
               svg/W3C-I18N/text-anchor-no-markup.svg
               svg/W3C-I18N/text-dirLTR-ubNone.svg
               svg/W3C-I18N/text-dirLTR-ubOverride.svg
               svg/W3C-I18N/text-dirRTL-ubNone.svg
               svg/W3C-I18N/text-dirRTL-ubOverride.svg
               svg/W3C-I18N/tspan-dirLTR-ubEmbed-in-rtl-context.svg
               svg/W3C-I18N/tspan-dirLTR-ubNone-in-rtl-context.svg
               svg/W3C-I18N/tspan-dirLTR-ubOverride-in-default-context.svg
               svg/W3C-I18N/tspan-dirLTR-ubOverride-in-ltr-context.svg
               svg/W3C-I18N/tspan-dirLTR-ubOverride-in-rtl-context.svg
               svg/W3C-I18N/tspan-dirNone-ubOverride-in-default-context.svg
               svg/W3C-I18N/tspan-dirNone-ubOverride-in-ltr-context.svg
               svg/W3C-I18N/tspan-dirNone-ubOverride-in-rtl-context.svg
               svg/W3C-I18N/tspan-dirRTL-ubEmbed-in-default-context.svg
               svg/W3C-I18N/tspan-dirRTL-ubEmbed-in-ltr-context.svg
               svg/W3C-I18N/tspan-dirRTL-ubNone-in-default-context.svg
               svg/W3C-I18N/tspan-dirRTL-ubNone-in-ltr-context.svg
               svg/W3C-I18N/tspan-dirRTL-ubOverride-in-default-context.svg
               svg/W3C-I18N/tspan-dirRTL-ubOverride-in-ltr-context.svg
               svg/W3C-I18N/tspan-dirRTL-ubOverride-in-rtl-context.svg
               svg/W3C-I18N/tspan-direction-ltr.svg
               svg/W3C-I18N/tspan-direction-rtl.svg
               svg/W3C-SVG-1.1-SE/text-intro-02-b.svg
               svg/W3C-SVG-1.1-SE/text-intro-05-t.svg
               svg/W3C-SVG-1.1-SE/text-intro-09-b.svg
               svg/W3C-SVG-1.1/text-align-08-b.svg
               svg/W3C-SVG-1.1/text-fonts-03-t.svg
               svg/W3C-SVG-1.1/text-intro-01-t.svg
               svg/W3C-SVG-1.1/text-intro-02-b.svg
               svg/W3C-SVG-1.1/text-intro-03-b.svg
               svg/W3C-SVG-1.1/text-intro-04-t.svg
               svg/text/bidi-reorder-value-lists.svg
               svg/text/bidi-text-anchor-direction.svg
               svg/text/bidi-text-query.svg
               svg/text/bidi-tspans.svg

        * rendering/RenderBlockLineLayout.cpp: Remove hack that forced LTR support when unicode-bidi="normal" and handling SVG text.
        (WebCore::RenderBlock::determineStartPosition):
        * rendering/svg/SVGInlineTextBox.cpp: s/fragment.positionListOffset/fragment.characterOffset/
        (WebCore::SVGInlineTextBox::offsetForPositionInFragment):
        (WebCore::SVGInlineTextBox::constructTextRun):
        (WebCore::SVGInlineTextBox::mapStartEndPositionsIntoFragmentCoordinates):
        * rendering/svg/SVGRenderTreeAsText.cpp: Ditto.
        (WebCore::writeSVGInlineTextBox):
        * rendering/svg/SVGRootInlineBox.cpp: Add new buildTextBoxListInLogicalOrder(), collecting all text boxes recursively in logical order (aka. as specified in markup).
                                              This is needed as we have to process x/y/dx/dy/rotate value lists of text/tspan/.. elements in logical order, not in visual
                                              order as the characters are presented on screen.
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        (WebCore::SVGRootInlineBox::buildTextBoxListInLogicalOrder):
        (WebCore::SVGRootInlineBox::layoutCharactersInTextBoxes):
        * rendering/svg/SVGRootInlineBox.h:
        * rendering/svg/SVGTextChunk.cpp: Cleanup code, minimize SVGTextChunks memory consumption.
        (WebCore::SVGTextChunk::SVGTextChunk): A text chunk now know whether its base progress direction is left-to-right or right-to-left.
        (WebCore::SVGTextChunk::calculateLength):
        (WebCore::SVGTextChunk::calculateTextAnchorShift): Make text-anchor direction aware. text-anchor="start/end" meaning depends on the context (ltr vs. rtl).
        * rendering/svg/SVGTextChunk.h: Adapt code, merging three members into a bitfield.
        (WebCore::SVGTextChunk::isVerticalText):
        (WebCore::SVGTextChunk::hasDesiredTextLength):
        (WebCore::SVGTextChunk::hasTextAnchor):
        (WebCore::SVGTextChunk::hasLengthAdjustSpacing):
        (WebCore::SVGTextChunk::hasLengthAdjustSpacingAndGlyphs):
        * rendering/svg/SVGTextChunkBuilder.cpp: Adapt to SVGTextChunk code changes.
        (WebCore::SVGTextChunkBuilder::addTextChunk):
        (WebCore::SVGTextChunkBuilder::processTextChunk):
        * rendering/svg/SVGTextFragment.h: Add metricsListOffset, needed only while laying out text.
        (WebCore::SVGTextFragment::SVGTextFragment): Rename positionListOffset to characterOffset, as it describes an offset in the textRenderer->characters() array.
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp
        (WebCore::SVGTextLayoutAttributesBuilder::propagateLayoutAttributes): Fix measuring Arabic text in LTR/RTL modes. Assure that each SVGTextMetrics object
                                                                              that we cache, refers to the _rendered_ character. For Arabic text that means, that we're
                                                                              measuring the shaped width of the glyph, not the glyph in its isolated form. Without that
                                                                              fix reordering boxes containing Arabic is wrong.
        * rendering/svg/SVGTextLayoutEngine.cpp: SVGTextLayoutEngine is fed with text boxes to be laid out in _visual_ order, left-to-right, after the BiDi algorithm
                                                 has been applied by RenderBlockLineLayout to create the inline box tree. The coordinates lists x/y/dx/dy/rotate have
                                                 to be processed in _logical_ order. SVGRootInlineBox now passes a list of text boxes in logical order to SVGTextLayoutEngine,
                                                 to assure it grabs the coordinates from the correct InlineTextBox. See examples at the top of the ChangeLog.
        (WebCore::SVGTextLayoutEngine::SVGTextLayoutEngine):
        (WebCore::SVGTextLayoutEngine::recordTextFragment): No need to measure text here anymore, SVGTextLayoutAttributesBuilder now provides exact advances for each glyph.
                                                            The width of a SVGTextFragment is always equal to the sum of each glyph advance. (This was not the case for
                                                            Arabic until now.)
        (WebCore::SVGTextLayoutEngine::finalizeTransformMatrices):
        (WebCore::SVGTextLayoutEngine::nextLogicalBoxAndOffset): Computes the next logical box and the offset to the next coordinate value in its position list.
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath):
        * rendering/svg/SVGTextLayoutEngine.h: Add CharacterRange helper struct.
        (WebCore::SVGTextLayoutEngine::CharacterRange::CharacterRange):
        * rendering/svg/SVGTextMetrics.cpp: Remove unused measureAllCharactersIndividually() method.
        (WebCore::constructTextRun): Pass direction and unicode-bidi="override" values to the TextRun, otherwhise LTR is always asumed.
        * rendering/svg/SVGTextMetrics.h:
        (WebCore::SVGTextMetrics::setWidth): Add private setter, only SVGTextLayoutAttributesBuilder is allowed to modify the metrics (to fix up glyph widths for Arabic).
        * rendering/svg/SVGTextQuery.cpp: s/fragment.positionListOffset/fragment.characterOffset/
        (WebCore::SVGTextQuery::subStringLengthCallback):
        (WebCore::SVGTextQuery::startPositionOfCharacterCallback):
        (WebCore::SVGTextQuery::endPositionOfCharacterCallback):
        (WebCore::calculateGlyphBoundaries):

2011-03-15  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix make distcheck for 1.3.13 release
        https://bugs.webkit.org/show_bug.cgi?id=56371

        No new tests as this is a build fix.

        * GNUmakefile.am: added a couple of missing files.

2011-03-08  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        Get rid of firstDeepEditingPositionForNode and lastDeepEditingPositionForNode
        https://bugs.webkit.org/show_bug.cgi?id=52642

        Replacing calls to first/lastDeepEditingPositionForNode with calls to their analogous
        functions that create new positions. Also fixing various parts of editing code that
        incorrectly handled the new positions now being created.

        No new tests as this is refactoring/cleanup.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionRange):
        * dom/Position.cpp:
        (WebCore::Position::parentAnchoredEquivalent):
        (WebCore::Position::previous):
        (WebCore::Position::next):
        (WebCore::Position::atFirstEditingPositionForNode):
        (WebCore::Position::atLastEditingPositionForNode):
        (WebCore::Position::upstream):
        (WebCore::Position::isCandidate):
        (WebCore::Position::getInlineBoxAndOffset):
        * dom/Position.h:
        (WebCore::operator==):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::operator Position):
        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::rangeForParagraphSplittingTextNodesIfNeeded):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::isTableCellEmpty):
        (WebCore::DeleteSelectionCommand::removeNode):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::unlistifyParagraph):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::positionAtEndOfInsertedContent):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::selectionFromContentsOfNode):
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries):
        * editing/htmlediting.cpp:
        (WebCore::firstEditablePositionAfterPositionInRoot):
        (WebCore::lastEditablePositionBeforePositionInRoot):
        (WebCore::enclosingEmptyListItem):
        * editing/htmlediting.h:
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        (WebCore::startOfEditableContent):
        (WebCore::endOfEditableContent):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionForPoint):

2011-03-15  Beth Dakin  <bdakin@apple.com>

        Attempted build fix.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::cancelAnimations):

2011-03-15  David Hyatt  <hyatt@apple.com>

        Reviewed by Dave Levin.

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

        Fix FontCache problems on Linux.  Make sure not to mutate the platform data passed in to SimpleFontData's
        constructor.  Change this code to match Mac and to set the new m_hasVerticalGlyphs boolean instead of
        mutating orientation.

        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformInit):

2011-03-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Disable ShadowBlur shadow drawing in accelerated contexts
        https://bugs.webkit.org/show_bug.cgi?id=56392

        When drawing into a graphics context that is accelerated, don't use
        ShadowBlur, because it may be slower.
        
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        (WebCore::GraphicsContext::setIsCALayerContext):
        (WebCore::GraphicsContext::isCALayerContext):
        (WebCore::GraphicsContext::setIsAcceleratedContext):
        (WebCore::GraphicsContext::isAcceleratedContext):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):

2011-03-15  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        Fix for <rdar://problem/9075624> Overlay scrollbars slow down PLT by 6%

        Tell the ScrollAnimator to cancelAnimations() since we are navigating to a new 
        page.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::transitionToCommitted):
        
        Scroll animations should be suspended if the FrameLoadState is anything but 
        complete.
        * page/FrameView.cpp:
        (WebCore::FrameView::shouldSuspendScrollAnimations):
        * page/FrameView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::shouldSuspendScrollAnimations):
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::shouldSuspendScrollAnimations):
        * rendering/RenderDataGrid.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldSuspendScrollAnimations):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::shouldSuspendScrollAnimations):
        * rendering/RenderListBox.h:

        New virtual function cancelAnimations() is only needed on the Mac, so the base 
        class is empty.
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::cancelAnimations):

        ScrollAnimatorMac needs to keep track of whether the page has been scrolled since 
        it started loading. If so, we will override optimizations that wait for the 
        FrameLoadState to be complete before animating scrollbars.
        * platform/mac/ScrollAnimatorMac.h:
        (WebCore::ScrollAnimatorMac::haveScrolledSincePageLoad):

        If the scrollbar animations should be suspended, we start a timer to make sure 
        that we do flash the scrollbars. Animating the scrollbars is expensive, so this is 
        both a performance optimization and a UI enhancement since the scrollbar won't 
        jump around nearly as much on a page load.
        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPainterDelegate cancelAnimations]):
        (-[ScrollbarPainterDelegate scrollerImp:animateKnobAlphaTo:duration:]):
        (-[ScrollbarPainterDelegate scrollerImp:animateTrackAlphaTo:duration:]):
        (-[ScrollbarPainterDelegate scrollerImp:overlayScrollerStateChangedTo:]):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::scroll):
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        (WebCore::ScrollAnimatorMac::cancelAnimations):
        (WebCore::ScrollAnimatorMac::smoothScrollWithEvent):
        (WebCore::ScrollAnimatorMac::beginScrollGesture):
        (WebCore::ScrollAnimatorMac::startScrollbarPaintTimer):
        (WebCore::ScrollAnimatorMac::scrollbarPaintTimerIsActive):
        (WebCore::ScrollAnimatorMac::stopScrollbarPaintTimer):
        (WebCore::ScrollAnimatorMac::initialScrollbarPaintTimerFired):

        New WebCoreSystemInterface function to force the scrollbars to flash
        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2011-03-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        Remove stale comment at RenderStyle::diff.
        https://bugs.webkit.org/show_bug.cgi?id=56387

        * rendering/style/RenderStyle.cpp: Removed comment.

2011-03-15  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/56381> Objective-C classes should be typedef-ed as structs (not void*) in C++

        Reviewed by Simon Fraser.

        Typedef-ing Objective-C classes as void* for pure C++ makes it
        easier for bugs to creep in because compilers can't do any type
        checking for void pointers.

        * platform/graphics/GraphicsContext3D.h: Changed typedef
        declarations for CALayer and WebGLLayer from void* to structs.
        (WebCore::GraphicsContext3D::platformLayer): Changed
        static_cast<CALayer*> to reinterpret_cast<CALayer*> now that
        CALayer and WebGLLayer are not void pointers.
        * platform/graphics/GraphicsLayer.h: Changed typedef declaration
        for PlatformLayer from void* to struct CALayer.
        * platform/graphics/ca/PlatformCAAnimation.h: Changed typedef
        declaration for CAPropertyAnimation from void* to a struct.
        Extracted typdef for PlatformAnimationRef.

2011-03-15  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Tony Chang.

        Autofilled form elements are assigned fixed background color but not text color
        https://bugs.webkit.org/show_bug.cgi?id=48382

        Test: fast/forms/input-autofilled.html

        * css/html.css:
        (input:-webkit-autofill): Added foreground color: #000000
        * css/wml.css:
        (input:-webkit-autofill): Added foreground color: #000000

2011-03-15  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Eric Carlson.

        HTMLMediaElement::mediaPlayerPlaybackStateChanged should not change the "public" state of the element
        if it's an internal pause for example.
        https://bugs.webkit.org/show_bug.cgi?id=56374

        In case of an internal pause, the callback from the mediaplayer should be ignored to avoid reflecting the
        change into the DOM.

        No new tests: Verified manually.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerPlaybackStateChanged):

2011-03-12  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: re-implement xhr breakpoints.
        https://bugs.webkit.org/show_bug.cgi?id=56252

        - restore xhr breakpoints one by one instead of using setAllBrowserBreakpoints
        - store xhr breakpoints in a separate setting
        - move presentation-related code from BreakpointManager to XHRBreakpointsSidebarPane

        Test: inspector/debugger/xhr-breakpoints.html

        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent):
        (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):
        (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest):
        (WebCore::InspectorBrowserDebuggerAgent::clear):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.setXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype.removeXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype.breakpointViewForEventData):
        (WebInspector.BreakpointManager.prototype._projectChanged):
        (WebInspector.BreakpointManager.prototype._validateBreakpoints):
        (WebInspector.BreakpointManager.prototype._createEventListenerBreakpointId):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.XHRBreakpointsSidebarPane):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._addButtonClicked.finishEditing):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._addButtonClicked):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._removeBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._contextMenu.removeBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._contextMenu):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._checkboxClicked):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._labelClicked.finishEditing):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._labelClicked):
        (WebInspector.XHRBreakpointsSidebarPane.prototype.highlightBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype.clearBreakpointHighlight):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._saveBreakpoints):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._restoreBreakpoints):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._projectChanged):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype._xhrBreakpointHit):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._clearInterface):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/inspector.js:
        (WebInspector.resetFocusElement):
        (WebInspector.set attached):

2011-03-15  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Introduce WTF_USE_EXPORT_MACROS, which will allow us to put shared library import/export
        info into the headers rather than in export symbol definition files, but disable it on 
        all platforms initially so we can deal with port build issues one port at a time.
        
        https://bugs.webkit.org/show_bug.cgi?id=27551

        * config.h:
        * platform/mac/LoggingMac.mm:

2011-03-15  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix.

        Chromium: shared lib linux build are failing.

        Two exclude rules for LocalizedNumberNone and TextEncodingDetectorNone were added to the wrong library.
        It was webcore_remaining instead of webcore_platform.

        * WebCore.gyp/WebCore.gyp:

2011-03-15  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: expanding/collapsing object shouldn&apos;t affect outer console.group expansion state
        https://bugs.webkit.org/show_bug.cgi?id=56373

        * inspector/front-end/Section.js:
        (WebInspector.Section):
        (WebInspector.Section.prototype.toggleExpanded):
        (WebInspector.Section.prototype.handleClick): stop click even propagation if it was handled by this section.

2011-03-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: crash upon "//html//@id" search in elements panel.
        https://bugs.webkit.org/show_bug.cgi?id=56334

        * inspector/InspectorDOMAgent.cpp:
        * inspector/front-end/ElementsTreeOutline.js:

2011-03-15  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: further extension API cleanup (removed inspectedPage, add experimental prefix)
        https://bugs.webkit.org/show_bug.cgi?id=56327

        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI):
        * inspector/front-end/ExtensionAPISchema.json:

2011-03-15  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: when console.groupEnd calls twice
        https://bugs.webkit.org/show_bug.cgi?id=56114

        Test: inspector/console/console-nested-group.html

        * inspector/ConsoleMessage.h:
        (WebCore::ConsoleMessage::type):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addConsoleMessage): do not coalesce adjacent EndGroup messages.

2011-03-15  Chris Mumford  <chris.mumford@palm.com>

        Reviewed by Adam Barth.

        Initializing several member variables that were not initialized in
        their constructors. These values were all read prior to initialization
        as reported by Valgrind.

        No new tests: No feature additions/removals.

        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::AccessibilityImageMapLink):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::DeleteSelectionCommand):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        * xml/XPathResult.cpp:
        (WebCore::XPathResult::XPathResult):

2011-03-15  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=56255
        Fix build on Solaris 10/Sun Studio 12 C++

        No new tests. This is to fix compilation on Solaris 10 with Sun Studio 12 C++

        * bridge/runtime_array.h:
        (JSC::RuntimeArray::getConcreteArray):

2011-03-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben

        about:blank fake responses don't get serialized when sent the UIProcess
        <rdar://problem/9108119>
        https://bugs.webkit.org/show_bug.cgi?id=56357

        Test: AboutBlankLoad

        * platform/network/cf/ResourceResponse.h:
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::cfURLResponse):
        Create a CFURLResponseRef if one does not exist yet as we do for
        NSURLResponses on the mac.

2011-03-14  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Seeking videos using the timeline bar does not work properly and stop the video playback.
        https://bugs.webkit.org/show_bug.cgi?id=56145

        We do not need seekTimeout and queuedSeekTimeout anymore. setPosition on QMediaPlayer is good enough.
        positionChanged() will be emitted when the data is buffered. On Linux the signal was not emitted because
        of a bug in QtMultimedia.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::MediaPlayerPrivateQt):
        (WebCore::MediaPlayerPrivateQt::seek):
        (WebCore::MediaPlayerPrivateQt::stateChanged):
        (WebCore::MediaPlayerPrivateQt::positionChanged):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:

2011-03-14  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=44138
        Crash beneath SocketStreamHandle::readStreamCallback when running websocket/tests/workers/worker-handshake-challenge-randomness.html

        https://bugs.webkit.org/show_bug.cgi?id=55375
        http/tests/websocket/tests/reload-crash.html sometimes crashes beneath SocketStreamHandle::readStreamCallback on Windows

        https://bugs.webkit.org/show_bug.cgi?id=56185
        http/tests/websocket/tests/url-with-credential.html sometimes crashes beneath SocketStreamHandle::readStreamCallback on Windows

        * platform/network/cf/SocketStreamHandle.h: Made SocketStreamHandle ThreadSafeShared, so that
        a pointer can be passed across threads when wrapped in a RefPtr.

        * platform/network/cf/SocketStreamHandleCFNet.cpp: Make sure that an object still exists
        when executing a method on main thread by using RefPtr.

2011-03-14  Sam Weinig  <sam@webkit.org>

        Mac build fix. Part 1 of N.

        * WebCore.exp.in:

2011-03-14  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Eric Carlson.

        Stalled media elements don't stop delaying the load event
        https://bugs.webkit.org/show_bug.cgi?id=56316

        We should stop delaying the load event when the load has
        stalled naturally, or if we require a user gesture to
        continue the load.

        Test: http/tests/media/video-play-stall-before-meta-data.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setNetworkState): when suspending, stop delaying.
        (WebCore::HTMLMediaElement::progressEventTimerFired): when stalling, stop delaying.

2011-03-13  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        Crash when dragging and dropping in a document with an invalid XHTML header
        https://bugs.webkit.org/show_bug.cgi?id=48799

        DragController tried to dispatch textInput event even when the
        drag destination is not the editable area.
        This change skips the event dispatching on that case.
        
        Test: editing/pasteboard/drop-file-svg.html

        * page/DragController.cpp:
        (WebCore::DragController::dispatchTextInputEventFor):
        (WebCore::DragController::concludeEditDrag):

2011-03-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81094.
        http://trac.webkit.org/changeset/81094
        https://bugs.webkit.org/show_bug.cgi?id=56355

        Broke the chromium DRT related build. (Requested by dave_levin
        on #webkit).

        * WebCore.exp.in:
        * WebCore.order:
        * page/Frame.cpp:
        (WebCore::Frame::layerTreeAsText):
        * page/Frame.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        * rendering/RenderLayerCompositor.h:

2011-03-14  Adam Barth  <abarth@webkit.org>

        Apparently we need to exclude DefaultSharedWorkerRepository.cpp from
        the Chromium build, otherwise the objects visible in the global scope
        change.

        * WebCore.gyp/WebCore.gyp:

2011-03-14  Adam Barth  <abarth@webkit.org>

        Attempted Chromium build fix.  Exclude AllInOne harder.

        * WebCore.gyp/WebCore.gyp:

2011-03-14  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        EventHandler calls shouldChangeSelection needlessly
        https://bugs.webkit.org/show_bug.cgi?id=56324

        Extracted setSelectionIfNeeded and setNonDirectionalSelectionIfNeeded and
        avoided calling shouldChangeSelection and setSelection when the existing
        selection is identical to that of new selection.

        * page/EventHandler.cpp:
        (WebCore::setSelectionIfNeeded): Extracted.
        (WebCore::setNonDirectionalSelectionIfNeeded): Extracted.
        (WebCore::EventHandler::selectClosestWordFromMouseEvent): Calls a helper function above.
        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent): Ditto.
        (WebCore::EventHandler::handleMousePressEventTripleClick): Ditto.
        (WebCore::EventHandler::handleMousePressEventSingleClick): Ditto.
        (WebCore::EventHandler::updateSelectionForMouseDrag): Ditto.
        (WebCore::EventHandler::handleMouseReleaseEvent): Ditto.

2011-03-14  Daniel Sievers  <sievers@google.com>

        Reviewed by Simon Fraser.

        [Chromium] Make RenderAsTextBehavior and LayerTreeAsTextBehavior tweakable from the DumpRenderTree commandline
        https://bugs.webkit.org/show_bug.cgi?id=56139

        * WebCore.exp.in:
        * WebCore.order:
        * page/Frame.cpp:
        (WebCore::Frame::layerTreeAsText):
        * page/Frame.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        * rendering/RenderLayerCompositor.h:

2011-03-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Add remaining files to WebCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=56351

        Adding the remaining files to WebCore.gypi required updating the
        include/exclude lists in WebCore.gyp.  These lists aren't overly
        elegant, but we can try to improve them in the future.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * bindings/v8/ScriptCachedFrameData.cpp:
            - Added ifdefs to this file to match the header.
        * platform/graphics/WOFFFileFormat.cpp:
            - Fixed build error when compiling without ENABLE(OPENTYPE_SANITIZER).

2011-03-14  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] Rework object group building.
        https://bugs.webkit.org/show_bug.cgi?id=55399

        Instead of going top-down (from owner to owned elements), go up---from objects
        to their group ids.  That fits better to v8's object grouping model and guarantees
        that each wrapper belongs to the single group.

        Alas, this cannot be implemented for one kind of objects---CSSProperties.

        Part of core GC algorithm and tested extensively by exisiting layout tests.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        * bindings/v8/V8GCController.cpp:
        (WebCore::calculateGroupId):
        (WebCore::calculateRootStyleSheet):
        (WebCore::GrouperVisitor::visitDOMWrapper):
        (WebCore::GrouperVisitor::applyGrouping):
        (WebCore::V8GCController::gcPrologue):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore::WrapperTypeInfo::isSubclass):
        * css/CSSRuleList.h:
        (WebCore::CSSRuleList::styleList):
        * css/StyleSheetList.h:
        (WebCore::StyleSheetList::document):

2011-03-14  Kent Tamura  <tkent@chromium.org>

        Reviewed by James Robinson.

        Assertion failure by form validation message for <select required> with float:left
        https://bugs.webkit.org/show_bug.cgi?id=55995

        Test: fast/forms/interactive-validation-select-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::canMergeContiguousAnonymousBlocks):
          isAnonymousBlock() doesn't mean it is a RenderBlock. We need to check isRenderBlock().

2011-03-14  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Adam Roben.

        [Qt][WK2]Unbreak InjectedBundle on Qt
        https://bugs.webkit.org/show_bug.cgi?id=54109

        No code changes so no new tests.

        Revert the changes that were needed to use KURL
        in WebKitTestRunner.

        * Configurations/WebCore.xcconfig:
        * WebCore.exp.in:

2011-03-14  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Compilation fails with --3d-canvas 
        https://bugs.webkit.org/show_bug.cgi?id=55964

        * WebCore.pro:
        * platform/graphics/qt/Extensions3DQt.cpp:

2011-03-14  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben and Gavin Barraclough.

        FileSystemWin.cpp needs listDirectory() implementation
        https://bugs.webkit.org/show_bug.cgi?id=56331
        <rdar://problem/9126635>
        
        Move PathWalker from an inline class in WebKit2 to its own class in WebCore,
        so it can be used from both WebCore and WebKit2.
        
        Implement FileSystemWin::listDirectory using PathWalker to populate the Vector
        of paths matching the passed in pattern.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/FileSystemWin.cpp:
        (WebCore::listDirectory): Call through to PathWalker.
        * platform/win/PathWalker.cpp: Added.
        (WebCore::PathWalker::PathWalker): Moved from WebKit2. Added a second argument
            for the pattern to pass to the Windows File APIs.
        (WebCore::PathWalker::~PathWalker): Moved from WebKit2.
        (WebCore::PathWalker::isValid): Ditto.
        (WebCore::PathWalker::data): Ditto.
        (WebCore::PathWalker::step): Ditto.
        * platform/win/PathWalker.h: Added.

2011-03-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=56320
        Remove HistoryItem::icon() and the WebCore dependency on "IconDatabaseBase::defaultIcon()"

        Remove HistoryItem::icon():
        * history/HistoryItem.cpp:
        * history/HistoryItem.h:
        * WebCore.exp.in:

        * loader/icon/IconDatabaseBase.h:
        (WebCore::IconDatabaseBase::defaultIcon):

2011-03-14  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        Timer-based events should inherit the user gesture state of their
        originating event in certain cases.
        https://bugs.webkit.org/show_bug.cgi?id=55104

        If a timer is installed by a gesture-originated event and will fire
        within one second, the timer-initiated event should behave as if it
        were also initiated by a user gesture. Multi-shot timers should only
        get this behavior on their first execution. Nested timers should not
        get this behavior. This makes us compatible with Gecko when handling
        popups and file chooser dialogs created from timer events.

        Test: fast/events/popup-blocking-timers.html

        * page/DOMTimer.cpp:
        (WebCore::timeoutId): Create a helper function so that m_timeoutId can
        be initialized in the data member initialization list.
        (WebCore::shouldForwardUserGesture): Ditto, but for
        m_shouldForwardUserGesture.
        (WebCore::DOMTimer::DOMTimer): Move initialization of data members from
        the ctor body to the data member initialization list. Also rename the
        argument 'timeout' to 'interval'.
        (WebCore::DOMTimer::fired): Create a UserGestureIndicator and set its
        state based on the value of m_shouldForwardUserGesture.
        (WebCore::DOMTimer::adjustMinimumTimerInterval): m_originalTimeout was
        renamed to m_originalInterval.
        * page/DOMTimer.h: Add m_shouldForwardUserGesture and rename
        m_originalTimeout to m_originalInterval.

2011-03-09  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        Deleting content directly following a button inserts an unnecessary placeholder
        https://bugs.webkit.org/show_bug.cgi?id=56053

        Fixing a use of Node's enclosingBlockFlowElement with enclosingBlock htmlediting's
        enclosingBlock, as enclosingBlockFlowElement would return inline-block elements despite
        DeleteSelectionCommand treating them as blockflow.

        Test: editing/deleting/delete-inserts-br-after-button.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs):

2011-03-14  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        REGRESSION: <a><img align=top></a> Clickable area too large
        
        Make sure to clamp hit testing of quirky inline flow boxes the same way we already clamped
        painting.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):

2011-03-14  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        REGRESSION (r75138-r75503): Animations on Apple HTML5 Gallery demo are wrong
        https://bugs.webkit.org/show_bug.cgi?id=52845

        The lastCommitTime() value in CACFLayerTreeHost was returning as the time
        the render previous to this one happened. That often made it seem like
        animations started more in the past than they did, breaking many animations.
        The startAnimations() call actually fires from a CACF callback after all the
        WebKit content has been rendered. So sending currentTime as the start time
        to the animations is close enough for proper synchronization.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::notifyAnimationsStarted):

2011-03-11  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        Selection uses first mousemove's localRect instead of that of mousedown
        https://bugs.webkit.org/show_bug.cgi?id=56213

        Fixed the bug by adding an extra call to updateSelectionForMouseDrag in handleMouseDraggedEvent
        using the mouse coordinates of the mousedown event that started the drag.

        Test: editing/selection/drag-select-rapidly.html

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

2011-03-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by Timothy Hatcher.

        Apply a large, blunt object directly to the skull of the Leopard build.

        * Configurations/Base.xcconfig: Disable the generation of debugging symbols when
        building the Debug configuration on Leopard. This should cut the size of the object
        files that the linker needs to process by over 85%. This will hopefully allow them
        to fit in to the 32-bit address space of the Leopard linker.

2011-03-14  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=56246
        
        Add support for relative positioning to table cells.   Back out the code that hacked around the lack of support
        for offsetLeft, and add new tests to demonstrate that relative positioning works.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetParent):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRelPositioned):
        * rendering/RenderTableCell.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2011-03-14  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        Partial backout of https://bugs.webkit.org/show_bug.cgi?id=56230.  Go back to repainting the root
        layer, since first layouts and printing mess up otherwise.

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

2011-03-11  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        Clean up full repainting of layers during layout and at other times.  Platforms that did not do an invalidation on
        size changes were incorrectly relying on the DoFullRepaint case of RenderLayer::updateLayerPositions to invalidate
        for them. However this code is now wrong, since it assumed that the outermost layer was a RenderView that encompassed
        all of the child layers.  This is no longer the case since the overflow changes that tightened up visual overflow
        and limited that overflow only to content that the layer painted.
        
        Eliminate the DoFullRepaint flag and actually make no repainting of any kind happen from the layer code if FrameView's
        m_doFullRepaint boolean is set.  This will flush out any ports that aren't just invalidating the world on their
        own in response to view resizes or fixed layout size changes and force them to fix things to be consistent with
        the other ports.
        
        Make the two dynamic calls to updateLayerPositions still do a full repaint by setting the repaint flag on the layer.
        I'm suspicious as to the correctness of the repainting in both of these cases (both before and after this patch),
        but the behavior should be the same.
        
        No new tests, since this is untestable on ports that invalidate on a resize.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::styleDidChange):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::removeOnlyThisLayer):
        * rendering/RenderLayer.h:

2011-03-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Ensure all values are correctly tagged in the registerfile
        https://bugs.webkit.org/show_bug.cgi?id=56214

        Make sure everything builds still.

        * bridge/c/c_class.cpp:
        * bridge/c/c_runtime.cpp:
        * bridge/jni/JavaMethod.cpp:
        * plugins/PluginViewNone.cpp:

2011-03-14  Luiz Agostini  <luiz.agostini@openbossa.org>

        Unreviewed build fix for r81035.

        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::defaultEventHandler):
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::createDownArrowPath):
        (WebCore::createUpArrowPath):
        (WebCore::createLeftArrowPath):
        (WebCore::createRightArrowPath):

2011-03-13  Jer Noble  <jer.noble@apple.com>

        FullScreen: Handle entering full screen security restrictions
        https://bugs.webkit.org/show_bug.cgi?id=56264

        Tests: fullscreen/full-screen-iframe-allowed.html
               fullscreen/full-screen-iframe-not-allowed.html

        Disable full screen documents in the following conditions:
        1) requesting element is in an iframe which does not have a
        webkitallowfullscreen attribute.
        2) page is not processing a user gesture.

        * dom/Document.cpp:
        (WebCore::Document::fullScreenIsAllowedForElement): Added.  Checks
            to see if elements contained in IFRAMES are allowed to
            enter full screen.
        (WebCore::Document::webkitRequestFullScreenForElement): Checks
            if page is currently processing a user gesture.
        * dom/Document.h:
        * html/HTMLAttributeNames.in: Added webkitallowfullscreenAttr.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::allowFullScreen): Added.
        * html/HTMLFrameElementBase.h:

2011-03-14  Anton D'Auria  <adauria@apple.com>

        Reviewed by David Levin.

        REGRESSION(r80892): Use of uninitialized variable "m_syncCloseDatabase" in StorageAreaSync::sync
        https://bugs.webkit.org/show_bug.cgi?id=56303

        Initialized m_syncCloseDatabase to false in the StorageAreaSync constructor.

        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):

2011-03-14  Steve Block  <steveblock@google.com>

        Reviewed by Oliver Hunt.

        JavaMethod.cpp does not compile with V8
        https://bugs.webkit.org/show_bug.cgi?id=56306

        Moved the ScopeChain.h include to JavaStringJSC.

        No new tests, build fix only.

        * bridge/jni/JavaMethod.cpp:
        * bridge/jni/jsc/JavaStringJSC.h

2011-02-28  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Dave Hyatt.

        HTML5 <details> and <summary>: rendering
        https://bugs.webkit.org/show_bug.cgi?id=51071

        Tests: fast/html/details-add-summary-1-and-click.html
               fast/html/details-add-summary-1.html
               fast/html/details-add-summary-10-and-click.html
               fast/html/details-add-summary-10.html
               fast/html/details-add-summary-2-and-click.html
               fast/html/details-add-summary-2.html
               fast/html/details-add-summary-3-and-click.html
               fast/html/details-add-summary-3.html
               fast/html/details-add-summary-4-and-click.html
               fast/html/details-add-summary-4.html
               fast/html/details-add-summary-5-and-click.html
               fast/html/details-add-summary-5.html
               fast/html/details-add-summary-6-and-click.html
               fast/html/details-add-summary-6.html
               fast/html/details-add-summary-7-and-click.html
               fast/html/details-add-summary-7.html
               fast/html/details-add-summary-8-and-click.html
               fast/html/details-add-summary-8.html
               fast/html/details-add-summary-9-and-click.html
               fast/html/details-add-summary-9.html
               fast/html/details-mouse-click.html
               fast/html/details-no-summary1.html
               fast/html/details-no-summary2.html
               fast/html/details-no-summary3.html
               fast/html/details-no-summary4.html
               fast/html/details-open-javascript.html
               fast/html/details-open1.html
               fast/html/details-open2.html
               fast/html/details-open3.html
               fast/html/details-open4.html
               fast/html/details-open5.html
               fast/html/details-open6.html
               fast/html/details-position.html
               fast/html/details-remove-summary-1-and-click.html
               fast/html/details-remove-summary-1.html
               fast/html/details-remove-summary-2-and-click.html
               fast/html/details-remove-summary-2.html
               fast/html/details-remove-summary-3-and-click.html
               fast/html/details-remove-summary-3.html
               fast/html/details-remove-summary-4-and-click.html
               fast/html/details-remove-summary-4.html
               fast/html/details-remove-summary-5-and-click.html
               fast/html/details-remove-summary-5.html
               fast/html/details-remove-summary-6-and-click.html
               fast/html/details-remove-summary-6.html
               fast/html/details-writing-mode.html

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

        The main <summary> element is the first <summary> element of a <details> element.
        All other childs of the <details> element are rendered only if the attribute 'open' is set.
        Click event toggles the 'open' attribute.

        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::HTMLDetailsElement):
        (WebCore::HTMLDetailsElement::findMainSummary):
        (WebCore::HTMLDetailsElement::childrenChanged):
        (WebCore::HTMLDetailsElement::finishParsingChildren):
        (WebCore::HTMLDetailsElement::parseMappedAttribute):
        (WebCore::HTMLDetailsElement::childShouldCreateRenderer):
        (WebCore::HTMLDetailsElement::defaultEventHandler):
        * html/HTMLDetailsElement.h:
        (WebCore::HTMLDetailsElement::mainSummary):

        Method createRenderer added to class HTMLSummaryElement.

        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::createRenderer):
        * html/HTMLSummaryElement.h:

        The first <summary> element is positioned at the top of its <details> parent.
        The area occupied by this main <summary> element is the interactive area of the
        <details> element. If the <details> tag has no <summary> child an OwnedSummaryRenderer
        is created and added to the corresponding RenderDetails object.

        * rendering/RenderDetails.cpp:
        (WebCore::RenderDetails::RenderDetails):
        (WebCore::RenderDetails::destroy):
        (WebCore::RenderDetails::summaryBlock):
        (WebCore::RenderDetails::contentBlock):
        (WebCore::RenderDetails::addChild):
        (WebCore::RenderDetails::removeChild):
        (WebCore::RenderDetails::setMarkerStyle):
        (WebCore::RenderDetails::styleDidChange):
        (WebCore::RenderDetails::getRenderPosition):
        (WebCore::RenderDetails::markerDestroyed):
        (WebCore::RenderDetails::summaryDestroyed):
        (WebCore::RenderDetails::moveSummaryToContents):
        (WebCore::RenderDetails::createSummaryStyle):
        (WebCore::RenderDetails::replaceMainSummary):
        (WebCore::RenderDetails::createDefaultSummary):
        (WebCore::RenderDetails::checkMainSummary):
        (WebCore::RenderDetails::layout):
        (WebCore::RenderDetails::isOpen):
        (WebCore::RenderDetails::getParentOfFirstLineBox):
        (WebCore::RenderDetails::firstNonMarkerChild):
        (WebCore::RenderDetails::updateMarkerLocation):
        * rendering/RenderDetails.h:
        (WebCore::RenderDetails::interactiveArea):
        (WebCore::RenderDetails::removeLeftoverAnonymousBlock):
        (WebCore::RenderDetails::createsAnonymousWrapper):
        (WebCore::RenderDetails::requiresForcedStyleRecalcPropagation):

        A marker is added to the main <summary> element to indicate the current value of the 'open'
        attribute of the <details> element.

        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::RenderDetailsMarker):
        (WebCore::RenderDetailsMarker::destroy):
        (WebCore::RenderDetailsMarker::lineHeight):
        (WebCore::RenderDetailsMarker::baselinePosition):
        (WebCore::RenderDetailsMarker::computePreferredLogicalWidths):
        (WebCore::RenderDetailsMarker::layout):
        (WebCore::RenderDetailsMarker::getRelativeMarkerRect):
        (WebCore::RenderDetailsMarker::isOpen):
        (WebCore::createPath):
        (WebCore::createDownArrowPath):
        (WebCore::createUpArrowPath):
        (WebCore::createLeftArrowPath):
        (WebCore::createRightArrowPath):
        (WebCore::RenderDetailsMarker::orientation):
        (WebCore::RenderDetailsMarker::getCanonicalPath):
        (WebCore::RenderDetailsMarker::getPath):
        (WebCore::RenderDetailsMarker::paint):
        * rendering/RenderDetailsMarker.h:
        (WebCore::toRenderDetailsMarker):

        * rendering/RenderSummary.cpp:
        (WebCore::RenderSummary::RenderSummary):
        (WebCore::RenderSummary::destroy):
        (WebCore::RenderSummary::parentDetails):
        (WebCore::RenderSummary::styleDidChange):
        * rendering/RenderSummary.h:

        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):

2011-03-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=56296
        Clean up IconDatabaseBase header.

        -Get rid of the "PlatformString.h" include and replace it with a forward declaration.
        -Group methods by which are used in WebCore directly and which are used in WebKit ports.

        This'll make it easier to use in external frameworks (like WebKit2).

        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabaseBase.h:
        (WebCore::IconDatabaseBase::retainIconForPageURL):
        (WebCore::IconDatabaseBase::releaseIconForPageURL):
        (WebCore::IconDatabaseBase::iconForPageURL):
        (WebCore::IconDatabaseBase::setIconURLForPageURL):
        (WebCore::IconDatabaseBase::setIconDataForIconURL):
        (WebCore::IconDatabaseBase::iconDataKnownForIconURL):
        (WebCore::IconDatabaseBase::loadDecisionForIconURL):
        (WebCore::IconDatabaseBase::importIconURLForPageURL):
        (WebCore::IconDatabaseBase::importIconDataForIconURL):
        (WebCore::IconDatabaseBase::open):

2011-03-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81026.
        http://trac.webkit.org/changeset/81026
        https://bugs.webkit.org/show_bug.cgi?id=56313

        Breaks gtk 64-bit tests (Requested by podivilov on #webkit).

        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent):
        (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):
        (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest):
        (WebCore::InspectorBrowserDebuggerAgent::clear):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.createXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype._createXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype.breakpointViewForEventData):
        (WebInspector.BreakpointManager.prototype._projectChanged):
        (WebInspector.BreakpointManager.prototype._validateBreakpoints):
        (WebInspector.BreakpointManager.prototype._createEventListenerBreakpointId):
        (WebInspector.BreakpointManager.prototype._createXHRBreakpointId):
        (WebInspector.XHRBreakpoint):
        (WebInspector.XHRBreakpoint.prototype._enable):
        (WebInspector.XHRBreakpoint.prototype._disable):
        (WebInspector.XHRBreakpoint.prototype._serializeToJSON):
        (WebInspector.XHRBreakpointView):
        (WebInspector.XHRBreakpointView.prototype.compareTo):
        (WebInspector.XHRBreakpointView.prototype.populateEditElement):
        (WebInspector.XHRBreakpointView.prototype.populateLabelElement):
        (WebInspector.XHRBreakpointView.prototype.populateStatusMessageElement):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.XHRBreakpointsSidebarPane.addButtonClicked):
        (WebInspector.XHRBreakpointsSidebarPane):
        (WebInspector.XHRBreakpointsSidebarPane.prototype.addBreakpointItem):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._startEditingBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._hideEditBreakpointDialog):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._clearInterface):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/inspector.js:
        (WebInspector.resetFocusElement):
        (WebInspector.createXHRBreakpointsSidebarPane.breakpointAdded):
        (WebInspector.createXHRBreakpointsSidebarPane):
        (WebInspector.set attached):

2011-03-14  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Factor out binary search algo from the insertionIndexForObjectInListSortedByFunction function.
        https://bugs.webkit.org/show_bug.cgi?id=56312

        Test: inspector/utilities.html

        * inspector/front-end/utilities.js:

2011-03-12  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: re-implement xhr breakpoints.
        https://bugs.webkit.org/show_bug.cgi?id=56252

        - restore xhr breakpoints one by one instead of using setAllBrowserBreakpoints
        - store xhr breakpoints in a separate setting
        - move presentation-related code from BreakpointManager to XHRBreakpointsSidebarPane

        Test: inspector/debugger/xhr-breakpoints.html

        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent):
        (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):
        (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest):
        (WebCore::InspectorBrowserDebuggerAgent::clear):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.setXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype.removeXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype.breakpointViewForEventData):
        (WebInspector.BreakpointManager.prototype._projectChanged):
        (WebInspector.BreakpointManager.prototype._validateBreakpoints):
        (WebInspector.BreakpointManager.prototype._createEventListenerBreakpointId):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.XHRBreakpointsSidebarPane):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._addButtonClicked.finishEditing):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._addButtonClicked):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._removeBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._contextMenu.removeBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._contextMenu):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._checkboxClicked):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._labelClicked.finishEditing):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._labelClicked):
        (WebInspector.XHRBreakpointsSidebarPane.prototype.highlightBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype.clearBreakpointHighlight):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._saveBreakpoints):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._restoreBreakpoints):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._projectChanged):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype._xhrBreakpointHit):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._clearInterface):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/inspector.js:
        (WebInspector.resetFocusElement):
        (WebInspector.set attached):

2011-03-14  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move breakpoints restoring to debugger presentation model.
        https://bugs.webkit.org/show_bug.cgi?id=56123

        DebuggerModel's "breakpoint-added" and "breakpoint-removed" events are gone since
        setBreakpoint/removeBreakpoint are now called from DPM only.

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::enableDebuggerAfterShown):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.enableDebugger):
        (WebInspector.DebuggerModel.prototype._debuggerWasEnabled):
        (WebInspector.DebuggerModel.prototype._debuggerWasDisabled):
        (WebInspector.DebuggerModel.prototype.setBreakpoint.didSetBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpointBySourceId):
        (WebInspector.DebuggerModel.prototype.removeBreakpoint):
        (WebInspector.DebuggerModel.prototype._breakpointResolved):
        (WebInspector.DebuggerModel.prototype.reset):
        (WebInspector.DebuggerDispatcher.prototype.debuggerWasEnabled):
        (WebInspector.DebuggerDispatcher.prototype.debuggerWasDisabled):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerWasEnabled):
        (WebInspector.DebuggerPresentationModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._failedToParseScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._scriptSourceChanged):
        (WebInspector.DebuggerPresentationModel.prototype.breakpointsForSourceFileId):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpointEnabled):
        (WebInspector.DebuggerPresentationModel.prototype.updateBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype.removeBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype.findBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointRemoved):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointResolved):
        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype._saveBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype.reset):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._debuggerWasEnabled):
        (WebInspector.ScriptsPanel.prototype._debuggerWasDisabled):

2011-03-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81015.
        http://trac.webkit.org/changeset/81015
        https://bugs.webkit.org/show_bug.cgi?id=56308

        A Similar patch landed in r76960 (Requested by philn-tp on
        #webkit).

        * GNUmakefile.am:

2011-03-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: don't use innerText, use textContent instead.
        https://bugs.webkit.org/show_bug.cgi?id=56307

        * inspector/front-end/AuditFormatters.js:
        (WebInspector.AuditFormatters.snippet):
        * inspector/front-end/ElementsTreeOutline.js:
        * inspector/front-end/GoToLineDialog.js:
        * inspector/front-end/HelpScreen.js:
        (WebInspector.HelpScreen):
        * inspector/front-end/ShortcutsHelp.js:
        (WebInspector.ShortcutsSection.prototype.renderSection):
        (WebInspector.ShortcutsSection.prototype._renderHeader):

2011-03-14  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Disable live-edit in favor of the text editor
        https://bugs.webkit.org/show_bug.cgi?id=56176

        * inspector/front-end/Settings.js:

2011-03-14  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] scroll does not work in source frame when mouse is inside the gutter
        https://bugs.webkit.org/show_bug.cgi?id=56095

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

2011-03-11  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move breakpoints restoring after live edit to debugger presentation model.
        https://bugs.webkit.org/show_bug.cgi?id=56179

        Presentation model should move breakpoints based on text diff as required by "revert to revision" action in resources panel.

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        (WebInspector.DebuggerModel.prototype.setBreakpoint.didSetBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpoint):
        (WebInspector.DebuggerModel.prototype.reset):
        (WebInspector.DebuggerModel.prototype.editScriptSource.didEditScriptSource):
        (WebInspector.DebuggerModel.prototype.editScriptSource):
        (WebInspector.DebuggerModel.prototype.get callFrames):
        (WebInspector.DebuggerModel.prototype._pausedScript):
        (WebInspector.DebuggerModel.prototype._resumedScript):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._scriptSourceChanged):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._scriptSourceChanged):

2011-03-10  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Optimize backend-frontend data transfer volume for CSS styles
        https://bugs.webkit.org/show_bug.cgi?id=56111

        This change reduces the getStylesForNode() payload more than twice for BODY elements.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::populateObjectWithStyleProperties):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSProperty.parsePayload):

2011-03-14  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Steve Block.

        Detach Geolocation from Frame when Page destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=52877

        On Page destruction, any outstanding Geolocation permission
        requests should be cancelled, because the Geolocation can only
        access the client indirectly via m_frame->page().

        Page destruction is signalled by a call to the
        Frame::pageDestroyed() method. This explictly calls
        DOMWindow::resetGeolocation which ultimately calls Geolocation::reset.

        Geolocation::reset() detaches from the GeolocationController,
        cancels requests, watches and single shots, and sets the
        permission state back to Unknown.

        Frame::pageDestroyed() is also called by FrameLoader even though
        the page is not destroyed. We should still cancel permission
        requests, because the GeolocationClient will become inaccessible
        to the Geolocation object after this call.

        Frame::transferChildFrameToNewDocument also indirectly calls
        Geolocation::reset when the frame is reparented between
        pages. Ideally we would like the Geolocation's activities to
        continue after reparenting, see bug
        https://bugs.webkit.org/show_bug.cgi?id=55577

        Since GeolocationController is owned by Page, and all Geolocation
        objects will now unsubscribe from the GeolocationController on
        pageDetached(), we no longer need to call stopUpdating() from the
        GeolocationController's destructor. Instead we can simply assert
        that there should be no no observers. See related bug
        https://bugs.webkit.org/show_bug.cgi?id=52216 .

        Introduced new method 'numberOfPendingPermissionRequests' on
        GeolocationClientMock to count the number of outstanding pending
        permission requests. This provides a reusable implementation for
        client-based implementations of the LayoutTestController's
        numberOfPendingGeolocationPermissionRequests method.

        Test: fast/dom/Geolocation/page-reload-cancel-permission-requests.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::resetGeolocation):
        * page/DOMWindow.h:
        * page/Frame.cpp:
        (WebCore::Frame::pageDestroyed):
        (WebCore::Frame::transferChildFrameToNewDocument):
        * page/Geolocation.cpp:
        (WebCore::Geolocation::~Geolocation):
        (WebCore::Geolocation::page):
        (WebCore::Geolocation::reset):
        (WebCore::Geolocation::disconnectFrame):
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::requestPermission):
        (WebCore::Geolocation::startUpdating):
        (WebCore::Geolocation::stopUpdating):
        * page/Geolocation.h:
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::~GeolocationController):
        * page/Navigator.cpp:
        (WebCore::Navigator::resetGeolocation):
        * page/Navigator.h:
        * platform/mock/GeolocationClientMock.cpp:
        (WebCore::GeolocationClientMock::numberOfPendingPermissionRequests):
        * platform/mock/GeolocationClientMock.h:

2011-03-14  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: REGRESSION: Messed up with the tabIndex for text editor
        https://bugs.webkit.org/show_bug.cgi?id=56183

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._handleKeyDown):
        (WebInspector.SourceFrame.prototype._handleSave):
        (WebInspector.SourceFrame.prototype._handleRevertEditing):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.set readOnly):

2011-03-14  Chris Rogers  <crogers@google.com>

        Reviewed by Xan Lopez.

        Add all web audio auto-generated files to GTK make system
        https://bugs.webkit.org/show_bug.cgi?id=50497

        No new tests since these are build-system tweaks.

        * GNUmakefile.am:

2011-03-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make DOMAgent event target, remove dependency from ElementsPanel.
        https://bugs.webkit.org/show_bug.cgi?id=56268

        * inspector/Inspector.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::reset):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::cancelSearch):
        (WebCore::InspectorDOMAgent::onMatchJobsTimer):
        (WebCore::InspectorDOMAgent::reportNodesAsSearchResults):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.requestDocument.mycallback):
        (WebInspector.DOMAgent.prototype.requestDocument):
        (WebInspector.DOMAgent.prototype._attributesUpdated):
        (WebInspector.DOMAgent.prototype._characterDataModified):
        (WebInspector.DOMAgent.prototype._documentUpdated):
        (WebInspector.DOMAgent.prototype._setDocument):
        (WebInspector.DOMAgent.prototype._childNodeCountUpdated):
        (WebInspector.DOMAgent.prototype._childNodeInserted):
        (WebInspector.DOMAgent.prototype._childNodeRemoved):
        (WebInspector.DOMAgent.prototype._removeBreakpoints):
        (WebInspector.DOMAgent.prototype.performSearch):
        (WebInspector.DOMAgent.prototype.cancelSearch):
        (WebInspector.DOMDispatcher.prototype.searchResults):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype._reset):
        (WebInspector.ElementsPanel.prototype._documentUpdated):
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.performSearch):
        (WebInspector.ElementsPanel.prototype._addNodesToSearchResult):
        (WebInspector.ElementsPanel.prototype._attributesUpdated):
        (WebInspector.ElementsPanel.prototype._characterDataModified):
        (WebInspector.ElementsPanel.prototype._nodeInserted):
        (WebInspector.ElementsPanel.prototype._nodeRemoved):
        (WebInspector.ElementsPanel.prototype._childNodeCountUpdated):
        (WebInspector.ElementsPanel.prototype.updateModifiedNodes):

2011-03-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add tests for edit dom operations.
        https://bugs.webkit.org/show_bug.cgi?id=56248

        Test: inspector/elements/edit-dom-actions.html

        * inspector/Inspector.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::assertNode):
        (WebCore::InspectorDOMAgent::assertElement):
        (WebCore::InspectorDOMAgent::assertHTMLElement):
        (WebCore::InspectorDOMAgent::nodeToSelectOn):
        (WebCore::InspectorDOMAgent::querySelector):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::setAttribute):
        (WebCore::InspectorDOMAgent::removeAttribute):
        (WebCore::InspectorDOMAgent::getOuterHTML):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.setAttribute):
        (WebInspector.DOMNode.prototype.removeAttribute):
        * inspector/front-end/inspector.js:
        (WebInspector.startEditing.defaultFinishHandler):

2011-03-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/8762095> and https://bugs.webkit.org/show_bug.cgi?id=55172
        Need WK2 API to view/manage origins with LocalStorage

        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::initializeTracker): Make sure the TextEncoding map is initialized on the main thread
          before the StorageTracker thread can do it on the background thread.

2011-03-13  Anton D'Auria  <adauria@apple.com>

        Reviewed by Brady Eidson and David Levin, landed by Brady Eidson.

        Fixed lock-taking order to prevent deadlock, added lock for m_client,
        removed premature return in syncImportOriginIdentifiers when tracker
        db does not exist because that prevented syncFileSystemAndTrackerDatabase()
        from running until next LocalStorage db creation, cleaned up
        StorageTracker::scheduleTask() code for readability.
        
        https://bugs.webkit.org/show_bug.cgi?id=56285
        
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::trackerDatabasePath):
        (WebCore::StorageTracker::syncImportOriginIdentifiers): If tracker db isn't
        optionally opened (as in the case when it doesn't exist on disk), don't
        exit early and call syncFileSystemAndTrackerDatabase(), which will create
        a tracker db if localstorage db files are found on disk by calling setOriginDetails.
        (WebCore::StorageTracker::syncFileSystemAndTrackerDatabase):
        (WebCore::StorageTracker::setOriginDetails):
        (WebCore::StorageTracker::scheduleTask): readability changes.
        (WebCore::StorageTracker::syncSetOriginDetails):
        (WebCore::StorageTracker::syncDeleteAllOrigins):
        (WebCore::StorageTracker::syncDeleteOrigin):
        (WebCore::StorageTracker::cancelDeletingOrigin): order lock-taking consistently to avoid deadlock.
        (WebCore::StorageTracker::setClient):
        * storage/StorageTracker.h:

2011-03-13  Anton D'Auria  <adauria@apple.com>

        Reviewed and landed by Brady Eidson.

        Invalid assertion in StorageTracker - PageGroup::numberOfPageGroups() == 1
        https://bugs.webkit.org/show_bug.cgi?id=56240

        This assertion is invalid until LocalStorage is either global or is isolated by PageGroup.

        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::origins):
        (WebCore::StorageTracker::deleteAllOrigins):
        (WebCore::StorageTracker::deleteOrigin):

2011-03-13  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Dan Bernstein.

        Make adjustMIMETypeIfNecessary use CFNetwork directly
        https://bugs.webkit.org/show_bug.cgi?id=55912

        Follow up fix for Layout Test failure. Fix typo - it should be text/plain, not test/plain.

        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::adjustMIMETypeIfNecessary):

2011-03-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Include hyphenation information in text representation of render tree
        https://bugs.webkit.org/show_bug.cgi?id=56287

        (WebCore::writeTextRun): If the text box is hyphenated, output the hyphenation
        string.

2011-03-13  David Levin  <levin@chromium.org>

        Improve my hasitly added build fix and added a bug https://bugs.webkit.org/show_bug.cgi?id=56288
        above addressing this FIXME.

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

2011-03-13  David Levin  <levin@chromium.org>

        Build fix adding remaining enum values to switch statement.

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

2011-03-13  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::ResourceError):
        Add missing constructor.

2011-03-13  David Sosby  <dsosby@rim.com>

        Reviewed by Dan Bernstein.

        REGRESSION: Soft hyphen is not always rendered
        https://bugs.webkit.org/show_bug.cgi?id=56017
        
        The check to flag a text block as hyphenated was only
        occurring at break points in the line. If no break points
        were found after the soft hyphen then the line would not
        be flagged hyphenated. Adding a check for soft hyphen at
        the end of the text run resolves the issue.

        Test: fast/text/soft-hyphen-4.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2011-03-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        REGRESSION (r80438): fast/text/hyphenate-character failing in pixel mode
        https://bugs.webkit.org/show_bug.cgi?id=56280

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::tryHyphenating): Avoid subtracting 1 from an unsigned 0.

2011-03-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add ability to create a WKErrorRef
        <rdar://problem/9115768>
        https://bugs.webkit.org/show_bug.cgi?id=56279

        * WebCore.exp.in:
        Add new exports.

        * platform/network/cf/ResourceError.h:
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::platformCompare):
        (WebCore::ResourceError::cfError):
        (WebCore::ResourceError::operator CFErrorRef):
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::cfStreamError):
        (WebCore::ResourceError::operator CFStreamError):
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::platformCompare):
        (WebCore::ResourceError::nsError):
        (WebCore::ResourceError::operator NSError *):
        (WebCore::ResourceError::cfError):
        (WebCore::ResourceError::operator CFErrorRef):
        Clean up ResourceError a bit and add ability to create a ResourceError from a CFErrorRef
        regardless of whether CFNetwork is being used.

2011-03-13  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Brady Eidson.

        Make adjustMIMETypeIfNecessary use CFNetwork directly
        https://bugs.webkit.org/show_bug.cgi?id=55912

        Convert category method [NSURLResponse adjustMIMETypeIfNecessary] to C function
        WebCore::adjustMIMETypeIfNecessary() that takes a CFURLResponseRef and is functionally
        identical.

        Testing is covered by existing LayoutTests.

        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        * platform/network/mac/WebCoreURLResponse.h:
        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::createBinaryExtensionsSet):
        (WebCore::createExtensionToMIMETypeMap):
        (WebCore::mimeTypeFromUTITree):
        (WebCore::adjustMIMETypeIfNecessary):

2011-03-13  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Dimitri Glazkov.

        Update comment in CSSValueKeywords.in
        https://bugs.webkit.org/show_bug.cgi?id=56266

        The enums the comment refers to were moved from RenderStyle.h to RenderStyleConstants.h
        in r36579 but it appears that the comment in CSSValueKeywords.in wasn't updated.

        No tests - just updating a comment.

        * css/CSSValueKeywords.in:

2011-03-13  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alice Liu.

        StorageTracker constructor shouldn't have initialization code and isMainThread() assertion
        https://bugs.webkit.org/show_bug.cgi?id=56259

        Move all StorageTracker initialization to
        StorageTracker::initializeTracker. This also removes the
        requirement that the StorageTracker constructor isn't run
        on the main thread.

        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::initializeTracker):
        (WebCore::StorageTracker::tracker):
        (WebCore::StorageTracker::StorageTracker):

2011-03-13  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Dave Hyatt.

        REGRESSION (r61383): Navigation menu laid out incorrectly on aboardtheworld.com
        https://bugs.webkit.org/show_bug.cgi?id=53470

        Prefer !important over normal properties when dealing with duplicate properties in style rules.

        Test: fast/css/duplicate-property-in-rule-important.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):

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

        Unreviewed, rolling out r80895.
        http://trac.webkit.org/changeset/80895
        https://bugs.webkit.org/show_bug.cgi?id=56261

        Causing crashes in several tests including
        t1202-counters-16-c.html (see
        http://build.webkit.org/results/SnowLeopard%20Intel%20Leaks/r80956%20(15528)/results.html)
        (Requested by dave_levin on #webkit).

        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::CounterNode):
        (WebCore::CounterNode::create):
        (WebCore::CounterNode::resetRenderer):
        (WebCore::CounterNode::resetRenderers):
        (WebCore::CounterNode::recount):
        (WebCore::CounterNode::insertAfter):
        (WebCore::CounterNode::removeChild):
        (WebCore::showTreeAndMark):
        * rendering/CounterNode.h:
        (WebCore::CounterNode::renderer):
        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):
        (WebCore::RenderCounter::~RenderCounter):
        (WebCore::RenderCounter::originalText):
        (WebCore::RenderCounter::invalidate):
        (WebCore::destroyCounterNodeWithoutMapRemoval):
        (WebCore::RenderCounter::destroyCounterNodes):
        (WebCore::RenderCounter::destroyCounterNode):
        (WebCore::updateCounters):
        (showCounterRendererTree):
        * rendering/RenderCounter.h:
        * rendering/RenderObjectChildList.cpp:
        (WebCore::invalidateCountersInContainer):
        (WebCore::RenderObjectChildList::invalidateCounters):
        * rendering/RenderObjectChildList.h:

2011-03-12  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION (r76474): IntegerArray hash hashes only 1/4 of the array
        https://bugs.webkit.org/show_bug.cgi?id=56258

        No tests because the wrong hashing is mostly harmless. The only symptom
        we have seen is an occasional assertion in debug builds about the size
        not being a multiple of two. But a worse hash is worse for performance too.

        * platform/cf/BinaryPropertyList.cpp:
        (WebCore::IntegerArrayHash::hash): Pass in the size in bytes rather
        than the number of array entries.

2011-03-12  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Fix the build with newer GCCs and remove some extra whitespae.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::uint8_t):

2011-03-12  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Oliver Hunt.

        Removed unused ARMv5 code. The ARMv5 case now falls under the general
        unaligned accessed case.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readLittleEndian):
        (WebCore::CloneDeserializer::readString):

2011-03-12  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Oliver Hunt.

        WebCore fails to build with Clang on ARM
        https://bugs.webkit.org/show_bug.cgi?id=56257

        Add an explicit instantiation of writeLittleEndian for uint8_t and move it to
        namespace scope, since explicit specializations are not allowed at class scope.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::writeLittleEndian):

2011-03-11  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Dragging image to desktop gives webloc instead of image file in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=56193

        * WebCore.exp.in: Added some additional exports. Re-sorted.

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

        Unreviewed, rolling out r80919.
        http://trac.webkit.org/changeset/80919
        https://bugs.webkit.org/show_bug.cgi?id=56251

        all windows bots failed to compile this change (Requested by
        loislo on #webkit).

        * bridge/c/c_class.cpp:
        * bridge/c/c_runtime.cpp:
        * bridge/jni/JavaMethod.cpp:
        * plugins/PluginViewNone.cpp:

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

        Unreviewed WinCE build fix for r80900.

        * CMakeListsWinCE.txt: Removed IconDatabaseNone.cpp.

2011-03-12  Andras Becsi  <abecsi@webkit.org>

        Unreviewed typo fix.

        No new tests needed.

        * WebCore.pro: Fix typo in header name.

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

        Not reviewed: Inspect Element action regression fix.

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

2011-03-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed. One line fix for inspector/dom-breakpoints.html

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.DOMBreakpointView.prototype.populateStatusMessageElement.decorateNode):

2011-03-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix.

        Almost all inspector tests are crashing after r80928.

        * inspector/front-end/inspector.js:

2011-03-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: follow up to error reporting, fixing multiple regressions.
        https://bugs.webkit.org/show_bug.cgi?id=56243

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::setPropertyValue):
        * inspector/InjectedScript.h:
        * inspector/Inspector.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getChildNodes):
        (WebCore::InspectorDOMAgent::getOuterHTML):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::setPropertyValue):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.setNodeName):
        (WebInspector.DOMNode.prototype.setNodeValue):
        (WebInspector.DOMNode.prototype.getChildNodes):
        (WebInspector.DOMNode.prototype.getOuterHTML):
        (WebInspector.DOMNode.prototype.setOuterHTML):
        (WebInspector.DOMNode.prototype.removeNode):
        (WebInspector.DOMNode.prototype.copyNode):
        (WebInspector.DOMAgent.prototype.pushNodeToFrontend):
        (WebInspector.DOMAgent.prototype.pushNodeByPathToFrontend):
        (WebInspector.EventListeners.getEventListenersForNode):
        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorage.prototype.getEntries):
        (WebInspector.DOMStorage.prototype.setItem):
        (WebInspector.DOMStorage.prototype.removeItem):
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype.update):
        (WebInspector.DOMStorageItemsView.prototype._showDOMStorageEntries):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode.setTooltip):
        (WebInspector.ElementsTreeElement.prototype.updateChildren):
        ():
        * inspector/front-end/EventListenersSidebarPane.js:
        (WebInspector.EventListenersSidebarPane.prototype.update.callback):
        (WebInspector.EventListenersSidebarPane.prototype.update):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.applyExpression.callback):
        (WebInspector.ObjectPropertyTreeElement.prototype.applyExpression):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.nodeResolved):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.setPropertyValue):
        (WebInspector.RemoteObject.prototype.evaluate):
        * inspector/front-end/inspector.js:

2011-03-12  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix.

        Fix GTK+ builds by wrapping sections of full screen code in USE(ACCELERATED_COMPOSITING)
        checks.

        * dom/Document.cpp:
        (WebCore::Document::webkitWillEnterFullScreenForElement):
        (WebCore::Document::webkitDidEnterFullScreenForElement):
        (WebCore::Document::webkitWillExitFullScreenForElement):
        (WebCore::Document::webkitDidExitFullScreenForElement):

2011-03-12  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix.

        [EFL] Fix build break because of several reason.
        https://bugs.webkit.org/show_bug.cgi?id=56244

        * CMakeLists.txt: Add missing files.
        * platform/posix/FileSystemPOSIX.cpp: Add PLATFORM(EFL).

2011-03-11  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move profiler related methods from inspector agent to profiler agent
        https://bugs.webkit.org/show_bug.cgi?id=56204

        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::populateScriptObjects):
        (WebCore::InspectorAgent::showProfilesPanel):
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        (WebCore::InspectorController::profilerEnabled):
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        (WebCore::InspectorController::isRecordingUserInitiatedProfile):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::profilerEnabledImpl):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::create):
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::enable):
        (WebCore::InspectorProfilerAgent::disable):
        (WebCore::InspectorProfilerAgent::setFrontend):
        (WebCore::InspectorProfilerAgent::clearFrontend):
        (WebCore::InspectorProfilerAgent::restore):
        (WebCore::InspectorProfilerAgent::restoreEnablement):
        (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
        (WebCore::InspectorProfilerAgent::stopUserInitiatedProfiling):
        * inspector/InspectorProfilerAgent.h:
        (WebCore::InspectorProfilerAgent::start):
        (WebCore::InspectorProfilerAgent::stop):
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileType.prototype.buttonClicked):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype._registerProfileType):
        (WebInspector.ProfilesPanel.prototype._toggleProfiling):
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):

2011-03-11  Jer Noble  <jer.noble@apple.com>

        Reviewed by Anders Carlsson.

        WebCore::Document should notify ChromeClient when the full screen renderer's backing changes.
        https://bugs.webkit.org/show_bug.cgi?id=56226

        * dom/Document.cpp:
        (WebCore::Document::webkitWillEnterFullScreenForElement): Call setRootFullScreenLayer().
        (WebCore::Document::webkitDidEnterFullScreenForElement): Ditto.
        (WebCore::Document::webkitWillExitFullScreenForElement): Ditto.
        (WebCore::Document::webkitDidExitFullScreenForElement): Ditto.
        (WebCore::Document::setFullScreenRendererSize): Layout after setting the renderer's size.

2011-03-11  Jer Noble  <jer.noble@apple.com>

        Reviewed by Anders Carlsson.

        Create new interface stubs to support full screen mode in WebKit2.

        WebKit2: Plumb new full screen animation APIs through WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=55993

        * page/ChromeClient.h:
        (WebCore::ChromeClient::setRootFullScreenLayer): Added.

2011-03-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Ensure all values are correctly tagged in the registerfile
        https://bugs.webkit.org/show_bug.cgi?id=56214

        Make sure everything builds still.

        * bridge/c/c_class.cpp:
        * bridge/c/c_runtime.cpp:
        * bridge/jni/JavaMethod.cpp:
        * plugins/PluginViewNone.cpp:

2011-03-11  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):

2011-03-11  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Eric Carlsson.

        <rdar://problem/9124537> Crashes during layout tests due to overrelease of AVFoundation objects.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createContextVideoRenderer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setAsset):

2011-03-11  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        Fixes an error with the checkin for https://bugs.webkit.org/show_bug.cgi?id=52468

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):

2011-03-11  Brady Eidson  <beidson@apple.com>

        Attempted Qt build fix for https://bugs.webkit.org/show_bug.cgi?id=56216

        * loader/icon/IconDatabase.h: Make this guy public.

2011-03-11  Brady Eidson  <beidson@apple.com>

        Attempted Qt build fix for https://bugs.webkit.org/show_bug.cgi?id=56216

        * loader/icon/IconDatabase.h:
        (WebCore::IconDatabase::delayDatabaseCleanup): Maybe Qt has Icon Database disabled, so we need to define this here?

2011-03-11  Brady Eidson  <beidson@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=56216
        Fix the Qt build following the same pattern of the patch.

        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabaseBase.cpp:
        (WebCore::IconDatabaseBase::databasePath): Added to the virtual base.
        * loader/icon/IconDatabaseBase.h:
        (WebCore::IconDatabaseBase::isOpen): Ditto.

2011-03-11  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=56198
        Fix conditional which had an int for one case and a pointer for another.

        No new tests. Fix compilation on Solaris 10 with SunStudio 12 C++

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):

2011-03-11  Brady Eidson  <beidson@apple.com>

        Windows build fix.

        * history/HistoryItem.cpp:
        * loader/icon/IconDatabaseBase.cpp:

2011-03-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8648311> and https://bugs.webkit.org/show_bug.cgi?id=56216
        Rework disabled IconDatabase builds while allowing for a pluggable icon database implementation.

        Project file stuff:
        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.vcproj/WebCore.vcproj:

        * loader/icon/IconDatabase.cpp:
        * loader/icon/IconDatabase.h: Inherit from IconDatabaseBase.

        * loader/icon/IconDatabaseBase.cpp: Added.
        (WebCore::IconDatabaseBase::iconURLForPageURL):
        (WebCore::iconDatabase):
        (WebCore::setGlobalIconDatabase):
        * loader/icon/IconDatabaseBase.h: Added.
        (WebCore::IconDatabaseBase::IconDatabaseBase):
        (WebCore::IconDatabaseBase::~IconDatabaseBase):
        (WebCore::IconDatabaseBase::setEnabled):
        (WebCore::IconDatabaseBase::isEnabled):
        (WebCore::IconDatabaseBase::defaultIcon):
        (WebCore::IconDatabaseBase::retainIconForPageURL):
        (WebCore::IconDatabaseBase::releaseIconForPageURL):
        (WebCore::IconDatabaseBase::iconForPageURL):
        (WebCore::IconDatabaseBase::setIconURLForPageURL):
        (WebCore::IconDatabaseBase::setIconDataForIconURL):
        (WebCore::IconDatabaseBase::iconDataKnownForIconURL):
        (WebCore::IconDatabaseBase::loadDecisionForIconURL):
        (WebCore::IconDatabaseBase::pageURLMappingCount):
        (WebCore::IconDatabaseBase::retainedPageURLCount):
        (WebCore::IconDatabaseBase::iconRecordCount):
        (WebCore::IconDatabaseBase::iconRecordCountWithData):
        (WebCore::IconDatabaseBase::importIconURLForPageURL):
        (WebCore::IconDatabaseBase::importIconDataForIconURL):
        (WebCore::IconDatabaseBase::shouldStopThreadActivity):
        (WebCore::IconDatabaseBase::open):
        (WebCore::IconDatabaseBase::close):
        (WebCore::IconDatabaseBase::removeAllIcons):
        (WebCore::IconDatabaseBase::setPrivateBrowsingEnabled):
        (WebCore::IconDatabaseBase::setClient):

        * loader/icon/IconDatabaseNone.cpp: Removed.

2011-03-11  Brady Eidson  <beidson@apple.com>

        Attempt at a build-fix for https://bugs.webkit.org/show_bug.cgi?id=51878

        * page/PageGroup.h: Declare this method, even if the definition will end up being empty.

2011-03-11  Michael Nordman  <michaeln@google.com>

        Reviewed by Dmitry Titov.

        Adding the '~' to the dtor (duh).

        No new tests.

        * storage/SQLCallbackWrapper.h:
        (WebCore::SQLCallbackWrapper::~SQLCallbackWrapper):

2011-03-11  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Hyatt.

        Introduced double linkage between a CounterNode and its display renderer.

        use of freed pointer in WebCore::RenderCounter::originalText()
        https://bugs.webkit.org/show_bug.cgi?id=56065

        No new tests. This bug could only be reproduced manually by
        refreshing the page during load at a critical point.
        See bug attachment for testing.

        * rendering/CounterNode.cpp:
        Introduced new member "m_owner" to store the renderer that has the
        style directives that produce the CounterNode.
        Repurposed m_renderer to reffer to the RenderCounter that shows the
        CounterNode.
        (WebCore::CounterNode::CounterNode):
        Updated member initialization.
        (WebCore::CounterNode::create):
        (WebCore::CounterNode::resetRenderer):
        (WebCore::CounterNode::resetRenderers):
        (WebCore::CounterNode::recount):
        (WebCore::CounterNode::removeChild):
        (WebCore::CounterNode::insertAfter):
        No functional changes.
        (WebCore::showTreeAndMark):
        Added flushing to ensure that the output is complete.
        * rendering/CounterNode.h:
        (WebCore::CounterNode::owner):
        Renamed from renderer()
        (WebCore::CounterNode::renderer):
        (WebCore::CounterNode::setRenderer):
        Added new accessors for the display renderer.
        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):
        Fixed comments. No functional changes.
        (WebCore::RenderCounter::~RenderCounter):
        Made sure that the CounterNode that this renderers displays is
        detached from this.
        (WebCore::RenderCounter::originalText):
        (WebCore::RenderCounter::invalidate):
        Added code to update m_renderer on the displayed CounterNode.
        (WebCore::destroyCounterNodeWithoutMapRemoval):
        (WebCore::RenderCounter::destroyCounterNodes):
        (WebCore::RenderCounter::destroyCounterNode):
        (WebCore::updateCounters):
        No change, just kept code in line with the changes above.
        (showCounterRendererTree):
        Added fflush to ensure complete display.
        * rendering/RenderCounter.h:
        * rendering/RenderObjectChildList.cpp:
        * rendering/RenderObjectChildList.h:
        Removed unneeded invalidateCounters related functions.

2011-03-11  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Introduce lookup-table based approach for applying CSS properties.
        The aim is to be a starting point for refactoring
        CSSStyleSelector::applyProperty() into more readable, maintainable code.
        https://bugs.webkit.org/show_bug.cgi?id=54707

        No new behavior / covered by existing tests.

        * css/CSSStyleApplyProperty.cpp: Added.
        (WebCore::ApplyPropertyNull):
        Class that provides empty implementations of inherit, initial, value.
        (WebCore::ApplyPropertyDefault::ApplyPropertyDefault):
        Class that calls the appropriate RenderStyle setters directly.
        (WebCore::ApplyPropertyColorBase::ApplyPropertyColorBase):
        Class for handling CSSProperty*Color.
        (WebCore::ApplyPropertyColor::ApplyPropertyColor):
        Class for handling CSSPropertyColor.
        (WebCore::CSSStyleApplyProperty::sharedCSSStyleApplyProperty):
        Singleton initializer.
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Constructor that bulds up the map from property id to apply-er objects.
        * css/CSSStyleApplyProperty.h: Added.
        (WebCore::CSSStyleApplyProperty::inherit):
        Handle the inherit case for a given property.
        (WebCore::CSSStyleApplyProperty::initial):
        Handle the initial case for a given property.
        (WebCore::CSSStyleApplyProperty::value):
        Apply a value to a given property.
        (WebCore::CSSStyleApplyProperty::implements):
        Returns true if the provided property id is implemented.
        (WebCore::CSSStyleApplyProperty::index):
        Private function to determine the index of a property the property map.
        (WebCore::CSSStyleApplyProperty::valid):
        Function to determine that a given property id is valid.
        (WebCore::CSSStyleApplyProperty::setPropertyValue):
        (WebCore::CSSStyleApplyProperty::propertyValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        Get reference to the CSSStyleApplyProperty singleton.
        (WebCore::CSSStyleSelector::applyProperty):
        Now calls into CSSStyleApplyProperty for implemented property ids.
        Deleted color-related methods from the property id switch.
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::style):
        Made public to allow access from CSSStyleApplyProperty.
        (WebCore::CSSStyleSelector::parentStyle):
        Made public to allow access from CSSStyleApplyProperty.
        * rendering/style/RenderStyle.h:
        Made CSSStyleApplyProperty a friend class. Necessary because it needs
        to access the private getters and setters on this clsass.

2011-03-11  Anton D'Auria  <adauria@apple.com>

        Reviewed and landed by Brady Eidson.

        Add WebKit1 API to view and delete local storage
        https://bugs.webkit.org/show_bug.cgi?id=51878

        Created StorageTracker as a central point for tracking and deleting LocalStorage per origin.
        StorageTracker maintains its own database of origin identifiers and backing db paths,
        and this allows it to contain more relational data in the future, like variable quotas per origin.

        On initialization, StorageTracker syncs its database with LocalStorage files on disk. It adds
        an origin entry when StorageAreaSync performs a first sync for an origin.

        All StorageTracker file operations are performed on one background thread with a task queue.

        Tests: storage/domstorage/localstorage/storagetracker/storage-tracker-1-prepare.html
               storage/domstorage/localstorage/storagetracker/storage-tracker-2-create.html
               storage/domstorage/localstorage/storagetracker/storage-tracker-3-delete-all.html
               storage/domstorage/localstorage/storagetracker/storage-tracker-4-create.html
               storage/domstorage/localstorage/storagetracker/storage-tracker-5-delete-one.html

        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::clearLocalStorageForAllOrigins):
        (WebCore::PageGroup::clearLocalStorageForOrigin):
        (WebCore::PageGroup::syncLocalStorage):
        (WebCore::PageGroup::numberOfPageGroups):
        * page/PageGroup.h:
        * platform/chromium/FileSystemChromium.cpp:
        (WebCore::listDirectory):
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::listDirectory):
        * storage/LocalStorageTask.cpp:
        (WebCore::LocalStorageTask::LocalStorageTask):
        (WebCore::LocalStorageTask::performTask):
        * storage/LocalStorageTask.h:
        (WebCore::LocalStorageTask::createOriginIdentifiersImport):
        (WebCore::LocalStorageTask::createSetOriginDetails):
        (WebCore::LocalStorageTask::createDeleteOrigin):
        (WebCore::LocalStorageTask::createDeleteAllOrigins):
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::clearForOriginDeletion):
        (WebCore::StorageAreaImpl::sync):
        * storage/StorageAreaImpl.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::scheduleCloseDatabase):
        (WebCore::StorageAreaSync::openDatabase):
        (WebCore::StorageAreaSync::sync):
        (WebCore::StorageAreaSync::deleteEmptyDatabase):
        (WebCore::StorageAreaSync::scheduleSync):
        * storage/StorageAreaSync.h:
        * storage/StorageNamespace.h:
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::clearOriginForDeletion):
        (WebCore::StorageNamespaceImpl::clearAllOriginsForDeletion):
        (WebCore::StorageNamespaceImpl::sync):
        * storage/StorageNamespaceImpl.h:
        * storage/StorageTracker.cpp: Added.
        (WebCore::StorageTracker::initializeTracker):
        (WebCore::StorageTracker::tracker):
        (WebCore::StorageTracker::StorageTracker):
        (WebCore::StorageTracker::setStorageDirectoryPath):
        (WebCore::StorageTracker::trackerDatabasePath):
        (WebCore::StorageTracker::openTrackerDatabase):
        (WebCore::StorageTracker::importOriginIdentifiers):
        (WebCore::StorageTracker::syncImportOriginIdentifiers):
        (WebCore::StorageTracker::syncFileSystemAndTrackerDatabase):
        (WebCore::StorageTracker::setOriginDetails):
        (WebCore::StorageTracker::scheduleTask):
        (WebCore::StorageTracker::syncSetOriginDetails):
        (WebCore::StorageTracker::origins):
        (WebCore::StorageTracker::deleteAllOrigins):
        (WebCore::StorageTracker::syncDeleteAllOrigins):
        (WebCore::StorageTracker::deleteOrigin):
        (WebCore::StorageTracker::syncDeleteOrigin):
        (WebCore::StorageTracker::willDeleteAllOrigins):
        (WebCore::StorageTracker::willDeleteOrigin):
        (WebCore::StorageTracker::canDeleteOrigin):
        (WebCore::StorageTracker::cancelDeletingOrigin):
        (WebCore::StorageTracker::setClient):
        (WebCore::StorageTracker::syncLocalStorage):
        * storage/StorageTracker.h: Added.
        * storage/StorageTrackerClient.h: Added.
        (WebCore::StorageTrackerClient::~StorageTrackerClient):

2011-03-11  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JavaMethod does not correctly check for a null jstring for the method name
        https://bugs.webkit.org/show_bug.cgi?id=56187

        No new tests, simple typo fix.

        * bridge/jni/JavaMethod.cpp:
        (JavaMethod::JavaMethod):

2011-03-11  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Compositor uses too much texture memory for scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=56212

        Compositor invalidations can be off the page (and very large), but
        scrollbars only need to care about the invalidation that's visible.
        The large invalidation was causing the tiler layer size to grow
        needlessly larger than the scrollbar.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::invalidateRootLayerRect):

2011-03-11  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=52987
        
        REGRESSION: Overflowing columns not repainted correctly
        
        Make sure to add in column overflow as visual overflow as well.  It was only propagating layout overflow, which is obviously not
        sufficient, since blocks paint their own columns.

        Added fast/multicol/scrolling-overflow.html

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

2011-03-11  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Set canvasUsesAcceleratedDrawing setting to be off(false) by default
        https://bugs.webkit.org/show_bug.cgi?id=56215

        No new tests. Does not affect behavior. Just keeping the setting off by default.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):

2011-03-11  Andy Estes  <aestes@apple.com>

        Reviewed by David Hyatt.

        Table cells with dynamically added percentage height descendants do not
        grow in size if the table has already been laid out.
        https://bugs.webkit.org/show_bug.cgi?id=56174
        
        Table cells ignore their specified size and collapse to fit their
        children. When a descendent with percentage height is present before
        the table is first laid out, the descendent is sized based on the
        specified size of the table cell. However, when the child isn't present
        when the table is first laid out, the table cell ignores its specified
        size and collapses down to 0. Then, when the child div is added in a
        separate run loop iteration, it is sized to be 100% of the collapsed
        cell height instead of 100% of the cell's specified height. We should
        not get different layouts depending on the timing of tree construction.
        
        Fix this by clearing intrinsic padding before calculating the table
        cell's override height when we detect a child that should flex the
        table cell.

        Test: fast/table/dynamic-descendant-percentage-height.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::setOverrideSizeFromRowHeight): clear
        intrinsic padding before setting the override size.
        * rendering/RenderTableCell.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows): Call
        setOverrideSizeFromRowHeight() instead of setOverrideSize().

2011-03-11  Michael Nordman  <michaeln@google.com>

        Reviewed by David Levin.

        Add SQLCallbackWrapper
        Instead of directly holding RefPtrs to the Callback objects in SQLStatement and SQLTransaction, hold a wrapper objects
        which holds those references whose dtors will schedule the release of those references on the ScriptExecution thread.
        https://bugs.webkit.org/show_bug.cgi?id=55919

        No new tests, existing tests apply.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/SQLCallbackWrapper.h: Added.
        (WebCore::SQLCallbackWrapper::SQLCallbackWrapper):
        (WebCore::SQLCallbackWrapper::clear):
        (WebCore::SQLCallbackWrapper::unwrap):
        (WebCore::SQLCallbackWrapper::hasCallback):
        (WebCore::SQLCallbackWrapper::safeRelease):
        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::create):
        (WebCore::SQLStatement::SQLStatement):
        (WebCore::SQLStatement::performCallback):
        * storage/SQLStatement.h:
        (WebCore::SQLStatement::hasStatementCallback):
        (WebCore::SQLStatement::hasStatementErrorCallback):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::SQLTransaction):
        (WebCore::SQLTransaction::executeSQL):
        (WebCore::SQLTransaction::checkAndHandleClosedOrInterruptedDatabase):
        (WebCore::SQLTransaction::deliverTransactionCallback):
        (WebCore::SQLTransaction::deliverStatementCallback):
        (WebCore::SQLTransaction::postflightAndCommit):
        (WebCore::SQLTransaction::deliverSuccessCallback):
        (WebCore::SQLTransaction::handleTransactionError):
        (WebCore::SQLTransaction::deliverTransactionErrorCallback):
        * storage/SQLTransaction.h:

2011-03-11  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8955589> Adopt AVFoundation media back end on Lion.

        No new tests, existing media tests cover this.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines): Register MediaPlayerPrivateAVFoundationObjC.
        (WebCore::bestMediaEngineForTypeAndCodecs): Kill some whitespace.
        (WebCore::MediaPlayer::loadWithNextMediaEngine): Ditto.
        (WebCore::MediaPlayer::inMediaDocument): Ditto.
        * platform/graphics/MediaPlayer.h:

        * platform/graphics/avfoundation: Added.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp: Added.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h: Added.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h: Added.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm: Added.

2011-03-11  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=56205
        m_restrictions needs to allow multiple values (a bitfield)

        HTMLMediaElement::m_restrictions needs to hold multiple values, so
        change BehaviorRestrictions to an unsigned typedef and rename the
        existing enum BehaviorRestrictionFlags.

        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::setBehaviorRestrictions):

2011-03-11  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=47206
        
        Table rows don't support ::before/::after.  Add support to RenderTableRow::styleDidChange so that ::before/::after content gets
        properly constructed.

        Added fast/css-generated-content/table-row-before-after.html

        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::styleDidChange):
        * rendering/RenderTableRow.h:

2011-03-11  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Avoid updating a composited layer&apos;s contents if the layer has nonpositive dimensions
        https://bugs.webkit.org/show_bug.cgi?id=56209

        This matches the behavior prior to r80482.  No test since the only changes in
        behavior are avoiding work on invisible layers, which is unobservable,
        and fixing a crash due to bug 56153.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateContentsRecursive):

2011-03-11  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=47159
        
        CSS2.1 failures in background position parsing.
        
        Rewrite background position component parsing to match the spec.  Our old parsing would allow "100% left" to be valid
        when it should not have.  Rename parseFillPositionXY to parseFillPositionComponent and pass in enough information for
        it to understand what the first component was.
        
        For individual property parsing using background-position-x/y, I added new functions that just handle that without
        worrying about the other component.
        
        In order to pass the CSS2.1 test, I also had to fix multiple background parsing.  The number of layers in multiple
        backgrounds is determined solely by the background-image property and not by any of the other properties.  cullEmptyLayers
        has been changed to always consider a layer empty if it has no image set, even if other properties are set.
        
        A number of layout tests had to be patched as they were invalid.  A couple of them relied on incorrect background-position
        parsing (e.g., "50 left") and another relied on incorrect multiple background parsing.  It's not clear if the computed style
        should actually include the additional values when no image is set though, so that should perhaps be the subject of a 
        follow-up bug.

        Added fast/backgrounds/background-position-parsing.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillPositionX):
        (WebCore::CSSParser::parseFillPositionY):
        (WebCore::CSSParser::parseFillPositionComponent):
        (WebCore::CSSParser::parseFillPosition):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseTransformOrigin):
        (WebCore::CSSParser::parsePerspectiveOrigin):
        * css/CSSParser.h:
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::fillUnsetProperties):
        (WebCore::FillLayer::cullEmptyLayers):

2011-03-11  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by James Robinson.

        [chromium] Allow large layers with non-identity transforms to be drawn
        as long as their visible portion is smaller than the largest supported
        texture size. This code will soon be replaced by tiled layers.
        https://bugs.webkit.org/show_bug.cgi?id=55984

        Test: platform/chromium/compositing/huge-layer-rotated.html

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateContentsIfDirty):
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.h:

2011-03-09  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        REGRESSION (5.0.3-ToT): Scrolling text doesn&apos;t scroll in Star Wars intro animation
        https://bugs.webkit.org/show_bug.cgi?id=52468

        Added WIN32 to the ifdef controlling whether animations are applied in normal or
        reverse order. On Mac, animations used to be applied in reverse, but 
        <rdar://problem/7095638> fixed this in the release after Snow Leopard.
        But that patch has not be applied to the Safari Windows SDK yet. For now
        I've made Windows use the reverse order logig. <rdar://problem/9112233> is
        tracking the inclusion of the patch on Windows.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):

2011-03-11  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Let the parser yield for layout before running scripts
        https://bugs.webkit.org/show_bug.cgi?id=54355

        Prior to this patch, the parser would yield to perform a layout/paint before running a
        script only if the script or a stylesheet blocking the script is not loaded yet. Since we
        don't preload scan into the body while parsing the head, typically we'll block on a script
        early in the body that causes us to yield to do the first paint within a reasonable time.

        However, I'm planning to change the PreloadScanner to scan into the body from the head.
        That significantly improves overall load time, but would hurt first paint time because
        fewer scripts would be blocked during parsing and thus wouldn't yield.

        This change causes us to yield before running scripts if we haven't painted yet (regardless
        of whether or not the script is loaded). In addition to allowing the above mentioned
        PreloadScanner change to be implemented without regressing first paint time, this also
        improves first paint time by itself.

        I tested Alexa's top 45 websites using Web Page Replay to control the content and simulate
        bandwidth. This patch improved average first paint time by 1% over an unlimited connection,
        6% over a 1Mbps connection and 11% over a 5Mbps connection. There was no statistically
        signifcant change in page load time.

        Within the pages tested, 33 had no statistically significant change in time to first paint,
        12 improved, and none regressed. Of the improved, some of the standouts from the 1Mbps set
        are: 20% on youtube, 37% on wiki, 27% on ebay, 13% on cnn, 16% on espn, 74% on sohu.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::canTakeNextToken): This is the new yield point.
        (WebCore::HTMLDocumentParser::pumpTokenizer): Remove ASSERT that we are not paused. isPaused
        means that we are waiting for a script. Bug 54574 changed pumpTokenizer() so that it does
        the right thing whether we are just before a token or waiting for a script. Now that we may
        yield before a token or before a script, this may be called while paused.
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::checkForYieldBeforeScript): Added.
        * page/FrameView.h:
        (WebCore::FrameView::hasEverPainted): Added.

2011-03-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Fix crashes in dom/html/level2/html/HTMLInputElement*.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle): Added a null-check for e,
            because e can certainly be a null.

2011-03-09  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by David Hyatt.

        Choke text-decoration when entering shadow DOM subtree.
        https://bugs.webkit.org/show_bug.cgi?id=56044

        No new tests, because the functionality can't be tested yet.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle): Added a check for shadow DOM root.

2011-03-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        Convert MediaControlTimeDisplayElement to use standard layout with a custom renderer.
        https://bugs.webkit.org/show_bug.cgi?id=55972

        Instead of poking at the time display elements all the way from RenderMedia,
        let the standard layout cycle take care of things. Move the logic of calculating
        when to collapse the time display elements into a custom renderer, since
        this is not something that can be accomplished with CSS.

        Also, the logic of keeping the timeline slider at least 100px needed refreshing,
        since it didn't actually keep it at 100px.

        * html/shadow/MediaControls.cpp: Moved the logic of determining visibility
            of time display elements to RenderMediaControlTimeDisplay, eliminating
            updateTimeDisplayVisibility method.
        * html/shadow/MediaControls.h: Removed decl.
        * rendering/MediaControlElements.cpp:
        (WebCore::RenderMediaControlTimeDisplay::RenderMediaControlTimeDisplay):
            Added new renderer class.
        (WebCore::RenderMediaControlTimeDisplay::layout): Simplified (and corrected)
            size-sensing logic, still using hard-coded values.
        (WebCore::MediaControlTimeDisplayElement::MediaControlTimeDisplayElement):
            Removed m_isVisible member, which is no longer necessary.
        (WebCore::MediaControlTimeDisplayElement::createRenderer): Added to
            return the new renderer.
        * rendering/MediaControlElements.h: Adjusted decls.
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::layout): Remove the now-unnecessary poking at
            media controls in layout.

2011-03-09  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        Start focusing updates to media controls, away from always updating everything.
        https://bugs.webkit.org/show_bug.cgi?id=56038

        For now, the new methods just call generic MediaControls::update.

        Covered by existing tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::attributeChanged): Changed to use MediaControls::reset.
        (WebCore::HTMLMediaElement::setMuted): Changed to use MediaControls::changedMute.
        (WebCore::HTMLMediaElement::updateVolume): Changed to use MediaControls::changedVolume.
        (WebCore::HTMLMediaElement::defaultEventHandler): Changed to use the new mediaControls
            accessor.
        (WebCore::HTMLMediaElement::setClosedCaptionsVisible): Changed to use
            MediaControls::changedClosedCaptionsVisibility.
        (WebCore::HTMLMediaElement::mediaControls): Added.
        (WebCore::HTMLMediaElement::hasMediaControls): Added.
        * html/HTMLMediaElement.h: Added decls.
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::reset): Added.
        (WebCore::MediaControls::changedMute): Added.
        (WebCore::MediaControls::changedVolume): Added.
        (WebCore::MediaControls::changedClosedCaptionsVisibility): Added.
        * html/shadow/MediaControls.h: Added decls.

2011-03-11  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Martin Robinson.

        [GStreamer] When seeking webKitWebSrcStop release the frame but should not.
        https://bugs.webkit.org/show_bug.cgi?id=55703

        When calling webKitWebSrcStop in case of a seeking, the frame should not
        be reset (the source hasn't change). The frame may be used to get the network
        context. Some network stack (like Qt) are relaying on the network context
        to work.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStop):

2011-03-11  Dean Jackson  <dino@apple.com>

        Unreviewed.

        Build fixes for GTK and Leopard.

        * bindings/gobject/GNUmakefile.am:
        - add missing WebKitAnimation* generated bindings
        * page/WebKitAnimation.idl:
        - use double in place of float (the core values are double anyway)

2011-03-11  Dean Jackson  <dino@apple.com>

        Unreviewed build fix for QT.

        * WebCore.pro:

2011-03-11  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser and Chris Marrin.

        https://bugs.webkit.org/show_bug.cgi?id=54151
        Implement an API to play/pause/scrub animations

        This is Part 1. Adds the new WebKitAnimation and WebKitAnimationList
        APIs, exposed via Element.getWebKitAnimations(). This first pass
        is a read-only API - a subsequent commit will add the ability
        to scrub animations.

        Test: animations/animation-api-1.html

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.mk:
        * Android.v8bindings.mk:
        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        - All build settings updated for new files
        * bindings/js/JSBindingsAllInOne.cpp:
        - Include new custom files
        * bindings/js/JSWebKitAnimationCustom.cpp: Added.
        (WebCore::JSWebKitAnimation::iterationCount):
        - Custom property getter so that we can return INFINITY
        * bindings/js/JSWebKitAnimationListCustom.cpp: Added.
        (WebCore::JSWebKitAnimationList::markChildren):
        - Make sure WebKitAnimations are marked
        * bindings/v8/custom/V8WebKitAnimationCustom.cpp: Added.
        (WebCore::V8WebkitAnimation::iterationCountAccessorGetter):
        - Custom property getter so that we can return INFINITY
        * dom/Element.cpp:
        (WebCore::Element::webkitGetAnimations):
        * dom/Element.h:
        * dom/Element.idl:
        - New API entry point
        * page/DOMWindow.idl:
        - Constructor definitions for WebKitAnimation and WebKitAnimationList
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::~AnimationBase):
        - Since AnimationBase can now live longer (if a WebKitAnimation is
        held in Javascript) we need to guard for the renderer having disappeared.
        (WebCore::AnimationBase::setElapsedTime):
        (WebCore::AnimationBase::play):
        (WebCore::AnimationBase::pause):
        - Stub implementations at present
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::animation):
        - Expose the Animation properties
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::animationsForRenderer):
        (WebCore::AnimationController::animationsForRenderer):
        - Builds the list of WebKitAnimations
        * page/animation/AnimationController.h:
        * page/animation/AnimationControllerPrivate.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        - Make sure we clear the renderer if we are removing the animation
        (WebCore::CompositeAnimation::animations):
        * page/animation/CompositeAnimation.h:
        * page/WebKitAnimation.cpp: Added.
        (WebCore::WebKitAnimation::WebKitAnimation):
        (WebCore::WebKitAnimation::name):
        (WebCore::WebKitAnimation::duration):
        (WebCore::WebKitAnimation::elapsedTime):
        (WebCore::WebKitAnimation::setElapsedTime):
        (WebCore::WebKitAnimation::delay):
        (WebCore::WebKitAnimation::iterationCount):
        (WebCore::WebKitAnimation::paused):
        (WebCore::WebKitAnimation::ended):
        (WebCore::WebKitAnimation::direction):
        (WebCore::WebKitAnimation::fillMode):
        (WebCore::WebKitAnimation::pause):
        (WebCore::WebKitAnimation::play):
        - The implementation of the new API. All the read-only parts are
        done, but elapsedTime, play() and pause() are stubs.
        * page/WebKitAnimation.h: Added.
        (WebCore::WebKitAnimation::create):
        (WebCore::WebKitAnimation::~WebKitAnimation):
        * page/WebKitAnimation.idl: Added.
        * page/WebKitAnimationList.cpp: Added.
        * page/WebKitAnimationList.h: Added.
        * page/WebKitAnimationList.idl: Added.
        - Copies NodeList implementation

2011-03-11  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: introduce error argument for all the callbacks on frontend.
        https://bugs.webkit.org/show_bug.cgi?id=56100

        * inspector/CodeGeneratorInspector.pm:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.evaluateInTargetWindow):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.allStylesCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.getStyles):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.getStylesAsync):
        (WebInspector.CSSStyleModel.prototype.getComputedStyleAsync):
        (WebInspector.CSSStyleModel.prototype.getInlineStyleAsync):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector.callback):
        (WebInspector.CSSStyleModel.prototype.addRule):
        (WebInspector.CSSStyleModel.prototype.addRule.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleModel.prototype._onRevert):
        (WebInspector.CSSStyleDeclaration.prototype.insertPropertyAt):
        (WebInspector.CSSProperty.prototype.setText.callback):
        (WebInspector.CSSProperty.prototype.setText):
        (WebInspector.CSSProperty.prototype.setDisabled.callback):
        (WebInspector.CSSProperty.prototype.setDisabled):
        (WebInspector.CSSStyleSheet.createForId):
        (WebInspector.CSSStyleSheet.prototype.setText):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.evalInInspectedWindow):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.setNodeName):
        (WebInspector.DOMNode.prototype.setNodeValue):
        (WebInspector.DOMNode.prototype.setAttribute):
        (WebInspector.DOMNode.prototype.removeAttribute):
        (WebInspector.DOMNode.prototype.childNodes.mycallback):
        (WebInspector.DOMNode.prototype.childNodes):
        (WebInspector.DOMNode.prototype.outerHTML):
        (WebInspector.DOMNode.prototype.setOuterHTML):
        (WebInspector.DOMNode.prototype.removeNode):
        (WebInspector.DOMNode.prototype.copyNode):
        (WebInspector.DOMAgent.prototype.pushNodeToFrontend):
        (WebInspector.DOMAgent.prototype.pushNodeByPathToFrontend):
        (WebInspector.DOMAgent.prototype._documentUpdated):
        (WebInspector.ApplicationCacheDispatcher.getApplicationCachesAsync):
        (WebInspector.Cookies.getCookiesAsync):
        (WebInspector.EventListeners.getEventListenersForNodeAsync):
        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorage.prototype.getEntries):
        (WebInspector.DOMStorage.prototype.setItem):
        (WebInspector.DOMStorage.prototype.removeItem):
        * inspector/front-end/Database.js:
        (WebInspector.Database.prototype.getTableNames):
        (WebInspector.Database.prototype.executeSql):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.setBreakpoint.didSetBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpointBySourceId):
        (WebInspector.DebuggerModel.prototype.editScriptSource):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._setSearchingForNode):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode.resolvedNode):
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode):
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted.changeTagNameCallback):
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted):
        ():
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionWatchSidebarPane.prototype._onEvaluate):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype.requestContent):
        (WebInspector.NetworkManager.prototype._processCachedResources):
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileView.profileCallback):
        (WebInspector.CPUProfileView):
        * inspector/front-end/ProfilesPanel.js:
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.resolveNode):
        (WebInspector.RemoteObject.prototype.getProperties.remoteObjectBinder):
        (WebInspector.RemoteObject.prototype.getProperties):
        (WebInspector.RemoteObject.prototype.setPropertyValue):
        (WebInspector.RemoteObject.prototype.evaluate):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.requestSource.didGetScriptSource):
        (WebInspector.Script.prototype.requestSource):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame.updatingCallbackWrapper):
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):
        (WebInspector.ScriptsPanel.prototype._setPauseOnExceptions):
        * inspector/front-end/inspector.js:
        ():
        (WebInspector.doLoadedDone.onPopulateScriptObjects):
        (WebInspector.doLoadedDone.propertyNamesCallback):
        (WebInspector.doLoadedDone):

2011-03-11  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: split InjectedScriptHost into InjectedScriptManager and InjectedScriptHost
        https://bugs.webkit.org/show_bug.cgi?id=56173

        Moved all injected script managing logic into InjectedScriptManager which is owned by InspectorController.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        * bindings/js/JSInjectedScriptManager.cpp: Added.
        (WebCore::InjectedScriptManager::createInjectedScript):
        (WebCore::InjectedScriptManager::discardInjectedScript):
        (WebCore::InjectedScriptManager::injectedScriptFor):
        (WebCore::InjectedScriptManager::canAccessInspectedWindow):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * bindings/v8/custom/V8InjectedScriptManager.cpp: Copied from Source/WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp.
        (WebCore::WeakReferenceCallback):
        (WebCore::createInjectedScriptHostV8Wrapper):
        (WebCore::InjectedScriptManager::createInjectedScript):
        (WebCore::InjectedScriptManager::discardInjectedScript):
        (WebCore::InjectedScriptManager::injectedScriptFor):
        (WebCore::InjectedScriptManager::canAccessInspectedWindow):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::canAccessInspectedWindow):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::create):
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        (WebCore::InjectedScriptHost::~InjectedScriptHost):
        (WebCore::InjectedScriptHost::disconnect):
        (WebCore::InjectedScriptHost::inspectImpl):
        (WebCore::InjectedScriptHost::clearConsoleMessages):
        (WebCore::InjectedScriptHost::databaseIdImpl):
        (WebCore::InjectedScriptHost::storageIdImpl):
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::init):
        (WebCore::InjectedScriptHost::setFrontend):
        (WebCore::InjectedScriptHost::clearFrontend):
        * inspector/InjectedScriptManager.cpp: Added.
        (WebCore::InjectedScriptManager::create):
        (WebCore::InjectedScriptManager::InjectedScriptManager):
        (WebCore::InjectedScriptManager::~InjectedScriptManager):
        (WebCore::InjectedScriptManager::disconnect):
        (WebCore::InjectedScriptManager::injectedScriptHost):
        (WebCore::InjectedScriptManager::injectedScriptForId):
        (WebCore::InjectedScriptManager::injectedScriptForObjectId):
        (WebCore::InjectedScriptManager::discardInjectedScripts):
        (WebCore::InjectedScriptManager::releaseObjectGroup):
        (WebCore::InjectedScriptManager::injectedScriptSource):
        (WebCore::InjectedScriptManager::injectScript):
        * inspector/InjectedScriptManager.h: Copied from Source/WebCore/inspector/InjectedScriptHost.h.
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::inspectedPageDestroyed):
        (WebCore::InspectorAgent::focusNode):
        (WebCore::InspectorAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorAgent::createFrontendLifetimeAgents):
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::domContentLoadedEventFired):
        * inspector/InspectorAgent.h:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::clearConsoleMessages):
        (WebCore::InspectorConsoleAgent::addInspectedNode):
        (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::pushNodeToFrontend):
        (WebCore::InspectorDOMAgent::resolveNode):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::create):
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::create):
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::~InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::evaluateOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        (WebCore::InspectorRuntimeAgent::setPropertyValue):
        (WebCore::InspectorRuntimeAgent::releaseObject):
        (WebCore::InspectorRuntimeAgent::releaseObjectGroup):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel):

2011-03-11  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] Change the way group id for CSS objects is calculated
        https://bugs.webkit.org/show_bug.cgi?id=56117

        Do not treat CSSStyleDeclarations under not CSSRule as belonging to the same object group
        as they should not be reachable in JavaScript.

        Covered by existing layout tests.  Fact of absence of retention is not trivial to prove.

        * bindings/v8/V8GCController.cpp:
        (WebCore::calculateGroupId):
        (WebCore::DOMObjectGrouperVisitor::visitDOMWrapper):

2011-03-11  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: hover over elements in Elements panel does not highlight nodes
        https://bugs.webkit.org/show_bug.cgi?id=56121

        In DOM trees with a comment and/or doctype preceding the HTML tag, the tree container right boundary
        is 16px apart from the OL right boundary, and we miss the relevant LI by 4px. The fix is to compensate
        for these 16px when computing the test point coordinates.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._treeElementFromEvent):

2011-03-11  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Roll out r80837.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        (WebCore::InjectedScriptHost::discardInjectedScript):
        (WebCore::InjectedScriptHost::injectedScriptFor):
        (WebCore::InjectedScriptHost::canAccessInspectedWindow):
        * bindings/js/JSInjectedScriptManager.cpp: Removed.
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::WeakReferenceCallback):
        (WebCore::createInjectedScriptHostV8Wrapper):
        (WebCore::InjectedScriptHost::createInjectedScript):
        (WebCore::InjectedScriptHost::discardInjectedScript):
        (WebCore::InjectedScriptHost::injectedScriptFor):
        (WebCore::InjectedScriptHost::canAccessInspectedWindow):
        * bindings/v8/custom/V8InjectedScriptManager.cpp: Removed.
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::canAccessInspectedWindow):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        (WebCore::InjectedScriptHost::~InjectedScriptHost):
        (WebCore::InjectedScriptHost::inspectImpl):
        (WebCore::InjectedScriptHost::clearConsoleMessages):
        (WebCore::InjectedScriptHost::databaseIdImpl):
        (WebCore::InjectedScriptHost::storageIdImpl):
        (WebCore::InjectedScriptHost::injectedScriptForId):
        (WebCore::InjectedScriptHost::injectedScriptForObjectId):
        (WebCore::InjectedScriptHost::injectedScriptForMainFrame):
        (WebCore::InjectedScriptHost::discardInjectedScripts):
        (WebCore::InjectedScriptHost::releaseObjectGroup):
        (WebCore::InjectedScriptHost::frontend):
        (WebCore::InjectedScriptHost::injectedScriptSource):
        (WebCore::InjectedScriptHost::injectScript):
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::create):
        (WebCore::InjectedScriptHost::inspectorAgent):
        (WebCore::InjectedScriptHost::disconnectController):
        * inspector/InjectedScriptManager.cpp: Removed.
        * inspector/InjectedScriptManager.h: Removed.
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::inspectedPageDestroyed):
        (WebCore::InspectorAgent::focusNode):
        (WebCore::InspectorAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorAgent::createFrontendLifetimeAgents):
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::domContentLoadedEventFired):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::injectedScriptHost):
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::clearConsoleMessages):
        (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::addInspectedNode):
        (WebCore::InspectorDOMAgent::pushNodeToFrontend):
        (WebCore::InspectorDOMAgent::resolveNode):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::create):
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::~InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::evaluateOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        (WebCore::InspectorRuntimeAgent::setPropertyValue):
        (WebCore::InspectorRuntimeAgent::releaseObject):
        (WebCore::InspectorRuntimeAgent::releaseObjectGroup):
        * inspector/InspectorRuntimeAgent.h:
        (WebCore::InspectorRuntimeAgent::create):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel):

2011-03-11  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: split InjectedScriptHost into InjectedScriptManager and InjectedScriptHost
        https://bugs.webkit.org/show_bug.cgi?id=56173

        Moved all injected script managing logic into InjectedScriptManager which is owned by InspectorController.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        * bindings/js/JSInjectedScriptManager.cpp: Added.
        (WebCore::InjectedScriptManager::createInjectedScript):
        (WebCore::InjectedScriptManager::discardInjectedScript):
        (WebCore::InjectedScriptManager::injectedScriptFor):
        (WebCore::InjectedScriptManager::canAccessInspectedWindow):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * bindings/v8/custom/V8InjectedScriptManager.cpp: Copied from Source/WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp.
        (WebCore::WeakReferenceCallback):
        (WebCore::createInjectedScriptHostV8Wrapper):
        (WebCore::InjectedScriptManager::createInjectedScript):
        (WebCore::InjectedScriptManager::discardInjectedScript):
        (WebCore::InjectedScriptManager::injectedScriptFor):
        (WebCore::InjectedScriptManager::canAccessInspectedWindow):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::canAccessInspectedWindow):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::create):
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        (WebCore::InjectedScriptHost::~InjectedScriptHost):
        (WebCore::InjectedScriptHost::disconnect):
        (WebCore::InjectedScriptHost::inspectImpl):
        (WebCore::InjectedScriptHost::clearConsoleMessages):
        (WebCore::InjectedScriptHost::databaseIdImpl):
        (WebCore::InjectedScriptHost::storageIdImpl):
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::init):
        (WebCore::InjectedScriptHost::setFrontend):
        (WebCore::InjectedScriptHost::clearFrontend):
        * inspector/InjectedScriptManager.cpp: Added.
        (WebCore::InjectedScriptManager::create):
        (WebCore::InjectedScriptManager::InjectedScriptManager):
        (WebCore::InjectedScriptManager::~InjectedScriptManager):
        (WebCore::InjectedScriptManager::disconnect):
        (WebCore::InjectedScriptManager::injectedScriptHost):
        (WebCore::InjectedScriptManager::injectedScriptForId):
        (WebCore::InjectedScriptManager::injectedScriptForObjectId):
        (WebCore::InjectedScriptManager::discardInjectedScripts):
        (WebCore::InjectedScriptManager::releaseObjectGroup):
        (WebCore::InjectedScriptManager::injectedScriptSource):
        (WebCore::InjectedScriptManager::injectScript):
        * inspector/InjectedScriptManager.h: Copied from Source/WebCore/inspector/InjectedScriptHost.h.
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::inspectedPageDestroyed):
        (WebCore::InspectorAgent::focusNode):
        (WebCore::InspectorAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorAgent::createFrontendLifetimeAgents):
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::domContentLoadedEventFired):
        * inspector/InspectorAgent.h:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::clearConsoleMessages):
        (WebCore::InspectorConsoleAgent::addInspectedNode):
        (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::pushNodeToFrontend):
        (WebCore::InspectorDOMAgent::resolveNode):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::create):
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::create):
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::~InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::evaluateOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        (WebCore::InspectorRuntimeAgent::setPropertyValue):
        (WebCore::InspectorRuntimeAgent::releaseObject):
        (WebCore::InspectorRuntimeAgent::releaseObjectGroup):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel):

2011-03-09  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Make IDBBackingStore abstract
        https://bugs.webkit.org/show_bug.cgi?id=56013

        Make IDBBackingStore abstract to allow for multiple implementations.
        Move the SQLite implementation to IDBSQLiteBackingStore.

        No new tests: refactoring only.

        * WebCore.gypi:
        * storage/IDBBackingStore.h:
        (WebCore::IDBBackingStore::~IDBBackingStore):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBSQLiteBackingStore.cpp:
        (WebCore::IDBSQLiteBackingStore::IDBSQLiteBackingStore):
        (WebCore::IDBSQLiteBackingStore::~IDBSQLiteBackingStore):
        (WebCore::runCommands):
        (WebCore::createTables):
        (WebCore::createMetaDataTable):
        (WebCore::getDatabaseSchemaVersion):
        (WebCore::migrateDatabase):
        (WebCore::IDBSQLiteBackingStore::open):
        (WebCore::IDBSQLiteBackingStore::extractIDBDatabaseMetaData):
        (WebCore::IDBSQLiteBackingStore::setIDBDatabaseMetaData):
        (WebCore::IDBSQLiteBackingStore::getObjectStores):
        (WebCore::IDBSQLiteBackingStore::createObjectStore):
        (WebCore::doDelete):
        (WebCore::IDBSQLiteBackingStore::deleteObjectStore):
        (WebCore::whereSyntaxForKey):
        (WebCore::bindKeyToQuery):
        (WebCore::lowerCursorWhereFragment):
        (WebCore::upperCursorWhereFragment):
        (WebCore::IDBSQLiteBackingStore::getObjectStoreRecord):
        (WebCore::bindKeyToQueryWithNulls):
        (WebCore::IDBSQLiteBackingStore::putObjectStoreRecord):
        (WebCore::IDBSQLiteBackingStore::clearObjectStore):
        (WebCore::IDBSQLiteBackingStore::deleteObjectStoreRecord):
        (WebCore::IDBSQLiteBackingStore::nextAutoIncrementNumber):
        (WebCore::IDBSQLiteBackingStore::keyExistsInObjectStore):
        (WebCore::IDBSQLiteBackingStore::forEachObjectStoreRecord):
        (WebCore::IDBSQLiteBackingStore::getIndexes):
        (WebCore::IDBSQLiteBackingStore::createIndex):
        (WebCore::IDBSQLiteBackingStore::deleteIndex):
        (WebCore::IDBSQLiteBackingStore::putIndexDataForRecord):
        (WebCore::IDBSQLiteBackingStore::deleteIndexDataForRecord):
        (WebCore::IDBSQLiteBackingStore::getObjectViaIndex):
        (WebCore::keyFromQuery):
        (WebCore::IDBSQLiteBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBSQLiteBackingStore::keyExistsInIndex):
        (WebCore::IDBSQLiteBackingStore::openObjectStoreCursor):
        (WebCore::IDBSQLiteBackingStore::openIndexKeyCursor):
        (WebCore::IDBSQLiteBackingStore::openIndexCursor):
        (WebCore::IDBSQLiteBackingStore::createTransaction):
        * storage/IDBSQLiteBackingStore.h: Added.

2011-03-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed build error fix.

        [EFL] Fix build break when SHARED_CORE is ON
        https://bugs.webkit.org/show_bug.cgi?id=56155

        * platform/efl/ContextMenuEfl.cpp:
        (WebCore::ContextMenu::ContextMenu):
        * platform/efl/ContextMenuItemEfl.cpp:
        (WebCore::ContextMenuItem::nativeMenuItem):
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::~ContextMenuItem):

2011-03-11  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: resource load cancellation is reported to console as an error
        https://bugs.webkit.org/show_bug.cgi?id=55764

        - mark interruptionForPolicyChangeError as cancellation
        - do not log resource cancelation as an error
        - always push resource to front-end before console message, so front-end can use resource info while formatting message.

        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::didFailLoading):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didFailLoadingImpl):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::stopLoadingForPolicyChange):

2011-03-10  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Get rid of has/add/removeStyleClass() methods on Element.prototype - Step 1
        https://bugs.webkit.org/show_bug.cgi?id=56096

        No new tests, as this is a refactoring.

        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.EventListenerBreakpointsSidebarPane):
        * inspector/front-end/DetailedHeapshotView.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.BaseStorageTreeElement):
        (WebInspector.BaseStorageTreeElement.prototype.onattach):
        (WebInspector.StorageCategoryTreeElement):
        (WebInspector.FrameTreeElement):
        (WebInspector.FrameResourceTreeElement):
        (WebInspector.DatabaseTreeElement):
        (WebInspector.DatabaseTableTreeElement):
        (WebInspector.DOMStorageTreeElement):
        (WebInspector.CookieTreeElement):
        (WebInspector.ApplicationCacheTreeElement):
        (WebInspector.ResourceRevisionTreeElement):
        * inspector/front-end/utilities.js:
        (Element.prototype.removeStyleClass):
        (Element.prototype.addStyleClass):
        (Element.prototype.hasStyleClass):

2011-03-11  Brian Salomon  <bsalomon@google.com>

        Reviewed by Kenneth Russell.

        Adds GrContext flush call to PlatformContextSkia destructor. 
Calls GrContext flush with int parameter instead of bool due to skia 
revision.       

        No new tests needed.

        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::publishToPlatformLayer):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::~PlatformContextSkia):
        (WebCore::PlatformContextSkia::setSharedGraphicsContext3D):

2011-03-10  Chris Guillory  <chris.guillory@google.com>

        Reviewed by James Robinson.

        Fix for Coverity discovered NO_EFFECT (self-assign) defect.
        https://bugs.webkit.org/show_bug.cgi?id=54143

        * platform/graphics/gpu/TilingData.cpp:
        (WebCore::TilingData::setMaxTextureSize):

2011-03-10  Emil A Eklund  <eae@chromium.org>

        Reviewed by Alexey Proskuryakov.

        The web colours palevioletred and mediumpurple are incorrect
        https://bugs.webkit.org/show_bug.cgi?id=46658

        Changed value for the palevioletred and mediumpurple colors to match
        the css3 specification.

        Test: fast/css/named-colors.html

        * inspector/front-end/Color.js:
        * platform/ColorData.gperf:

2011-03-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed build fix.

        [WML] Fix build error
        https://bugs.webkit.org/show_bug.cgi?id=56078

        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::defaultEventHandler):

2011-03-10  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Darin Adler.

        Fix navigation menus on a bunch of sites in WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=52535

        WebKit doesn't support position:relative for several table elements and
        overwrites the style internally when position:relative is encountered.
        Unfortunately position:relative affects the choice of nodes returned by
        offsetParent.

        This CL adds a bit to RenderStyle to track whether position:relative was
        overwritten.  The value is then consulted in offsetParent which makes us
        match FF/IE.

        Tests: fast/block/positioning/offsetLeft-relative-iframe.html
               fast/block/positioning/offsetLeft-relative-td.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isOriginallyRelPositioned):
        (WebCore::RenderObject::offsetParent):
        * rendering/RenderObject.h:
        * rendering/style/RenderStyle.h: Add a bit to track the original value of position:relative.
        (WebCore::InheritedFlags::positionWasRelative):
        (WebCore::InheritedFlags::setPositionWasRelative):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2011-03-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION (r66428/r71892): Crash after assertion failure (!m_reachedTerminalState) in ResourceLoader::didCancel()
        https://bugs.webkit.org/show_bug.cgi?id=51357

        Previously, we would try to print from a callstack that didn't want a
        nested event loop, leading to re-entrancy problems.  In this patch, we
        complete the print call asynchronously, giving us a clean stack on
        which to run the nested event loop.

        Test: printing/print-close-crash.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        (WebCore::DOMWindow::print):
        (WebCore::DOMWindow::printTimerFired):
        * page/DOMWindow.h:

2011-03-11  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Ryosuke Niwa.

        Bug 55570 - Remove dependency of dom/InputElement.cpp on html/ and wml/
        https://bugs.webkit.org/show_bug.cgi?id=55570

        Add a virtual function toInputElement() to Node that has a default
        implementation of returning 0.
        For HTMLInputElement and WMLInputElement (which derive from InputElement)
        override this to return the object.
        Change all calling sites of the old toInputElement to use the new member
        function. This also allows us to save some casts.

        No new tests. (refactoring)

        * WebCore.exp.in:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::textMarkerDataForVisiblePosition):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isPasswordField):
        (WebCore::AccessibilityRenderObject::isIndeterminate):
        (WebCore::AccessibilityRenderObject::isNativeCheckboxOrRadio):
        (WebCore::AccessibilityRenderObject::isChecked):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * dom/CheckedRadioButtons.cpp:
        (WebCore::CheckedRadioButtons::removeButton):
        * dom/InputElement.cpp:
        * dom/InputElement.h:
        * dom/Node.cpp:
        (WebCore::Node::toInputElement):
        * dom/Node.h:
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::toInputElement):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::inputElement):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isChecked):
        (WebCore::RenderTheme::isIndeterminate):
        * wml/WMLInputElement.h:
        (WebCore::WMLInputElement::toInputElement):

2011-03-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] New mediaControl css file for EFL
        https://bugs.webkit.org/show_bug.cgi?id=55460

        Add new mediaControl css file for html5 video UI.

        * CMakeLists.txt:
        * CMakeListsEfl.txt:
        * css/mediaControlsEfl.css: Added.
        (audio):
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):
        (video:-webkit-full-page-media::-webkit-media-controls-panel):
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-timeline-container, video::-webkit-media-controls-timeline-container):
        (audio::-webkit-media-controls-current-time-display, video::-webkit-media-controls-current-time-display):
        (audio::-webkit-media-controls-time-remaining-display, video::-webkit-media-controls-time-remaining-display):
        (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
        (audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider):
        (audio::-webkit-media-controls-seek-back-button, video::-webkit-media-controls-seek-back-button):
        (audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls-seek-forward-button):
        (audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-rewind-button, video::-webkit-media-controls-rewind-button):
        (audio::-webkit-media-controls-return-to-realtime-button, video::-webkit-media-controls-return-to-realtime-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::extraMediaControlsStyleSheet):

2011-03-10  Emil A Eklund  <eae@chromium.org>

        Reviewed by Dimitri Glazkov.

        style.display affecting the initial selectedIndex value of a <select> when its multiple attribute is set programatically
        https://bugs.webkit.org/show_bug.cgi?id=53860

        Preserve selection when changing between multi-select and single-select
        for <select> boxes even if it has not yet been rendered.

        Test: fast/dom/HTMLSelectElement/change-multiple-preserve-selection.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setMultiple):

2011-03-10  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        update comment to reference new DOM Core spec
        https://bugs.webkit.org/show_bug.cgi?id=56079

        I'm excising all instances of WRONG_DOCUMENT_ERR from WebKit.
        This is the only one that's actually specified to fire
        in the latest DOM Core spec.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):

2011-03-10  Rik Cabanier  <cabanier@gmail.com>

        Reviewed by Tony Gentilcore.

        Fix that allows fixed length values to be floating point
        https://bugs.webkit.org/show_bug.cgi?id=52699

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::convertToLength):
        (WebCore::convertToIntLength):
        (WebCore::convertToFloatLength):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::createTransformOperations):
        * platform/Length.h:
        (WebCore::Length::Length):
        (WebCore::Length::operator==):
        (WebCore::Length::operator!=):
        (WebCore::Length::rawValue):
        (WebCore::Length::type):
        (WebCore::Length::quirk):
        (WebCore::Length::setValue):
        (WebCore::Length::calcFloatValue):
        (WebCore::Length::isZero):
        (WebCore::Length::blend):
        (WebCore::Length::getIntValue):
        (WebCore::Length::getFloatValue):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):

2011-03-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80800.
        http://trac.webkit.org/changeset/80800
        https://bugs.webkit.org/show_bug.cgi?id=56163

        Caused hundreds of tests to crash on Windows 7 (Requested by
        rniwa on #webkit).

        * page/EventHandler.cpp:
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        * page/FocusController.cpp:
        (WebCore::FocusController::setActive):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::~FrameView):
        * page/FrameView.h:
        * page/Page.cpp:
        * page/Page.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::RenderDataGrid):
        (WebCore::RenderDataGrid::~RenderDataGrid):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::RenderListBox):
        (WebCore::RenderListBox::~RenderListBox):

2011-03-10  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Dimitri Glazkov.

        NULL pointer crash when using :empty and :first-line pseudoclass selectors together
        https://bugs.webkit.org/show_bug.cgi?id=53316

        :empty is calculated for each element during parsing, but then not 
        recalculated after any child elements are attached. Force style 
        re-calculation on elements which have :empty in their style when
        their children are changed.

        Test: fast/css/empty-first-line-crash.html

        * dom/Element.cpp:
        (WebCore::checkForEmptyStyleChange): Pull out empty style checking
        logic from checkForSiblingStyleChanges().
        (WebCore::checkForSiblingStyleChanges): Use new checkForEmptyStyleChanges()
        method.
        (WebCore::Element::childrenChanged):  Call checkForEmptyStyleChanges() when
        called with changedByParser = true.

2011-03-10  Emil A Eklund  <eae@chromium.org>

        Unreviewed build fix.

        Fix Leopard Release build broken by r80797.

        * html/CollectionCache.h:

2011-03-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/8944558> Overlay scrollers in overflow areas need to 
        send notifications appropriate times (showing up, resizing)
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=56067

        The general strategy here is to add a HashSet of ScrollableAreas to the page that 
        can be accessed when necessary to send notifications to all ScrollableAreas.

        Find layers for relevant node and if the layers are in the Page's ScrollableArea 
        set, then send the relevant notification.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::updateMouseEventTargetNode):

        When the page is set active or not active, iterate through the Page's 
        ScrollableAreas to send hide/show notifications. 
        * page/FocusController.cpp:
        (WebCore::FocusController::setActive):

        When a FrameView is created, add it to the ScrollableArea set. When it's 
        destroyed, remove it.
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::~FrameView):

        Iterate through the Page's ScrollableAreas to send the paint notification.
        (WebCore::FrameView::notifyPageThatContentAreaWillPaint):
        * page/FrameView.h:

        Add the new ScrollableArea set.
        * page/Page.cpp:
        (WebCore::Page::addScrollableArea):
        (WebCore::Page::removeScrollableArea):
        (WebCore::Page::pageContainsScrollableArea):
        * page/Page.h:
        (WebCore::Page::scrollableAreaSet):

        notifyPageThatContentAreaWillPaint() is a dummy function implemented in FrameView.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::notifyPageThatContentAreaWillPaint):

        Call notifyPageThatContentAreaWillPaint() instead of calling 
        contentAreaWillPaint() just for the ScrollView.
        (WebCore::ScrollView::paint):
        * platform/ScrollView.h:

        Add/remove ScrollableAreas to the set.
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::RenderDataGrid):
        (WebCore::RenderDataGrid::~RenderDataGrid):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::RenderListBox):
        (WebCore::RenderListBox::~RenderListBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):

        Should have implemented this ScrollableArea-interface function a while ago.
        (WebCore::RenderLayer::currentMousePosition):
        * rendering/RenderLayer.h:

2011-03-10  takano takumi  <takano@apple.com>

        Reviewed by David Hyatt.

        Crash in RenderCombineText::combineText when running fast/text/international/text-combine-parser-test.html on Windows with full page heap enabled
        https://bugs.webkit.org/show_bug.cgi?id=55069

        No new tests. If the test above runs without crash, the fix should be okay.

        * dom/Node.cpp:
        (WebCore::Node::diff):
        - Changed to return Detach when textCombine style was changed.
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::styleDidChange):
        (WebCore::RenderCombineText::setTextInternal):
        (WebCore::RenderCombineText::width):
        (WebCore::RenderCombineText::adjustTextOrigin):
        (WebCore::RenderCombineText::charactersToRender):
        (WebCore::RenderCombineText::combineText):
        - Added assertions to ensure the passed object is RenderCombineText.
        * rendering/RenderCombineText.h:
        (WebCore::RenderCombineText::isCombineText):
        - Added to distinguish plain RenderText and RenderCombineText.
        (WebCore::toRenderCombineText):
        - Added assertions to ensure the passed object is RenderCombineText.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isCombineText):
        - Added to distinguish plain RenderText and RenderCombineText.

2011-03-10  Emil A Eklund  <eae@chromium.org>

        Reviewed by Darin Adler.

        Collection cache not reset when moving base node between documents
        https://bugs.webkit.org/show_bug.cgi?id=55446

        Fix bug where HTMLCollection::resetCollectionInfo does not reset the
        cache when the base node is moved to a different document by making sure
        that the DOMVersion is updated and that it's unique across documents.

        Tests: fast/dom/HTMLFormElement/invalid-form-field.html
               fast/dom/HTMLFormElement/move-option-between-documents.html
               fast/dom/collection-nameditem-move-between-documents.html

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::incDOMTreeVersion):
        (WebCore::Document::domTreeVersion):
        * dom/Node.cpp:
        (WebCore::Node::setDocumentRecursively):
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::resetFormOwner):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::resetCollectionInfo):
        * xml/XPathResult.h:

2011-03-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed build fix.

        [EFL] Fix build break when CROSS_PLATFORM_CONTEXT_MENUS is disabled.
        https://bugs.webkit.org/show_bug.cgi?id=56005

        There are build breaks when CROSS_PLATFORM_CONTEXT_MENUS is disabled.

        * platform/efl/ContextMenuEfl.cpp:
        (WebCore::ContextMenu::ContextMenu):
        * platform/efl/ContextMenuItemEfl.cpp:

2011-03-10  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        startOfBlock and endOfBlock may return a position inside hr
        https://bugs.webkit.org/show_bug.cgi?id=56025

        Replaced calls to enclosingBlockFlowElement in startOfBlock and endOfBlock by
        calls to enclosingBlock. Added EditingBoundaryCrossingRule to the argument lists
        of startOfBlock, endOfBlock, and enclosingBlock. Also replaced the last boolean
        argument variable of enclosingNodeOfType by EditingBoundaryCrossingRule.

        Also replaced calls to enclosingBlockFlowElement in inSameBlock by calls to
        enclosingBlock to be consitent with startOfBlock and endOfBlock.

        This patch also replaced calls to deprecatedNode in startOfBlock, endOfBlock,
        and inSameBlock by calls to containerNode because the enclosing block of a position
        should never be before or after the position.

        No tests are added because this change only affects WebCore internally.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializePositionData): Calls enclosingNodeOfType.
        Pass CanCrossEditingBoundary instead of false.
        * editing/htmlediting.cpp:
        (WebCore::unsplittableElementForPosition): Ditto.
        (WebCore::enclosingBlock): Takes EditingBoundaryCrossingRule and passes it to
        enclosingNodeOfType.
        (WebCore::enclosingNodeOfType): Takes EditingBoundaryCrossingRule instead of boolean.
        Fixed a bug that it stops walking the tree when it reached the root editable node
        even when the editing boundary crossing rule is CanCrossEditingBoundary.
        * editing/htmlediting.h: Prototype changes.
        * editing/visible_units.cpp:
        (WebCore::startOfBlock): Calls enclosingBlock instead of enclosingBlockFlowElement.
        Also added an early exit when there's no enclosing block.
        (WebCore::endOfBlock): Ditto. The early exist in this case prevents crash in
        lastPositionInNode.
        (WebCore::inSameBlock): Calls enclosingBlock instead of enclosingBlockFlowElement.
        (WebCore::isStartOfBlock): Calls startOfBlock with CanCrossEditingBoundary because
        we don't care where the start of block is when we're comparing against the given position.
        (WebCore::isEndOfBlock): Ditto.
        * editing/visible_units.h:

2011-03-10  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        Backspace deletes all non-BMP symbols at once, and then some
        https://bugs.webkit.org/show_bug.cgi?id=55971
        <rdar://problem/8725312>

        Test: platform/mac/editing/input/insert-delete-smp-symbol.html

        * rendering/RenderText.cpp:
        (WebCore::isMark): This matches what Core Foundation does for all characters that I tested.
        (WebCore::RenderText::previousOffsetForBackwardDeletion): Changed to use isMark().

2011-03-10  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Error in StyleElement::process with large nodesets
        https://bugs.webkit.org/show_bug.cgi?id=56150

        Test: none due to excessive runtime and CRASH() vs. real crash.

        * dom/StyleElement.cpp:
        (WebCore::StyleElement::process): Handle large node sets better.

2011-03-10  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=47151
        
        Percentage heights should skip anonymous containing blocks when computing the used value.

        Added fast/block/basic/percentage-height-inside-anonymous-block.html

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

2011-03-10  Nat Duca  <nduca@chromium.org>

        Reviewed by James Robinson.

        [chromium] Make updateAndDrawLayers argumentless.
        https://bugs.webkit.org/show_bug.cgi?id=55985

        Made the TilePainters and viewport parameters for
        LayerRendererChromium member variables instead of arguments on
        updateAndDrawLayers. In a future change, this will allows us to
        draw the layer tree without the WebView's assistance.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::verticalScrollbarRect):
        (WebCore::LayerRendererChromium::horizontalScrollbarRect):
        (WebCore::LayerRendererChromium::invalidateRootLayerRect):
        (WebCore::LayerRendererChromium::updateRootLayerContents):
        (WebCore::LayerRendererChromium::updateRootLayerScrollbars):
        (WebCore::LayerRendererChromium::drawRootLayer):
        (WebCore::LayerRendererChromium::setViewport):
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        (WebCore::LayerRendererChromium::updateLayers):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::setRootLayer):
        (WebCore::LayerRendererChromium::getFramebufferPixels):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::viewportSize):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::draw):

2011-01-25  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Implement spin buttons for GTK+ 2.x
        https://bugs.webkit.org/show_bug.cgi?id=53098

        Implement spin buttons for GTK+ 2.x. This allows proper render and functioning
        for input type=number. The implementation is based on the one in gtkspinbutton.c
        from the GTK+ sources.

        * platform/gtk/RenderThemeGtk.h: Added new members and getters.
        * platform/gtk/RenderThemeGtk2.cpp:
        (WebCore::RenderThemeGtk::platformInit): Initialize spin button widget.
        (WebCore::RenderThemeGtk::adjustRepaintRect): We need to draw outside the
        spin button area to have proper rendering. There doesn't seem to be any other
        clean way of having spin buttons that are the size of the text input frame.
        (WebCore::RenderThemeGtk::adjustInnerSpinButtonStyle): Added implementation.
        (WebCore::RenderThemeGtk::paintInnerSpinButton): Ditto.
        (WebCore::RenderThemeGtk::gtkSpinButton): Added.

2011-03-10  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        InsertUnorderedList over a non-editable region and multiple lines enters an infinite loop
        https://bugs.webkit.org/show_bug.cgi?id=53409

        Fixing broken handling of mixed-editability content for InsertListCommand. Previously, if the selection
        spanned non-contenteditable regions, it would get stuck endlessly iterating the same region as the algorithm
        didn't skip the editable boundary.

        Test: editing/execCommand/insert-list-with-noneditable-content.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::cleanupAfterDeletion): Changed signature to take the destination
        position for the active editing command. Without this, there are cases when the destination happens
        to be a placeholder, and we remove it.
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/CompositeEditCommand.h:
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Added logic to the paragraph iteration loop to handle pockets of
        non-editable content in an editable context. Previously, this could cause an infinite loop.
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph): Added a mode of operation where we'll jump across non-editable
        content in the same paragraph to reach the actual editable paragraph start.
        (WebCore::endOfParagraph): Ditto.
        (WebCore::startOfNextParagraph): Now uses the aforementioned non-editable content skipping mode of
        endOfParagraph.

2011-03-10  Berend-Jan Wever  <skylined@chromium.org>

        Reviewed by Darin Adler.

        Calling focus() on an area element not in a document should not cause a NULL ptr crash
        https://bugs.webkit.org/show_bug.cgi?id=54877

        Test: fast/dom/HTMLAreaElement/area-islink-focus-null-ptr-crash.html

        * dom/Element.cpp:
        (WebCore::Element::focus): Check element is in the document before allowing focus
        * html/HTMLAreaElement.cpp: 
        (WebCore::HTMLAreaElement::imageElement): Check element has a parent before checking if its parent is a map

2011-03-10  Xiyuan Xia  <xiyuan@chromium.org>

        Reviewed by Tony Chang.

        [Chromium] Fix default single selection select's popup background on chromium/linux
        https://bugs.webkit.org/show_bug.cgi?id=56023

        Test: fast/html/select-dropdown-consistent-background-color.html

        * css/themeChromiumLinux.css:

2011-03-10  Kris Jordan  <krisjordan@gmail.com>

        Reviewed by Alexey Proskuryakov.

        Improve default Accept header to give preference to HTML over XML.
        https://bugs.webkit.org/show_bug.cgi?id=27267

        * loader/FrameLoader.cpp:Changed default accept header to match
        FireFox' as per bug 27267.

2011-03-10  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] [Webkit2] There are no scrollbars visible in the MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=56125

        No new tests. This functionality will be tested once we have TestRunner
        implementation for WebKit2 with pixel dumping support.

        * GNUmakefile.am: Add a new define with tracks whether or not we are using
        our specialized GTK+ ScrollView.
        * platform/ScrollView.cpp: Only use the GTK+-specific ScrollView if we are compiling
        WebKit1.
        (WebCore::ScrollView::wheelEvent):
        * platform/gtk/ScrollViewGtk.cpp: Ditto.

2011-03-10  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Assertion fails by validating a form twice very quickly
        https://bugs.webkit.org/show_bug.cgi?id=56069

        If the interactive validation is invoked when a form control is in
        needsLayout() state, an assertion in isFocusable() fails. To avoid it,
        Add a call to updateLayoutIgnorePendingStylesheets() before isFocusable().

        Test: fast/forms/interactive-validation-assertion-by-validate-twice.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
          Calls updateLayoutIgnorePendingStylesheets().

2011-03-10  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=47143
        
        Static distance computation is wrong when an ancestor is also positioned.  We need to go up the container()
        chain (after initially starting with the parent()) when doing this computation, so that we properly skip
        intermediate boxes between two positioned blocks.

        Added fast/block/positioning/static-distance-with-positioned-ancestor.html.

        * rendering/RenderBox.cpp:
        (WebCore::computeInlineStaticDistance):
        (WebCore::computeBlockStaticDistance):

2011-03-10  Adrienne Walker  <enne@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Make tiled compositor data structure more efficient.
        https://bugs.webkit.org/show_bug.cgi?id=54133

        Previously, the compositor had a sparse 2D array of tiles for the
        whole page, most of which were null.  The tiles were implicitly
        located based on their position in the array. This was inefficient
        when the page grew (e.g. infinite scrolling) and caused some bugs
        (e.g. width * height > MAX_INT).  This change modifies tiles to have
        explicit positions so they can be stored in a hash map.

        Tests: LayoutTests/compositing/

        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::reset):
        (WebCore::LayerTilerChromium::createTile):
        (WebCore::LayerTilerChromium::invalidateTiles):
        (WebCore::LayerTilerChromium::contentRectToTileIndices):
        (WebCore::LayerTilerChromium::tileAt):
        (WebCore::LayerTilerChromium::tileContentRect):
        (WebCore::LayerTilerChromium::tileLayerRect):
        (WebCore::LayerTilerChromium::invalidateRect):
        (WebCore::LayerTilerChromium::invalidateEntireLayer):
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::updateFromPixels):
        (WebCore::LayerTilerChromium::draw):
        (WebCore::LayerTilerChromium::growLayerToContain):
        * platform/graphics/chromium/LayerTilerChromium.h:
        (WebCore::LayerTilerChromium::Tile::Tile):
        (WebCore::LayerTilerChromium::Tile::i):
        (WebCore::LayerTilerChromium::Tile::j):
        (WebCore::LayerTilerChromium::Tile::moveTo):
        (WebCore::LayerTilerChromium::TileMapKeyTraits::emptyValue):
        (WebCore::LayerTilerChromium::TileMapKeyTraits::constructDeletedValue):
        (WebCore::LayerTilerChromium::TileMapKeyTraits::isDeletedValue):

2011-03-10  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed build fix for r80752; Negated the boolean logic.

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::next):
        (WebCore::VisiblePosition::previous):

2011-03-10  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Make the same change to xheight on Windows for CG.

        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformInit):

2011-03-10  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=47147
        
        Fix for repaint issues when the root element is a table and needs to paint a background that
        covers the entire canvas.  Remove paintRootBoxDecorations and replace with paintRootBoxFillLayers,
        so that it can be called only for fill layer painting.  Make tables and normal boxes both
        call this new method.  Fix the dirty check at the start of RenderTable paint to not happen if
        the table is the root of the document (this same check exists in RenderBlock painting already).

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxFillLayers):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintBoxDecorationsWithSize):
        * rendering/RenderBox.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint):
        (WebCore::RenderTable::paintBoxDecorations):

2011-03-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80749.
        http://trac.webkit.org/changeset/80749
        https://bugs.webkit.org/show_bug.cgi?id=56143

        "Caused at least 3 media tests to be flaky" (Requested by
        tonyg-cr on #webkit).

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::canTakeNextToken):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLParserScheduler.cpp:
        * html/parser/HTMLParserScheduler.h:
        (WebCore::HTMLParserScheduler::checkForYieldBeforeToken):
        * page/FrameView.h:

2011-03-10  Sam Weinig  <sam@webkit.org>

        Reviewed by David Hyatt.

        Regression: Content not drawn when scrolling horizontally in an RTL page
        https://bugs.webkit.org/show_bug.cgi?id=55077

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::overhangAmount):
        (WebCore::ScrollView::calculateOverhangAreasForPainting):
        Take the scroll origin into account when calculating overhang.

        * platform/ScrollView.h:
        * rendering/RenderLayer.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::scrollOrigin):
        Move identical scroll origin member from ScrollView and RenderLayer
        to shared base ScrollableArea. This is also needed so that the animator
        can access it.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::pinnedInDirection):
        (WebCore::ScrollAnimatorMac::smoothScrollWithEvent):
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):
        Account for a scroll origin when doing calculating scroll offsets.

2011-03-09  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Plumb through settings for accelerated drawing for canvas
        https://bugs.webkit.org/show_bug.cgi?id=56039

        No new tests. Doesn't affect behavior, just adding a switch to toggle canvas backends.

        * WebCore.exp.in:
        * html/HTMLCanvasElement.cpp:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * page/Settings.cpp:
        * page/Settings.h:

2011-03-10  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=47157
        
        CSS2.1 test suite failures because the ex unit is broken with the Ahem font.
        
        Remove the code that tries to also include the maxX of the glyph bounds for the
        'x' glyph, since it just causes the x-height to be way too large in cases where the 'x' glyph extends
        below the baseline.

        Remove the Apple Symbol hack for ex units, since the person who added that was confused by another
        issue, namely that CGFontGetXHeight wasn't being properly multiplied by the pointSize.  That's why
        the value was too small.  Patched the code to just multiply by pointSize and took out the hack.
        
        Fix causes many tests in the css2.1 directory to progress, so no new tests required.  Many other
        layout tests change because the xHeight for Lucida Grande gets smaller by a little bit, and radio
        buttons use ex horizontal margins by default.

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

2011-03-10  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        VisiblePosition's next and previous should take an enum instead of a boolean
        https://bugs.webkit.org/show_bug.cgi?id=56135

        Changed the argument type of VisiblePosition::next and VisiblePosition::previous
        from bool to EditingBoundaryCrossingRule. Also got rid of StayInEditableContent enum
        in VisibleSelection and replaced it by EditingBoundaryCrossingRule because the enum
        was only used in VisiblePosition::isAll and subsequently in SelectionController::isAll
        to call VisiblePosition::next and VisiblePosition::previous.

        * WebCore.exp.in:
        * dom/Position.cpp:
        (WebCore::Position::trailingWhitespacePosition):
        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):
        (WebCore::InsertListCommand::listifyParagraph):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::shouldMergeStart):
        (WebCore::ReplaceSelectionCommand::shouldMergeEnd):
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingRight):
        (WebCore::SelectionController::modifyExtendingForward):
        (WebCore::SelectionController::modifyMovingForward):
        (WebCore::SelectionController::modifyExtendingLeft):
        (WebCore::SelectionController::modifyExtendingBackward):
        (WebCore::SelectionController::modifyMovingBackward):
        * editing/SelectionController.h:
        (WebCore::SelectionController::isAll):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::next):
        (WebCore::VisiblePosition::previous):
        * editing/VisiblePosition.h:
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::isAll):
        (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
        * editing/VisibleSelection.h:
        * editing/htmlediting.cpp:
        (WebCore::selectionForParagraphIteration):
        * editing/visible_units.cpp:
        (WebCore::startOfNextParagraph):

2011-03-10  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Gentilcore.

        Remove CRASH() calls added to track down bug 53045
        https://bugs.webkit.org/show_bug.cgi?id=56137

        Remove CRASH() calls added by r76575 and re-label ones added by r80155
        and r80269 as being associated with bug 56124 (which may still be
        happening).

        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage):
        * css/CSSSelector.h:
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::deleteSelectors):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::~CachedResource):
        * loader/cache/CachedResource.h:

2011-03-10  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Let the parser yield for layout before running scripts
        https://bugs.webkit.org/show_bug.cgi?id=54355

        Prior to this patch, the parser would yield to perform a layout/paint before running a
        script only if the script or a stylesheet blocking the script is not loaded yet. Since we
        don't preload scan into the body while parsing the head, typically we'll block on a script
        early in the body that causes us to yield to do the first paint within a reasonable time.

        However, I'm planning to change the PreloadScanner to scan into the body from the head.
        That significantly improves overall load time, but would hurt first paint time because
        fewer scripts would be blocked during parsing and thus wouldn't yield.

        This change causes us to yield before running scripts if we haven't painted yet (regardless
        of whether or not the script is loaded). In addition to allowing the above mentioned
        PreloadScanner change to be implemented without regressing first paint time, this also
        improves first paint time by itself.

        I tested Alexa's top 45 websites using Web Page Replay to control the content and simulate
        bandwidth. This patch improved average first paint time by 1% over an unlimited connection,
        6% over a 1Mbps connection and 11% over a 5Mbps connection. There was no statistically
        signifcant change in page load time.

        Within the pages tested, 33 had no statistically significant change in time to first paint,
        12 improved, and none regressed. Of the improved, some of the standouts from the 1Mbps set
        are: 20% on youtube, 37% on wiki, 27% on ebay, 13% on cnn, 16% on espn, 74% on sohu.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::canTakeNextToken): This is the new yield point.
        (WebCore::HTMLDocumentParser::pumpTokenizer): Remove ASSERT that we are not paused. isPaused
        means that we are waiting for a script. Bug 54574 changed pumpTokenizer() so that it does
        the right thing whether we are just before a token or waiting for a script. Now that we may
        yield before a token or before a script, this may be called while paused.
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::checkForYieldBeforeScript): Added.
        * page/FrameView.h:
        (WebCore::FrameView::hasEverPainted): Added.

2011-03-10  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        Some Gtk code uses defined(USE_FREETYPE) instead of just USE(FREETYPE)
        https://bugs.webkit.org/show_bug.cgi?id=55996

        Use the macre USE instead of defined fro WTF_USE_FREETYPE and
        WTF_USE_PANGO.

        * GNUmakefile.am:
        * platform/graphics/cairo/OwnPtrCairo.cpp:
        * platform/graphics/cairo/OwnPtrCairo.h:
        * platform/graphics/cairo/RefPtrCairo.cpp:
        * platform/graphics/cairo/RefPtrCairo.h:
        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::setPangoAttributes):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):

2011-03-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Rolled back in 80277 and 80280 with event handler layout test failures fixed.
        https://bugs.webkit.org/show_bug.cgi?id=55653

        The failures were caused by a last minute typo: assigning to currentEvent
        instead of m_currentEvent.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.h:
        * bindings/js/JSWorkerContextBase.cpp:

2011-03-10  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=56129, vertical text broken on Lion and Leopard.

        Add Snow Leopard ifdefs for the scaling by point size and then the division by unitsPerEm to the
        translationsTransform applied to the results from CTFontGetVerticalTranslationsForGlyphs, since
        this is done already on Lion and Leopard.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::showGlyphsWithAdvances):

2011-03-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80701.
        http://trac.webkit.org/changeset/80701
        https://bugs.webkit.org/show_bug.cgi?id=56126

        fast/dom/Geolocation/window-close-crash.html fails on Snow
        Leopard release builds (Requested by mihaip on #webkit).

        * page/DOMWindow.cpp:
        * page/DOMWindow.h:
        * page/Frame.cpp:
        (WebCore::Frame::pageDestroyed):
        (WebCore::Frame::transferChildFrameToNewDocument):
        * page/Geolocation.cpp:
        (WebCore::Geolocation::~Geolocation):
        (WebCore::Geolocation::disconnectFrame):
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::requestPermission):
        (WebCore::Geolocation::startUpdating):
        (WebCore::Geolocation::stopUpdating):
        * page/Geolocation.h:
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::~GeolocationController):
        * page/Navigator.cpp:
        * page/Navigator.h:
        * platform/mock/GeolocationClientMock.cpp:
        * platform/mock/GeolocationClientMock.h:

2011-03-10  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Alexey Proskuryakov.

        ASSERT_NOT_REACHED triggered in WebCore::mapHTTPPipeliningPriorityToResourceLoadPriority
        https://bugs.webkit.org/show_bug.cgi?id=56075

        Map priority value 3, which means no priority, to ResourceLoadPriorityUnresolved.

        * platform/network/cf/ResourceRequestCFNet.h:
        (WebCore::mapHTTPPipeliningPriorityToResourceLoadPriority):
        (WebCore::mapResourceLoadPriorityToHTTPPipeliningPriority):

2011-03-10  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Substitute live-edit mode activation by double-click
        https://bugs.webkit.org/show_bug.cgi?id=56084

        Also fixed a regression: console was not opening/closing on ESC key press because tabIndex="0" attribute was preserved for a readOnly viewer.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype._startEditing):
        (WebInspector.SourceFrame.prototype._registerShortcuts):
        (WebInspector.SourceFrame.prototype._handleKeyDown):
        (WebInspector.SourceFrame.prototype._handleSave):
        (WebInspector.SourceFrame.prototype._handleRevertEditing):
        (WebInspector.SourceFrame.prototype._doubleClick):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel.prototype.get text):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.get readOnly):
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.set readOnly):
        (WebInspector.TextEditorMainPanel.prototype.get readOnly):

2011-03-10  Greg Simon  <gregsimon@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Need new graphic icon for garbage collect button.
        https://bugs.webkit.org/show_bug.cgi?id=55794

        No new tests: gc tests are flaky due to non-determinisic
        behavior of collection APIs (more notes in bug)

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * bindings/js/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::collectGarbage):
        * bindings/js/ScriptProfiler.h:
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::collectGarbage):
        * bindings/v8/ScriptProfiler.h:
        * inspector/Inspector.idl:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::collectGarbage):
        * inspector/InspectorProfilerAgent.h:
        * inspector/front-end/Images/garbageCollectButtonGlyph.png: Added.
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.get statusBarItems):
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype._garbageCollectButtonClicked):
        * inspector/front-end/inspector.css:
        (.garbage-collect-status-bar-item .glyph):

2011-03-10  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: better names for HAR export commands
        https://bugs.webkit.org/show_bug.cgi?id=56097

        Rename Export to HAR to Copy entry/network log as HAR
        Expose Copy as HAR unconditionally, remove related settings entry.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._contextMenu):
        * inspector/front-end/Settings.js:

2011-03-10  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Mobile Devices should include Model and Firmware Version in Webkit Generated User Agent String
        https://bugs.webkit.org/show_bug.cgi?id=48636

        Fix a typo in features.pri that turns on this feature on mobile
        devices by default.

        * features.pri:

2011-03-10  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Invalid expected parameter list in CSSAgent.setSelectorText() callback (CSSStyleModel.js)
        https://bugs.webkit.org/show_bug.cgi?id=56092

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):

2011-03-10  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: rolling out r80478 and its follow ups for breaking
        inspector and engadget.com.
        https://bugs.webkit.org/show_bug.cgi?id=49401

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::performTask):
        (WebCore::Document::postTask):
        * dom/Document.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setDefersLoading):
        * manual-tests/database-callback-deferred.html: Removed.
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2011-03-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Kenneth Rohde Christiansen.

        Tiled backing store's delegated scroll request uses incorrect convention
        https://bugs.webkit.org/show_bug.cgi?id=56011

        Use a point instead of delta, when relaying the scroll request from
        ScrollView::setScrollPosition.

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::delegatedScrollRequested):
        * page/Chrome.cpp:
        (WebCore::Chrome::delegatedScrollRequested):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/HostWindow.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollPosition):

2011-03-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: brush up DOM agent API.
        https://bugs.webkit.org/show_bug.cgi?id=56093

        * inspector/Inspector.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::childNodes):
        (WebCore::InspectorDOMAgent::setNodeName):
        (WebCore::InspectorDOMAgent::outerHTML):
        (WebCore::InspectorDOMAgent::setNodeValue):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.DOMNode.prototype.hasAttributes):
        (WebInspector.DOMNode.prototype.nodeType):
        (WebInspector.DOMNode.prototype.nodeName):
        (WebInspector.DOMNode.prototype.setNodeName):
        (WebInspector.DOMNode.prototype.localName):
        (WebInspector.DOMNode.prototype.nodeValue):
        (WebInspector.DOMNode.prototype.setNodeValue):
        (WebInspector.DOMNode.prototype.setAttribute):
        (WebInspector.DOMNode.prototype.attributes):
        (WebInspector.DOMNode.prototype.removeAttribute):
        (WebInspector.DOMNode.prototype.childNodes.mycallback):
        (WebInspector.DOMNode.prototype.childNodes):
        (WebInspector.DOMNode.prototype.outerHTML):
        (WebInspector.DOMNode.prototype.setOuterHTML):
        (WebInspector.DOMNode.prototype.removeNode):
        (WebInspector.DOMNode.prototype.copyNode):
        (WebInspector.DOMNode.prototype.path):
        (WebInspector.DOMNode.prototype._setAttributesPayload):
        (WebInspector.DOMNode.prototype._addAttribute):
        (WebInspector.DOMAgent.prototype._characterDataModified):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.updateBreadcrumb):
        (WebInspector.ElementsPanel.prototype.decorateNodeLabel):
        (WebInspector.ElementsPanel.prototype.handleCopyEvent):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.findTreeElement):
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype.updateChildren):
        (WebInspector.ElementsTreeElement.prototype._updateChildren):
        (WebInspector.ElementsTreeElement.prototype._startEditingTarget):
        (WebInspector.ElementsTreeElement.prototype._startEditing):
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted):
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted.moveToNextAttributeIfNeeded):
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted):
        (WebInspector.ElementsTreeElement.prototype._textNodeEditingCommitted):
        (WebInspector.ElementsTreeElement.prototype._attributeHTML):
        ():
        * inspector/front-end/EventListenersSidebarPane.js:
        ():
        * inspector/front-end/MetricsSidebarPane.js:
        * inspector/front-end/StylesSidebarPane.js:
        * inspector/front-end/utilities.js:

2011-03-09  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [STYLES] Editing a property value adds a word for any property value that uses a paren
        https://bugs.webkit.org/show_bug.cgi?id=56002

        * inspector/front-end/StylesSidebarPane.js: Introduce an additional check.

2011-03-09  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: use DebuggerPresentation instead of DebuggerModel in source frame delegate.
        https://bugs.webkit.org/show_bug.cgi?id=56034

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.continueToLine):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype.updateBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype.findBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._sourceLocationToActualLocation):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        (WebInspector.SourceFrameDelegateForScriptsPanel):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.setBreakpoint):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.updateBreakpoint):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.removeBreakpoint):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.findBreakpoint):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.continueToLine):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._contextMenu.else.editBreakpointCondition.didEditBreakpointCondition):
        (WebInspector.SourceFrame.prototype._contextMenu.else.editBreakpointCondition):
        (WebInspector.SourceFrame.prototype._contextMenu.else.setBreakpointEnabled):
        (WebInspector.SourceFrame.prototype._contextMenu):
        (WebInspector.SourceFrame.prototype._mouseDown):
        (WebInspector.SourceFrameDelegate.prototype.removeBreakpoint):
        (WebInspector.SourceFrameDelegate.prototype.updateBreakpoint):

2011-03-09  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: elements dom tree - word wrap toggle
        https://bugs.webkit.org/show_bug.cgi?id=44311

        A "Word Wrap" option is now shown in a context menu for the entire DOM tree content area
        and persisted into application settings.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._contextMenuEventFired):
        (WebInspector.ElementsPanel.prototype._contextMenuEventFired.toggleWordWrap):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline):
        (WebInspector.ElementsTreeOutline.prototype._treeElementFromEvent):
        (WebInspector.ElementsTreeOutline.prototype.populateContextMenu):
        (WebInspector.ElementsTreeElement.prototype.onreveal):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/inspector.css:
        (#elements-content.nowrap):
        (#elements-content > ol):

2011-03-09  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: re-implement breakpoints sidebar pane based on debugger presentation model.
        https://bugs.webkit.org/show_bug.cgi?id=55823

        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.addBreakpoint.didLoadSnippet):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.addBreakpoint):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.removeBreakpoint):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.highlightBreakpoint):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.clearBreakpointHighlight):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._createBreakpointItemId):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointClicked):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointCheckboxClicked):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._contextMenu):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.reset):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._failedToParseScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._revealHiddenBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype.breakpointsForSourceFileId):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpointEnabled):
        (WebInspector.DebuggerPresentationModel.prototype.removeBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype._actualLocationToSourceLocation):
        (WebInspector.DebuggerPresentationModel.prototype.reset):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._breakpointAdded):
        (WebInspector.ScriptsPanel.prototype._breakpointRemoved):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype._clearInterface):

2011-03-10  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Highlighter refactoring
        https://bugs.webkit.org/show_bug.cgi?id=56015

        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype.set mimeType):
        (WebInspector.TextEditorHighlighter.prototype.highlight):
        (WebInspector.TextEditorHighlighter.prototype.updateHighlight):
        (WebInspector.TextEditorHighlighter.prototype._highlightInChunks):
        (WebInspector.TextEditorHighlighter.prototype._highlightLines):
        (WebInspector.TextEditorHighlighter.prototype._selectHighlightState):
        (WebInspector.TextEditorHighlighter.prototype._clearHighlightState):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel.prototype._buildChunks):
        (WebInspector.TextEditorMainPanel.prototype._updateHighlightsForRange):

2011-03-05  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move breakpoint column adjustment to debugger model.
        https://bugs.webkit.org/show_bug.cgi?id=55821

        Test: inspector/debugger/debug-inlined-scripts.html

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.setBreakpoint.didSetBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpoint):
        * inspector/front-end/SourceFrameContent.js:
        (WebInspector.SourceFrameContent.prototype.sourceFrameLineNumberToActualLocation):

2011-01-21  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Dmitry Titov.

        Detach Geolocation from Frame when Page destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=52877

        On Page destruction, any outstanding Geolocation permission
        requests should be cancelled, because the Geolocation can only
        access the client indirectly via m_frame->page().

        Page destruction is signalled by a call to the
        Frame::pageDestroyed() method. This explictly calls
        DOMWindow::resetGeolocation which ultimately calls Geolocation::reset.

        Geolocation::reset() detaches from the GeolocationController,
        cancels requests, watches and single shots, and sets the
        permission state back to Unknown.

        Frame::pageDestroyed() is also called by FrameLoader even though
        the page is not destroyed. We should still cancel permission
        requests, because the GeolocationClient will become inaccessible
        to the Geolocation object after this call.

        Frame::transferChildFrameToNewDocument also indirectly calls
        Geolocation::reset when the frame is reparented between
        pages. Ideally we would like the Geolocation's activities to
        continue after reparenting, see bug
        https://bugs.webkit.org/show_bug.cgi?id=55577

        Since GeolocationController is owned by Page, and all Geolocation
        objects will now unsubscribe from the GeolocationController on
        pageDetached(), we no longer need to call stopUpdating() from the
        GeolocationController's destructor. Instead we can simply assert
        that there should be no no observers. See related bug
        https://bugs.webkit.org/show_bug.cgi?id=52216 .

        Introduced new method 'numberOfPendingPermissionRequests' on
        GeolocationClientMock to count the number of outstanding pending
        permission requests. This provides a reusable implementation for
        client-based implementations of the LayoutTestController's
        numberOfPendingGeolocationPermissionRequests method.

        Test: fast/dom/Geolocation/page-reload-cancel-permission-requests.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::resetGeolocation):
        * page/DOMWindow.h:
        * page/Frame.cpp:
        (WebCore::Frame::pageDestroyed):
        (WebCore::Frame::transferChildFrameToNewDocument):
        * page/Geolocation.cpp:
        (WebCore::Geolocation::~Geolocation):
        (WebCore::Geolocation::page):
        (WebCore::Geolocation::reset):
        (WebCore::Geolocation::disconnectFrame):
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::requestPermission):
        (WebCore::Geolocation::startUpdating):
        (WebCore::Geolocation::stopUpdating):
        * page/Geolocation.h:
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::~GeolocationController):
        * page/Navigator.cpp:
        (WebCore::Navigator::resetGeolocation):
        * page/Navigator.h:
        * platform/mock/GeolocationClientMock.cpp:
        (WebCore::GeolocationClientMock::numberOfPendingPermissionRequests):
        * platform/mock/GeolocationClientMock.h:

2011-03-10  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Darin Adler.

        Able to move nodes across documents
        https://bugs.webkit.org/show_bug.cgi?id=19524

        Makes cross-document appendChild, insertBefore, Range.insertNode and Range.surroundContents work.
        This matches Gecko and the new Dom Core spec. There are a number of Range methods where we don't 
        match Gecko or the spec that will need to be updated in a following patch.

        Test: fast/dom/move-nodes-across-documents.html

        * dom/Element.cpp:
        (WebCore::Element::removeAttributeNode):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::setNamedItem):
        * dom/Node.cpp:
        (WebCore::Node::setDocumentRecursively):
        (WebCore::checkAcceptChild):
        (WebCore::Node::checkReplaceChild):
        * dom/Range.cpp:
        (WebCore::Range::insertNode):
        (WebCore::Range::surroundContents):

2011-03-09  Antti Koivisto  <antti@apple.com>

        Not reviewed.

        Reverting crash catching code, the bug being hunted was fixed by
        http://trac.webkit.org/changeset/80686

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::CachedResourceLoader):
        (WebCore::CachedResourceLoader::~CachedResourceLoader):
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::setAutoLoadImages):
        (WebCore::CachedResourceLoader::load):
        (WebCore::CachedResourceLoader::loadDone):
        (WebCore::CachedResourceLoader::preload):
        (WebCore::CachedResourceLoader::requestPreload):
        * loader/cache/CachedResourceLoader.h:

2011-03-09  Peter Kasting  <pkasting@google.com>

        Unreviewed, build fix.

        * StringsNotToBeLocalized.txt: Add function names I forgot.
        * platform/win/SystemInfo.cpp: #if out some uncalled functions on WinCE,
          since they don't compile anyway.  Use ZeroMemory() instead of "= {0}"
          since Qt is stupid and (sometimes?!) warns about it.
        (WebCore::windowsVersion):
        (WebCore::processorArchitecture):

2011-03-09  Peter Kasting  <pkasting@google.com>

        Reviewed by Ryosuke Niwa.

        Add UA string tags for Windows 64.
        https://bugs.webkit.org/show_bug.cgi?id=55226

        * StringsNotToBeLocalized.txt:
        * platform/win/SystemInfo.cpp:
        (WebCore::osVersionForUAString):
        (WebCore::isWOW64):
        (WebCore::processorArchitecture):
        (WebCore::architectureTokenForUAString):
        (WebCore::windowsVersionForUAString):

2011-03-09  Peter Kasting  <pkasting@google.com>

        Unreviewed, attempted build fix.

        * WebCore.pri: Try to update include path for Qt Windows build.

2011-03-09  Peter Kasting  <pkasting@google.com>

        Unreviewed, build fix.

        * platform/win/SystemInfo.cpp:
        (WebCore::windowsVersionForUAString): Fix const conversion warning on Qt.

2011-03-09  Peter Kasting  <pkasting@google.com>

        Reviewed by Mihai Parparita.

        Unify Windows version checks.
        https://bugs.webkit.org/show_bug.cgi?id=55979

        * GNUmakefile.am: Fix spaces -> tabs.
        * StringsNotToBeLocalized.txt:
        * WebCore.pro: Add SystemInfo.* to Qt build.
        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        (WebCore::ScrollbarThemeChromiumWin::invalidateOnMouseEnterExit):
        (WebCore::ScrollbarThemeChromiumWin::getThemeState):
        (WebCore::ScrollbarThemeChromiumWin::getThemeArrowState):
        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:
        (WebCore::fillBMPGlyphs):
        * platform/win/CursorWin.cpp:
        (WebCore::createSharedCursor):
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::ScrollbarThemeWin):
        * platform/win/SystemInfo.cpp: Add full-fledged version check and UA string helper function.
        (WebCore::windowsVersion):
        (WebCore::windowsVersionForUAString):
        * platform/win/SystemInfo.h: Add full-fledged version check and UA string helper function.
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::getNonClientMetrics):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::RenderThemeWin::paintMenuList):
        (WebCore::RenderThemeWin::paintMenuListButton):

2011-03-09  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Gentilcore.

        REGRESSION (r74807): memory corruption after CachedResourceLoader refactoring
        https://bugs.webkit.org/show_bug.cgi?id=53045
        
        Copy the URL out of the CachedResource that is being revalidated, so
        that we can still use it (in m_validatedURLs) after removing the
        resource from the memory cache, which may delete it.

        No new tests, since I was not able to trigger this locally (in a layout
        test or otherwise).

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::revalidateResource):

2011-03-09  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        VO reporting incorrect list count for http://www.macworld.com/news.html
        https://bugs.webkit.org/show_bug.cgi?id=56064

        <li> tags should not be ignored, because they provide valuable information
        to screen readers.

        Test: platform/mac/accessibility/list-items-ignored.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):

2011-03-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/8733254> Float disappears after incremental layout
        Fixed the original bug and a copule more issues noticed while doing so.

        Tests: fast/dynamic/dirty-float-in-clean-line.html
               fast/dynamic/float-at-line-break.html
               fast/dynamic/float-from-empty-line.html

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): If findNextLineBreak() returned an empty line,
        update the line break info of the last line with the new line break position. This is tested
        by float-from-empty-line.html.
        (WebCore::RenderBlock::checkFloatsInCleanLine): Factored out code from determineStartPosition()
        into this new function.
        (WebCore::RenderBlock::determineStartPosition): Call checkFloatsInCleanLine().
        (WebCore::RenderBlock::determineEndPosition): When iterating over lines, check clean lines with
        floats, as they may yet become dirty because of the floats. This is tested by
        dirty-float-in-clean-line.html.
        (WebCore::RenderBlock::findNextLineBreak): If a float fits on the line, and the current line
        break is at the float, advance it to after the float. Otherwise, if the line gets dirty and the
        next one does not, the float will not make it into any line. This is tested by
        float-at-line-break.html.

2011-03-09  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        selectionStart reports wrong caret position when the last characters are newlines
        https://bugs.webkit.org/show_bug.cgi?id=56061

        The bug was caused by SelectionController::setSelection's not calling
        notifyRendererOfSelectionChange when old selection was equal to new selection.

        Because InsertLineBreakCommand inserts a text node with a single LF before the caret,
        this condition holds after the command is executed. However, the values of
        selectionStart and selectionEnd still need to be updated in this case because
        the offsets counted from the beginning of textarea have been increased by 1.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection): Call notifyRendererOfSelectionChange
        when m_selection = s.
        * manual-tests/selection-start-after-inserting-line-break-in-textarea.html: Added.

2011-03-09  Andy Estes  <aestes@apple.com>

        Reviewed by Adam Barth.

        Bad cast in HTMLTreeBuilder::processStartTag
        https://bugs.webkit.org/show_bug.cgi?id=55955

        Test: fast/parser/self-closing-foreign-content.html

        When the parser encounters an svg or mathml root element, it places the
        insertion mode into InForeignContentMode. However, if the root element
        is self-closing (e.g. <svg />) then the element is never placed on the
        open elements stack. This leaves the parser in an inconsistent state
        where it is in InForeignContentMode but no foreign content is in the
        open element stack.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody): If a self-closing
        foreign element is inserted into the tree, do not set the insertion
        mode to InForeignContentMode.

2011-03-09  Gavin Barraclough  <barraclough@apple.com>

        Qt build fix.

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

2011-03-09  Andy Estes  <aestes@apple.com>

        Reviewed by Adam Barth.

        REGRESSION (r80320): Assertion failure when processing mis-nested foreign content.
        https://bugs.webkit.org/show_bug.cgi?id=55982

        Test: fast/parser/fragment-foreign-content-misnested.html
        
        It is a parse error to encounter certain start tags while the parser's
        insertion mode is InForeignContentMode (e.g. <br>). In these cases, we
        are to pop open elements off the HTMLElementStack until a foreign
        content scope marker is encountered. Before the change in r80320 to not
        insert a fake HTML element during fragment parsing, said fake HTML
        element counted as a foreign content scope marker.
        
        With r80320, no fake HTML element is inserted and the stack is popped
        until empty in cases where no other element claims to be a foreign
        content scope marker. Fix this by treating the DocumentFragment as a
        foreign content scope marker.

        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isForeignContentScopeMarker): Take a
        ContainerNode* instead of a Element*.
        (WebCore::HTMLElementStack::popUntilForeignContentScopeMarker): Pass
        topNode() to isForeignContentScopeMarker() instead of top().

2011-03-09  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

        Bug 56041 - RexExp constructor should only accept flags "gim"
        We also should be passing the flags around as a bitfield rather than a string,
        and should not have redundant, incompatible code for converting the string to a bitfield!

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readTerminal):
            - Need to parse flags string back to enum.

2011-03-09  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium]: Regression - Explicitly copy compositing properties from LayerChromium to CCLayerImpl
        https://bugs.webkit.org/show_bug.cgi?id=56021

        Initializes the m_doubleSided flag of LayerChromiums to the default
        value of true so the back sides of layers without
        backface-visibility:hidden are rendered.

        Test: compositing/backface-visibility.html

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):

2011-03-09  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/9110316> REGRESSION: 'ex' unit broken for vertical text

        Fall back to the verticalRightOrientation data when obtaining the x-height for vertically oriented
        text. That way we use the same metrics as for horizontal.

        This fixes regressions in fast/lists and fast/overflow vertical text tests.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformBoundsForGlyph):

2011-03-09  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        REGRESSION: crash in nextLinePosition when extending selection forward by line in an empty document
        https://bugs.webkit.org/show_bug.cgi?id=56004

        The crash was caused by the false assumption that rootEditableElement() or documentElement()
        always return non-null pointer. Fixed the bug by adding an early exit.

        Test: editing/selection/extend-by-line-in-empty-document.html

        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):

2011-03-09  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: it should be possible to copy stack trace from call stack sidebar pane.
        https://bugs.webkit.org/show_bug.cgi?id=56024

        * English.lproj/localizedStrings.js:
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane):
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype._contextMenu):

2011-03-09  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        Patch FontPlatformDataLinux to properly initialize and copy orientation/text-orientation in all
        places.  Make sure text-orientation is specified in the lookups/creation in FontCustomPlatformData
        and FontCache.

        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/chromium/FontPlatformDataLinux.h:
        (WebCore::FontPlatformData::FontPlatformData):

2011-03-09  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JavaNPObject should not use JNI directly
        https://bugs.webkit.org/show_bug.cgi?id=56009

        We move the JNI code to access a Java object's fields into
        a new JavaInstance::getField() method.

        No new tests, refactoring only.

        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::getField):
        * bridge/jni/v8/JavaInstanceV8.h:
        * bridge/jni/v8/JavaNPObjectV8.cpp:
        (JSC::Bindings::JavaNPObjectGetProperty):

2011-03-09  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        NPAPI - jvalue conversion should not be in JavaInstance
        https://bugs.webkit.org/show_bug.cgi?id=55967

        No new tests, refactoring only.

        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/v8/JavaInstanceV8.h:
        * bridge/jni/v8/JavaNPObjectV8.cpp:
        (JSC::Bindings::JavaNPObjectInvoke):

2011-03-09  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        Use the Cookie Storage from the Private Browsing Storage Session directly
        https://bugs.webkit.org/show_bug.cgi?id=55986

        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

        * platform/network/mac/CookieStorageMac.mm:
        (WebCore::setCookieStoragePrivateBrowsingEnabled):
        Just copy the cookie storage from the private browsing storage session.
        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::setCookieStoragePrivateBrowsingEnabled):
        Ditto.

2011-03-09  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed. Fixed a crash in InspectorInstrumentation::didReceiveResponse() when loader is null (broken in r80639)

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):

2011-03-09  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: pass explicit agent references to InspectorBackendDispatcher
        https://bugs.webkit.org/show_bug.cgi?id=55820

        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::dispatchMessageFromFrontend):

2011-03-09  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: resource errors are not reported before front-end is opened
        https://bugs.webkit.org/show_bug.cgi?id=55939

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didReceiveResourceResponse):
        (WebCore::InspectorInstrumentation::didFailLoading):

2011-03-08  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Add BackingStoreType parameter to IDBFactoryBackendInterface::open
        https://bugs.webkit.org/show_bug.cgi?id=55948

        Add a parameter that allows for selection of alternative backing store
        implementations.

        No new tests: no new functionality.

        * storage/IDBFactory.cpp:
        (WebCore::IDBFactory::open):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBFactoryBackendInterface.h:

2011-03-08  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Factor out JNI method call to be used by both JSC and V8
        https://bugs.webkit.org/show_bug.cgi?id=55966

        No new tests, refactoring only.

        * bridge/jni/JNIUtility.cpp:
        (JSC::Bindings::callJNIMethod):
        * bridge/jni/JNIUtility.h:
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::invokeMethod):

2011-03-09  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Regression in handling DOMNodeInserted/DOMNodeRemoved events
        https://bugs.webkit.org/show_bug.cgi?id=55818

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel.prototype._handleDOMUpdates):

2011-03-09  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Web Inspector: we don't need to transfer objectId and hasChildren for primitive values.
        https://bugs.webkit.org/show_bug.cgi?id=55998

        * inspector/InjectedScriptSource.js:

2011-03-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: watch expressions should show string values in quotes.
        https://bugs.webkit.org/show_bug.cgi?id=55846

        * inspector/InjectedScriptSource.js:
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.LocalJSONObject.prototype.get description):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):
        * inspector/front-end/inspector.css:
        (.console-formatted-string, .console-formatted-regexp):

2011-03-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: "length" getter is invoked upon console object formatting.
        https://bugs.webkit.org/show_bug.cgi?id=55220

        * inspector/InjectedScriptSource.js:

2011-03-08  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove groupName from objectId.
        https://bugs.webkit.org/show_bug.cgi?id=55825

        * inspector/InjectedScriptSource.js:

2011-03-08  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Hyatt.

        Fix Regression: Content not drawn when scrolling horizontally in an RTL page.
        https://bugs.webkit.org/show_bug.cgi?id=55077.

        Inside ScrollView::calculateOverhangAreasForPainting(), when scroll position
        is negative, should include the position value into overhang rectangle's 
        starting position. 

        Tests: fast/dom/scroll-reveal-left-overflow.html
               fast/dom/scroll-reveal-top-overflow.html

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

2011-03-08  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        Add templatized CSSMutableStyleDeclaration::get{ShorthandValue, CommonValue, LayeredShorthandValue}()
        https://bugs.webkit.org/show_bug.cgi?id=55351

        By using some template magic CSSMutableStyleDeclaration::get{ShorthandValue, CommonValue, LayeredShorthandValue}()
        can be called on an array A without the caller explicitly specifying the size of A.

        No functionality was changed. So no new tests.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue): Modified to call templatized variants of
        CSSMutableStyleDeclaration::get{ShorthandValue, CommonValue, LayeredShorthandValue}().
        (WebCore::CSSMutableStyleDeclaration::getLayeredShorthandValue): Renamed second argument from "number" to "size"
        to better reflect its purpose - to be the size of the passed array.
        (WebCore::CSSMutableStyleDeclaration::getShorthandValue): Ditto.
        (WebCore::CSSMutableStyleDeclaration::getCommonValue): Ditto.
        (WebCore::CSSMutableStyleDeclaration::cssText): Modified to call templatized variant of CSSMutableStyleDeclaration::getShorthandValue().
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::getShorthandValue): Added templatized function that can determine
        the size of a passed array. Changed type of second argument to size_t since it represents the size of
        an array.
        (WebCore::CSSMutableStyleDeclaration::getCommonValue): Ditto.
        (WebCore::CSSMutableStyleDeclaration::getLayeredShorthandValue): Ditto.

2011-03-08  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.
        
        REGRESSION: Copied content loses formatting on paste to external apps.
        https://bugs.webkit.org/show_bug.cgi?id=47615
        <rdar://problem/9001214>
        
        This is a resubmission of a patch that was landed a while ago then rolled
        back because of a build failure on SnowLeopard and Leopard on the 32-bit builds.

        This patch adds a way for WebKit2 to create NSAttributedStrings from
        a DOM range without using the AppKit api initWithDOMRange that internally
        needs to access the WebView. The NSAttributedString is needed to create
        RTF formats in the pasteboard.
        This is to be considered a first step, since in the future we want to have
        an implementation based on the TextIterator.
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/HTMLConverter.h: Added.
        * platform/mac/HTMLConverter.mm: Added.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):

2011-03-08  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Explicitly copy compositing properties from LayerChromium to CCLayerImpl
        https://bugs.webkit.org/show_bug.cgi?id=55900

        This adds an explicit step to synchronize properties from
        LayerChromiums to their corresponding CCLayerImpls.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setBounds):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::bounds):
        (WebCore::LayerChromium::doubleSided):
        (WebCore::LayerChromium::setDoubleSided):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        (WebCore::CCLayerImpl::updateFromLayer):
        (WebCore::CCLayerImpl::descendantsDrawsContent):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::anchorPoint):
        (WebCore::CCLayerImpl::anchorPointZ):
        (WebCore::CCLayerImpl::masksToBounds):
        (WebCore::CCLayerImpl::opacity):
        (WebCore::CCLayerImpl::position):
        (WebCore::CCLayerImpl::preserves3D):
        (WebCore::CCLayerImpl::sublayerTransform):
        (WebCore::CCLayerImpl::transform):

2011-03-08  James Robinson  <jamesr@chromium.org>

        Chromium compile fix.

        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformInit):

2011-03-08  Peter Kasting  <pkasting@google.com>

        Reviewed by James Robinson.

        Unify Windows version checks, part 1.
        https://bugs.webkit.org/show_bug.cgi?id=55979

        Make everyone (I hope) pull in SystemInfo.cpp.  Eliminate the
        now-unnecessary WindowsVersion.cpp from Chromium.

        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        (WebCore::ScrollbarThemeChromiumWin::invalidateOnMouseEnterExit):
        (WebCore::ScrollbarThemeChromiumWin::getThemeState):
        (WebCore::ScrollbarThemeChromiumWin::getThemeArrowState):
        * platform/chromium/WindowsVersion.cpp: Removed.
        * platform/chromium/WindowsVersion.h: Removed.
        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:
        (WebCore::fillBMPGlyphs):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::getNonClientMetrics):

2011-03-08  Ryosuke Niwa  <rniwa@webkit.org>

        Chromium Linux build fix attempt after r80582.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/skia/GlyphPageTreeNodeSkia.cpp:
        (WebCore::GlyphPage::fill):

2011-03-08  Ryosuke Niwa  <rniwa@webkit.org>

        Mac build fix attempt for r80582.

        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        (WebCore::disableLigatures):

2011-03-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Remove calls to deprecatedEditingOffset in SelectionController and VisibleSelection
        https://bugs.webkit.org/show_bug.cgi?id=54937

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection): Calls anchorNode() instead of deprecatedNode() to obtain
        the document. Also restrained the lifetime of document variable.
        (WebCore::removingNodeRemovesPosition): Compare the node with anchorNode() instead of deprecatedNode()
        to determine whether or not position becomes null after removing a node.
        (WebCore::SelectionController::directionOfEnclosingBlock): The enclosing block is always a container
        so call containerNode() instead of deprecatedNode().
        (WebCore::SelectionController::debugRenderer): Call containerNode() and computeOffsetInContainer()
        instead of deprecatedNode() and deprecatedEditingOffset() respectively.
        (WebCore::SelectionController::isInPasswordField): Look for the shadow root from containerNode()
        instead of deprecatedNode to determine whether or not selection inside a password field. Also assert
        that the specified position is not before or after the shadow root as it violates our assumption.
        * editing/VisibleSelection.cpp:
        (WebCore::makeSearchRange): Call containerNode() and offsetInContainerNode() instead of deprecatedNode()
        and deprecatedEditingOffset() respectively because start is always parent anchored and therefore
        guaranteed to be an offset inside an anchor node.
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries): Call containerNode()
        instead of deprecatedNode() to look for the lowest editable ancestor because position before or after
        an editable element isn't editable.
        * page/DOMSelection.cpp: Call containerNode() and offsetInContainerNode() instead of deprecatedNode()
        and deprecatedEditingOffset() respectively in the following functions because they are exposed to
        DOM, which doesn't have before/after concept.
        (WebCore::DOMSelection::anchorNode):
        (WebCore::DOMSelection::anchorOffset):
        (WebCore::DOMSelection::focusNode):
        (WebCore::DOMSelection::focusOffset):
        (WebCore::DOMSelection::baseNode):
        (WebCore::DOMSelection::baseOffset):
        (WebCore::DOMSelection::extentNode):
        (WebCore::DOMSelection::extentOffset):

2011-03-08  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Correct uninitialized variable in PolicyCallback found while
        running WebKit in BoundsChecker.
        https://bugs.webkit.org/show_bug.cgi?id=45199.

        * loader/PolicyCallback.cpp:
        (WebCore::PolicyCallback::PolicyCallback): Initialize
        m_argument.

2011-03-08  Brent Fulgham  <bfulgham@webkit.org>

        More build bustage fix.

        * platform/graphics/win/cairo/FontPlatformData.h:
        (WebCore::FontPlatformData::setOrientation): Duplicate accessor
        in WinCairo-local header.  This is such a mess!

2011-03-08  David Hyatt  <hyatt@apple.com>

        Fix build bustage.  Hide orientation setting behind a setter and stub it out in all
        FontPlatformData classes.  (This class really needs to move to a common header with ifdefs.)

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::verticalRightOrientationFontData):
        * platform/graphics/cg/FontPlatformData.h:
        (WebCore::FontPlatformData::setOrientation):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        (WebCore::FontPlatformData::setOrientation):
        * platform/graphics/chromium/FontPlatformDataLinux.h:
        (WebCore::FontPlatformData::setOrientation):
        * platform/graphics/cocoa/FontPlatformData.h:
        (WebCore::FontPlatformData::setOrientation):
        * platform/graphics/freetype/FontPlatformData.h:
        (WebCore::FontPlatformData::setOrientation):
        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformData::setOrientation):
        * platform/graphics/wince/FontPlatformData.h:
        (WebCore::FontPlatformData::setOrientation):
        * platform/graphics/wx/FontPlatformData.h:
        (WebCore::FontPlatformData::setOrientation):

2011-03-08  Joe Wild  <joseph.wild@nokia.com>

        Reviewed by Csaba Osztrogonác.

        [Qt] Missing SVG variables
        https://bugs.webkit.org/show_bug.cgi?id=32941

        Basically, this patch just modifies features.pri to the Qt build to
        pass on the ENABLE_SVG_* flags to the IDL binding generator.

        Also I had remove global-construtors.html from the skip list and
        updated the associated expected results files.

        * features.pri:
        * page/DOMWindow.idl:

2011-03-08  Alok priyadarshi  <alokp@chromium.org>

        Reviewed by Dimitri Glazkov.

        Plugins needs a way to trigger style recalc
        https://bugs.webkit.org/show_bug.cgi?id=55242

        No test needed. A simple get function is added.

        * platform/graphics/chromium/PluginLayerChromium.h:
        (WebCore::PluginLayerChromium::getTextureId):

2011-03-08  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=48540, support the text-orientation CSS property.
        
        This patch adds support for two values of the text-orientation property (the ones that actually matter): vertical-right and upright.
        The TextOrientation is part of the FontDescription and used to look up fonts (similar to FontOrientation).
        
        Orientation of non-CJK characters is done using fallback font data of the appropriate orientation type, e.g., verticalRightOrientation and
        uprightOrientation fallback font data.  Vertical right is just implemented as a normal horizontal font.  Upright is implemented as a
        vertically oriented font that rotates all glyphs.
        
        The main complication implementing text-orientation is that fonts have "baked-in" vertical glyphs for letters that are hardcoded to
        a vertical right facing.  This means that you can use those special vertical glyphs for vertical-right orientation without having to 
        fall back, but then for upright orientation you have to ignore them and still fall back.  As you can see from the test case, this doesn't
        work very well, but hopefully it won't be all that common.  Limitations of CoreText prevent this case from rendering properly in either the
        simple or complex code paths, although the simple code path at least gets close.

        Added fast/blockflow/text-orientation-basic.html

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TextOrientation):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::platformDataFromCustomData):
        * loader/cache/CachedFont.h:
        * platform/graphics/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::computeHash):
        (WebCore::FontCache::getCachedFontPlatformData):
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::textOrientation):
        (WebCore::FontDescription::setTextOrientation):
        (WebCore::FontDescription::operator==):
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataForCharacter):
        (WebCore::offsetToMiddleOfGlyph):
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        (WebCore::SimpleFontData::verticalRightOrientationFontData):
        (WebCore::SimpleFontData::uprightOrientationFontData):
        (WebCore::SimpleFontData::brokenIdeographFontData):
        (WebCore::SimpleFontData::DerivedFontData::~DerivedFontData):
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::hasVerticalGlyphs):
        (WebCore::SimpleFontData::isTextOrientationFallback):
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/cocoa/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::textOrientation):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/haiku/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/haiku/FontCustomPlatformData.h:
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/mac/FontMac.mm:
        (WebCore::showGlyphsWithAdvances):
        (WebCore::Font::drawGlyphs):
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::shouldUseCoreText):
        (WebCore::GlyphPage::fill):
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::SimpleFontData::getCFStringAttributes):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/pango/FontCustomPlatformDataPango.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/qt/FontCustomPlatformData.h:
        * platform/graphics/qt/FontCustomPlatformDataQt.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/skia/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/skia/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontCustomPlatformDataCairo.h:
        * platform/graphics/wince/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/wince/FontCustomPlatformData.h:
        * platform/text/TextOrientation.h: Added.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::requiresIdeographicBaseline):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::initialTextOrientation):

2011-03-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        addInlineStyleIfNeeded should take EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=55950

        Deployed EditingStyle in addInlineStyleIfNeeded, StyleChange::StyleChange, and StyleChange::init.
        Also extracted EditingStyle::styleIsPresentInComputedStyleOfNode from removeStyleFromRunBeforeApplyingStyle.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::StyleChange): Takes EditingStyle instead of CSSStyleDeclaration.
        (WebCore::StyleChange::init): Ditto.
        (WebCore::ApplyStyleCommand::applyBlockStyle): Instantiates StyleChange.
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange): Calls addInlineStyleIfNeeded.
        (WebCore::ApplyStyleCommand::removeStyleFromRunBeforeApplyingStyle): Calls styleIsPresentInComputedStyleOfNode.
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): Calls EditingStyle::mergeInlineStyleOfElement
        instead of manually merging styles.
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown): Calls addInlineStyleIfNeeded.
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded): Takes EditingStyle instead of CSSMutableStyleDeclaration.
        * editing/ApplyStyleCommand.h:
        * editing/CompositeEditCommand.h:
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::styleIsPresentInComputedStyleOfNode): Extracted from removeStyleFromRunBeforeApplyingStyle.
        * editing/EditingStyle.h:

2011-03-08  Nico Weber  <thakis@chromium.org>

        Reviewed by James Robinson.

        Crash on big blur radius with canvas
        https://bugs.webkit.org/show_bug.cgi?id=55951

        Move the clamping code out of an if branch, so that it happens in the
        canvas case as well.

        Test: fast/canvas/shadow-huge-blur.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):

2011-03-08  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Sam Weinig.

        WK2: Cannot set focus on an element when focus is outside of WKView
        https://bugs.webkit.org/show_bug.cgi?id=55281
    
        In WK2, focus cannot be set from the WebProcess side because there's no platformWidget().
        Instead, the focus/unfocus messages need to be sent to the UIProcess side.

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::setFocus):

2011-03-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Overflow: scroll areas should not paint white in scroll corner if the 
        scrollbars are overlay.
        <rdar://problem/9082871>

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintScrollCorner):
        Don't paint the scroll corner white if we have overlay scrollbars.

2011-03-08  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        The first time animations are committed they have a bad start time
        https://bugs.webkit.org/show_bug.cgi?id=55947

        Do a check for a returned lastCommitTime of <=0 and replace it
        with the mediaTime.


        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::notifyAnimationsStarted):

2011-03-08  James Kozianski  <koz@chromium.org>

        Reviewed by David Levin.

        Expose isValidProtocol() in KURL.h.
        https://bugs.webkit.org/show_bug.cgi?id=54594

        This is needed to validate protocols used in calls to
        navigator.registerProtocolHandler().

        * platform/KURL.cpp:
        * platform/KURL.h:
        * platform/KURLGoogle.cpp:
        (WebCore::isValidProtocol):

2011-03-08  Adam Roben  <aroben@apple.com>

        Set svn:mime-type to text/css for all Inspector CSS files

        This will cause them to be served with the correct MIME type from svn.webkit.org's web
        interface.

        Rubber-stamped by Tim Hatcher.

        * inspector/front-end/audits.css: Added property svn:mime-type.
        * inspector/front-end/goToLineDialog.css: Added property svn:mime-type.
        * inspector/front-end/heapProfiler.css: Added property svn:mime-type.
        * inspector/front-end/helpScreen.css: Added property svn:mime-type.
        * inspector/front-end/inspector.css: Added property svn:mime-type.
        * inspector/front-end/inspectorSyntaxHighlight.css: Added property svn:mime-type.
        * inspector/front-end/networkPanel.css: Added property svn:mime-type.
        * inspector/front-end/popover.css: Added property svn:mime-type.
        * inspector/front-end/textViewer.css: Added property svn:mime-type.

2011-03-08  Andrei Popescu  <andreip@google.com>

        Reviewed by Steve Block.

        IDBCallbacks::onsuccess(IDBIndex*) is unused and should be removed.
        https://bugs.webkit.org/show_bug.cgi?id=55938

        The IndexedDatabase specification changed and IDBIndex objects are no
        longer created asynchronously. We therefore no longer need this method.

        No new tests, just cleanup.

        * storage/IDBCallbacks.h:
        * storage/IDBRequest.cpp:
        * storage/IDBRequest.h:

2011-03-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80551.
        http://trac.webkit.org/changeset/80551
        https://bugs.webkit.org/show_bug.cgi?id=55933

        It broke 285 tests on Qt bot (Requested by Ossy on #webkit).

        * WebCore.pro:
        * platform/SharedBuffer.cpp:
        * platform/SharedBuffer.h:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::supportsBufferedData):
        (WebCore::ResourceHandle::bufferedData):
        * platform/qt/QtByteBlock.cpp: Removed.
        * platform/qt/QtByteBlock.h: Removed.
        * platform/qt/SharedBufferQt.cpp:

2011-03-08  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        RenderObject: Pass complex type arguments as const-references.

        * WebCore.exp.in:
        * rendering/RenderObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBoxSideFromPath):
        (WebCore::RenderObject::drawArcForBoxSide):
        (WebCore::RenderObject::localToAbsolute):
        (WebCore::RenderObject::absoluteToLocal):

2011-03-08  Andreas Kling  <kling@webkit.org>

        Reviewed by Antonio Gomes.

        Path: Make measurement functions const
        https://bugs.webkit.org/show_bug.cgi?id=55914

        * platform/graphics/Path.cpp:
        (WebCore::Path::length):
        (WebCore::Path::pointAtLength):
        (WebCore::Path::normalAngleAtLength):
        * platform/graphics/Path.h:
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::strokeBoundingRect):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::strokeBoundingRect):
        * platform/graphics/openvg/PathOpenVG.cpp:
        (WebCore::Path::strokeBoundingRect):
        (WebCore::Path::length):
        (WebCore::Path::pointAtLength):
        (WebCore::Path::normalAngleAtLength):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::strokeBoundingRect):
        (WebCore::Path::length):
        (WebCore::Path::pointAtLength):
        (WebCore::Path::normalAngleAtLength):
        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::strokeBoundingRect):
        * platform/graphics/wince/PathWinCE.cpp:
        (WebCore::Path::strokeBoundingRect):
        * platform/graphics/wx/PathWx.cpp:
        (WebCore::Path::strokeBoundingRect):

2011-03-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Do not set juntion sides on scrollbar stepper buttons
        https://bugs.webkit.org/show_bug.cgi?id=55868

        Fixes rendering of steppers for themes using rounded stepper
        buttons on scrollbars like Adwaita.

        * platform/gtk/ScrollbarThemeGtk3.cpp:
        (WebCore::ScrollbarThemeGtk::paintButton):

2011-03-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Use doubles instead of integers for coordinates when rendering arrows
        https://bugs.webkit.org/show_bug.cgi?id=55866

        To prevent off-by-one rounding errors.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::paintMenuList):
        * platform/gtk/ScrollbarThemeGtk3.cpp:
        (WebCore::ScrollbarThemeGtk::paintButton):

2011-03-08  Markus Goetz  <guruz@guruz.de>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Use the QNetworkAccessManager zerocopy feature
        https://bugs.webkit.org/show_bug.cgi?id=50082

        The feature will be introduced in Qt 4.8.
        This patch is backwards compatible with Qt 4.7.

        * WebCore.pro:
        * platform/SharedBuffer.cpp:
        * platform/SharedBuffer.h:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::bufferedData):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::downloadProgress):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::supportsBufferedData):
        (WebCore::ResourceHandle::bufferedData):
        * platform/qt/SharedBufferQt.cpp:
        (WebCore::SharedBuffer::wrapQtByteBlock):
        (WebCore::SharedBuffer::hasPlatformData):
        (WebCore::SharedBuffer::platformData):
        (WebCore::SharedBuffer::platformDataSize):
        (WebCore::SharedBuffer::maybeTransferPlatformData):
        (WebCore::SharedBuffer::clearPlatformData):

2011-03-08  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix compilation warnings after r80429
        https://bugs.webkit.org/show_bug.cgi?id=55864

        * platform/gtk/WidgetGtk.cpp:

2011-03-08  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix after r80536

        * GNUmakefile.am:

2011-03-08  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Martin Robinson.

        [Gtk] toDataURL uses incorrect quality value when saving GdkPixbuf to buffer
        https://bugs.webkit.org/show_bug.cgi?id=55878

        Multiply the quality parameter by 100 to put it in the range [0, 100] as needed
        when saving GdkPixbuf to a buffer.

        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::ImageBuffer::toDataURL):

2011-03-07  Daniel Cheng  <dcheng@chromium.org>

        Unreviewed.

        Final build fix for r80536.

        * DerivedSources.make:

2011-03-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Kent Tamura.

        [EFL] Adjust functions of WebCore's efl port to WebKit coding style
        https://bugs.webkit.org/show_bug.cgi?id=55924

        Adjust webkit style to PlatformKeyboardEventEfl, PlatformMouseEventEfl and WidgetEfl files.

        * platform/efl/PlatformKeyboardEventEfl.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/efl/PlatformMouseEventEfl.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/efl/WidgetEfl.cpp:
        (WebCore::Widget::frameRectsChanged):
        (WebCore::Widget::setEvasObject):

2011-03-07  Daniel Cheng  <dcheng@chromium.org>

        Unreviewed.

        More build fixes for r80536.

        * CMakeLists.txt:
        * platform/chromium/ClipboardChromium.cpp:
        * platform/chromium/ClipboardChromium.h:

2011-03-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Adjust functions of ScrollbarEfl.cpp to WebKit coding style
        https://bugs.webkit.org/show_bug.cgi?id=55917

        Adjust webkit style to ScrollbarEfl files.

        * platform/efl/ScrollbarEfl.cpp:
        (scrollbarEflEdjeMessage):
        (ScrollbarEfl::setParent):
        (ScrollbarEfl::updateThumbPositionAndProportion):
        (ScrollbarEfl::frameRectsChanged):
        (ScrollbarEfl::paint):
        * platform/efl/ScrollbarEfl.h:

2011-03-07  Daniel Cheng  <dcheng@chromium.org>

        Unreviewed.

        Build fix for Chromium after r80536.

        * platform/chromium/DataTransferItemChromium.cpp:
        * platform/chromium/DataTransferItemsChromium.cpp:

2011-03-07  Daniel Cheng  <dcheng@chromium.org>

        Unreviewed.

        More build fixes for r80536.

        * CMakeLists.txt:
        * platform/chromium/ClipboardChromium.cpp:
        * platform/chromium/ClipboardChromium.h:

2011-03-07  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by David Levin.

        Add support for DataTransferItems
        https://bugs.webkit.org/show_bug.cgi?id=55115

        This patch adds stubs for DataTransferItems/DataTransferItem as well as implementing the
        basic functionality on the Chromium port. With the exception of DataTransferItem::getAsFile,
        all functionality on the DataTransferItems collection has been implemented.
        This change does not actually hook up DataTransferItems to reflect the actual contents of a
        drop/paste operation or to allow mutation of data in a copy/drag start yet. That will be
        enabled via several followup patches.

        Test: editing/pasteboard/data-transfer-items.html

        * Android.mk:
        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setDataTransferItemsEnabled):
        (WebCore::RuntimeEnabledFeatures::dataTransferItemsEnabled):
        * bindings/scripts/CodeGeneratorV8.pm: Do not emit an #include line for DOMString, since it's built-in.
        * dom/Clipboard.h:
        (WebCore::Clipboard::policy):
        * dom/Clipboard.idl:
        * dom/DataTransferItem.cpp: Added.
        * dom/DataTransferItem.h: Added.
        (WebCore::DataTransferItem::~DataTransferItem):
        * dom/DataTransferItem.idl: Added.
        * dom/DataTransferItems.h: Added.
        (WebCore::DataTransferItems::~DataTransferItems):
        * dom/DataTransferItems.idl: Added.
        * dom/StringCallback.cpp: Added.
        (WebCore::StringCallback::scheduleCallback):
        * dom/StringCallback.h: Added.
        (WebCore::StringCallback::~StringCallback):
        * dom/StringCallback.idl: Added.
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::items):
        * platform/chromium/ClipboardChromium.h:
        * platform/chromium/DataTransferItemChromium.cpp: Added.
        (WebCore::DataTransferItemChromium::create):
        (WebCore::DataTransferItemChromium::DataTransferItemChromium):
        (WebCore::DataTransferItemChromium::kind):
        (WebCore::DataTransferItemChromium::type):
        (WebCore::DataTransferItemChromium::getAsString):
        * platform/chromium/DataTransferItemChromium.h: Added.
        * platform/chromium/DataTransferItemsChromium.cpp: Added.
        (WebCore::DataTransferItemsChromium::create):
        (WebCore::DataTransferItemsChromium::DataTransferItemsChromium):
        (WebCore::DataTransferItemsChromium::length):
        (WebCore::DataTransferItemsChromium::item):
        (WebCore::DataTransferItemsChromium::deleteItem):
        (WebCore::DataTransferItemsChromium::clear):
        (WebCore::DataTransferItemsChromium::add):
        * platform/chromium/DataTransferItemsChromium.h: Added.

2011-03-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        selectionHasStyle and selectionStartHasStyle should use EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=55902

        Deployed EditingStyle in selectionHasStyle and selectionStartHasStyle.
        This allowed us to move triStateOfStyle from Editor.cpp to EditingStyle.cpp.

        Also changed the argument lists of selectionHasStyle and selectionStartHasStyle
        to take a property id and a value instead of a CSSMutableStyleDeclaration to cleanup
        call sites of these two functions.

        * WebCore.exp.in: Updated the signature of selectionHasStyle. No longer exports
        selectionStartHasStyle because it's not called anywhere outside of WebCore.
        * WebCore.order: Ditto.
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::EditingStyle): Added a new constructor that takes a property id
        and a property value.
        (WebCore::EditingStyle::triStateOfStyle): Moved from Editor.cpp.
        * editing/EditingStyle.h:
        (WebCore::EditingStyle::create): Added.
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartHasStyle): Takes a property id and a value instead of
        a CSSStyleDeclaration.
        (WebCore::Editor::selectionHasStyle): Ditto.
        * editing/Editor.h: Updated the signatures of selectionStartHasStyle and selectionHasStyle.
        * editing/EditorCommand.cpp:
        (WebCore::executeToggleStyle): Calls selectionStartHasStyle and selectionHasStyle.
        (WebCore::stateStyle): Ditto.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::checkOrEnableIfNeeded): Ditto.

2011-03-07  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (HTML5 tree builder): Text selection in a large text document is extremely slow
        https://bugs.webkit.org/show_bug.cgi?id=55898

        <rdar://problem/9095839> REGRESSION: Mail hangs with a certain large mail message when
        linkifying e-mail addresses in in -[DOMCharacterData setData:]

        Changes render tree of fast/text/large-text-composed-char.html, but not image results.

        * dom/CharacterData.cpp: (WebCore::CharacterData::parserAppendData):
        Changed parserAppendData() to accept a maximum length, and moved code from Text::createWithLengthLimit().

        * dom/CharacterData.h: Moved a constant for maximum length from Text.h.

        * dom/Text.cpp: (WebCore::Text::createWithLengthLimit):
        * dom/Text.h:
        This function was unused in ToT. Moved code around to share with CharacterData.

        * html/parser/HTMLConstructionSite.cpp: (WebCore::HTMLConstructionSite::insertTextNode):
        Chnaged to split large text nodes while parsing again.

2011-03-07  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Adam Barth.

        Fix platform/image-encoders/JPEGImageEncoder.cpp empty_output_buffer() behaviour
        https://bugs.webkit.org/show_bug.cgi?id=54522

        Fix jpegEmptyOutputBuffer() by ignoring free_in_buffer value as required.

        No new tests, as this code is not yet used in WebKit. Once this code is used to implement canvas.toDataUrl(), the canvas tests will exercise it.

        * platform/image-encoders/JPEGImageEncoder.cpp:
        (WebCore::jpegEmptyOutputBuffer):

2011-03-07  Sergey Glazunov  <serg.glazunov@gmail.com>

        Reviewed by Eric Seidel.

        Add the missing insertedIntoDocument() call in SVGVKernElement and SVGHKernElement
        https://bugs.webkit.org/show_bug.cgi?id=55896

        Test: svg/dom/vkern-element-crash.html

        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::insertedIntoDocument):
        * svg/SVGVKernElement.cpp:
        (WebCore::SVGVKernElement::insertedIntoDocument):

2011-03-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80514.
        http://trac.webkit.org/changeset/80514
        https://bugs.webkit.org/show_bug.cgi?id=55915

        Caused assertion failures (Requested by ukai on #webkit).

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap):

2011-03-07  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by Adam Barth.

        SVG <image> referenced by <use> is displayed incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=55750

        The result of sourceURI must use the URL of the enclosing document as base.
        Otherwise, the base may sometimes be empty, and, as a consequence,
        the intermediate KURL object may be invalid.

        Test: svg/custom/use-image-in-g.svg

        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::sourceURI):

2011-03-07  Helder Correia  <helder@sencha.com>

        Reviewed by Simon Fraser.

        Shadow is not shown when using strokeRect with a gradient strokeStyle
        https://bugs.webkit.org/show_bug.cgi?id=52509

        This happens in CG and is related to bug 51869, this time to be fixed
        in GraphicsContext::strokeRect(const FloatRect& r, float lineWidth).
        We need to draw the gradient clipped to the stroke on a CGLayer first,
        and then draw the layer on the GraphicsContext.

        Tests: fast/canvas/canvas-strokeRect-gradient-shadow.html
               svg/css/rect-gradient-stroke-shadow.svg

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::strokeRect):

2011-03-07  Justin Novosad  <junov@chromium.org>

        Reviewed by Kenneth Russell.

        Fix for blurs behind bitmap images in Chromium, and boosting
        shadow blur quality 
        Bug URLs:
                https://bugs.webkit.org/show_bug.cgi?id=55410
                https://bugs.webkit.org/show_bug.cgi?id=55506

        No new tests. Covered by existing layout tests. 

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow): Turn on high quality shadows and fix shadow color
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap): Propagate the draw looper from context to painter

2011-03-07  Andreas Kling  <kling@webkit.org>

        Unreviewed Mac build fix after r80508.

        * WebCore.exp.in:

2011-03-07  Enrica Casucci  <enrica@apple.com>

        Unreviewed build fix.

        Rolling back  http://trac.webkit.org/changeset/80497 due to the
        32-bit build failures.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/HTMLConverter.h: Removed.
        * platform/mac/HTMLConverter.mm: Removed.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):

2011-03-07  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        FrameView::setBaseBackgroundColor: Pass Color argument as const-reference.

        * page/FrameView.cpp:
        (WebCore::FrameView::setBaseBackgroundColor):
        * page/FrameView.h:

2011-03-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION(r78147): Crash on http://gnarf.net/jquery/test/
        https://bugs.webkit.org/show_bug.cgi?id=55894

        The m_frame can disappear out from under us, and there's no point in
        checking whether the load is complete in a non-existant frame.

        Test: fast/parser/document-write-into-initial-document.html

        * dom/Document.cpp:
        (WebCore::Document::explicitClose):

2011-03-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80500.
        http://trac.webkit.org/changeset/80500
        https://bugs.webkit.org/show_bug.cgi?id=55908

        Caused mysterious GYP error (Requested by abarth on #webkit).

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-03-07  Adam Barth  <abarth@webkit.org>

        Fix Chromium Mac build.  This header should only be included when the
        feature is enabled.

        * platform/cf/RunLoopTimerCF.cpp:

2011-03-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Add WML files to WebCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=55905

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-03-07  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Add missing include to #define Skia parameter
        https://bugs.webkit.org/show_bug.cgi?id=55885

        * platform/graphics/chromium/ShaderChromium.h:

2011-03-07  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: WK1 needs to use ScrollView attachment for AXScrollArea, WK2 does not
        https://bugs.webkit.org/show_bug.cgi?id=55706

        * WebCore.exp.in:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::rootObjectForFrame):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::isAttachment):
        (WebCore::AccessibilityScrollView::widgetForAttachmentView):
        * accessibility/AccessibilityScrollView.h:
        (WebCore::AccessibilityScrollView::firstChild):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2011-03-07  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.
        
        REGRESSION: Copied content loses formatting on paste to external apps.
        https://bugs.webkit.org/show_bug.cgi?id=47615
        <rdar://problem/9001214>

        This is a resubmission of a patch that was landed a while ago then rolled
        back because of a build failure on SnowLeopard and Leopard.
        
        This patch adds a way for WebKit2 to create NSAttributedStrings from
        a DOM range without using the AppKit api initWithDOMRange that internally
        needs to access the WebView. The NSAttributedString is needed to create
        RTF formats in the pasteboard.
        This is to be considered a first step, since in the future we want to have
        an implementation based on the TextIterator.

        * WebCore.xcodeproj/project.pbxproj: Added new file.
        * platform/mac/HTMLConverter.h: Added.
        * platform/mac/HTMLConverter.mm: Added.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection): We now use WebHTMLConverter
        class for WebKit2 to create the NSAttributedString from the DOM range.

2011-03-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Add some missing platform files to WebCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=55897

        There are a bunch more, but this is a start.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-03-07  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Rename JNIBridgeV8.cpp/h to JavaFieldV8.cpp/h
        https://bugs.webkit.org/show_bug.cgi?id=55879

        No new tests, refactoring only.

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bridge/jni/v8/JavaClassV8.cpp:
        * bridge/jni/v8/JavaClassV8.h:
        * bridge/jni/v8/JavaFieldV8.cpp: Renamed from Source/WebCore/bridge/jni/v8/JNIBridgeV8.cpp.
        (JavaField::JavaField):
        * bridge/jni/v8/JavaFieldV8.h: Renamed from Source/WebCore/bridge/jni/v8/JNIBridgeV8.h.
        (JSC::Bindings::JavaField::name):
        (JSC::Bindings::JavaField::type):
        (JSC::Bindings::JavaField::getJNIType):
        * bridge/jni/v8/JavaInstanceV8.cpp:
        * bridge/jni/v8/JavaNPObjectV8.cpp:

2011-03-07  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        Add plumbing for paste support to ChromiumDataObject::types()
        https://bugs.webkit.org/show_bug.cgi?id=55792

        This is a preliminary patch to support event.dataTransfer.items. This
        adds plumbing to support retrieving the types in a paste event. It also
        moves the check for files in a drag/paste up to ClipboardChromium, since
        internal code needs to be able to differentiate between actual files in
        a drag and someone that simply decided to use "Files" as a custom type
        string.

        Test: editing/pasteboard/onpaste-text-html-types.html

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::types):
        (WebCore::ChromiumDataObject::containsFilenames):
        * platform/chromium/ChromiumDataObject.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::types):
        * platform/chromium/ClipboardMimeTypes.cpp:
        * platform/chromium/ClipboardMimeTypes.h:

2011-03-07  Takayoshi Kochi  <kochi@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Use preferred locale information when choosing fallback
        font using fontconfig on Linux platform.
        http://bugs.webkit.org/show_bug.cgi?id=55453

        No new tests, as it depends on ICU and locale setting, so it will be
        covered by Chromium side.

        * platform/chromium/PlatformBridge.h:
        * platform/graphics/chromium/FontCacheLinux.cpp:

2011-03-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add gobject, cpp, and objc bindings to WebCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=55892

        These are also excluded from the Chromium build but needed for various
        other ports.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-03-07  Sergey Glazunov  <serg.glazunov@gmail.com>

        Reviewed by Dimitri Glazkov.

        Node::checkAddChild and Node::checkReplaceChild shouldn't change the owner document of a node
        https://bugs.webkit.org/show_bug.cgi?id=55803

        Test: fast/dom/dom-method-document-change.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        * dom/Node.cpp:
        (WebCore::Node::checkReplaceChild):
        (WebCore::Node::checkAddChild):
        * dom/Node.h:

2011-03-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80484.
        http://trac.webkit.org/changeset/80484
        https://bugs.webkit.org/show_bug.cgi?id=55891

        requires Chromium DEPS roll (Requested by dcheng on #webkit).

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::types):
        * platform/chromium/ChromiumDataObject.h:
        (WebCore::ChromiumDataObject::containsFilenames):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::types):
        * platform/chromium/ClipboardMimeTypes.cpp:
        * platform/chromium/ClipboardMimeTypes.h:

2011-03-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Add missing bindings/js files to WebCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=55888

        These files are excluded from the Chromium build but needed for the Mac
        build.

        * WebCore.gypi:

2011-03-07  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        Add plumbing for paste support to ChromiumDataObject::types()
        https://bugs.webkit.org/show_bug.cgi?id=55792

        This is a preliminary patch to support event.dataTransfer.items. This
        adds plumbing to support retrieving the types in a paste event. It also
        moves the check for files in a drag/paste up to ClipboardChromium, since
        internal code needs to be able to differentiate between actual files in
        a drag and someone that simply decided to use "Files" as a custom type
        string.

        Test: editing/pasteboard/onpaste-text-html-types.html

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::types):
        (WebCore::ChromiumDataObject::containsFilenames):
        * platform/chromium/ChromiumDataObject.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::types):
        * platform/chromium/ClipboardMimeTypes.cpp:
        * platform/chromium/ClipboardMimeTypes.h:

2011-03-07  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Viewport Warning/Error Messages Are Now Inaccurate
        https://bugs.webkit.org/show_bug.cgi?id=53707

        Correct and improve the error messages for viewport parsing.

        Tests: fast/viewport/viewport-warnings-1.html
               fast/viewport/viewport-warnings-2.html
               fast/viewport/viewport-warnings-3.html
               fast/viewport/viewport-warnings-4.html
               fast/viewport/viewport-warnings-5.html
               fast/viewport/viewport-warnings-6.html

        * dom/ViewportArguments.cpp:
        (WebCore::numericPrefix):
        (WebCore::findSizeValue): remove incorrect device-width / height tips.
        (WebCore::setViewportFeature): report a warning for an unrecognized key.
        (WebCore::viewportErrorMessageTemplate): added template for unrecognized key.
        (WebCore::viewportErrorMessageLevel): classify an unrecognized key is an error.
        * dom/ViewportArguments.h: removed no longer used warnings.

2011-03-07  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Separate the update and draw portions of LayerRendererChromium's drawLayers function
        https://bugs.webkit.org/show_bug.cgi?id=54047

        This splits up LayerRendererChromium::drawLayers() into two phases,
        one that updates layers and one that actually draws them.  Most of the
        patch is moving the bodies of drawLayers() and updateLayersRecursive()
        into smaller helper functions.

        The main entry point is renamed updateAndDrawLayers(), but otherwise
        has the same signature as drawLayers() did.  Internally it does the
        following:

        1.) Updates the root layer's contents
        2.) Updates the root layer's scrollbars
        3.) Updates the RenderSurface tree and the contents of all child
        layers
        4.) Draws the root layer and root layer scrollbars
        5.) Draws all child layers using the previously updated
        CCLayerImpl/RenderSurface data.

        A few things still need to be done after this patch to complete the separation
        of the update and draw step, but they can happen in later patches:
        *) The root layer and root layer scrollbars contents should be
        uploaded to textures at draw time, not update time.
        *) The RenderSurface tree should be updated at draw time, not update
        time.

        Covered by the compositing/ tests.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::updateRootLayerContents):
        (WebCore::LayerRendererChromium::updateRootLayerScrollbars):
        (WebCore::LayerRendererChromium::drawRootLayer):
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        (WebCore::LayerRendererChromium::updateLayers):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::getFramebufferPixels):
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):
        (WebCore::LayerRendererChromium::updateContentsRecursive):
        (WebCore::LayerRendererChromium::drawLayer):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::visibleRectSize):
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::drawSurface):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        * platform/graphics/chromium/cc/CCLayerImpl.h:

2011-03-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Sort WebCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=55887

        These files should be in order.  This is preparation for adding in the
        missing files.

        * WebCore.gypi:

2011-03-07  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r80478.

        * dom/Document.cpp: Add suggested parentheses to make GCC happy.
        (WebCore::Document::didReceiveTask):

2011-03-07  Yong Li  <yoli@rim.com>

        Reviewed by Darin Adler.

        Defer ScriptExecutionContext::Task's in Document when page loading is deferred.
        Schedule them with timer when page loading is resumed. The tasks will be performed
        in the original order. This fixes the problem that database callbacks could be missed
        when page loading was deferred.
        https://bugs.webkit.org/show_bug.cgi?id=49401

        Manual test added: manual-tests/database-callback-deferred.html.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::didReceiveTask):
        (WebCore::Document::postTask):
        (WebCore::Document::pendingTasksTimerFired):
        (WebCore::Document::willDeferLoading):
        (WebCore::Document::didResumeLoading):
        * dom/Document.h:
        * manual-tests/database-callback-deferred.html: Added.
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2011-03-07  Antti Koivisto  <antti@apple.com>

        Reviewed by Sam Weinig.

        Use HashMaps for caching primitive values
        https://bugs.webkit.org/show_bug.cgi?id=55873
        
        Most documents use only small subset of cacheable primitive values. By replacing
        fixed size cache arrays with HashMaps we can reduce the constant memory usage while also
        expanding the range of cacheable values.

        * css/CSSPrimitiveValueCache.cpp:
        (WebCore::CSSPrimitiveValueCache::CSSPrimitiveValueCache):
        (WebCore::CSSPrimitiveValueCache::createIdentifierValue):
        (WebCore::CSSPrimitiveValueCache::createColorValue):
        (WebCore::CSSPrimitiveValueCache::createValue):
        * css/CSSPrimitiveValueCache.h:

2011-03-07  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Split JNIBridgeJSC.cpp/h into JavaArrayJSC.cpp/h and JavaFieldJSC.cpp/h
        https://bugs.webkit.org/show_bug.cgi?id=55881

        No new tests, refactoring only.

        * Android.jscbindings.mk:
        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/jni/jsc/JNIBridgeJSC.cpp: Removed.
        * bridge/jni/jsc/JNIBridgeJSC.h: Removed.
        * bridge/jni/jsc/JNIUtilityPrivate.cpp:
        * bridge/jni/jsc/JavaClassJSC.cpp:
        * bridge/jni/jsc/JavaClassJSC.h:
        * bridge/jni/jsc/JavaInstanceJSC.cpp:

2011-03-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Replace WebKit2's decidePolicyForMIMEType with decidePolicyForResponse
        https://bugs.webkit.org/show_bug.cgi?id=55827

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::dispatchDecidePolicyForResponse):
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkContentPolicy):
        * loader/PolicyChecker.h:
        Rename FrameLoaderClient::dispatchDecidePolicyForMIMEType to dispatchDecidePolicyForResponse
        and pass the entire response, instead of just the MIMEType.

2011-03-07  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Add API to enumerate/delete files downloaded for <audio> and <video>
        https://bugs.webkit.org/show_bug.cgi?id=55267
        <rdar://problem/9049280>

        No new tests, this is just more plumbing.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::getSitesInMediaCache): Make static, call MediaPlayer static method.
        (WebCore::HTMLMediaElement::clearMediaCache): Ditto.
        (WebCore::HTMLMediaElement::clearMediaCacheForSite): Ditto.
        * html/HTMLMediaElement.h:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayerFactory::MediaPlayerFactory): Add new media engine factory functions.
        (WebCore::addMediaEngine): Ditto.
        (WebCore::MediaPlayer::getSitesInMediaCache): Call static method on all installed media engines.
        (WebCore::MediaPlayer::clearMediaCache): Ditto.
        (WebCore::MediaPlayer::clearMediaCacheForSite): Ditto.
        * platform/graphics/MediaPlayer.h:

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::registerMediaEngine): Update for MediaEngineRegistrar change.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::registerMediaEngine): Ditto.

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

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::registerMediaEngine): Ditto.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::registerMediaEngine): Ditto.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::registerMediaEngine): Ditto.

2011-03-07  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Split JNIBridge.cpp/h into JavaString.h and JavaMethod.cpp/h
        https://bugs.webkit.org/show_bug.cgi?id=55774

        No new tests, refactoring only.

        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/jni/JavaMethod.cpp:
        (JavaMethod::JavaMethod):
        (JavaMethod::~JavaMethod):
        (appendClassName):
        (JavaMethod::signature):
        (JavaMethod::JNIReturnType):
        (JavaMethod::methodID):
        * bridge/jni/JavaMethod.h:
        (JSC::Bindings::JavaMethod::name):
        (JSC::Bindings::JavaMethod::returnType):
        (JSC::Bindings::JavaMethod::parameterAt):
        (JSC::Bindings::JavaMethod::numParameters):
        (JSC::Bindings::JavaMethod::isStatic):
        * bridge/jni/JavaString.h:
        (JSC::Bindings::JavaString::JavaString):
        (JSC::Bindings::JavaString::utf8):
        (JSC::Bindings::JavaString::length):
        (JSC::Bindings::JavaString::impl):
        * bridge/jni/jni_jsobject.mm:
        * bridge/jni/jsc/JNIBridgeJSC.h:
        * bridge/jni/v8/JNIBridgeV8.h:
        * bridge/jni/v8/JavaClassV8.cpp:
        * bridge/jni/v8/JavaClassV8.h:
        * bridge/jni/v8/JavaInstanceV8.cpp:

2011-03-07  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Add source to IDBCursor, objectStore to IDBIndex, and remove storeName
        https://bugs.webkit.org/show_bug.cgi?id=55812

        This brings us in line with what's in the spec:
        http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html

        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::create):
        (WebCore::IDBCursor::IDBCursor):
        (WebCore::IDBCursor::source):
        * storage/IDBCursor.h:
        * storage/IDBCursor.idl:
        * storage/IDBCursorWithValue.cpp:
        (WebCore::IDBCursorWithValue::create):
        (WebCore::IDBCursorWithValue::IDBCursorWithValue):
        * storage/IDBCursorWithValue.h:
        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::IDBIndex):
        * storage/IDBIndex.h:
        (WebCore::IDBIndex::create):
        (WebCore::IDBIndex::objectStore):
        * storage/IDBIndex.idl:
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):

2011-03-07  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: kAXCellForColumnAndRowParameterizedAttribute doesn't work ARIA grids with colspans
        https://bugs.webkit.org/show_bug.cgi?id=55735

        The ARIA grid implementation needed to verify the row/column range of a cell instead of 
        assuming a 1-1 mapping between children and row/column.

        Test: platform/mac/accessibility/aria-table-with-colspan-cells.html

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::cellForColumnAndRow):

2011-03-07  Andrei Popescu  <andreip@google.com>

        Reviewed by Steve Block.

        IDBRequest::onSuccess(IDBObjectStore*) should be removed as it is unused.
        IDBObjectStore objects used to be created asynchronously, so we needed
        this method to be invoked, with the new object store as the parameter,
        whenever the creation succeeded. The spec has changed so that IDBObjectStore
        objects are created synchronously, so this method is no longer needed.
        https://bugs.webkit.org/show_bug.cgi?id=55777

        No new tests, just refactoring.

        * storage/IDBCallbacks.h:
        * storage/IDBRequest.cpp:
        * storage/IDBRequest.h:

2011-03-04  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JavaParameter should be removed
        https://bugs.webkit.org/show_bug.cgi?id=55772

        No new tests, refactoring only.

        * bridge/jni/JNIBridge.cpp:
        (JavaMethod::JavaMethod):
        (JavaMethod::~JavaMethod):
        (JavaMethod::signature):
        * bridge/jni/JNIBridge.h:
        (JSC::Bindings::JavaMethod::parameterAt):
        (JSC::Bindings::JavaMethod::numParameters):
        * bridge/jni/JNIUtility.h:
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/v8/JNIUtilityPrivate.cpp:
        (JSC::Bindings::convertNPVariantToJValue):
        * bridge/jni/v8/JNIUtilityPrivate.h:
        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::invokeMethod):

2011-03-07  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver Hunt.

        REGRESSION (r79574): fast/dom/global-constructors.html failing on Windows 7 Release (Tests) bots 
        https://bugs.webkit.org/show_bug.cgi?id=55166
        <rdar://problem/9050430>
        
        Make CSS primitive value cache per-document.
        
        Test: http/tests/security/cross-origin-css-primitive.html

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForNinePieceImage):
        (WebCore::zoomAdjustedPixelValue):
        (WebCore::zoomAdjustedNumberValue):
        (WebCore::zoomAdjustedPixelValueForLength):
        (WebCore::valueForReflection):
        (WebCore::getPositionOffsetValue):
        (WebCore::CSSComputedStyleDeclaration::currentColorOrValidColor):
        (WebCore::getBorderRadiusCornerValue):
        (WebCore::computedTransform):
        (WebCore::getDelayValue):
        (WebCore::getDurationValue):
        (WebCore::CSSComputedStyleDeclaration::getFontSizeCSSValuePreferringKeyword):
        (WebCore::CSSComputedStyleDeclaration::valueForShadow):
        (WebCore::valueForFamily):
        (WebCore::renderTextDecorationFlagsToCSSValue):
        (WebCore::fillRepeatToCSSValue):
        (WebCore::fillSizeToCSSValue):
        (WebCore::contentToCSSValue):
        (WebCore::counterToCSSValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseSheet):
        (WebCore::CSSParser::parseRule):
        (WebCore::CSSParser::parseKeyframeRule):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseSelector):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::setStyleSheet):
        (WebCore::CSSParser::parseWCSSInputProperty):
        (WebCore::parseBackgroundClip):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parsePage):
        (WebCore::CSSParser::parseSizeParameter):
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::parseAttr):
        (WebCore::CSSParser::parseBackgroundColor):
        (WebCore::CSSParser::parseFillPositionXY):
        (WebCore::CSSParser::parseFillPosition):
        (WebCore::CSSParser::parseFillRepeat):
        (WebCore::CSSParser::parseFillSize):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseAnimationDelay):
        (WebCore::CSSParser::parseAnimationDirection):
        (WebCore::CSSParser::parseAnimationDuration):
        (WebCore::CSSParser::parseAnimationFillMode):
        (WebCore::CSSParser::parseAnimationIterationCount):
        (WebCore::CSSParser::parseAnimationName):
        (WebCore::CSSParser::parseAnimationPlayState):
        (WebCore::CSSParser::parseAnimationProperty):
        (WebCore::CSSParser::parseTransformOriginShorthand):
        (WebCore::CSSParser::parseAnimationTimingFunction):
        (WebCore::CSSParser::parseDashboardRegions):
        (WebCore::CSSParser::parseCounterContent):
        (WebCore::CSSParser::parseShape):
        (WebCore::CSSParser::parseFont):
        (WebCore::CSSParser::parseFontFamily):
        (WebCore::CSSParser::parseFontStyle):
        (WebCore::CSSParser::parseFontVariant):
        (WebCore::CSSParser::parseFontWeight):
        (WebCore::ShadowParseContext::ShadowParseContext):
        (WebCore::ShadowParseContext::commitLength):
        (WebCore::ShadowParseContext::commitStyle):
        (WebCore::CSSParser::parseShadow):
        (WebCore::CSSParser::parseReflect):
        (WebCore::BorderImageParseContext::BorderImageParseContext):
        (WebCore::BorderImageParseContext::commitNumber):
        (WebCore::BorderImageParseContext::commitBorderImage):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::CSSParser::parseBorderRadius):
        (WebCore::CSSParser::parseCounter):
        (WebCore::parseDeprecatedGradientPoint):
        (WebCore::parseDeprecatedGradientColorStop):
        (WebCore::CSSParser::parseDeprecatedGradient):
        (WebCore::valueFromSideKeyword):
        (WebCore::parseGradientColorOrKeyword):
        (WebCore::CSSParser::parseLinearGradient):
        (WebCore::CSSParser::parseRadialGradient):
        (WebCore::CSSParser::parseGradientColorStops):
        (WebCore::CSSParser::parseTransform):
        (WebCore::CSSParser::parseTransformOrigin):
        (WebCore::CSSParser::parseTextEmphasisStyle):
        * css/CSSParser.h:
        (WebCore::CSSParser::primitiveValueCache):
        * css/CSSPrimitiveValue.cpp:
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::createIdentifier):
        (WebCore::CSSPrimitiveValue::createColor):
        (WebCore::CSSPrimitiveValue::create):
        * css/CSSPrimitiveValueCache.cpp: Added.
        (WebCore::CSSPrimitiveValueCache::CSSPrimitiveValueCache):
        (WebCore::CSSPrimitiveValueCache::~CSSPrimitiveValueCache):
        (WebCore::CSSPrimitiveValueCache::createIdentifierValue):
        (WebCore::CSSPrimitiveValueCache::createColorValue):
        (WebCore::CSSPrimitiveValueCache::createValue):
        * css/CSSPrimitiveValueCache.h: Added.
        (WebCore::CSSPrimitiveValueCache::create):
        (WebCore::CSSPrimitiveValueCache::createValue):
        * dom/Document.cpp:
        (WebCore::Document::cssPrimitiveValueCache):
        * dom/Document.h:

2011-03-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Filter sources in WebCore GYP build for Mac
        https://bugs.webkit.org/show_bug.cgi?id=55857

        This patch removes a large number of files that do not build as part of
        the Mac build.  I'm not fully sold on this method of
        including/excluding files, but it's the "gyp way" so we should probably
        try it first.

        This patch also sets xcode_list_excluded_files to 0, which removes the
        excluded files from the Xcode project file, which is necessary in order
        to prevent the header map feature from including the wrong header file.

        * gyp/WebCore.gyp:

2011-03-07  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed EFL build fix.

        [EFL] Build break on Debug build.
        https://bugs.webkit.org/show_bug.cgi?id=55858

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::themePartCacheEntrySurfaceCreate):

2011-03-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add webcore_derived_source_files to WebCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=55856

        This is the list of files generated by the Mac port.  It's possible
        other ports generate a different list of files.

        * WebCore.gypi:
        * gyp/WebCore.gyp:

2011-03-06  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Kent Tamura.

        Input type=number spin buttons remain invisible but functional after div changed from hidden to visible.
        https://bugs.webkit.org/show_bug.cgi?id=55839
        http://crbug.com/73866
        http://crbug.com/62527

        We also need style change for m_innerSpinButton not only for m_outerSpinBuggon when styleDidChange() is called.

        Test: fast/forms/input-appearance-spinbutton-visibility.html

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

2011-03-06  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Kent Tamura.

        [Chromium] Autocomplete suggestion extends out of window (and onto second monitor)
        https://bugs.webkit.org/show_bug.cgi?id=54795

        Implement width clip logic according to browser screen width and popup window width. This fix is enough for Win and Mac, but there is a problem in Linux. Because WebScreenInfoFactory::screenInfo() can get only merged screen size, not the screen size where the browser exists.

        Test: manual-tests/popup-width-restriction-within-screen.html

        * manual-tests/popup-width-restriction-within-screen.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::layoutAndCalculateWidgetRect): Implement the width clip logic according to screen width.

2011-03-06  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        Add SHA-1 for new WebSocket protocol
        https://bugs.webkit.org/show_bug.cgi?id=55039

        * ForwardingHeaders/wtf/SHA1.h: Added.

2011-03-06  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Antti Koivisto.

        QuickTime based media engines should respect private browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=55848

        No new tests, it is only possible to test this by manually deleting and monitoring the
        the Quicktime caches.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::privateBrowsingStateDidChange): Add logging.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer): Initialize m_privateBrowsing.
        (WebCore::MediaPlayer::loadWithNextMediaEngine): Set privacy mode on new media engine.
        (WebCore::MediaPlayer::setPrivateBrowsingMode): Stash setting in m_privateBrowsing.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setPrivateBrowsingMode):

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::MediaPlayerPrivateQTKit): Initialize m_privateBrowsing.
        (WebCore::MediaPlayerPrivateQTKit::createQTMovie): Pass private browsing attribute when
            creating new movie.
        (WebCore::MediaPlayerPrivateQTKit::setPrivateBrowsingMode): New, store privacy setting in
            m_privateBrowsing and set movie attribute.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::MediaPlayerPrivateQuickTimeVisualContext):
            Initialize m_privateBrowsing.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::setPrivateBrowsingMode): New, store 
            privacy setting in m_privateBrowsing and call QTMovie.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:

        * platform/graphics/win/QTMovie.cpp:
        (QTMoviePrivate::QTMoviePrivate): Initialize m_privateBrowsing.
        (QTMovie::load):Pass private browsing property when creating new movie.
        (QTMovie::setPrivateBrowsingMode):  New, store privacy setting in m_privateBrowsing and 
            set movie property.
        * platform/graphics/win/QTMovie.h:

2011-03-06  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        style.borderSpacing always returns empty string
        https://bugs.webkit.org/show_bug.cgi?id=54816

        Teach CSSMutableStyleDeclaration::getPropertyValue() how to reconstitute
        the value for border-spacing from the value of the WebKit internal CSS
        property -webkit-border-horizontal-spacing and -webkit-border-vertical-spacing.

        The CSS property border-spacing describes the horizontal and vertical border
        spacing for an HTML Table element. Notice, WebKit internally represents the value
        of this property as two properties: -webkit-border-horizontal-spacing and
        -webkit-border-vertical-spacing, for the horizontal and vertical border spacing,
        respectively. And WebKit doesn't know to reconstitute these internal properties.
        Therefore style.borderSpacing always returns the empty string.

        Test: fast/css/table-border-spacing.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        (WebCore::CSSMutableStyleDeclaration::borderSpacingValue): Added.
        * css/CSSMutableStyleDeclaration.h:

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

        Reviewed by Oliver Hunt.

        <rdar://problem/9093327> Implement -hyphenate-limit-{before,after}
        https://bugs.webkit.org/show_bug.cgi?id=55850

        Tests: fast/css/parsing-hyphenate-limit.html
               fast/text/hyphenate-limit-before-after.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedProperties) Updated this array with the new properties and some old properties
        that it was missing.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Added
        CSSPropertyWebkitHyphenateLimit{Before,After}.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Parse -webkit-hyphenate-limit-{before,after}, allowing
        'auto' and non-negative integers.

        * css/CSSPropertyNames.in: Added -webkit-hyphenate-limit-{before,after}.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Handle CSSPropertyWebkitHyphenateLimit{Before,After}.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::tryHyphenating): Added minimum prefix and suffix length parameters and checks to only
        allow hyphenation if the prefix and the suffix are sufficiently long.
        (WebCore::RenderBlock::findNextLineBreak): Pass the limits to tryHyphenating().

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff): A difference in hyphenation limits is a layout difference.

        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::hyphenationLimitBefore): Added.
        (WebCore::InheritedFlags::hyphenationLimitAfter): Added.
        (WebCore::InheritedFlags::setHyphenationLimitBefore): Added.
        (WebCore::InheritedFlags::setHyphenationLimitAfter): Added.
        (WebCore::InheritedFlags::initialHyphenationLimitBefore): Added. Returns -1, which is the
        representation of 'auto'.
        (WebCore::InheritedFlags::initialHyphenationLimitAfter): Ditto.

        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData): Initialize hyphenation limits.
        (WebCore::StyleRareInheritedData::operator==): Compare hyphenation limits.
        * rendering/style/StyleRareInheritedData.h:

2011-03-06  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        When Private Browsing is enabled, use cookies from a in-memory cookie storage based on the
        Private Browsing Storage Session.

        * WebCore.exp.in:
        Add the new WKSI functions.
        * platform/mac/WebCoreSystemInterface.h:
        Ditto.
        * platform/mac/WebCoreSystemInterface.mm:
        Ditto.

        * platform/mac/CookieJar.mm:
        (WebCore::cookies):
        If USE(CFURLSTORAGESESSIONS) and there is a Private Browsing Cookie Storage, call into WKSI.
        Otherwise, behave the same as before.
        (WebCore::cookieRequestHeaderFieldValue):
        Ditto.
        (WebCore::setCookies):
        Ditto.
        (WebCore::cookiesEnabled):
        Ditto
        (WebCore::getRawCookies):
        Ditto.
        (WebCore::deleteCookie):
        Ditto.

        * platform/network/CookieStorage.h:
        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::privateBrowsingCookieStorage):
        Keep track of the Private Browsing Cookie Storage in a locally defined static inside a
        function instead of at the global scope.
        (WebCore::currentCookieStorage):
        Use privateBrowsingCookieStorage.
        (WebCore::setCurrentCookieStorage):
        Ditto.
        (WebCore::setCookieStoragePrivateBrowsingEnabled):
        If USE(CFURLSTORAGESESSIONS), send the Private Browsing Storage Session to
        wkCreatePrivateInMemoryHTTPCookieStorage.
        * platform/network/mac/CookieStorageMac.mm:
        (WebCore::privateBrowsingCookieStorage):
        Keep track of the Private Browsing Cookie Storage.
        (WebCore::setCookieStoragePrivateBrowsingEnabled):
        If USE(CFURLSTORAGESESSIONS), then set or clear privateBrowsingCookieStorage().
        Added a FIXME to observe changes to the Private Browsing Cookie Storage when it is defined.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::shouldRelaxThirdPartyCookiePolicy):
        Refactor the logic to determine whether or not to relax the third party cookie policy here.
        If USE(CFURLSTORAGESESSIONS), then get the information from the privateBrowsingCookieStorage.
        (WebCore::ResourceHandle::createNSURLConnection):
        Use shouldRelaxThirdPartyCookiePolicy.
        (WebCore::ResourceHandle::loadResourceSynchronously):
        Ditto.

2011-03-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80428.
        http://trac.webkit.org/changeset/80428
        https://bugs.webkit.org/show_bug.cgi?id=55833

        Broke SnowLeopard (Requested by xan_ on #webkit).

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::handlePostReadFile):

2011-03-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Windowless plugins override the view cursor
        https://bugs.webkit.org/show_bug.cgi?id=55531

        manual test: manual-tests/plugins/windowless.html

        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::setCursor): Call into the ChromeClient implementation now.
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::initXEvent): Instead of setting the window for windowless
        plugin events, set the window value to none. This method is also used to send
        focus in / focus out events to windowed plugins, but this is not one of the plugin
        types where the window parameter matters. This matches what Mozilla does. Also
        pass in the display of the widget itself, not the default display.
        (WebCore::PluginView::handleMouseEvent): When the cursor leaves the plugin area,
        reset the cursor.
        (WebCore::PluginView::platformGetValue): Clean up this section slightly. Give the
        widget the top-level window explicitly. This matches Mozilla.

2011-03-05  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] http/tests/plugins/post-url-file.html fails on GTK+
        https://bugs.webkit.org/show_bug.cgi?id=55826

        Correct the implementation of handlePostReadFile which uses GIO APIs and
        actually resizes the buffer to fit the entire size of the file data. This
        was likely leading to memory corruption until now.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::handlePostReadFile): Fix this method.

2011-03-05  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Allow dynamic enabling of detailed heap profiles.
        https://bugs.webkit.org/show_bug.cgi?id=55824

        Detailed heap profiles can be now enabled by typing "leakz" in Profiles tab.

        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype.isDetailedSnapshot):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot.doParse):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype._reportHeapSnapshotProgress):
        (WebInspector.ProfilesPanel.prototype.handleShortcut):
        (WebInspector.ProfilesPanel.prototype._displayDetailedHeapProfilesEnabledHint.hideHint):
        (WebInspector.ProfilesPanel.prototype._displayDetailedHeapProfilesEnabledHint):
        (WebInspector.ProfilesPanel.prototype._enableDetailedHeapProfiles):
        (WebInspector.ProfilesPanel.prototype._recognizeKeyboardCombo):

2011-03-05  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Mobile Devices should include Model and Firmware Version in Webkit Generated User Agent String
        https://bugs.webkit.org/show_bug.cgi?id=48636

        Add model infomation into user agent string when qtmobility is available, but only for symbian, Maemo and MeeGo.

        * WebCore.pri:
        * features.pri:

2011-03-05  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: adding null check to prevent inspector tests from failing.

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorGutterChunk.prototype.get offsetTop):
        (WebInspector.TextEditorMainChunk.prototype.get offsetTop):

2011-03-05  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: chromium rebaseline, flaky test fix.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.DOMBreakpointView.prototype.populateStatusMessageElement.decorateNode):
        (WebInspector.DOMBreakpointView.prototype.populateStatusMessageElement):
        (WebInspector.DOMBreakpointView.prototype._format.formatters.s):
        (WebInspector.DOMBreakpointView.prototype._format.append):
        (WebInspector.DOMBreakpointView.prototype._format):

2011-03-04  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [chromium] pause when script is running is broken.
        https://bugs.webkit.org/show_bug.cgi?id=55762

        * inspector/CodeGeneratorInspector.pm:

2011-03-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Add Derived Sources to WebCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=55813

        Adding the derived source action to the GYP file required tweaking
        DerivedSources.make.  I'm not sure how DerivedSources.make worked
        before beause these paths were incorrectly based.

        * DerivedSources.make:
        * gyp/generate-derived-sources.sh: Added.
        * gyp/WebCore.gyp:

2011-03-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: fix layout tests flakiness.
        https://bugs.webkit.org/show_bug.cgi?id=55816

        - Order of issuing of evaluateForTestInFrontend was not guaranteed on the backend side (InspectorAgent side)
        - Order of dispatching using timeouts was guaranteed via queueing. Source of all kinds of pains on SnowLeopard Release (inspector.js)

        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::populateScriptObjects):
        (WebCore::InspectorAgent::evaluateForTestInFrontend):
        (WebCore::InspectorAgent::issueEvaluateForTestCommands):
        * inspector/InspectorAgent.h:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.FormattedRecord):
        * inspector/front-end/inspector.js:
        (WebInspector.dispatch):

2011-03-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        WebCore GYP build should generate fewer than 10,000 compile errors per file
        https://bugs.webkit.org/show_bug.cgi?id=55810

        This patch adds some missing include paths.  We need to figure out how
        to handle separate include paths per port.  It's clear that
        ForwardingHeaders are only useful for Mac, but it's less clear how to
        handle the others.

        * WebCore.gypi:
        * gyp/WebCore.gyp:

2011-03-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by Cameron Zwarich.

        <rdar://problem/9082946> Make the Core Text code path in GlyphPage::fill() more robust
        https://bugs.webkit.org/show_bug.cgi?id=55817

        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::GlyphPage::fill): When determining if a CTRun uses the primary font, compare against
        a CGFont obtained from Core Text for the primary font. This CGFont may be different from
        the CGFont stored in the FontPlatformData.

2011-03-05  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Darin Adler.

        HTMLInputElement::setValue() should schedule change event when the element is focused.
        Refactored tracking of "changed since last change event" state from renderer to DOM.In service of https://code.google.com/p/chromium/issues
        In service of https://code.google.com/p/chromium/issues/detail?id=42716
        https://bugs.webkit.org/show_bug.cgi?id=53160

        Test: fast/forms/onchange-change-type.html
        Test: fast/forms/onchange-setvalueforuser.html

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * dom/Element.h:
        (WebCore::Element::wasChangedSinceLastFormControlChangeEvent): Added.
        (WebCore::Element::setChangedSinceLastFormControlChangeEvent): Added.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::wasChangedSinceLastFormControlChangeEvent): Added.
        (WebCore::HTMLFormControlElement::setChangedSinceLastFormControlChangeEvent): Added.
        (WebCore::HTMLFormControlElement::dispatchFormControlChangeEvent): Also clear the "changed since last change event" flag.
        (WebCore::HTMLFormControlElement::dispatchFormControlInputEvent): Also set the "changed since last change event" flag.
        * html/HTMLFormControlElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType): Also clear the "changed since last change event" flag.
        (WebCore::HTMLInputElement::setValue):
            For a focused text field, dispatch an input event, but delay the change event until the field loses focus.
        (WebCore::HTMLInputElement::defaultEventHandler):
        (WebCore::HTMLInputElement::stepUpFromRenderer):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldCancelButtonElement::defaultEventHandler):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        (WebCore::RenderTextControl::subtreeHasChanged):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::subtreeHasChanged):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::WMLInputElement):
        (WebCore::WMLInputElement::defaultEventHandler):
        * wml/WMLInputElement.h:
        (WebCore::WMLInputElement::wasChangedSinceLastFormControlChangeEvent): Added.
        (WebCore::WMLInputElement::setChangedSinceLastFormControlChangeEvent): Added.

2011-03-04  Xianzhu Wang  <wangxianzhu@google.com>

        Reviewed by Adam Barth.

        Remove fake request loading of SVGImage to avoid MainResourceLoader
        leak. The frame->init() already ensures initialization of the
        document loader.

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

        Test: fast/images/svg-image-leak-loader.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-03-04  Mike Reed  <reed@google.com>

        Reviewed by Mihai Parparita.

        [Chromium] fast/canvas/canvas-arc-360-winding.html fails on Linux and Windows
        https://bugs.webkit.org/show_bug.cgi?id=49477

        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::addArc):

2011-03-04  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        On Mac, the bounding box sent to EditorClient::showCorrectionPanel() is incorrect when the correction occurs in an iframe.
        https://bugs.webkit.org/show_bug.cgi?id=55717
        <rdar://problem/9018127>

        manual-test: manual-tests/platforms/mac/autocorrection/autocorrection-in-iframe.html

        Previously, the bounding box passed into EditorClient::showCorrectionPanel() is in the frame's
        coordinate. This is incorrect when the correction occurs in an iframe. This patch added code
        to convert the bounding box to window coordinate using ScrollView::contentToWindow().

        * dom/Range.cpp:
        (WebCore::Range::getBoundingClientRect):
        (WebCore::Range::boundingRect):
        * dom/Range.h:
        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::correctionPanelTimerFired):
        (WebCore::Editor::windowRectForRange):
        * editing/Editor.h:
        * manual-tests/autocorrection/autocorrection-in-iframe.html: Added.
        * manual-tests/autocorrection/document-for-iframe-test.html: Added.

2011-03-04  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Those checking in Editor::removeSpellAndCorrectionMarkersFromWordsToBeEdited() should be done with VisiblePosition::isNull().
        https://bugs.webkit.org/show_bug.cgi?id=55731

        No new tests. There's no behavioral change.

        This patch improved clarity and readability of Editor::removeSpellAndCorrectionMarkersFromWordsToBeEdited().

        * editing/Editor.cpp:
        (WebCore::Editor::removeSpellAndCorrectionMarkersFromWordsToBeEdited):

2011-03-04  John Bauman  <jbauman@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] premultipliedAlpha WebGL context attribute is ignored.
        https://bugs.webkit.org/show_bug.cgi?id=55411

        Update compositor to set the blending of each layer correctly.

        Test: compositing/webgl/webgl-nonpremultiplied-blend.html

        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::CanvasLayerChromium):
        (WebCore::CanvasLayerChromium::draw):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayers):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::setContext):

2011-03-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should link with the correct frameworks
        https://bugs.webkit.org/show_bug.cgi?id=55804

        * gyp/WebCore.gyp:

2011-03-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should Check For Inappropriate Files in Framework
        https://bugs.webkit.org/show_bug.cgi?id=55806

        * gyp/WebCore.gyp:

2011-03-04  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        Add skeletal WebCore.gyp
        https://bugs.webkit.org/show_bug.cgi?id=55802

        This doesn't yet build, but the basic structure is there.

        * WebCore.gypi: Added headers and include directories variables.
        * gyp/WebCore.gyp: Added.

2011-03-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Remove unneeded round-trips through ../Source in the Chromium GYP build
        https://bugs.webkit.org/show_bug.cgi?id=55795

        This is just cleanup work, but it was bugging me.

        * WebCore.gyp/WebCore.gyp:

2011-03-04  Mike Reed  <reed@google.com>

        Reviewed by James Robinson.

        Option to use skia's native text drawing APIs when drawing text
        on Windows, rather than from outlines using drawPath(). This will
        only have a significant effect when the skia-gpu backend is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=55609

        No new tests. This is disabled by default. When enabled, it will draw
        essentially the same, but with slightly different antialiased edges, due
        to differences between the current scanconverter and GDI's font scaler.
        When enabled, we will have to recalibrate layouttest image results. 

        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::skiaDrawText):
        (WebCore::setupPaintForFont):
        (WebCore::paintSkiaText):

2011-03-04  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Fix texture stride issues on large content and image layers.
        https://bugs.webkit.org/show_bug.cgi?id=55679

        This was an error caused during the refactoring in r80081.

        Tests: LayoutTests/compositing/tiling/huge-layer-img.html

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateTexture):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateTextureIfNeeded):

2011-03-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80379.
        http://trac.webkit.org/changeset/80379
        https://bugs.webkit.org/show_bug.cgi?id=55799

        "Breaks leopard compile (implicit conversion)" (Requested by
        tonyg-cr on #webkit).

        * css/CSSStyleSelector.cpp:
        (WebCore::convertToLength):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::createTransformOperations):
        * platform/Length.h:
        (WebCore::Length::Length):
        (WebCore::Length::operator==):
        (WebCore::Length::operator!=):
        (WebCore::Length::rawValue):
        (WebCore::Length::type):
        (WebCore::Length::quirk):
        (WebCore::Length::setValue):
        (WebCore::Length::setRawValue):
        (WebCore::Length::calcFloatValue):
        (WebCore::Length::isZero):
        (WebCore::Length::blend):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):

2011-03-04  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        Add in the CFURLSTORAGESESSIONS guards that I incorrectly left out because the code was
        contained within guards that made USE(CFURLSTORAGESESSIONS) always be true.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::makeFinalRequest):
        (WebCore::ResourceHandle::willSendRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::willSendRequest):
        * platform/network/mac/ResourceRequestMac.mm:

2011-03-04  Yuqiang Xian  <yuqiang.xian@intel.com>

        Reviewed by Darin Adler.

        improve layout performance by reducing the traversal time of the floating objects
        https://bugs.webkit.org/show_bug.cgi?id=55440

        We observered large overhead on traversing the floating objects list
        in logicalLeftOffsetForLine() and logicalRightOffsetForLine() especially
        when the list becomes enormous, for example in the default 30x30 maze test
        from http://ie.microsoft.com/testdrive/Performance/MazeSolver/Default.html
        there're >3700 floating objects. When placing a new floating object the
        entire list (from begin to end) is traversed for multiple times.
        There's a low hanging fruit to reduce the chances to do the traversal
        which is especially applicable in logicalLeftOffsetForLine and logicalRightOffsetForLine.
        As the two routines either cares about FloatLeft objects or FloatRight objects only,
        if we know there's no corresponding type floating objects in the list
        we can avoid the traversal actually. One thing we could do is to record
        the number of FloatLeft objects and the number of FloatRight objects and
        add a check before doing the traversal. This can reduce the time by 45%
        to resolve the 30x30 Maze measured on N470 Netbook MeeGo using latest
        Chromium browser 11 (from 503s to 269s).

        No new tests, relying on existing layout tests.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::~RenderBlock):
        (WebCore::RenderBlock::addOverflowFromFloats):
        (WebCore::RenderBlock::repaintOverhangingFloats):
        (WebCore::RenderBlock::paintFloats):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::removeFloatingObject):
        (WebCore::RenderBlock::removeFloatingObjectsBelow):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::positionNewFloatOnLine):
        (WebCore::RenderBlock::logicalLeftOffsetForLine):
        (WebCore::RenderBlock::logicalRightOffsetForLine):
        (WebCore::RenderBlock::nextFloatLogicalBottomBelow):
        (WebCore::RenderBlock::lowestFloatLogicalBottom):
        (WebCore::RenderBlock::clearFloats):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::addIntrudingFloats):
        (WebCore::RenderBlock::containsFloat):
        (WebCore::RenderBlock::hitTestFloats):
        (WebCore::RenderBlock::adjustForBorderFit):
        (WebCore::RenderBlock::FloatingObjects::clear):
        (WebCore::RenderBlock::FloatingObjects::increaseObjectsCount):
        (WebCore::RenderBlock::FloatingObjects::decreaseObjectsCount):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::containsFloats):
        (WebCore::RenderBlock::FloatingObjects::FloatingObjects):
        (WebCore::RenderBlock::FloatingObjects::hasLeftObjects):
        (WebCore::RenderBlock::FloatingObjects::hasRightObjects):
        (WebCore::RenderBlock::FloatingObjects::set):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::matchedEndLine):

2011-03-04  Rik Cabanier  <cabanier@gmail.com>

        Reviewed by David Hyatt.

        Fix that allows fixed length values to be floating point
        https://bugs.webkit.org/show_bug.cgi?id=52699

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::convertToLength):
        (WebCore::convertToIntLength):
        (WebCore::convertToFloatLength):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::createTransformOperations):
        * platform/Length.h:
        (WebCore::Length::Length):
        (WebCore::Length::operator==):
        (WebCore::Length::operator!=):
        (WebCore::Length::rawValue):
        (WebCore::Length::type):
        (WebCore::Length::quirk):
        (WebCore::Length::setValue):
        (WebCore::Length::calcFloatValue):
        (WebCore::Length::isZero):
        (WebCore::Length::blend):
        (WebCore::Length::getIntValue):
        (WebCore::Length::getFloatValue):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):

2011-03-04  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Jon Honeycutt.

        Adopt VersionStamper tool for Windows WebKit DLLs
        https://bugs.webkit.org/show_bug.cgi?id=55784
        
        We now use a tool to stamp the version number onto the Apple WebKit DLLs
        during the post-build step.

        * WebCore.vcproj/QTMovieWin.rc: Removed.
        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/QTMovieWinPostBuild.cmd: Stamp version with VersionStamper.
        * WebCore.vcproj/QTMovieWinPreBuild.cmd: Don't run auto-version.sh. We don't use autoversion.h in this project.
        * WebCore.vcproj/WebCoreMediaQT.vsprops: Remove unnecessary include paths for resource files.

2011-03-04  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by Adam Barth.

        Clarify comment about potential memory leak in SVGImage
        https://bugs.webkit.org/show_bug.cgi?id=55362

        No functionality change. No new tests.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-03-04  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        When Private Browsing is enabled, get the cached url response from the cache associated with
        the Private Browsing Storage Session.

        * WebCore.exp.in:
        Export the symbol for ResourceHandle::privateBrowsingStorageSession.

2011-03-04  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JSC and V8 versions of Java bridge should share JobjectWrapper
        https://bugs.webkit.org/show_bug.cgi?id=55763

        No new tests, refactoring only.

        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/jni/JobjectWrapper.cpp:
        (JobjectWrapper::JobjectWrapper):
        (JobjectWrapper::~JobjectWrapper):
        * bridge/jni/JobjectWrapper.h:
        (JSC::Bindings::JobjectWrapper::instance):
        (JSC::Bindings::JobjectWrapper::setInstance):
        (JSC::Bindings::JobjectWrapper::ref):
        (JSC::Bindings::JobjectWrapper::deref):
        * bridge/jni/jsc/JNIBridgeJSC.cpp:
        (JavaField::JavaField):
        (JavaArray::JavaArray):
        * bridge/jni/jsc/JNIBridgeJSC.h:
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::JavaInstance):
        * bridge/jni/jsc/JavaInstanceJSC.h:

2011-03-04  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Move shared code into SVGStyledTransformableElement::svgAttributeChanged
        https://bugs.webkit.org/show_bug.cgi?id=55771

        All sub classes of SVGStyledTransformableElement request a relayout
        the same way. So move that code into the common base class.

        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::svgAttributeChanged):
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::svgAttributeChanged):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::svgAttributeChanged):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::svgAttributeChanged):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::svgAttributeChanged):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::svgAttributeChanged):
        * svg/SVGStyledTransformableElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged):

2011-03-03  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] Get rid of IsContentFiltered flags since they&apos;re not used anymore
        https://bugs.webkit.org/show_bug.cgi?id=55748

        * platform/network/chromium/ResourceResponse.cpp:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):

2011-03-03  Timothy Hatcher  <timothy@apple.com>

        Export SerializedScriptValue::create(JSC::ExecState* exec, JSC::JSValue value).

        Reviewed by Darin Adler.

        * WebCore.exp.in: Added __ZN7WebCore21SerializedScriptValue6createEPN3JSC9ExecStateENS1_7JSValueE.

2011-03-04  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: extract all code that depends on source mapping from SourceFrame.
        https://bugs.webkit.org/show_bug.cgi?id=55464

        Extract all dependencies on DebuggerModel and ScriptsPanel to a delegate class
        to encapsulate source mapping aspects from SourceFrame.

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.createResourceView):
        (WebInspector.SourceFrameDelegateForResourcesPanel):
        (WebInspector.SourceFrameDelegateForResourcesPanel.prototype.requestContent):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        (WebInspector.SourceFrameDelegateForScriptsPanel):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.show):
        (WebInspector.SourceFrame.prototype._createTextViewer):
        (WebInspector.SourceFrame.prototype._contextMenu.addConditionalBreakpoint.didEditBreakpointCondition):
        (WebInspector.SourceFrame.prototype._contextMenu.addConditionalBreakpoint):
        (WebInspector.SourceFrame.prototype._contextMenu.else.editBreakpointCondition.didEditBreakpointCondition):
        (WebInspector.SourceFrame.prototype._contextMenu.else.editBreakpointCondition):
        (WebInspector.SourceFrame.prototype._contextMenu.else.setBreakpointEnabled):
        (WebInspector.SourceFrame.prototype._contextMenu):
        (WebInspector.SourceFrame.prototype._mouseDown):
        (WebInspector.SourceFrame.prototype._mouseMove):
        (WebInspector.SourceFrame.prototype._hidePopup):
        (WebInspector.SourceFrame.prototype._mouseHover):
        (WebInspector.SourceFrame.prototype._showPopup.showObjectPopup):
        (WebInspector.SourceFrame.prototype._showPopup):
        (WebInspector.SourceFrame.prototype._doubleClick):
        (WebInspector.SourceFrame.prototype._didEditLine):
        (WebInspector.SourceFrameDelegate):
        (WebInspector.SourceFrameDelegate.prototype.requestContent):
        (WebInspector.SourceFrameDelegate.prototype.debuggingSupported):
        (WebInspector.SourceFrameDelegate.prototype.setBreakpoint):
        (WebInspector.SourceFrameDelegate.prototype.removeBreakpoint):
        (WebInspector.SourceFrameDelegate.prototype.updateBreakpoint):
        (WebInspector.SourceFrameDelegate.prototype.findBreakpoint):
        (WebInspector.SourceFrameDelegate.prototype.continueToLine):
        (WebInspector.SourceFrameDelegate.prototype.canEditScriptSource):
        (WebInspector.SourceFrameDelegate.prototype.editScriptSource):
        (WebInspector.SourceFrameDelegate.prototype.debuggerPaused):
        (WebInspector.SourceFrameDelegate.prototype.evaluate):
        (WebInspector.SourceFrameDelegate.prototype.releaseEvaluationResult):

2011-03-04  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Extensions API] maintain own, unique & persistent identifiers for resources.
        https://bugs.webkit.org/show_bug.cgi?id=55686

        - Use internal ids for resources in extension server.
        - Log errors in inspector tests.

        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer):
        (WebInspector.ExtensionServer.prototype.resetResources):
        (WebInspector.ExtensionServer.prototype._notifyResourceFinished):
        (WebInspector.ExtensionServer.prototype._onRevealAndSelectResource):
        (WebInspector.ExtensionServer.prototype._onGetHAR):
        (WebInspector.ExtensionServer.prototype._onGetResourceContent):
        (WebInspector.ExtensionServer.prototype._resourceId):
        (WebInspector.ExtensionServer.prototype._resourceById):
        * inspector/front-end/HAREntry.js:
        (WebInspector.HARLog):
        (WebInspector.HARLog.prototype._convertResource):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._reset):

2011-03-04  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: exceptions when building context menu in network panel
        https://bugs.webkit.org/show_bug.cgi?id=55678

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype.dataGridNodeFromNode):
        (WebInspector.DataGrid.prototype.dataGridNodeFromPoint):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._contextMenu):

2011-03-04  Ilya Sherman  <isherman@chromium.org>

        Reviewed by James Robinson.

        Override paintScrollCorner() for FramelessScrollView to forego any custom scrollbar corner rendering.
        This was previously done in ScrollbarThemeChromium, but we also need this on the Mac when the ScrollView
        is a FramelessScrollView -- which is mostly just for Autofill.
        In service of http://crbug.com/73772 (crash)
        https://bugs.webkit.org/show_bug.cgi?id=55557

        No tests added because this fix is Chromium-specific and the code is currently untestable from within WebKit.
        In particular, DRT crashes when trying to render a FramelessScrollView.

        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::paintScrollCorner): Body moved to static function defaultPaintScrollCorner().
        (WebCore::ScrollbarTheme::defaultPaintScrollCorner): Added.
        * platform/chromium/FramelessScrollView.cpp:
        (WebCore::FramelessScrollView::paintContents):
        (WebCore::FramelessScrollView::paintScrollCorner): Fix implementation moved to here from ScrollbarThemeChromium
        * platform/chromium/FramelessScrollView.h:
        * platform/chromium/ScrollbarThemeChromium.cpp:
        * platform/chromium/ScrollbarThemeChromium.h:

2011-03-04  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move dispatching of didCommitLoad to agents into InspectorInstrumentation
        https://bugs.webkit.org/show_bug.cgi?id=55770

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::didCommitLoad):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::~InspectorCSSAgent):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::~InspectorDatabaseAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCommitLoad):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::create):
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::~InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
        (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):
        (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
        (WebCore::InspectorProfilerAgent::stopUserInitiatedProfiling):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::inspectorCSSAgent):
        (WebCore::InstrumentingAgents::setInspectorCSSAgent):
        (WebCore::InstrumentingAgents::inspectorDOMStorageAgent):
        (WebCore::InstrumentingAgents::setInspectorDOMStorageAgent):
        (WebCore::InstrumentingAgents::inspectorDatabaseAgent):
        (WebCore::InstrumentingAgents::setInspectorDatabaseAgent):
        (WebCore::InstrumentingAgents::inspectorApplicationCacheAgent):
        (WebCore::InstrumentingAgents::setInspectorApplicationCacheAgent):
        (WebCore::InstrumentingAgents::inspectorDebuggerAgent):
        (WebCore::InstrumentingAgents::setInspectorDebuggerAgent):
        (WebCore::InstrumentingAgents::inspectorBrowserDebuggerAgent):
        (WebCore::InstrumentingAgents::setInspectorBrowserDebuggerAgent):
        (WebCore::InstrumentingAgents::inspectorProfilerAgent):
        (WebCore::InstrumentingAgents::setInspectorProfilerAgent):

2011-03-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: rename RuntimeAgent's function from releaseWrapperObjectGroup to releaseObjectGroup.
        https://bugs.webkit.org/show_bug.cgi?id=55773

        * inspector/CodeGeneratorInspector.pm:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::releaseObjectGroup):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::releaseObjectGroup):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.idl:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::clearConsoleMessages):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::releaseObjectGroup):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions.evaluatedProperties):
        (WebInspector.ConsoleView.prototype.completions):
        * inspector/front-end/PropertiesSidebarPane.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._hidePopup):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):

2011-03-02  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Gutter height should be 100% when few lines are displayed
        https://bugs.webkit.org/show_bug.cgi?id=55574

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._startEditing):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._syncScroll):
        (WebInspector.TextEditorGutterPanel.prototype._expandChunks):
        (WebInspector.TextEditorGutterPanel.prototype.textChanged):
        (WebInspector.TextEditorGutterPanel.prototype.syncClientHeight):
        * inspector/front-end/textViewer.css:
        (.text-editor-lines):
        (.text-editor-contents .inner-container):
        (.webkit-line-number):

2011-03-04  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Do bisect to find visible chunks
        https://bugs.webkit.org/show_bug.cgi?id=55685

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorChunkedPanel.prototype._chunkNumberForLine):
        (WebInspector.TextEditorChunkedPanel.prototype._findVisibleChunks):
        (WebInspector.TextEditorChunkedPanel.prototype._repaintAll):
        (WebInspector.TextEditorGutterChunk.prototype.get offsetTop):
        (WebInspector.TextEditorMainPanel.prototype._updateHighlightsForRange):
        (WebInspector.TextEditorMainChunk.prototype.get offsetTop):

2011-03-04  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] DOMNodeRemoved events are missing
        https://bugs.webkit.org/show_bug.cgi?id=55769

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype._handleDOMUpdates):
        (WebInspector.TextEditorMainChunk):
        (WebInspector.TextEditorMainChunk.prototype._createRow):

2011-03-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Remove unnecessary domain and success flags from the response messages.
        https://bugs.webkit.org/show_bug.cgi?id=55768

        We have domain property in the response messages but it is not used because we dispatch
        the responses on the callback associated with seq.

        If we have property 'errors' in the response then success eq false and true in the other case.

        * inspector/CodeGeneratorInspector.pm:

2011-03-04  Christian Dywan  <christian@lanedo.com>

        Reviewed by Gustavo Noronha Silva.

        Enable Copy Image Address context menu item in the Gtk port
        https://bugs.webkit.org/show_bug.cgi?id=55136

        * page/ContextMenuController.cpp:
        * platform/ContextMenuItem.h:
        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.cpp:
        * platform/LocalizedStrings.h:
        * platform/gtk/ContextMenuItemGtk.cpp:
        * platform/gtk/LocalizedStringsGtk.cpp:

2011-03-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: implement getCompletions via evaluate.
        https://bugs.webkit.org/show_bug.cgi?id=55759

        * inspector/InjectedScript.cpp:
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.idl:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions.evaluated):
        (WebInspector.ConsoleView.prototype.completions.evaluatedProperties):
        (WebInspector.ConsoleView.prototype.completions):
        (WebInspector.ConsoleView.prototype._reportCompletions):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame.updatingCallbackWrapper):
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._showPopup):
        (WebInspector.SourceFrame.prototype._evalSelectionInCallFrame):

2011-03-04  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        V8 version of JavaString should obtain string from JNI in UTF-16 encoding
        https://bugs.webkit.org/show_bug.cgi?id=55566

        We obtain the string from JNI in UTF-16 encoding and convert
        to UTF-8 using our own routines as required. This matches the
        behaviour of the JSC version of JavaString.

        No new tests, no change in behaviour.

        * bridge/jni/v8/JavaStringV8.h:
        (JSC::Bindings::JavaStringImpl::init):
        (JSC::Bindings::JavaStringImpl::utf8):
        (JSC::Bindings::JavaStringImpl::impl):

2011-03-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: do not push document into front-end, make it request one.
        https://bugs.webkit.org/show_bug.cgi?id=55664

        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorAgent.h:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::clearFrontend):
        (WebCore::InspectorDOMAgent::setDocument):
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::boundNodeId):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::mainFrameDOMContentLoaded):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.restoreDOMBreakpoints):
        (WebInspector.DOMBreakpointView.prototype.populateStatusMessageElement.decorateNode):
        (WebInspector.DOMBreakpointView.prototype.populateStatusMessageElement):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMDocument):
        (WebInspector.DOMAgent):
        (WebInspector.DOMAgent.prototype.requestDocument):
        (WebInspector.DOMAgent.prototype.pushNodeToFrontend):
        (WebInspector.DOMAgent.prototype.pushNodeByPathToFrontend):
        (WebInspector.DOMAgent.prototype._attributesUpdated):
        (WebInspector.DOMAgent.prototype._characterDataModified):
        (WebInspector.DOMAgent.prototype._documentUpdated):
        (WebInspector.DOMAgent.prototype._setDocument):
        (WebInspector.DOMAgent.prototype._setDetachedRoot):
        (WebInspector.DOMAgent.prototype._setChildNodes):
        (WebInspector.DOMAgent.prototype._childNodeInserted):
        (WebInspector.DOMAgent.prototype._childNodeRemoved):
        (WebInspector.DOMDispatcher.prototype.documentUpdated):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.show):
        (WebInspector.ElementsPanel.prototype.setDocument):
        * inspector/front-end/MetricsSidebarPane.js:
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.pushNodeToFrontend):

2011-03-04  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: summary bar may overlap content of the network item view
        https://bugs.webkit.org/show_bug.cgi?id=55656

        - drop custom summary bar placement logic, do it with CSS instead.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype.resize):
        (WebInspector.NetworkPanel.prototype._createSummaryBar):
        (WebInspector.NetworkPanel.prototype._updateSummaryBar):
        (WebInspector.NetworkPanel.prototype._updateFilter):
        (WebInspector.NetworkPanel.prototype.show):
        (WebInspector.NetworkPanel.prototype.refresh):
        (WebInspector.NetworkPanel.prototype._reset):
        (WebInspector.NetworkPanel.prototype._setLargerResources):
        (WebInspector.NetworkPanel.prototype._updateOffscreenRows):
        * inspector/front-end/networkPanel.css:
        (.network-sidebar .data-grid td):
        (.network-sidebar tr.filler td):
        (.network-summary-bar):
        (.network-sidebar .data-grid .network-summary-bar td):
        (.network-summary-bar img):

2011-03-04  James Su <suzhe@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] keycode is always 0 when using non-Latin keyboard layout.
        https://bugs.webkit.org/show_bug.cgi?id=54939

        Add KeyEventCocoa.{h,mm}, so that we can reuse them in chromium.

        No intended functionality change.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-03-04  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed EFL build fix for r80324.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::paintThemePart):

2011-03-04  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed EFL build fix for r80324.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::paintThemePart):

2011-03-03  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: AppCache agent should have same lifetime as InspectorAgent
        https://bugs.webkit.org/show_bug.cgi?id=55673

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::createFrontendLifetimeAgents):
        (WebCore::InspectorAgent::releaseFrontendLifetimeAgents):
        (WebCore::InspectorAgent::didCommitLoad):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        (WebCore::InspectorApplicationCacheAgent::setFrontend):
        (WebCore::InspectorApplicationCacheAgent::clearFrontend):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::networkStateChangedImpl):
        (WebCore::InspectorInstrumentation::updateApplicationCacheStatusImpl):
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorApplicationCacheAgent):
        (WebCore::InstrumentingAgents::setInspectorApplicationCacheAgent):

2011-03-03  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Cleanup from https://bugs.webkit.org/show_bug.cgi?id=55427.
        
        Call WebCore::startObservingCookieChanges and WebCore::stopObservingCookieChanges
        on all platforms, and stub the functions on platforms that don't implement them.
        
        Add startObservingCookieChanges and stopObservingCookieChanges to TemporaryLinkStubs
        for platforms that don't implement them.

        * platform/android/TemporaryLinkStubs.cpp:
        * platform/brew/TemporaryLinkStubs.cpp:
        * platform/chromium/TemporaryLinkStubs.cpp:
        * platform/efl/TemporaryLinkStubs.cpp:
        * platform/gtk/TemporaryLinkStubs.cpp:
        * platform/haiku/TemporaryLinkStubs.cpp:
        * platform/qt/TemporaryLinkStubsQt.cpp:
        * platform/win/TemporaryLinkStubs.cpp:

2011-03-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        Refactor createRendererIfNeeded to avoid premature nextRenderer calculation
        https://bugs.webkit.org/show_bug.cgi?id=55720

        There are two thing going on here:
        1. Delaying nextRenderer calculation until we actually use it,
           previously we would always compute nextRenderer (expensive!)
           even if no renderer insertion was to occur.
        2. Fix fullscreen elements to be inserted into the right place
           in the rendering tree.  Previously they would always be the last
           child in their parent's list, even if that wasn't the right place.

        I don't know of any way to trigger the fullscreen bug,
        but I tested this with peacekeeper and saw no performance change.

        Peacekeeper's domJQueryBasics is now possibly as much as 2% faster
        but I don't really trust the stability of peacekeeper to begin with.

        This paves the way for further improvement in our nextRenderer calculation.

        * dom/Node.cpp:
        (WebCore::Node::attach):
        (WebCore::Node::previousRenderer):
        (WebCore::Node::nextRenderer):
        (WebCore::Node::createRendererAndStyle):
        (WebCore::wrapWithRenderFullScreen):
        (WebCore::Node::createRendererIfNeeded):
        * dom/Node.h:

2011-03-03  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Remove LOOSE_PASS_OWN_ARRAY_PTR from PassOwnArrayPtr.h
        https://bugs.webkit.org/show_bug.cgi?id=55554

        * platform/Length.cpp:
        (WebCore::newLengthArray): Pass nullptr instead of 0.

2011-03-03  Nat Duca  <nduca@chromium.org>

        Reviewed by James Robinson.

        [chromium] Create a LayerChromium layerTreeAsText. Add HUD to
        LayerRendererChromium that draws compositor FPS and, optionally,
        the layer tree.
        https://bugs.webkit.org/show_bug.cgi?id=54710

        * WebCore.gypi:
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        (WebCore::Canvas2DLayerChromium::drawsContent):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        (WebCore::CanvasLayerChromium::layerTypeAsString):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::writeIndent):
        (WebCore::ContentLayerChromium::dumpLayerProperties):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (WebCore::ContentLayerChromium::drawsContent):
        (WebCore::ContentLayerChromium::layerTypeAsString):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setName):
        (WebCore::GraphicsLayerChromium::updateNames):
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        (WebCore::GraphicsLayerChromium::setupContentsLayer):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.h:
        (WebCore::ImageLayerChromium::drawsContent):
        (WebCore::ImageLayerChromium::layerTypeAsString):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::setName):
        (WebCore::LayerChromium::layerTreeAsText):
        (WebCore::writeIndent):
        (WebCore::LayerChromium::dumpLayer):
        (WebCore::LayerChromium::dumpLayerProperties):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::name):
        (WebCore::LayerChromium::drawsContent):
        (WebCore::LayerChromium::debugID):
        (WebCore::LayerChromium::layerTypeAsString):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::~LayerRendererChromium):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::present):
        (WebCore::LayerRendererChromium::layerTreeAsText):
        (WebCore::LayerRendererChromium::dumpRenderSurfaces):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::getHeadsUpDisplay):
        (WebCore::LayerRendererChromium::rootVisibleRect):
        * platform/graphics/chromium/PluginLayerChromium.h:
        (WebCore::PluginLayerChromium::drawsContent):
        (WebCore::PluginLayerChromium::layerTypeAsString):
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::name):
        (WebCore::writeIndent):
        (WebCore::RenderSurfaceChromium::dumpSurface):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/VideoLayerChromium.h:
        (WebCore::VideoLayerChromium::drawsContent):
        (WebCore::VideoLayerChromium::layerTypeAsString):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        (WebCore::WebGLLayerChromium::drawsContent):
        (WebCore::WebGLLayerChromium::layerTypeAsString):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp: Added.
        (WebCore::CCHeadsUpDisplay::CCHeadsUpDisplay):
        (WebCore::CCHeadsUpDisplay::~CCHeadsUpDisplay):
        (WebCore::CCHeadsUpDisplay::draw):
        (WebCore::CCHeadsUpDisplay::drawHudContents):
        (WebCore::CCHeadsUpDisplay::onPresent):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h: Added.
        (WebCore::CCHeadsUpDisplay::setShowFPSCounter):
        (WebCore::CCHeadsUpDisplay::showFPSCounter):
        (WebCore::CCHeadsUpDisplay::setShowPlatformLayerTree):
        (WebCore::CCHeadsUpDisplay::showPlatformLayerTree):
        (WebCore::CCHeadsUpDisplay::enabled):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        (WebCore::writeIndent):
        (WebCore::CCLayerImpl::dumpLayerProperties):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::debugID):
        (WebCore::CCLayerImpl::setName):
        (WebCore::CCLayerImpl::name):

2011-03-02  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Darin Adler.

        crash in adoptNode with mutation events
        https://bugs.webkit.org/show_bug.cgi?id=50046

        If the DOM is modified during the removeChild call in adoptNode,
        then the setDocument call that follows can leave the DOM in an
        inconsistent state.

        * dom/Document.cpp:
        (WebCore::Document::adoptNode):

2011-03-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Add audio tag tests to the media controls manual test suite.
        https://bugs.webkit.org/show_bug.cgi?id=55722

        * manual-tests/media-controls.html: Added 4 audio tests.

2011-03-03  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Eric Seidel.

        [EFL] Adjust functions of RenderThemeEfl.cpp to WebKit parameter style
        https://bugs.webkit.org/show_bug.cgi?id=54392

        Functions of RenderThemeEfl.cpp adhere efl coding style instead of WebKit coding style.
        WebCore's functions should adhere WebKit coding style.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::themePartCacheEntryReset):
        (WebCore::RenderThemeEfl::themePartCacheEntrySurfaceCreate):
        (WebCore::RenderThemeEfl::cacheThemePartNew):
        (WebCore::RenderThemeEfl::cacheThemePartReset):
        (WebCore::RenderThemeEfl::cacheThemePartResizeAndReset):
        (WebCore::RenderThemeEfl::cacheThemePartGet):
        (WebCore::RenderThemeEfl::cacheThemePartFlush):
        (WebCore::RenderThemeEfl::applyEdjeStateFromForm):
        (WebCore::RenderThemeEfl::paintThemePart):
        (WebCore::renderThemeEflColorClassSelectionActive):
        (WebCore::renderThemeEflColorClassSelectionInactive):
        (WebCore::renderThemeEflColorClassFocusRing):
        (WebCore::renderThemeEflColorClassButtonText):
        (WebCore::renderThemeEflColorClassComboText):
        (WebCore::renderThemeEflColorClassEntryText):
        (WebCore::renderThemeEflColorClassSearchText):
        (WebCore::RenderThemeEfl::applyPartDescription):
        (WebCore::RenderThemeEfl::applyPartDescriptions):
        (WebCore::RenderThemeEfl::controlSupportsTints):
        (WebCore::RenderThemeEfl::baselinePosition):
        (WebCore::RenderThemeEfl::paintSliderTrack):
        (WebCore::RenderThemeEfl::adjustSliderTrackStyle):
        (WebCore::RenderThemeEfl::adjustSliderThumbStyle):
        (WebCore::RenderThemeEfl::paintSliderThumb):
        (WebCore::RenderThemeEfl::adjustCheckboxStyle):
        (WebCore::RenderThemeEfl::paintCheckbox):
        (WebCore::RenderThemeEfl::adjustRadioStyle):
        (WebCore::RenderThemeEfl::paintRadio):
        (WebCore::RenderThemeEfl::adjustButtonStyle):
        (WebCore::RenderThemeEfl::paintButton):
        (WebCore::RenderThemeEfl::adjustMenuListStyle):
        (WebCore::RenderThemeEfl::paintMenuList):
        (WebCore::RenderThemeEfl::adjustTextFieldStyle):
        (WebCore::RenderThemeEfl::paintTextField):
        (WebCore::RenderThemeEfl::adjustTextAreaStyle):
        (WebCore::RenderThemeEfl::paintTextArea):
        (WebCore::RenderThemeEfl::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeEfl::paintSearchFieldDecoration):
        (WebCore::RenderThemeEfl::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeEfl::paintSearchFieldResultsButton):
        (WebCore::RenderThemeEfl::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeEfl::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeEfl::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeEfl::paintSearchFieldCancelButton):
        (WebCore::RenderThemeEfl::adjustSearchFieldStyle):
        (WebCore::RenderThemeEfl::paintSearchField):
        (WebCore::RenderThemeEfl::adjustProgressBarStyle):
        (WebCore::RenderThemeEfl::paintProgressBar):
        (WebCore::RenderThemeEfl::paintMediaFullscreenButton):
        (WebCore::RenderThemeEfl::paintMediaMuteButton):
        (WebCore::RenderThemeEfl::paintMediaPlayButton):
        (WebCore::RenderThemeEfl::paintMediaSeekBackButton):
        (WebCore::RenderThemeEfl::paintMediaSeekForwardButton):
        (WebCore::RenderThemeEfl::paintMediaSliderTrack):
        (WebCore::RenderThemeEfl::paintMediaSliderThumb):
        (WebCore::RenderThemeEfl::paintMediaVolumeSliderContainer):
        (WebCore::RenderThemeEfl::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeEfl::paintMediaVolumeSliderThumb):
        (WebCore::RenderThemeEfl::paintMediaCurrentTime):

2011-03-03  Andy Estes  <aestes@apple.com>

        Reviewed by Adam Barth.

        Assertion failure in toElement(WebCore::Node*)
        https://bugs.webkit.org/show_bug.cgi?id=55697

        Test: fast/parser/fragment-foreign-content.html

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken): The current
        element in the HTMLElementStack might be a DocumentFragment if a
        fragment is being parsed who's first node is foreign content.

2011-03-03  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [QT] Implement mock client-based geolocation for layout testing
        https://bugs.webkit.org/show_bug.cgi?id=54334

        Implements client() to GeolocationController to re-use geolocationClientMock class
        for layout testing purpose.

        * page/GeolocationController.h:
        (WebCore::GeolocationController::client):

2011-03-03  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Stop calling deprecatedNode and deprecatedEditingOffset in InsertTextCommand
        https://bugs.webkit.org/show_bug.cgi?id=55352

        Stopped calling deprecatedNode and deprecatedEditingOffset in the following functions:

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::positionOutsideTabSpan): Takes care of all types of positions and
        no longer calls deprecated functions.
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::positionInsideTextNode): Ditto; renamed from prepareForTextInsertion.
        Check if the text node inside a tab span before checking if the container node is a text node
        because the position before or after a text node can still be inside a tab span.
        (WebCore::InsertTextCommand::input): No longer calls deprecated functions.
        * editing/InsertTextCommand.h:
        * editing/ModifySelectionListLevel.cpp:
        (WebCore::getStartEndListChildren): Call anchorNode() instead of deprecatedNode() because the start
        or the end of selection could be an immediate child of a list node (e.g. br inside ul)

2011-03-03  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Move last bits of SQL into IDBBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=55668

        After this, all SQL code for IndexedDB is in IDBBackingStore.cpp.

        No new tests: refactoring only.

        * storage/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::createTransaction):
        * storage/IDBBackingStore.h:
        * storage/IDBCursorBackendImpl.h:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::backingStore):
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBIndexBackendImpl.h:
        * storage/IDBKey.h:
        * storage/IDBObjectStoreBackendImpl.h:
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        * storage/IDBTransactionBackendImpl.h:
        * storage/IDBTransactionBackendInterface.h:
        * storage/IDBTransactionCoordinator.cpp:

2011-03-03  Adam Klein  <adamk@chromium.org>

        Reviewed by David Levin.

        [fileapi] Tighten up ResolveURICallbacks
        https://bugs.webkit.org/show_bug.cgi?id=55638

        Two changes:
          - Retry only on TYPE_MISMATCH_ERR now that Chromium
            properly sets that error code.
          - Call DirectoryEntry instead of DOMFileSystem methods.

        No change in behavior, so no new tests.

        * fileapi/FileSystemCallbacks.cpp:
        (WebCore::ResolveURICallbacks::didOpenFileSystem):

2011-03-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Get rid of Page::globalHistoryItem
        https://bugs.webkit.org/show_bug.cgi?id=55738

        The m_globalHistoryItem is only used by Mac and Windows WebKit1.
        Instead of having WebCore updating this member variable, just call out
        to a FrameLoaderClient member function and let WebKit keep it up to date.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::dispatchDidRemoveBackForwardItem):
        (WebCore::EmptyFrameLoaderClient::updateGlobalHistoryItemForPage):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::updateGlobalHistoryItemForPage):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::goToItem):
        (WebCore::HistoryController::updateForStandardLoad):
        (WebCore::HistoryController::updateForRedirectWithLockedBackForwardList):
        * page/Page.cpp:
        * page/Page.h:

2011-03-02  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Cursor.continue with a key param should test less than, not equal to
        https://bugs.webkit.org/show_bug.cgi?id=55640

        If you supply a param to cursor.continue, we sould guarantee that
        the item we continue to is greater than or equal to the parameter.
        Right now, we only test equality.

        http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBCursor-continue
        http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#dfn-steps-for-iterating-a-cursor

        Test: storage/indexeddb/cursor-continue.html

        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::continueFunctionInternal):
        * storage/IDBKey.cpp:
        (WebCore::IDBKey::isLessThan):
        (WebCore::IDBKey::isEqual):
        * storage/IDBKey.h:

2011-03-03  Brent Fulgham  <bfulgham@webkit.org>

        Build fix. Need win/cURL DownloadBundle stub.

        * platform/network/curl/DownloadBundle.h: Added.

2011-03-03  Geoffrey Garen  <ggaren@apple.com>

        Rolled out 80277 and 80280 because they caused event handler layout test
        failures.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.h:
        * bindings/js/JSWorkerContextBase.cpp:

2011-03-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=55721
        Global IconDatabase should be returned by reference, not as a pointer

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::~HistoryItem):
        (WebCore::HistoryItem::reset):
        (WebCore::HistoryItem::icon):
        (WebCore::HistoryItem::setURLString):

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::startIconLoader):
        (WebCore::FrameLoader::commitIconURLToIconDatabase):

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):

        * loader/icon/IconDatabase.cpp:
        (WebCore::iconDatabase):
        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabaseNone.cpp:
        (WebCore::iconDatabase):
        * loader/icon/wince/IconDatabaseWinCE.cpp:
        (WebCore::iconDatabase):

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::finishLoading):

2011-03-03  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Martin Robinson.

        Stop instantiating legacy editing positions in FocusController::advanceFocusInDocumentOrder
        https://bugs.webkit.org/show_bug.cgi?id=52742

        Use firstPositionInOrBeforeNode to instantiate appropriate position.

        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusInDocumentOrder):

2011-03-03  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        When displaying the missing plug-in sheet, pass the 'pluginspage'
        attribute to the UI process.
        https://bugs.webkit.org/show_bug.cgi?id=55553

        * WebCore.exp.in: Export __ZN7WebCore9HTMLNames15pluginspageAttrE.
        * html/HTMLAttributeNames.in: Add 'pluginspage' as a known content
        attribute.

2011-03-03  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435

        Set the Private Browsing Storage Session on requests when Private Browsing is enabled.

        * WebCore.exp.in:
        Support using WKCopyRequestWithStorageSession in WebCore.
        * platform/mac/WebCoreSystemInterface.h:
        Ditto.
        * platform/mac/WebCoreSystemInterface.mm:
        Ditto.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::makeFinalRequest):
        If Private Browsing is enabled, set the Private Browsing Storage Session on the request.
        (WebCore::ResourceHandle::willSendRequest):
        Ditto.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        Ditto.
        (WebCore::ResourceHandle::willSendRequest):
        Ditto.

        * platform/network/cf/ResourceRequest.h:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::setStorageSession):
        Call through to WKSI.
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::setStorageSession):
        Ditto.

2011-03-03  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION: Accelerated transitions are jumpy
        https://bugs.webkit.org/show_bug.cgi?id=55022

        Changed the way default TimingFunction is stored according to Adam Roben's
        suggestion.

        * platform/animation/TimingFunction.h:
        (WebCore::CubicBezierTimingFunction::defaultTimingFunction):

2011-03-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Rename -webkit-hyphenate-locale to -webkit-locale
        https://bugs.webkit.org/show_bug.cgi?id=55709

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::cssPropertyID):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::locale):
        (WebCore::InheritedFlags::setLocale):
        (WebCore::InheritedFlags::initialLocale):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:

2011-03-03  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes. Use Font::textMetrics to get ascent value, and add missing include.

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

2011-03-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        JSVariableObject needs to use WriteBarrier for symboltable property storage
        https://bugs.webkit.org/show_bug.cgi?id=55698

        Update to pass JSGlobalData for the symbol table write used
        to set the document property.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::updateDocument):

2011-03-03  Alexey Proskuryakov  <ap@apple.com>

        More build fixing. Move WebCoreKeyboardUIMode.h to a cross-platform location.

        * WebCore.xcodeproj/project.pbxproj:
        * page/WebCoreKeyboardUIMode.h: Copied from WebCore/page/mac/WebCoreKeyboardUIMode.h.
        * page/mac/WebCoreKeyboardUIMode.h: Removed.

2011-03-03  Alexey Proskuryakov  <ap@apple.com>

        Build fix. Should include WebCoreKeyboardUIMode.h on all platforms now.

        * page/ChromeClient.h:

2011-03-02  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (WebKit2): Tab keys no longer observe Full Keyboard Access
        https://bugs.webkit.org/show_bug.cgi?id=55633
        <rdar://problem/8963023>

        * loader/EmptyClients.h: (WebCore::EmptyChromeClient::keyboardUIMode):
        * page/ChromeClient.h:
        * page/EventHandler.cpp: (WebCore::EventHandler::tabsToLinks):
        Merged tabsToLinks() and keyboardUIMode(). The latter returned a superset of information
        returned by former.

2011-03-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Fix Win compile break, caused by r80276.

        * rendering/RenderThemeWin.h: Changed signature of volumeSliderOffsetFromMuteButton
            to match RenderTheme.h.

2011-03-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Moved all variable object storage inline -- upping the object size limit to 1K
        https://bugs.webkit.org/show_bug.cgi?id=55653

        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.h:
        * bindings/js/JSWorkerContextBase.cpp: Removed out-of-line storage. Changed d-> to m_.

2011-03-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Use RenderBox in volumeSliderOffsetFromMuteButton, since that's what is actually being used.
        https://bugs.webkit.org/show_bug.cgi?id=55099

        Cleanup, no behavior change.

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::updateVolumeSliderContainer): Changed to pass RenderBox
            instead of Node.
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::volumeSliderOffsetFromMuteButton): Changed
            to use RenderBox as argument.
        * rendering/RenderMediaControls.h: Ditto.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::volumeSliderOffsetFromMuteButton): Ditto.
        * rendering/RenderTheme.h: Ditto.
        * rendering/RenderThemeChromiumMac.h: Ditto.
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::volumeSliderOffsetFromMuteButton): Ditto.
        * rendering/RenderThemeMac.h: Ditto.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::volumeSliderOffsetFromMuteButton): Ditto.
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::volumeSliderOffsetFromMuteButton): Ditto.

2011-03-03  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        When building with DEFINES+=USE_GSTREAMER=1 we don't want to define ENABLE_QT_MULTIMEDIA to 1.
        Also add the new files added after https://bugs.webkit.org/show_bug.cgi?id=54870 to support GRefPtr
        for GstElement.

        * WebCore.pro:
        * features.pri:

2011-03-03  Anders Carlsson  <andersca@apple.com>

        Try to fix the Windows build again.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:

2011-03-03  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add another CRASH() for CSSSelector double frees
        https://bugs.webkit.org/show_bug.cgi?id=55693

        To help track down bug 53045, add a CRASH call when the the array and/or
        CSSSelector member in CSSSelectorList is disposed of more than once.

        Just a check, no new tests necessary.
        
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::deleteSelectors):

2011-03-03  Anders Carlsson  <andersca@apple.com>

        Yet another attempt at fixing the Windows build.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:

2011-03-02  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION: Accelerated transitions are jumpy
        https://bugs.webkit.org/show_bug.cgi?id=55022

        Got rid of default TimingFunction values from PlatformCAAnimation*. A TimingFunction
        is now always passed in. The TimingFunction class now has a static method to get
        a default object which has the 'ease' values in it. I now assert in both Mac and
        Win implementations if a null TimingFunction pointer is seen.

        * platform/animation/TimingFunction.h:
        (WebCore::CubicBezierTimingFunction::create):
        (WebCore::CubicBezierTimingFunction::defaultTimingFunction):
        (WebCore::CubicBezierTimingFunction::CubicBezierTimingFunction):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::timingFunctionForAnimationValue):
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (toCAMediaTimingFunction):
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (toCACFTimingFunction):

2011-03-03  Tony Gentilcore  <tonyg@chromium.org>

        Unreviewed build fix.

        Fix clang compile after r80220
        https://bugs.webkit.org/show_bug.cgi?id=55692

        * storage/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::getPrimaryKeyViaIndex):

2011-03-03  Anders Carlsson  <andersca@apple.com>

        Attempt to fix the Windows build.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:

2011-03-02  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Rest of WebKit2: Need a way to send notifications to client when cookies change
        https://bugs.webkit.org/show_bug.cgi?id=55427
        <rdar://problem/9056027>

        Add functions to be exported.

        * WebCore.exp.in:

2011-03-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Improve WebCore build time by ~5%
        https://bugs.webkit.org/show_bug.cgi?id=55688

        Forward declare the CATransform3D and CGAffineTransform structs instead of including
        large chunks of QuartzCore and Core Graphics.

        On an 8 core Mac Pro, this sped up building WebCore by about 5%.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        * platform/graphics/ca/TransformationMatrixCA.cpp:
        * platform/graphics/transforms/TransformationMatrix.h:

2011-03-03  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed. Adjusted call to a method renamed in r80102.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._startEditing):

2011-03-03  Timothy Hatcher  <timothy@apple.com>

        Use APIEntryShim instead of JSLock in SerializedScriptValue to allow it to be used
        by contexts not created by WebCore.

        https://webkit.org/b/55642

        Reviewed by Oliver Hunt.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::create): Use APIEntryShim instead of JSLock.
        (WebCore::SerializedScriptValue::deserialize): Ditto.

2011-03-03  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        WebCore should check for "Upgrade" and "Connection" header fields in WebSockets handshake
        https://bugs.webkit.org/show_bug.cgi?id=55498
        <rdar://problem/8752706>

        Tests: http/tests/websocket/tests/handshake-fail-by-no-connection-header.html
               http/tests/websocket/tests/handshake-fail-by-no-upgrade-header.html

        * websockets/WebSocketHandshake.h: Removed unused and meaningless setters for response
        header fields. Removed separate member variables for those, as they were duplicating data
        available in response, and there is no reason to squeeze microsecods here.

        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::reset): There are no longer member variables for header field
        values to reset here.
        (WebCore::WebSocketHandshake::readServerHandshake): Removed a call for processHeaders().
        (WebCore::WebSocketHandshake::serverWebSocketOrigin): Changed to get the value from response.
        (WebCore::WebSocketHandshake::serverWebSocketLocation): Ditto.
        (WebCore::WebSocketHandshake::serverWebSocketProtocol): Ditto.
        (WebCore::WebSocketHandshake::serverSetCookie): Ditto.
        (WebCore::WebSocketHandshake::serverSetCookie2): Ditto.
        (WebCore::WebSocketHandshake::serverUpgrade): Added.
        (WebCore::WebSocketHandshake::serverConnection): Added.
        (WebCore::WebSocketHandshake::checkResponseHeaders): Added checks for Upgrade and Connection
        header field presence and values.

2011-03-03  Helder Correia  <helder@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] fast/canvas/canvas-strokePath-gradient-shadow.html fails
        https://bugs.webkit.org/show_bug.cgi?id=55651

        When relying on ContextShadow and using a gradient stroke for a path,
        the alpha of the shadow is incorrect.

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

2011-03-03  Martin Robinson  <mrobinson@igalia.com>

        XHTMLMP build broken after r78342
        https://bugs.webkit.org/show_bug.cgi?id=55286

        Fix XHTMLMP build now that the DocumentWriter is a member of DocumentLoader
        instead of FrameLoader.

        No new tests. This is a build fix.

        * dom/Document.cpp:
        (WebCore::Document::isXHTMLMPDocument):

2011-03-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        Tweak MediaControlMuteButtonElement class hierarchy.
        https://bugs.webkit.org/show_bug.cgi?id=55614

        This allows the mute button on the panel to have event handlers that are
        different from the mute button in the volume slider.

        No change in behavior, covered by existing tests.

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::createMuteButton): Changed to use MediaControlPanelMuteButtonElement.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlMuteButtonElement::updateDisplayType):
        (WebCore::MediaControlPanelMuteButtonElement::MediaControlPanelMuteButtonElement): Added.
        (WebCore::MediaControlPanelMuteButtonElement::create): Added.
        (WebCore::MediaControlPanelMuteButtonElement::shadowPseudoId): Moved.
        * rendering/MediaControlElements.h: Added defs.

2011-03-03  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Resource agent should have same lifetime as Inspector agent
        https://bugs.webkit.org/show_bug.cgi?id=55461

        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::inspectedPageDestroyed): disconnectFrontend is called before the agent is destroyed
        to clear frontend reference in all agents.
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::releaseFrontendLifetimeAgents):
        (WebCore::InspectorAgent::didCommitLoad):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::resourceAgent):
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::~InspectorBrowserDebuggerAgent):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::~InspectorDebuggerAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCreateWebSocketImpl):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl):
        (WebCore::InspectorInstrumentation::didCloseWebSocketImpl):
        (WebCore::InspectorInstrumentation::retrieveResourceAgent):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::setFrontend):
        (WebCore::InspectorResourceAgent::clearFrontend):
        (WebCore::InspectorResourceAgent::restore):
        (WebCore::InspectorResourceAgent::~InspectorResourceAgent):
        (WebCore::InspectorResourceAgent::enable):
        (WebCore::InspectorResourceAgent::disable):
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        (WebCore::InspectorResourceAgent::create):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::restore):
        * inspector/InspectorTimelineAgent.h:
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager):
        (WebInspector.NetworkManager.prototype.frontendReused):
        * inspector/front-end/inspector.js:
        (WebInspector.frontendReused):

2011-03-03  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Andreas Kling.

        CSS RGBA fast-path color parsing should clamp of out-of-range alpha values
        https://bugs.webkit.org/show_bug.cgi?id=55661

        Test case originally written by Andreas Kling <andreas.kling@nokia.com>

        Test: fast/canvas/rgba-parsing.html

        * css/CSSParser.cpp:
        (WebCore::isValidDouble): Check whether the given string is a valid double.
        (WebCore::parseAlphaValue): Out-of-range alpha values should be clamped to the (0.0, 1.0) range.

2011-03-03  David Holloway  <dhollowa@chromium.org>

        Reviewed by Dimitri Glazkov.

        Changes HTMLTextFormControlElement::placeholderShouldBeVisible to account
        for non-empty suggestion text.  The visibility of the placeholder text
        now turned off when suggestion text is set.
        https://bugs.webkit.org/show_bug.cgi?id=55245

        No new tests because, by design, the suggestion text is not accessible
        through the DOM.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::placeholderShouldBeVisible):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLTextFormControlElement::isEmptySuggestedValue):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isEmptySuggestedValue):

2011-03-03  Andy Estes  <aestes@apple.com>

        Reviewed by Eric Seidel.

        HTML5 TreeBuilder regressed a Peacekeeper DOM test by 25% (was 40%)
        https://bugs.webkit.org/show_bug.cgi?id=48719
        
        Instead of pushing a fake HTMLHtmlElement onto the open element stack
        during fragment parsing only to later remove it and reparent its
        children to the DocumentFragment, push the DocumentFragment directly
        onto the open element stack as the root node. This requires refactoring
        HTMLElementStack to hold ContainerNode pointers rather than Element
        pointers, which has implications for HTMLConstructionSite and
        HTMLTreeBuilder as well.
        
        With this patch, the regression in Peacekeeper from Safari 5.0.3 to ToT
        is ~14%. However, if you discount the 'domDynamicCreationCreateElement'
        test, ToT is now ~4% faster than Safari 5.0.3. This indicates that the
        regression no longer lies in fragment parsing.

        No new tests. No change in behavior.

        * dom/Element.h:
        (WebCore::Node::hasLocalName):
        * dom/Node.h:
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLNames::hasImpliedEndTag):
        (WebCore::HTMLConstructionSite::HTMLConstructionSite):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagInBody):
        (WebCore::HTMLConstructionSite::insertComment):
        (WebCore::HTMLConstructionSite::insertCommentOnHTMLHtmlElement):
        (WebCore::HTMLConstructionSite::attachToCurrent):
        (WebCore::HTMLConstructionSite::insertScriptElement):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::createElement):
        (WebCore::HTMLConstructionSite::createHTMLElement):
        (WebCore::HTMLConstructionSite::generateImpliedEndTagsWithExclusion):
        (WebCore::HTMLConstructionSite::generateImpliedEndTags):
        (WebCore::HTMLConstructionSite::findFosterSite):
        (WebCore::HTMLConstructionSite::shouldFosterParent):
        * html/parser/HTMLConstructionSite.h:
        (WebCore::HTMLConstructionSite::currentNode):
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isNumberedHeaderElement):
        (WebCore::HTMLNames::isScopeMarker):
        (WebCore::HTMLNames::isListItemScopeMarker):
        (WebCore::HTMLNames::isTableScopeMarker):
        (WebCore::HTMLNames::isTableBodyScopeMarker):
        (WebCore::HTMLNames::isTableRowScopeMarker):
        (WebCore::HTMLNames::isButtonScopeMarker):
        (WebCore::HTMLNames::isSelectScopeMarker):
        (WebCore::HTMLElementStack::ElementRecord::ElementRecord):
        (WebCore::HTMLElementStack::ElementRecord::replaceElement):
        (WebCore::HTMLElementStack::HTMLElementStack):
        (WebCore::HTMLElementStack::secondElementIsHTMLBodyElement):
        (WebCore::HTMLElementStack::popAll):
        (WebCore::HTMLElementStack::popUntilNumberedHeaderElementPopped):
        (WebCore::HTMLElementStack::popUntil):
        (WebCore::HTMLElementStack::popUntilPopped):
        (WebCore::HTMLElementStack::popUntilTableScopeMarker):
        (WebCore::HTMLElementStack::popUntilTableBodyScopeMarker):
        (WebCore::HTMLElementStack::popUntilTableRowScopeMarker):
        (WebCore::HTMLElementStack::pushHTMLHtmlElement):
        (WebCore::HTMLElementStack::push):
        (WebCore::HTMLElementStack::insertAbove):
        (WebCore::HTMLElementStack::find):
        (WebCore::HTMLElementStack::topmost):
        (WebCore::HTMLElementStack::contains):
        (WebCore::inScopeCommon):
        (WebCore::HTMLElementStack::hasNumberedHeaderElementInScope):
        (WebCore::HTMLElementStack::htmlElement):
        (WebCore::HTMLElementStack::rootNode):
        (WebCore::HTMLElementStack::pushCommon):
        * html/parser/HTMLElementStack.h:
        (WebCore::HTMLElementStack::ElementRecord::element):
        (WebCore::HTMLElementStack::ElementRecord::node):
        (WebCore::HTMLElementStack::topNode):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::finished):
        * html/parser/HTMLTreeBuilder.h:

2011-03-02  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: inspector protocol should allow different domains to have methods with same name
        https://bugs.webkit.org/show_bug.cgi?id=55558

        * inspector/CodeGeneratorInspector.pm: each command is now identified by domain + command-name(was command-name only).

2011-03-02  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make selected call frame debugger presentation model property.
        https://bugs.webkit.org/show_bug.cgi?id=55582

        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane):
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype.set selectedCallFrame):
        (WebInspector.CallStackSidebarPane.prototype._selectedCallFrameIndex):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype.get selectedCallFrame):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.getCompletionsOnCallFrame):
        (WebInspector.ScriptsPanel.prototype._debuggerResumed):
        (WebInspector.ScriptsPanel.prototype._sourceFrameLoaded):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):

2011-03-03  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        On Mac OS X, spelling suggestion panel stops showing up after change set 80121
        https://bugs.webkit.org/show_bug.cgi?id=55628

        Removed a call to stopCorrectionPanelTimer() to fix a regression introduced by changeset 80121.

        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing):
        * manual-tests/autocorrection/autocorrection-contraction.html:

2011-03-03  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: rename "sourceName" to "sourceFileId" in ScriptsPanel.js.
        https://bugs.webkit.org/show_bug.cgi?id=55569

        sourceFileId better reflects the intention to have unique identifier for each source that is shown in scripts panel.

        * inspector/front-end/DebuggerPresentationModel.js:
        * inspector/front-end/ScriptsPanel.js:

2011-03-03  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        JavaString API should be implementable by both JSC and V8
        https://bugs.webkit.org/show_bug.cgi?id=55567

        Remove JavaString's UString operator and replace it with a
        script-engine-independent impl() method, which returns a
        StringImpl and can be implemented with both JSC and V8.

        No new tests, refactoring only. 

        * bridge/jni/JNIBridge.h:
        (JSC::Bindings::JavaString::impl):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):
        * bridge/jni/jsc/JNIBridgeJSC.cpp:
        (JavaField::valueFromInstance):
        (JavaField::setValueToInstance):
        * bridge/jni/jsc/JavaClassJSC.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/jsc/JavaStringJSC.h:
        (JSC::Bindings::JavaStringImpl::impl):
        * bridge/jni/v8/JavaStringV8.h:
        (JSC::Bindings::JavaStringImpl::impl):

2011-03-03  Benjamin Poulain  <ikipou@gmail.com>

        Reviewed by Adam Roben.

        REGRESSION (r79817): Lots of leaks of FloatingObjects seen on SnowLeopard Intel Leaks bot
        https://bugs.webkit.org/show_bug.cgi?id=55602

        Delete the FloatingObject referenced by m_floatingObjects when clearing the floats.

        The DeprecatedPtrList was deleting the objects automatically due to its autoDelete behavior. The
        objects need to be deleted manually with ListHashSet.

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

2011-03-03  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Move SQL code, especially for cursors, to IDBBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=55376

        Move SQL code from IDBKey, IDBKeyRange, IDBIndexBackendImpl,
        IDBObjectStoreBackendImpl, and especially IDBCursorBackendImpl.

        No new functionality, so no new tests.

        * storage/IDBBackingStore.cpp:
        (WebCore::lowerCursorWhereFragment):
        (WebCore::upperCursorWhereFragment):
        (WebCore::IDBBackingStore::deleteObjectStoreRecord):
        (WebCore::IDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBBackingStore::getObjectViaIndex):
        (WebCore::keyFromQuery):
        (WebCore::IDBBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStore::keyExistsInIndex):
        (WebCore::CursorImplCommon::CursorImplCommon::continueInternal):
        (WebCore::CursorImplCommon::ObjectStoreCursorImpl::ObjectStoreCursorImpl):
        (WebCore::CursorImplCommon::ObjectStoreCursorImpl::objectStoreDataId):
        (WebCore::CursorImplCommon::ObjectStoreCursorImpl::key):
        (WebCore::CursorImplCommon::ObjectStoreCursorImpl::value):
        (WebCore::CursorImplCommon::ObjectStoreCursorImpl::continueFunction):
        (WebCore::IDBBackingStore::openObjectStoreCursor):
        (WebCore::ObjectStoreCursorImpl::loadCurrentRow):
        (WebCore::ObjectStoreCursorImpl::currentRowExists):
        (WebCore::IndexKeyCursorImpl::IndexKeyCursorImpl):
        (WebCore::IndexKeyCursorImpl::indexDataId):
        (WebCore::IndexKeyCursorImpl::key):
        (WebCore::IndexKeyCursorImpl::primaryKey):
        (WebCore::IndexKeyCursorImpl::continueFunction):
        (WebCore::IDBBackingStore::openIndexKeyCursor):
        (WebCore::IndexKeyCursorImpl::loadCurrentRow):
        (WebCore::IndexKeyCursorImpl::currentRowExists):
        (WebCore::IndexCursorImpl::IndexCursorImpl):
        (WebCore::IndexCursorImpl::indexDataId):
        (WebCore::IndexCursorImpl::key):
        (WebCore::IndexCursorImpl::primaryKey):
        (WebCore::IndexCursorImpl::value):
        (WebCore::IndexCursorImpl::continueFunction):
        (WebCore::IDBBackingStore::openIndexCursor):
        (WebCore::IndexCursorImpl::loadCurrentRow):
        (WebCore::IndexCursorImpl::currentRowExists):
        * storage/IDBBackingStore.h:
        (WebCore::IDBBackingStore::Cursor::~Cursor):
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::key):
        (WebCore::IDBCursorBackendImpl::value):
        (WebCore::IDBCursorBackendImpl::update):
        (WebCore::IDBCursorBackendImpl::continueFunctionInternal):
        (WebCore::IDBCursorBackendImpl::deleteFunction):
        * storage/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        (WebCore::IDBIndexBackendImpl::getInternal):
        (WebCore::IDBIndexBackendImpl::addingKeyAllowed):
        * storage/IDBIndexBackendImpl.h:
        * storage/IDBKey.cpp:
        (WebCore::IDBKey::isEqual):
        * storage/IDBKey.h:
        * storage/IDBKeyRange.cpp:
        * storage/IDBKeyRange.h:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
        * storage/IDBObjectStoreBackendImpl.h:

2011-03-03  Peter Kasting  <pkasting@google.com>

        Reviewed by James Robinson.

        Drop redundant "Windows; " from the Windows-specific User Agent string.
        https://bugs.webkit.org/show_bug.cgi?id=54567

        * StringsNotToBeLocalized.txt:

2011-03-03  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Combo boxes should emit object:selection-changed even when collapsed
        https://bugs.webkit.org/show_bug.cgi?id=53146

        Emit the selection-changed signals when the menu list value has changed

        Test: platform/gtk/accessibility/combo-box-collapsed-selection-changed.html

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::getListObject): New, return the right list object for
        menu lists and list boxes.
        (WebCore::notifyChildrenSelectionChange): Support menu lists.
        (WebCore::AXObjectCache::postPlatformNotification): Call function
        notifyChildrenSelectionChange for AXMenuListValueChanged.

2011-03-03  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        applyInlineStyleToPushDown and removeInlineStyleFromElement should take EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=55338

        Include wtf/Forward.h instead of wtf/text/String.h

        * editing/EditingStyle.h:

2011-03-03  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed trivial fix after r80169.

        [Qt][WK2] Memory exhausted when building qtwebkit2 on linux
        https://bugs.webkit.org/show_bug.cgi?id=55484

        * WebCore.pro: Typo fix. We have to use linux-g++* instead of linux-g++.


2011-03-02  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Refactoring] Make ScheduledEvent on FrameView abstract out to ScheduleAction
        https://bugs.webkit.org/show_bug.cgi?id=54440

        - Extracted FrameActionScheduler from FrameView
        - Extracted FrameAction abstract class from ScheduledEvent,
          which has fire() virtual method.
        - Renamed ScheduledEvent EventFrameAction
        
        With this change, Any action can be hooked up to the end of the layout.
        
        No new tests. No behavioral change.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/FrameActionScheduler.cpp: Added.
        (WebCore::EventFrameAction::EventFrameAction):
        (WebCore::EventFrameAction::fire):
        (WebCore::FrameActionScheduler::FrameActionScheduler):
        (WebCore::FrameActionScheduler::~FrameActionScheduler):
        (WebCore::FrameActionScheduler::isEmpty):
        (WebCore::FrameActionScheduler::clear):
        (WebCore::FrameActionScheduler::pause):
        (WebCore::FrameActionScheduler::resume):
        (WebCore::FrameActionScheduler::dispatch):
        (WebCore::FrameActionScheduler::scheduleAction):
        (WebCore::FrameActionScheduler::scheduleEvent):
        * page/FrameActionScheduler.h: Added.
        (WebCore::FrameAction::FrameAction):
        (WebCore::FrameAction::~FrameAction):
        (WebCore::FrameActionScheduler::isScheduled):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::scheduleEvent):
        (WebCore::FrameView::pauseScheduledEvents):
        (WebCore::FrameView::resumeScheduledEvents):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::updateOverflowStatus):
        * page/FrameView.h:

2011-03-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80201.
        http://trac.webkit.org/changeset/80201
        https://bugs.webkit.org/show_bug.cgi?id=55648

        "caused tests to crash on several bots" (Requested by rniwa on
        #webkit).

        * dom/Element.h:
        (WebCore::Node::hasTagName):
        * dom/Node.h:
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLNames::hasImpliedEndTag):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagInBody):
        (WebCore::HTMLConstructionSite::insertComment):
        (WebCore::HTMLConstructionSite::insertCommentOnHTMLHtmlElement):
        (WebCore::HTMLConstructionSite::attachToCurrent):
        (WebCore::HTMLConstructionSite::insertScriptElement):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::createElement):
        (WebCore::HTMLConstructionSite::createHTMLElement):
        (WebCore::HTMLConstructionSite::generateImpliedEndTagsWithExclusion):
        (WebCore::HTMLConstructionSite::generateImpliedEndTags):
        (WebCore::HTMLConstructionSite::findFosterSite):
        (WebCore::HTMLConstructionSite::shouldFosterParent):
        * html/parser/HTMLConstructionSite.h:
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isNumberedHeaderElement):
        (WebCore::HTMLNames::isScopeMarker):
        (WebCore::HTMLNames::isListItemScopeMarker):
        (WebCore::HTMLNames::isTableScopeMarker):
        (WebCore::HTMLNames::isTableBodyScopeMarker):
        (WebCore::HTMLNames::isTableRowScopeMarker):
        (WebCore::HTMLNames::isButtonScopeMarker):
        (WebCore::HTMLNames::isSelectScopeMarker):
        (WebCore::HTMLElementStack::ElementRecord::ElementRecord):
        (WebCore::HTMLElementStack::ElementRecord::replaceElement):
        (WebCore::HTMLElementStack::HTMLElementStack):
        (WebCore::HTMLElementStack::secondElementIsHTMLBodyElement):
        (WebCore::HTMLElementStack::popAll):
        (WebCore::HTMLElementStack::popUntilTableScopeMarker):
        (WebCore::HTMLElementStack::popUntilTableBodyScopeMarker):
        (WebCore::HTMLElementStack::popUntilTableRowScopeMarker):
        (WebCore::HTMLElementStack::popUntilForeignContentScopeMarker):
        (WebCore::HTMLElementStack::pushHTMLHtmlElement):
        (WebCore::HTMLElementStack::push):
        (WebCore::HTMLElementStack::insertAbove):
        (WebCore::HTMLElementStack::find):
        (WebCore::HTMLElementStack::topmost):
        (WebCore::inScopeCommon):
        (WebCore::HTMLElementStack::hasNumberedHeaderElementInScope):
        (WebCore::HTMLElementStack::htmlElement):
        (WebCore::HTMLElementStack::bodyElement):
        (WebCore::HTMLElementStack::pushCommon):
        * html/parser/HTMLElementStack.h:
        (WebCore::HTMLElementStack::ElementRecord::element):
        (WebCore::HTMLElementStack::top):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::finished):
        (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::finished):
        * html/parser/HTMLTreeBuilder.h:

2011-03-02  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: break down InspectorFrontend into domain-specific classes
        https://bugs.webkit.org/show_bug.cgi?id=55584

        * inspector/CodeGeneratorInspector.pm: InspectorFrontend now contains nested classes for
        all domains that have event notifications.
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::updateRepeatCountInConsole):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::inspectImpl):
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::inspectedPageDestroyed):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::populateScriptObjects):
        (WebCore::InspectorAgent::pushDataCollectedOffline):
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::domContentLoadedEventFired):
        (WebCore::InspectorAgent::loadEventFired):
        (WebCore::InspectorAgent::postWorkerNotificationToFrontend):
        (WebCore::InspectorAgent::evaluateForTestInFrontend):
        (WebCore::InspectorAgent::showPanel):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::setFrontend):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::show):
        (WebCore::InspectorController::close):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setFrontend):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::bind):
        * inspector/InspectorDOMStorageResource.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::FrontendProvider::frontend):
        (WebCore::InspectorDatabaseAgent::FrontendProvider::FrontendProvider):
        (WebCore::InspectorDatabaseAgent::setFrontend):
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setFrontend):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        (WebCore::InspectorProfilerAgent::setFrontend):
        (WebCore::InspectorProfilerAgent::clearFrontend):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::setFrontend):
        * inspector/InspectorTimelineAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMDispatcher.prototype.inspectElementRequested):
        (WebInspector.DOMDispatcher.prototype.addNodesToSearchResult):
        * inspector/front-end/inspector.js:

2011-03-02  Kent Tamura  <tkent@chromium.org>

        Unreviewed, a trivial regression fix.

        Fix LocalizedNumberICU regression by r80198 and r80199.
        https://bugs.webkit.org/show_bug.cgi?id=55629

        * platform/text/LocalizedNumberICU.cpp:
          We should use U_SUCCESS().
        (WebCore::createFormatterForCurrentLocale):
        (WebCore::parseLocalizedNumber):

2011-03-02  Dan Bernstein  <mitz@apple.com>

        Let Xcode know that Localizable.strings is UTF-16-encoded.

        * WebCore.xcodeproj/project.pbxproj:

2011-03-02  Andy Estes  <aestes@apple.com>

        Reviewed by Eric Seidel.

        HTML5 TreeBuilder regressed a Peacekeeper DOM test by 25% (was 40%)
        https://bugs.webkit.org/show_bug.cgi?id=48719
        
        Instead of pushing a fake HTMLHtmlElement onto the open element stack
        during fragment parsing only to later remove it and reparent its
        children to the DocumentFragment, push the DocumentFragment directly
        onto the open element stack as the root node. This requires refactoring
        HTMLElementStack to hold ContainerNode pointers rather than Element
        pointers, which has implications for HTMLConstructionSite and
        HTMLTreeBuilder as well.
        
        With this patch, the regression in Peacekeeper due to the introduction
        of the HTML5 fragment parsing algorithm is ~14%. The regression from
        Safari 5.0.3 is ~24%.

        No new tests. No change in behavior.

        * dom/Element.h:
        (WebCore::Node::hasLocalName):
        * dom/Node.h:
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLNames::hasImpliedEndTag):
        (WebCore::HTMLConstructionSite::HTMLConstructionSite):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagInBody):
        (WebCore::HTMLConstructionSite::insertComment):
        (WebCore::HTMLConstructionSite::insertCommentOnHTMLHtmlElement):
        (WebCore::HTMLConstructionSite::attachToCurrent):
        (WebCore::HTMLConstructionSite::insertScriptElement):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::createElement):
        (WebCore::HTMLConstructionSite::createHTMLElement):
        (WebCore::HTMLConstructionSite::generateImpliedEndTagsWithExclusion):
        (WebCore::HTMLConstructionSite::generateImpliedEndTags):
        (WebCore::HTMLConstructionSite::findFosterSite):
        (WebCore::HTMLConstructionSite::shouldFosterParent):
        * html/parser/HTMLConstructionSite.h:
        (WebCore::HTMLConstructionSite::currentNode):
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isNumberedHeaderElement):
        (WebCore::HTMLNames::isScopeMarker):
        (WebCore::HTMLNames::isListItemScopeMarker):
        (WebCore::HTMLNames::isTableScopeMarker):
        (WebCore::HTMLNames::isTableBodyScopeMarker):
        (WebCore::HTMLNames::isTableRowScopeMarker):
        (WebCore::HTMLNames::isButtonScopeMarker):
        (WebCore::HTMLNames::isSelectScopeMarker):
        (WebCore::HTMLElementStack::ElementRecord::ElementRecord):
        (WebCore::HTMLElementStack::ElementRecord::replaceElement):
        (WebCore::HTMLElementStack::HTMLElementStack):
        (WebCore::HTMLElementStack::secondElementIsHTMLBodyElement):
        (WebCore::HTMLElementStack::popAll):
        (WebCore::HTMLElementStack::popUntilNumberedHeaderElementPopped):
        (WebCore::HTMLElementStack::popUntil):
        (WebCore::HTMLElementStack::popUntilPopped):
        (WebCore::HTMLElementStack::popUntilTableScopeMarker):
        (WebCore::HTMLElementStack::popUntilTableBodyScopeMarker):
        (WebCore::HTMLElementStack::popUntilTableRowScopeMarker):
        (WebCore::HTMLElementStack::pushHTMLHtmlElement):
        (WebCore::HTMLElementStack::push):
        (WebCore::HTMLElementStack::insertAbove):
        (WebCore::HTMLElementStack::find):
        (WebCore::HTMLElementStack::topmost):
        (WebCore::HTMLElementStack::contains):
        (WebCore::inScopeCommon):
        (WebCore::HTMLElementStack::hasNumberedHeaderElementInScope):
        (WebCore::HTMLElementStack::htmlElement):
        (WebCore::HTMLElementStack::rootNode):
        (WebCore::HTMLElementStack::pushCommon):
        * html/parser/HTMLElementStack.h:
        (WebCore::HTMLElementStack::ElementRecord::element):
        (WebCore::HTMLElementStack::ElementRecord::node):
        (WebCore::HTMLElementStack::topNode):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::finished):
        * html/parser/HTMLTreeBuilder.h:

2011-03-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80188.
        http://trac.webkit.org/changeset/80188
        https://bugs.webkit.org/show_bug.cgi?id=55647

        Broke the WebKit API tests. (Requested by xenon on #webkit).

        * WebCore.exp.in:

2011-03-02  Kent Tamura  <tkent@chromium.org>

        Unreviewed, build fix.

        * platform/text/LocalizedNumberICU.cpp:
        (WebCore::createFormatterForCurrentLocale): Fix a typo.

2011-03-02  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Caching number formatter instances in LocalizedNumber* implementations
        https://bugs.webkit.org/show_bug.cgi?id=55629

        No new tests. This change doesn't change existing behavior, and is
        covered by existing tests.

        * platform/text/LocalizedNumberICU.cpp:
        (WebCore::createFormatterForCurrentLocale):
        (WebCore::numberFormatter): Introduce a function to return a static
          instance of NumberFormat.
        (WebCore::parseLocalizedNumber): Use numberFormatter().
        (WebCore::formatLocalizedNumber): Use numberFormatter().
        * platform/text/mac/LocalizedNumberMac.mm:
        (WebCore::createFormatterForCurrentLocale):
        (WebCore::numberFormatter): Introduce a function to return a static
          instance of NSNumberFormatter.
        (WebCore::parseLocalizedNumber): Use numberFormatter().
        (WebCore::formatLocalizedNumber): Use numberFormatter().

2011-03-02  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        deprecatedEditingOffset should actually return the expected deprecated value for "after" positions
        https://bugs.webkit.org/show_bug.cgi?id=54986

        Calls to deprecatedEditingOffset needs to return the expected value for new Before/After positions
        until we can update all the call sites to consider the new position types.

        No tests. This is intended to simplify the transition to new Positions, not to change behavior.

        * dom/Position.cpp:
        (WebCore::Position::deprecatedEditingOffset):
        (WebCore::Position::offsetForPositionAfterAnchor): Added to do the right thing while ensuring
        inline-speed for most calls to deprecatedEditingOffset.
        * dom/Position.h:

2011-03-02  Timothy Hatcher  <timothy@apple.com>

        Export SerializedScriptValue::create(JSC::ExecState* exec, JSC::JSValue value).

        Reviewed by Darin Adler.

        * WebCore.exp.in: Added __ZN7WebCore21SerializedScriptValue6createEPN3JSC9ExecStateENS1_7JSValueE.

2011-03-02  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by David Levin.

        Manually revert ChromiumDataObject changes.
        https://bugs.webkit.org/show_bug.cgi?id=55627

        No new tests since no functionality should change.

        * WebCore.gypi:
        * editing/chromium/EditorChromium.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::clearData):
        (WebCore::ChromiumDataObject::clearAll):
        (WebCore::ChromiumDataObject::clearAllExceptFiles):
        (WebCore::ChromiumDataObject::hasData):
        (WebCore::ChromiumDataObject::types):
        (WebCore::ChromiumDataObject::getData):
        (WebCore::ChromiumDataObject::setData):
        (WebCore::ChromiumDataObject::ChromiumDataObject):
        * platform/chromium/ChromiumDataObject.h:
        (WebCore::ChromiumDataObject::create):
        (WebCore::ChromiumDataObject::copy):
        (WebCore::ChromiumDataObject::urlTitle):
        (WebCore::ChromiumDataObject::setUrlTitle):
        (WebCore::ChromiumDataObject::htmlBaseUrl):
        (WebCore::ChromiumDataObject::setHtmlBaseUrl):
        (WebCore::ChromiumDataObject::containsFilenames):
        (WebCore::ChromiumDataObject::filenames):
        (WebCore::ChromiumDataObject::setFilenames):
        (WebCore::ChromiumDataObject::fileExtension):
        (WebCore::ChromiumDataObject::setFileExtension):
        (WebCore::ChromiumDataObject::fileContentFilename):
        (WebCore::ChromiumDataObject::setFileContentFilename):
        (WebCore::ChromiumDataObject::fileContent):
        (WebCore::ChromiumDataObject::setFileContent):
        * platform/chromium/ClipboardChromium.cpp:
        * platform/chromium/ClipboardChromium.h:

2011-03-02  David Grogan  <dgrogan@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: fire versionchange events when calling setVersion
        https://bugs.webkit.org/show_bug.cgi?id=55095

        * dom/EventNames.h:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::setVersion):
        (WebCore::IDBDatabase::close):
        (WebCore::IDBDatabase::onVersionChange):
        (WebCore::IDBDatabase::open):
        (WebCore::IDBDatabase::enqueueEvent):
        (WebCore::IDBDatabase::dispatchEvent):
        * storage/IDBDatabase.h:
        (WebCore::IDBDatabase::dispatchEvent):
        * storage/IDBDatabase.idl:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::PendingSetVersionCall::create):
        (WebCore::IDBDatabaseBackendImpl::PendingSetVersionCall::databaseCallbacks):
        (WebCore::IDBDatabaseBackendImpl::PendingSetVersionCall::PendingSetVersionCall):
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::setVersion):
        (WebCore::IDBDatabaseBackendImpl::open):
        (WebCore::IDBDatabaseBackendImpl::close):
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBDatabaseBackendInterface.h:
        * storage/IDBDatabaseCallbacks.h: Copied from Source/WebCore/storage/IDBVersionChangeEvent.cpp.
        (WebCore::IDBDatabaseCallbacks::~IDBDatabaseCallbacks):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        * storage/IDBVersionChangeEvent.cpp:
        (WebCore::IDBVersionChangeEvent::create):
        (WebCore::IDBVersionChangeEvent::IDBVersionChangeEvent):
        * storage/IDBVersionChangeEvent.h:
        * storage/IDBVersionChangeRequest.cpp:
        (WebCore::IDBVersionChangeRequest::onBlocked):

2011-03-02  Alexey Proskuryakov  <ap@apple.com>

        Fix assertion failures on Gtk bot.

        * page/EventHandler.cpp: (WebCore::EventHandler::tabsToLinks): Removed an overzealous
        assertion. We can get here with non-Tab key events when spatial navigation is enabled.

2011-03-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80139.
        http://trac.webkit.org/changeset/80139
        https://bugs.webkit.org/show_bug.cgi?id=55620

        failing and crashing tests on Snow Leopard bot (Requested by
        mihaip1 on #webkit).

        * page/DOMWindow.cpp:
        * page/DOMWindow.h:
        * page/Frame.cpp:
        (WebCore::Frame::pageDestroyed):
        (WebCore::Frame::transferChildFrameToNewDocument):
        * page/Frame.h:
        (WebCore::Frame::detachFromPage):
        * page/Geolocation.cpp:
        (WebCore::Geolocation::~Geolocation):
        (WebCore::Geolocation::disconnectFrame):
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::requestPermission):
        (WebCore::Geolocation::startUpdating):
        (WebCore::Geolocation::stopUpdating):
        * page/Geolocation.h:
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::~GeolocationController):
        * page/Navigator.cpp:
        * page/Navigator.h:
        * platform/mock/GeolocationClientMock.cpp:
        * platform/mock/GeolocationClientMock.h:

2011-03-02  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435

        Add the ability to create a Private Browsing Storage Session.

        * WebCore.exp.in:
        Export the symbol for ResourceHandle::setPrivateBrowsingStorageSessionIdentifierBase.

        * page/Settings.cpp:
        (WebCore::Settings::setPrivateBrowsingEnabled):
        Propagate the private browsing state to the ResourceHandle.

        * platform/mac/WebCoreSystemInterface.h:
        Add the function declaration for wkCreatePrivateStorageSession.
        * platform/mac/WebCoreSystemInterface.mm:

        * platform/network/ResourceHandle.cpp:
        (WebCore::privateStorageSession):
        Since the same Private Browsing Storage Session will need to be accessed throughout the loading
        code and will need to be used by all web pages and page groups, make it a global static.
        (WebCore::privateBrowsingStorageSessionIdentifierBase):
        Ditto, since the identifier is needed to create the Private Browsing Storage Session.
        (WebCore::ResourceHandle::setPrivateBrowsingEnabled):
        If enabled, create and store the Private Browsing Storage Session.
        (WebCore::ResourceHandle::privateBrowsingStorageSession):
        (WebCore::ResourceHandle::setPrivateBrowsingStorageSessionIdentifierBase):
        * platform/network/ResourceHandle.h:

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createPrivateBrowsingStorageSession):
        The call to wkCreatePrivateStorageSession needs to be in a file including the correct
        version of WKSI.
        (WebCore::ResourceHandle::privateBrowsingStorageSessionIdentifierDefaultBase):
        Return the bundle identifier.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createPrivateBrowsingStorageSession):
        The call to wkCreatePrivateStorageSession needs to be in a file importing the correct
        version of WKSI.
        (WebCore::ResourceHandle::privateBrowsingStorageSessionIdentifierDefaultBase):
        Return the bundle identifier.

2011-03-02  Daniel Cheng  <dcheng@chromium.org>

        Revert frame-specific WebClipboard changes
        https://bugs.webkit.org/show_bug.cgi?id=55617

        This code is no longer needed since we've decided to use the original
        approach to copy/paste drag/drop handling in ClipboardChromium.

        No new tests because no functionality changes.

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::createReadable):
        * platform/chromium/ChromiumDataObject.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::create):
        * platform/chromium/PlatformBridge.h:
        * platform/chromium/ReadableDataObject.cpp:
        (WebCore::ReadableDataObject::create):
        (WebCore::ReadableDataObject::ReadableDataObject):
        (WebCore::ReadableDataObject::getData):
        (WebCore::ReadableDataObject::urlTitle):
        (WebCore::ReadableDataObject::htmlBaseUrl):
        (WebCore::ReadableDataObject::filenames):
        (WebCore::ReadableDataObject::ensureTypeCacheInitialized):
        * platform/chromium/ReadableDataObject.h:

2011-03-02  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling chromium DEPS to r76362.

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

        * WebCore.gyp/WebCore.gyp: Switch to libjpeg_turbo to match chromium

2011-03-02  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * page/ChromeClient.h: (WebCore::ChromeClient::keyboardUIMode): I didn't mean to commit these
        changes yet.

2011-03-02  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by John Sullivan.

        Clean up WebCore tabsToLinks code a little
        https://bugs.webkit.org/show_bug.cgi?id=55606

        No change in behavior, so no tests.

        * html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::isKeyboardFocusable):
        This is the only caller of tabsToAllControls(). Renamed this function to tabsToAllFormControls().

        * page/EventHandler.cpp:
        (WebCore::EventHandler::isKeyboardOptionTab): Moved from platform specific files. This
        function cannot be file static, because EventHandlerMac.mm uses it.
        (WebCore::eventInvertsTabsToLinksClientCallResult): Merged implementations from platform
        specific files. We can just as well have #if here. Renamed for clarity.
        (WebCore::EventHandler::tabsToLinks): Rewrote in a way that makes it clearer how "invert"
        works.
        
        * page/EventHandler.h: We no longer need invertSenseOfTabsToLinks() here, it's only used
        in EventHandler.cpp.

        * page/android/EventHandlerAndroid.cpp: (WebCore::EventHandler::tabsToAllFormControls):
        * page/brew/EventHandlerBrew.cpp: (WebCore::EventHandler::tabsToAllFormControls):
        * page/chromium/EventHandlerChromium.cpp: (WebCore::EventHandler::tabsToAllFormControls):
        * page/efl/EventHandlerEfl.cpp: (WebCore::EventHandler::tabsToAllFormControls):
        * page/gtk/EventHandlerGtk.cpp: (WebCore::EventHandler::tabsToAllFormControls):
        * page/haiku/EventHandlerHaiku.cpp: (WebCore::EventHandler::tabsToAllFormControls):
        * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::tabsToAllFormControls):
        * page/qt/EventHandlerQt.cpp: (WebCore::EventHandler::tabsToAllFormControls):
        * page/win/EventHandlerWin.cpp: (WebCore::EventHandler::tabsToAllFormControls):
        * page/wx/EventHandlerWx.cpp: (WebCore::EventHandler::tabsToAllFormControls):
        Updating all port files.

2011-02-28  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by James Robinson.

        Split IDBCursor.value into IDBCursor.primaryKey and IDBCursor.value
        https://bugs.webkit.org/show_bug.cgi?id=55443

        Implement http://www.w3.org/Bugs/Public/show_bug.cgi?id=11948

        The idea is to have an IDBCursor and an IDBCursorWithValue interface which
        inherits from the former.  index.openKeyCursor will return the former and
        index/objectStore.openCursor will return the latter.  We'll add a primaryKey
        attribute to IDBCursor.  It will always be the key of the associated object
        store entry.  For index.openCursor cursors, the key attribute will be the key
        of the index.  For objectStore.openCursors, it'll be the same as the
        primaryKey.  The value will be the value of the objectStore entry.

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::deserializeAndSetProperty):
        * bindings/v8/SerializedScriptValue.h:
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8):
        * storage/IDBAny.cpp:
        (WebCore::IDBAny::idbCursorWithValue):
        (WebCore::IDBAny::set):
        * storage/IDBAny.h:
        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::create):
        (WebCore::IDBCursor::primaryKey):
        (WebCore::IDBCursor::value):
        * storage/IDBCursor.h:
        * storage/IDBCursor.idl:
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::primaryKey):
        (WebCore::IDBCursorBackendImpl::value):
        (WebCore::IDBCursorBackendImpl::update):
        (WebCore::IDBCursorBackendImpl::currentRowExists):
        (WebCore::IDBCursorBackendImpl::continueFunctionInternal):
        (WebCore::IDBCursorBackendImpl::deleteFunction):
        (WebCore::IDBCursorBackendImpl::loadCurrentRow):
        * storage/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):
        * storage/IDBCursorBackendInterface.h:
        * storage/IDBCursorWithValue.cpp: Copied from Source/WebCore/storage/IDBCursor.idl.
        (WebCore::IDBCursorWithValue::create):
        (WebCore::IDBCursorWithValue::IDBCursorWithValue):
        (WebCore::IDBCursorWithValue::~IDBCursorWithValue):
        * storage/IDBCursorWithValue.h: Copied from Source/WebCore/storage/IDBCursorBackendInterface.h.
        * storage/IDBCursorWithValue.idl: Copied from Source/WebCore/storage/IDBCursor.idl.
        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        (WebCore::IDBIndexBackendImpl::openCursor):
        (WebCore::IDBIndexBackendImpl::openKeyCursor):
        * storage/IDBIndexBackendImpl.h:
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::openCursor):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::setCursorType):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::dispatchEvent):
        * storage/IDBRequest.h:

2011-03-02  Aravind Akella  <aravind.akella@nokia.com>

         Reviewed by Csaba Osztrogonác.

         [Qt][WK2] Memory exhausted when building qtwebkit2 on linux
         https://bugs.webkit.org/show_bug.cgi?id=55484

         Using AllInOne files to avoid memory exhaustion for debug 
         builds on 32 bit linux machines.

         No new tests. Fixing a build issue.

         * WebCore.pro:

2011-03-02  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by David Levin.

        Add feature define for data transfer items
        https://bugs.webkit.org/show_bug.cgi?id=55510

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * features.pri:

2011-03-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Update location of media-file.js, which was moved in r79630.

        * manual-tests/media-controls.html: Updated location.

2011-03-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80156.
        http://trac.webkit.org/changeset/80156
        https://bugs.webkit.org/show_bug.cgi?id=55604

        "Broke SL compile" (Requested by tonyg-cr on #webkit).

        * bridge/jni/JNIBridge.h:
        (JSC::Bindings::JavaString::operator UString):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):
        * bridge/jni/jsc/JavaClassJSC.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/jsc/JavaStringJSC.h:
        (JSC::Bindings::JavaStringImpl::uString):
        * bridge/jni/v8/JavaStringV8.h:

2011-03-02  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JavaString API should be implementable by both JSC and V8
        https://bugs.webkit.org/show_bug.cgi?id=55567

        Remove JavaString's UString operator and replace it with a
        script-engine-independent impl() method, which returns a
        StringImpl and can be implemented with both JSC and V8.

        No new tests, refactoring only.

        * bridge/jni/JNIBridge.h:
        (JSC::Bindings::JavaString::impl):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):
        * bridge/jni/jsc/JavaClassJSC.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/jsc/JavaStringJSC.h:
        (JSC::Bindings::JavaStringImpl::impl):
        * bridge/jni/v8/JavaStringV8.h:
        (JSC::Bindings::JavaStringImpl::impl):

2011-03-02  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add CRASH() for CSSSelector double frees
        https://bugs.webkit.org/show_bug.cgi?id=55596
        
        To help track down bug 53045, add a CRASH call when the CSSSelector
        destructor is invoked more than once.

        Just a check, no new tests necessary.

        * css/CSSSelector.h:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::~CSSSelector):

2011-03-02  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Hyatt  <hyatt@apple.com>

        content property doesn't support quotes
        https://bugs.webkit.org/show_bug.cgi?id=6503

        Added full support for quotes as defined by CSS 2.1.

        Tests: fast/css/content/content-quotes-01.html
               fast/css/content/content-quotes-02.html
               fast/css/content/content-quotes-03.html
               fast/css/content/content-quotes-04.html
               fast/css/content/content-quotes-05.html
               fast/css/content/content-quotes-06.html

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added RenderQuote.cpp/h and QuotesData.cpp/h to the dependency lists
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseQuotes):
        * css/CSSParser.h:
        Added needed stylesheet parsing support for quotes,
        (no-)open-quote and (no-)close-quote
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Handled setting of the new quotes RenderStyle property and added
        handling of quotes for the content property.
        * css/html.css:
        (q:before):
        (q:after):
        replaced the '"' workaround with open/close-quote
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::dirtyLineBoxesForRenderer):
        Made RenderQuote behave like RenderCounter.
        Needed to ensure that the Quote text is calculated before layout,
        just as it is for RenderCounter.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isQuote):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        (WebCore::RenderObjectChildList::appendChildNode):
        (WebCore::RenderObjectChildList::insertChildNode):
        Handled updating of quote depth when renderers are added and removed
        from the tree.
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):
        Added support for Quote content.
        * rendering/RenderQuote.cpp: Added.
        (WebCore::adjustDepth):
        (WebCore::RenderQuote::RenderQuote):
        (WebCore::RenderQuote::~RenderQuote):
        (WebCore::RenderQuote::renderName):
        (WebCore::RenderQuote::placeQuote):
        (WebCore::LanguageData::operator<):
        (WebCore::defaultLanguageQuotes):
        (WebCore::quotesMap):
        (WebCore::quotesForLanguage):
        (WebCore::defaultQuotes):
        (WebCore::RenderQuote::originalText):
        (WebCore::RenderQuote::computePreferredLogicalWidths):
        (WebCore::RenderQuote::rendererSubtreeAttached):
        (WebCore::RenderQuote::rendererRemovedFromTree):
        (WebCore::RenderQuote::styleDidChange):
        * rendering/RenderQuote.h: Added.
        (WebCore::RenderQuote::isQuote):
        (WebCore::toRenderQuote):
        * rendering/RenderingAllInOne.cpp:
        Included RenderQuote.cpp
        * rendering/style/StyleAllInOne.cpp:
        Included QuotesData.cpp
        * rendering/style/ContentData.cpp:
        (WebCore::ContentData::dataEquivalent):
        Checked for quotetype identity.
        (WebCore::ContentData::deleteContent):
        Accounted for the new QUOTE_TYPE.
        * rendering/style/ContentData.h:
        (WebCore::ContentData::isQuote):
        (WebCore::ContentData::quote):
        (WebCore::ContentData::setQuote):
        * rendering/style/QuotesData.cpp: Added.
        (WebCore::QuotesData::create):
        (WebCore::QuotesData::operator==):
        (WebCore::QuotesData::~QuotesData):
        * rendering/style/QuotesData.h: Added.
        (WebCore::QuotesData::data):
        (WebCore::QuotesData::operator delete):
        (WebCore::QuotesData::QuotesData):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setContent):
        (WebCore::RenderStyle::setQuotes):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::quotes):
        (WebCore::InheritedFlags::setQuotes):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleAllInOne.cpp:
        Added QuotesData.cpp to the included files list.
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::operator==):
        Included quotes in equality check.
        * rendering/style/StyleRareInheritedData.h:
        Added quotes

2011-03-02  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Hyatt.

        Selector usage flags should not be set by the CSS parser
        https://bugs.webkit.org/show_bug.cgi?id=55573
        
        Currently flags like Document::usesSiblingRules() are set directly by the CSS parser. This is wrong as 
        we may parse stylesheets that are not actually used for document rendering. This is especially bad when
        the page uses querySelectorAll(). As a result we may end up in various performance penalty boxes 
        triggered by complex selectors for no good reason.
        
        - Use the selector traversal in style selector constructor to figure out which flags
          are actually needed for the currently active style sheets.
        - Remove the selector flag related code from the CSS parser/grammar.
        - Remove the usesDescendantRules flag completely. We have descendant rules in the default
          style sheet, every document uses them.

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::updateSpecifiersWithElementName):
        * css/CSSStyleSelector.cpp:
        (WebCore::collectSiblingRulesInDefaultStyle):
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::Features::Features):
        (WebCore::CSSStyleSelector::Features::~Features):
        (WebCore::CSSStyleSelector::locateCousinList):
        (WebCore::CSSStyleSelector::matchesSiblingRules):
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::locateSharedStyle):
        (WebCore::collectFeaturesFromSelector):
        (WebCore::collectFeaturesFromList):
        (WebCore::RuleSet::collectFeatures):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::usesSiblingRules):
        (WebCore::CSSStyleSelector::usesFirstLineRules):
        (WebCore::CSSStyleSelector::usesBeforeAfterRules):
        (WebCore::CSSStyleSelector::usesLinkRules):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::recalcStyle):
        (WebCore::Document::createStyleSelector):
        * dom/Document.h:
        (WebCore::Document::usesSiblingRules):
        (WebCore::Document::setUsesSiblingRules):
        (WebCore::Document::usesFirstLineRules):
        (WebCore::Document::usesBeforeAfterRules):
        (WebCore::Document::setUsesBeforeAfterRules):
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):

2011-03-02  Brian Weinstein  <bweinstein@apple.com>

        Fix fallout from a last minute renaming.

        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::startObservingCookieChanges):
        (WebCore::stopObservingCookieChanges):

2011-03-01  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Part of WebKit2: Need a way to send notifications to client when cookies change
        https://bugs.webkit.org/show_bug.cgi?id=55427
        <rdar://problem/9056027>
        
        Add functions on CookieStorage that allow listening for changes in cookies. When
        the cookies are changed, they call through to CookiesStrategy::notifyCookiesChanged.

        No change in behavior requiring tests.

        * platform/CookiesStrategy.h: Added.
        (WebCore::CookiesStrategy::~CookiesStrategy):

        * platform/PlatformStrategies.h:
        (WebCore::PlatformStrategies::cookiesStrategy):
        (WebCore::PlatformStrategies::PlatformStrategies):

        * platform/network/CookieStorage.h: Add new function declarations.

        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::notifyCookiesChangedOnMainThread): Call through to CookiesStrategy::notifyCookiesChanged.
        (WebCore::notifyCookiesChanged): Call notifyCookiesChangedOnMainThread on the main thread.
        (WebCore::beginObservingCookieChanges): Set up cookie observers on the loader run loop.
        (WebCore::finishObservingCookieChanges): Remove our cookie observers from the loader run loop.

        * platform/network/mac/CookieStorageMac.mm:
        (-[CookieStorageObjCAdapter notifyCookiesChangedOnMainThread]): Call through to CookiesStrategy::notifyCookiesChanged.
        (-[CookieStorageObjCAdapter cookiesChangedNotificationHandler:]): Call notifyCookiesChangedOnMainThread on 
            the main thread.
        (-[CookieStorageObjCAdapter registerForCookieChangeNotifications]): Set up the observer for cookie change notifications.
        (-[CookieStorageObjCAdapter unregisterForCookieChangeNotifications]): Remove the observer for cookie change notifications.
        (WebCore::beginObservingCookieChanges): Create our CookieStorageObjCAdapter, and call registerForCookieChangeNotifications.
        (WebCore::finishObservingCookieChanges): Call unregisterForCookieChangeNotifications.
        
        Add new file.
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj: Set role on files we need to include in WebKit to private.

2011-03-02  Sergey Glazunov  <serg.glazunov@gmail.com>

        Reviewed by Dimitri Glazkov.

        A WebKitCSSKeyframesRule object should set itself as the parent for inserted rules
        https://bugs.webkit.org/show_bug.cgi?id=55488

        Test: fast/css/css-keyframe-parent.html

        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::append):

2011-03-02  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add support for external protocol handlers
        https://bugs.webkit.org/show_bug.cgi?id=55473

        Do not unconditionally create and replace the SoupRequester of the
        SoupSession if there is already one. No new tests needed as we
        just allow clients to create their our SoupRequesters.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ensureSessionIsInitialized):

2011-03-02  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by jknotten@chromium.org.

        Fix build-breakage when GEOLOCATION not enabled.
        https://bugs.webkit.org/show_bug.cgi?id=55586

        Geolocation::reset needs to be defined if ENABLE(GEOLOCATION)
        is not true.

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

2011-03-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: remove InjectedScriptHost -> DOMAgent dependency.
        https://bugs.webkit.org/show_bug.cgi?id=55575

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::inspectedNode):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::inspectedNodeCallback):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluateOn):
        (WebCore::InjectedScript::wrapObject):
        (WebCore::InjectedScript::wrapNode):
        (WebCore::InjectedScript::inspectNode):
        (WebCore::InjectedScript::nodeAsScriptValue):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::addInspectedNode):
        (WebCore::InjectedScriptHost::clearInspectedNodes):
        (WebCore::InjectedScriptHost::copyText):
        (WebCore::InjectedScriptHost::inspectedNode):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::addInspectedNode):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::injectedScriptForNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluateOn):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode.setTooltip):
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode.resolvedNode):
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.nodeResolved):
        (WebInspector.PropertiesSidebarPane.prototype.update.nodePrototypesReady):
        (WebInspector.PropertiesSidebarPane.prototype.update.fillSection):
        (WebInspector.PropertiesSidebarPane.prototype.update):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.resolveNode):
        (WebInspector.RemoteObject.prototype.pushNodeToFrontend):
        (WebInspector.RemoteObject.prototype.evaluate):

2011-01-21  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Dmitry Titov.

        Detach Geolocation from Frame when Page destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=52877

        On Page destruction, any outstanding Geolocation permission
        requests should be cancelled, because the Geolocation can only
        access the client indirectly via m_frame->page().

        Additionally, if the Frame is reparented to another page, the
        Geolocation should cancel watches, single-shots and requests on
        the old page.

        Page destruction is signalled by a call to the
        Frame::pageDestroyed() method. This calls Frame::detachFromPage,
        where we extend the call chain to Geolocation::detachFromPage()
        where we call Geolocation::reset() which detaches from the
        GeolocationController, cancels requests, watches and single shots,
        and sets the permission state back to Unknown.

        We also now call detachFromPage when the frame reparented in
        Frame::transferChildFrameToNewDocument.

        Frame::pageDestroyed() is also called by FrameLoader even though
        the page is not destroyed. We should still cancel permission
        requests, because the GeolocationClient will become inaccessible
        to the Geolocation object after this call.

        Since GeolocationController is owned by Page, and all Geolocation
        objects will now unsubscribe from the GeolocationController on
        pageDetached(), we no longer need to call stopUpdating() from the
        GeolocationController's destructor. Instead we can simply assert
        that there should be no no observers. See related bug
        https://bugs.webkit.org/show_bug.cgi?id=52216 .

        Introduced new method 'numberOfPendingPermissionRequests' on
        GeolocationClientMock to count the number of outstanding pending
        permission requests. This provides a reusable implementation for
        client-based implementations of the LayoutTestController's
        numberOfPendingGeolocationPermissionRequests method.

        Tests: fast/dom/Geolocation/iframe-reparent.html
               fast/dom/Geolocation/page-reload-cancel-permission-requests.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::resetGeolocationPermissions):
        * page/DOMWindow.h:
        * page/Frame.cpp:
        (WebCore::Frame::detachFromPage):
        (WebCore::Frame::pageDestroyed):
        (WebCore::Frame::transferChildFrameToNewDocument):
        * page/Frame.h:
        * page/Geolocation.cpp:
        (WebCore::Geolocation::~Geolocation):
        (WebCore::Geolocation::page):
        (WebCore::Geolocation::reset):
        (WebCore::Geolocation::disconnectFrame):
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::requestPermission):
        (WebCore::Geolocation::startUpdating):
        (WebCore::Geolocation::stopUpdating):
        * page/Geolocation.h:
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::~GeolocationController):
        * page/Navigator.cpp:
        (WebCore::Navigator::resetGeolocationPermissions):
        * page/Navigator.h:
        * platform/mock/GeolocationClientMock.cpp:
        (WebCore::GeolocationClientMock::numberOfPendingPermissionRequests):
        * platform/mock/GeolocationClientMock.h:

2011-03-02  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Landing detailed heap snapshots, part 4.
        https://bugs.webkit.org/show_bug.cgi?id=55563

        This part adds implementations for data grids used to display
        different heap snapshots projections. We are almost done.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * bindings/v8/ScriptHeapSnapshot.cpp:
        (WebCore::ScriptHeapSnapshot::getExactRetainedSize):
        * bindings/v8/ScriptHeapSnapshot.h:
        * inspector/Inspector.idl:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getExactHeapSnapshotNodeRetainedSize):
        * inspector/InspectorProfilerAgent.h:
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._createProvider):
        (WebInspector.HeapSnapshotInstanceNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype._createProvider):
        (WebInspector.HeapSnapshotDominatorObjectNode):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._createProvider):
        (MixInSnapshotNodeFunctions):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotContainmentDataGrid):
        (WebInspector.HeapSnapshotSortableDataGrid):
        (WebInspector.HeapSnapshotConstructorsDataGrid):
        (WebInspector.HeapSnapshotDiffDataGrid):
        (WebInspector.HeapSnapshotDominatorsDataGrid):
        (WebInspector.HeapSnapshotRetainingPathsList):
        (WebInspector.DetailedHeapshotView.profileCallback):
        (WebInspector.DetailedHeapshotView):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotEdge.prototype.get isInvisible):
        (WebInspector.HeapSnapshotEdge.prototype.toString):
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype._buildAggregatesIndexes):
        (WebInspector.HeapSnapshot.prototype._markInvisibleEdges):
        (WebInspector.HeapSnapshotPathFinder.prototype._skipEdge):
        * inspector/front-end/Images/helpButtonGlyph.png: Added.
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.reset):
        * inspector/front-end/Popover.js:
        (WebInspector.Popover):
        (WebInspector.Popover.prototype.show):
        (WebInspector.Popover.prototype.hide):
        (WebInspector.Popover.prototype.get visible):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._reset):
        (WebInspector.ProfilesPanel.prototype.getProfile):
        * inspector/front-end/heapProfiler.css:
        * inspector/front-end/inspector.js:
        (WebInspector.resetFocusElement):

2011-03-02  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/55534> Clean up macros in Extensions3DOpenGL.cpp

        Reviewed by Darin Adler.

        Change "#if GL_APPLE_vertex_array_object" macros to check that
        GL_APPLE_vertex_array_object is both defined and non-zero.

        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::createVertexArrayOES):
        (WebCore::Extensions3DOpenGL::deleteVertexArrayOES): Remove
        empty #else clause.
        (WebCore::Extensions3DOpenGL::isVertexArrayOES):
        (WebCore::Extensions3DOpenGL::bindVertexArrayOES): Add early
        return check.  Remove #else clause that would never have
        compiled (since array is not a WTF::String).

2011-03-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Assertion failure after removing a selection in keydown handler
        https://bugs.webkit.org/show_bug.cgi?id=51389

        The bug was caused by textWillBeReplaced's not always updating selection, and
        shouldRemovePositionAfterAdoptingTextReplacement's not moving the end offset when it's
        at the end of replaced data.

        Fixed the bug by always updating selection in textWillBeReplaced and fixing the condition
        to move the offset in shouldRemovePositionAfterAdoptingTextReplacement. Also added a call
        to setSelection instead of directly modifying m_selection to notify all the clients.
        Namely, the call to EditorClient::respondToChangedSelection is required for
        setting-input-value-cancel-ime-composition.html.

        Note that we must update layout before calling setSelection because setSelection calls
        setFocusedNodeIfNeeded and it requires layout to be up-to-date. Without this call, tests
        such as fast/forms/input-appearance-maxlength.html hits an assertion in Node::isFocusable.

        Test: editing/input/setting-input-value-cancel-ime-composition.html

        * editing/SelectionController.cpp:
        (WebCore::shouldRemovePositionAfterAdoptingTextReplacement): When replacing text, the offset
        of the selection end must be updated even if it was at the end of the replaced text.
        e.g. removing "world" from "hello world] WebKit" should result in "hello ] WebKit" not
        "hello  WebK[it". Note we don't move the offset if no text is removed because appending
        "world" to "hello ]" should result in "hello ]world" not "hello world]".
        (WebCore::SelectionController::textWillBeReplaced): Calls setSelection to update
        the selection instead of modifying m_selection directly.

2011-03-02  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: highlighted line does not span horizonally in scripts panel while debugging.
        https://bugs.webkit.org/show_bug.cgi?id=54675

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._syncScroll):
        (WebInspector.TextEditorChunkedPanel.prototype._buildChunks):
        (WebInspector.TextEditorChunkedPanel.prototype.makeLineAChunk):
        (WebInspector.TextEditorGutterPanel):
        (WebInspector.TextEditorGutterPanel.prototype._expandChunks):
        (WebInspector.TextEditorGutterPanel.prototype.textChanged):
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.set readOnly):
        (WebInspector.TextEditorMainPanel.prototype._getSelection):
        (WebInspector.TextEditorMainPanel.prototype._selectionToPosition):
        (WebInspector.TextEditorMainPanel.prototype._handleDOMSubtreeModified):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):
        * inspector/front-end/textViewer.css:
        (.inner-container):

2011-03-02  Oleg Romashin  <romaxa@gmail.com>

        Reviewed by Andreas Kling.

        Fixing inspector compilation with JAVASCRIPT_DEBUGGER disabled
        https://bugs.webkit.org/show_bug.cgi?id=55477

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::populateScriptObjects):

2011-03-02  Kent Tamura  <tkent@chromium.org>

        Unreviewed, a trivial fix for r80096.

        REGRESSION (r80096): [Chromium] fast/forms/input-number-unacceptable-style.html failure
        https://bugs.webkit.org/show_bug.cgi?id=55562

        * platform/text/LocalizedNumberICU.cpp:
        (WebCore::parseLocalizedNumber): Check the ParsePosition after NumberFormat::parse()
          to reject strings with a valid number + extra letters.

2011-03-02  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JObjectWrapper should be moved to its own file
        https://bugs.webkit.org/show_bug.cgi?id=55384

        No new tests, refactoring only.

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bridge/jni/v8/JNIBridgeV8.cpp:
        (JavaField::JavaField):
        * bridge/jni/v8/JNIBridgeV8.h:
        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::JavaInstance):
        * bridge/jni/v8/JavaInstanceV8.h:
        * bridge/jni/v8/JobjectWrapper.cpp: Copied from Source/WebCore/bridge/jni/v8/JNIBridgeV8.h.
        (JobjectWrapper::JobjectWrapper):
        (JobjectWrapper::~JobjectWrapper):
        * bridge/jni/v8/JobjectWrapper.h: Copied from Source/WebCore/bridge/jni/v8/JNIBridgeV8.h.
        (JSC::Bindings::JobjectWrapper::instance):
        (JSC::Bindings::JobjectWrapper::setInstance):
        (JSC::Bindings::JobjectWrapper::ref):
        (JSC::Bindings::JobjectWrapper::deref):

2011-02-25  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: factor search logic out of inspector.js
        https://bugs.webkit.org/show_bug.cgi?id=54965

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.switchToAndFocus):
        (WebInspector.ElementsPanel.prototype._updateMatchesCount):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.searchCanceled):
        (WebInspector.Panel.prototype.performSearch.updateMatchesCount):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.searchCanceled):
        (WebInspector.ScriptsPanel.prototype.performSearch.finishedCallback):
        (WebInspector.ScriptsPanel.prototype.performSearch):
        * inspector/front-end/SearchController.js: Added.
        (WebInspector.SearchController):
        (WebInspector.SearchController.prototype.updateSearchMatchesCount):
        (WebInspector.SearchController.prototype.updateSearchLabel):
        (WebInspector.SearchController.prototype.cancelSearch):
        (WebInspector.SearchController.prototype.handleShortcut):
        (WebInspector.SearchController.prototype.activePanelChanged.performPanelSearch):
        (WebInspector.SearchController.prototype.activePanelChanged):
        (WebInspector.SearchController.prototype._updateSearchMatchesCount):
        (WebInspector.SearchController.prototype._focusSearchField):
        (WebInspector.SearchController.prototype._onSearchFieldManualFocus):
        (WebInspector.SearchController.prototype._onKeyDown):
        (WebInspector.SearchController.prototype._onSearch):
        (WebInspector.SearchController.prototype._performSearch):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.set currentPanel):
        (WebInspector.set attached):
        (WebInspector.doLoadedDone):
        (WebInspector.documentKeyDown):

2011-03-02  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        FEMorphologyElement changes doesn't require relayout
        https://bugs.webkit.org/show_bug.cgi?id=55462

        When the FEMorphologyElement receives an update message but the given value remains the same we don't need
        to relayout the filter.

        No new tests are needed because this modification is covered by the dynamic update tests of FEMorphology.

        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::setMorphologyOperator):
        (WebCore::FEMorphology::setRadiusX):
        (WebCore::FEMorphology::setRadiusY):
        * platform/graphics/filters/FEMorphology.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::setFilterEffectAttribute):
        (WebCore::SVGFEMorphologyElement::svgAttributeChanged):
        * svg/SVGFEMorphologyElement.h:

2011-03-01  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Assertion fails when a form validation bubble appears
        https://bugs.webkit.org/show_bug.cgi?id=55550

        Test: fast/forms/interactive-validation-attach-assertion.html

        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree):
         Just remove unnecessary attach().

2011-03-01  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Support localized numbers in <input type=number>
        https://bugs.webkit.org/show_bug.cgi?id=42484

        This change adds support of localized numbers in <input type=number>.
        This affects only the UI, and not HTMLInputElement::value.

        - Remove the keyboard input restriction feature because it is hard to
          retrieve characters usable for localized numbers in ICU.

        - Separate convertFromVisibleValue() from sanitizeValue().
          sanitizeValue() is used for not only converting a renderer value to a
          DOM value.

        - Implement LocalizedNumber functions for ICU and NSNumberFormatter.
          It is used only in Chromium for now.

        Test: manual-tests/input-number-localization.html

        * WebCore.gypi: Use LocalizedNumberICU.cpp.
        * WebCore.xcodeproj/project.pbxproj:
          Add LocalizedNumberMac.mm and remove LocalizedNumberNone.cpp.
        * dom/InputElement.h: Introduce convertFromVisibleValue().
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::convertFromVisibleValue):
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        (WebCore::InputType::convertFromVisibleValue):
        * html/InputType.h:
        * html/NumberInputType.cpp: Remove isHTMLNumberCharacter(),
          isNumberCharacter(), and handleBeforeTextInsertedEvent() because we
          remove the keyboard input restriction feature for type=number.
        (WebCore::NumberInputType::convertFromVisibleValue):
        (WebCore::NumberInputType::sanitizeValue):
        * html/NumberInputType.h:
        * manual-tests/input-number-localization.html: Add a manual test because
          the behavior depends on the current locale.
        * platform/text/LocalizedNumber.h: Remove isLocalizedNumberCharacter().
        * platform/text/LocalizedNumberICU.cpp:
          Implement LocalizedNumber functions with ICU NumberFormat.
        (WebCore::createFormatterForCurrentLocale):
        (WebCore::parseLocalizedNumber):
        (WebCore::formatLocalizedNumber):
        * platform/text/LocalizedNumberNone.cpp: Remove isLocalizedNumberCharacter().
        * platform/text/mac/LocalizedNumberMac.mm:
          Implement LocalizedNumber functions with NSNumberFormatter.
        (WebCore::parseLocalizedNumber):
        (WebCore::formatLocalizedNumber):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged):
        * wml/WMLInputElement.h:
        (WebCore::WMLInputElement::convertFromVisibleValue):
          Implemented as a function doing nothing.

2011-03-01  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION(r78383): Failure to connect on websocketstest.com
        https://bugs.webkit.org/show_bug.cgi?id=54811

        After r78383, KURL::setPort() no longer appends ":port" part
        if that port is the default port for URL scheme. This broke
        SocketStreamHandleCFNet, whose code was based on an assumption
        that KURL::setPort() always inserts ":port" part.

        To fix this, KURL::port() call is removed from SocketStreamHandle
        and the port number is calculated on-the-fly.

        Unfortunately it is impossible to write a test; this bug only
        affects WebSockets connecting to the default port (port 80
        for ws, port 443 for wss), while we use different ports to test
        WebSockets in LayoutTests.

        * platform/network/cf/SocketStreamHandle.h:
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        (WebCore::SocketStreamHandle::createStreams):
        (WebCore::SocketStreamHandle::port):

2011-03-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80079.
        http://trac.webkit.org/changeset/80079
        https://bugs.webkit.org/show_bug.cgi?id=55547

        "Broke the Win debug build?" (Requested by dcheng on #webkit).

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * features.pri:

2011-02-25  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Abstract "pixels with a graphics context" into its own class
        https://bugs.webkit.org/show_bug.cgi?id=55259

        This creates new PlatformCanvas/PlatformImage classes which wrap
        all of the #ifdef Skia/Cg warts from the compositor.  All classes
        (LayerTilerChromium, ContentLayerChromium, and ImageLayerChromium) are
        modified to use these abstractions.

        Tests: LayoutTests/compositing

        * WebCore.gypi:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateContentsIfDirty):
        (WebCore::ContentLayerChromium::resizeUploadBuffer):
        (WebCore::ContentLayerChromium::updateTextureIfNeeded):
        (WebCore::ContentLayerChromium::updateTexture):
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContentsIfDirty):
        (WebCore::ImageLayerChromium::updateTextureIfNeeded):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::contentRectToTileIndices):
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::updateFromPixels):
        * platform/graphics/chromium/LayerTilerChromium.h:
        * platform/graphics/chromium/PlatformCanvas.cpp: Added.
        (WebCore::PlatformCanvas::PlatformCanvas):
        (WebCore::PlatformCanvas::~PlatformCanvas):
        (WebCore::PlatformCanvas::resize):
        (WebCore::PlatformCanvas::AutoLocker::AutoLocker):
        (WebCore::PlatformCanvas::AutoLocker::~AutoLocker):
        (WebCore::PlatformCanvas::Painter::Painter):
        (WebCore::PlatformCanvas::Painter::~Painter):
        * platform/graphics/chromium/PlatformCanvas.h: Added.
        (WebCore::PlatformCanvas::AutoLocker::pixels):
        (WebCore::PlatformCanvas::Painter::context):
        (WebCore::PlatformCanvas::size):
        * platform/graphics/chromium/PlatformImage.cpp: Copied from Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp.
        (WebCore::PlatformImage::PlatformImage):
        (WebCore::PlatformImage::updateFromImage):
        * platform/graphics/chromium/PlatformImage.h: Added.
        (WebCore::PlatformImage::pixels):
        (WebCore::PlatformImage::size):

2011-03-01  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by David Levin.

        Add feature define for data transfer items
        https://bugs.webkit.org/show_bug.cgi?id=55510

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * features.pri:

2011-03-01  Joseph Pecoraro  <joepeck@webkit.org>

        Unreviewed. Roll out r80068 and r80073 due to breaking WebKit2 Qt port.

        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):
        (WebCore::numericPrefix):
        (WebCore::findSizeValue):
        (WebCore::setViewportFeature):
        (WebCore::viewportErrorMessageTemplate):
        (WebCore::viewportErrorMessageLevel):
        * dom/ViewportArguments.h:

2011-03-01  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by James Robinson.

        IDBKeyRange.bound() should not use the optional options object
        https://bugs.webkit.org/show_bug.cgi?id=55419

        http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#range-concept

        Added some code to existing tests to cover these cases.

        * storage/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::bound):
        * storage/IDBKeyRange.h:
        * storage/IDBKeyRange.idl:

2011-03-01  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange):

2011-03-01  Kent Tamura  <tkent@chromium.org>

        Unreviewed. Apply sort-Xcode-project-file.

        * WebCore.xcodeproj/project.pbxproj:

2011-03-01  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by James Robinson.

        V8 code generator doesn't properly support a single SerializedScriptValue attribute
        https://bugs.webkit.org/show_bug.cgi?id=55530

        This is tested by the bindings tests changes.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp: Added.
        (WebDOMTestSerializedScriptValueInterface::WebDOMTestSerializedScriptValueInterfacePrivate::WebDOMTestSerializedScriptValueInterfacePrivate):
        (WebDOMTestSerializedScriptValueInterface::WebDOMTestSerializedScriptValueInterface):
        (WebDOMTestSerializedScriptValueInterface::operator=):
        (WebDOMTestSerializedScriptValueInterface::impl):
        (WebDOMTestSerializedScriptValueInterface::~WebDOMTestSerializedScriptValueInterface):
        (WebDOMTestSerializedScriptValueInterface::value):
        (toWebCore):
        (toWebKit):
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp: Added.
        (WebKit::kit):
        (webkit_dom_test_serialized_script_value_interface_get_value):
        (WebKit::core):
        (webkit_dom_test_serialized_script_value_interface_finalize):
        (webkit_dom_test_serialized_script_value_interface_set_property):
        (webkit_dom_test_serialized_script_value_interface_get_property):
        (webkit_dom_test_serialized_script_value_interface_constructed):
        (webkit_dom_test_serialized_script_value_interface_class_init):
        (webkit_dom_test_serialized_script_value_interface_init):
        (WebKit::wrapTestSerializedScriptValueInterface):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterfacePrivate.h: Added.
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::JSTestInterfaceConstructor):
        (WebCore::JSTestInterface::JSTestInterface):
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::JSTestMediaQueryListListenerConstructor):
        (WebCore::JSTestMediaQueryListListener::JSTestMediaQueryListListener):
        (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::JSTestObjConstructor):
        (WebCore::JSTestObj::JSTestObj):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionIntMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        (WebCore::jsTestObjPrototypeFunctionIdbKey):
        (WebCore::jsTestObjPrototypeFunctionOptionsObject):
        (WebCore::jsTestObjPrototypeFunctionCustomArgsAndException):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGesture):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGestureASAD):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithOptional):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp: Added.
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::createStructure):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::JSTestSerializedScriptValueInterfaceConstructor):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::getOwnPropertySlot):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::self):
        (WebCore::JSTestSerializedScriptValueInterface::JSTestSerializedScriptValueInterface):
        (WebCore::JSTestSerializedScriptValueInterface::createPrototype):
        (WebCore::JSTestSerializedScriptValueInterface::getOwnPropertySlot):
        (WebCore::JSTestSerializedScriptValueInterface::getOwnPropertyDescriptor):
        (WebCore::jsTestSerializedScriptValueInterfaceValue):
        (WebCore::jsTestSerializedScriptValueInterfaceConstructor):
        (WebCore::JSTestSerializedScriptValueInterface::getConstructor):
        (WebCore::toJS):
        (WebCore::toTestSerializedScriptValueInterface):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h: Copied from Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h.
        (WebCore::JSTestSerializedScriptValueInterface::createStructure):
        (WebCore::JSTestSerializedScriptValueInterface::impl):
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::createStructure):
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::JSTestSerializedScriptValueInterfacePrototype):
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h: Added.
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm: Added.
        (-[DOMTestSerializedScriptValueInterface dealloc]):
        (-[DOMTestSerializedScriptValueInterface finalize]):
        (-[DOMTestSerializedScriptValueInterface value]):
        (core):
        (kit):
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterfaceInternal.h: Added.
        * bindings/scripts/test/TestSerializedScriptValueInterface.idl: Added.
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::ConfigureV8TestInterfaceTemplate):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp: Copied from Source/WebCore/bindings/scripts/test/V8/V8TestInterface.cpp.
        (WebCore::TestSerializedScriptValueInterfaceInternal::V8_USE):
        (WebCore::ConfigureV8TestSerializedScriptValueInterfaceTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::GetRawTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::GetTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::HasInstance):
        (WebCore::V8TestSerializedScriptValueInterface::wrapSlow):
        (WebCore::V8TestSerializedScriptValueInterface::derefObject):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h: Added.
        (WebCore::V8TestSerializedScriptValueInterface::toNative):
        (WebCore::V8TestSerializedScriptValueInterface::wrap):
        (WebCore::toV8):

2011-03-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Joseph Pecoraro.

        Misaligned memory access in CloneDeserializer on all ARM arch.
        https://bugs.webkit.org/show_bug.cgi?id=48742

        Push platforms that need aligned memory access down the
        endian independent serialization and deserialization
        paths.

        * bindings/js/SerializedScriptValue.cpp:

2011-03-01  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Viewport Warning/Error Messages Are Now Inaccurate
        https://bugs.webkit.org/show_bug.cgi?id=53707

        Correct and improve the error messages for viewport
        parsing. Clarify the difference between incorrect
        keys, values, and when to use the device-width or
        device-height constants.

        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes): suggest using keywords if fixed input matches device width or height.
        (WebCore::numericPrefix):
        (WebCore::findSizeValue): remove incorrect warnings about fixed numbers because we don't know the device width or height.
        (WebCore::setViewportFeature): report a warning for an unrecognized key.
        (WebCore::viewportErrorMessageTemplate): added template for unrecognized key.
        (WebCore::viewportErrorMessageLevel):
        * dom/ViewportArguments.h:

2011-03-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        WebKit does not merge text decorations in the typing style and the selected element properly
        https://bugs.webkit.org/show_bug.cgi?id=55349

        The bug was caused by EditingStyle::mergeTypingStyle's not properly merging text decoration property.
        Fixed the bug by extracting a function from ApplyStyleCommand::pushDownInlineStyleAroundNode and
        calling it in pushDownInlineStyleAroundNode and in mergeTypingStyle.

        Test: editing/execCommand/merge-text-decoration-with-typing-style.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown): Takes EditingStyle*;
        calls mergeInlineStyleOfElement.
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode): Calls applyInlineStyleToPushDown.
        (WebCore::ApplyStyleCommand::removeInlineStyle): Ditto.
        * editing/ApplyStyleCommand.h:
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::mergeTypingStyle): Added; calls mergeStyle.
        (WebCore::EditingStyle::mergeInlineStyleOfElement): Ditto.
        (WebCore::EditingStyle::mergeStyle): Extracted from applyInlineStyleToPushDown.
        * editing/EditingStyle.h:

2011-03-01  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        Stop instantiating legacy editing Positions in VisiblePosition
        https://bugs.webkit.org/show_bug.cgi?id=52919

        Changing VisiblePosition completely away from legacy positions.

        No new tests since this is functionaly equivalent.

        * WebCore.exp.in: Removing the legacy VisiblePosition constructor and
        adding the PositionIsOffsetInAnchor symbol. If we must create VisiblePositions
        outside of WebCore, they should be parent anchored.
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::visiblePositionForTextMarkerData):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::startOfStyleRange):
        (WebCore::endOfStyleRange):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForIndex):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (objectAndOffsetUnignored):
        * dom/Position.cpp:
        (WebCore::Position::document): Added this inline function to avoid the necessity
        of calling anchorNode to assure a document from a Position.
        (WebCore::Position::upstream): Fixed to correctly respect PositionIsAfterAnchor
        (WebCore::Position::downstream): ditto
        * dom/Range.cpp:
        (WebCore::Range::editingStartPosition):
        * editing/Editor.cpp:
        (WebCore::Editor::canDeleteRange):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::selectFrameElementInParentIfFullySelected):
        (WebCore::SelectionController::setSelectedRange):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::shouldRepresentNodeOffsetZero):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::canonicalPosition):
        (WebCore::VisiblePosition::characterAfter):
        (WebCore::VisiblePosition::localCaretRect):
        (WebCore::makeRange):
        (WebCore::startVisiblePosition):
        (WebCore::endVisiblePosition):
        (WebCore::setStart):
        (WebCore::setEnd):
        (WebCore::isFirstVisiblePositionInNode):
        (WebCore::isLastVisiblePositionInNode):
        * editing/VisiblePosition.h:
        (WebCore::VisiblePosition::VisiblePosition):
        * editing/htmlediting.cpp:
        (WebCore::firstInSpecialElement):
        (WebCore::lastInSpecialElement):
        (WebCore::visiblePositionBeforeNode):
        (WebCore::visiblePositionAfterNode):
        * editing/visible_units.cpp:
        (WebCore::startPositionForLine):
        (WebCore::endPositionForLine):
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        (WebCore::endOfBlock):
        (WebCore::startOfDocument):
        (WebCore::endOfDocument):
        (WebCore::logicalStartPositionForLine):
        (WebCore::logicalEndPositionForLine):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::collapse):
        (WebCore::DOMSelection::setBaseAndExtent):
        (WebCore::DOMSelection::setPosition):
        (WebCore::DOMSelection::extend):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createVisiblePosition):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::visiblePositionForIndex):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::selectSubString):

2011-03-01  Jeremy Orlow  <jorlow@chromium.org>

       Reviewed by Steve Block.

       When an IDBTransaction is aborted, all requests that have not yet fired should fire an ABORT_ERR
       https://bugs.webkit.org/show_bug.cgi?id=54785

       This patch adds in a lot of sanity checks/ASSERTs to make sure we're doing
       the right thing and continue to do the right thing. It also modifies EventQueue
       so that we can cancel an event. To do this efficiently, the vector is now a
       ListHashSet.

       Cancelling the event is harder/messier, but the most deterministic thing to do.
       To the user, the work isn't done until we fire the onsuccess/onerror handler.
       So the event (which does fire that) needs to be cancelable.

       transaction-abort.html tests this.

       * dom/EventQueue.cpp:
       (WebCore::EventQueue::enqueueEvent):
       (WebCore::EventQueue::cancelEvent):
       (WebCore::EventQueue::pendingEventTimerFired):
       (WebCore::EventQueue::dispatchEvent):
       * dom/EventQueue.h:
       * dom/ExceptionCode.cpp:
       * storage/IDBCursor.cpp:
       (WebCore::IDBCursor::update):
       (WebCore::IDBCursor::deleteFunction):
       * storage/IDBDatabaseBackendImpl.cpp:
       (WebCore::IDBDatabaseBackendImpl::close):
       * storage/IDBDatabaseException.h:
       * storage/IDBIndex.cpp:
       (WebCore::IDBIndex::openCursor):
       (WebCore::IDBIndex::openKeyCursor):
       (WebCore::IDBIndex::get):
       (WebCore::IDBIndex::getKey):
       * storage/IDBObjectStore.cpp:
       (WebCore::IDBObjectStore::get):
       (WebCore::IDBObjectStore::add):
       (WebCore::IDBObjectStore::put):
       (WebCore::IDBObjectStore::deleteFunction):
       (WebCore::IDBObjectStore::clear):
       (WebCore::IDBObjectStore::openCursor):
       * storage/IDBRequest.cpp:
       (WebCore::IDBRequest::IDBRequest):
       (WebCore::IDBRequest::~IDBRequest):
       (WebCore::IDBRequest::readyState):
       (WebCore::IDBRequest::markEarlyDeath):
       (WebCore::IDBRequest::source):
       (WebCore::IDBRequest::abort):
       (WebCore::IDBRequest::onSuccess):
       (WebCore::IDBRequest::dispatchEvent):
       (WebCore::IDBRequest::enqueueEvent):
       * storage/IDBRequest.h:
       * storage/IDBTransaction.cpp:
       (WebCore::IDBTransaction::registerRequest):
       (WebCore::IDBTransaction::unregisterRequest):
       (WebCore::IDBTransaction::onAbort):
       * storage/IDBTransaction.h:

2011-03-01  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Mihai Parparita.

        EventQueue needs to be ref counted
        https://bugs.webkit.org/show_bug.cgi?id=55512

        EventQueue needs to be ref counted because it's possible for its instance
        to be deleted while it's dispatching events. This is the reason why
        https://bugs.webkit.org/show_bug.cgi?id=54785 had to be reverted.

        No change of behavior, so no tests.

        * dom/Document.h:
        * dom/EventQueue.cpp:
        (WebCore::EventQueue::create):
        * dom/EventQueue.h:

2011-03-01  Helder Correia  <helder@sencha.com>

        Reviewed by Simon Fraser.

        No shadow when stroking a path with a gradient
        https://bugs.webkit.org/show_bug.cgi?id=55436

        This happens in CG and is related to bug 52509, this time to be fixed
        in GraphicsContext::strokePath(). The gradient needs to be drawn
        clipped to the stroke on a CGLayer first, then the layer drawn on the
        GraphicsContext.

        Tests: fast/canvas/canvas-strokePath-gradient-shadow.html
               svg/css/path-gradient-stroke-shadow.svg

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::strokePath):

2011-03-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        Fix Font::spaceWidth() to be a float instead of an int.

        * platform/graphics/Font.h:
        (WebCore::Font::spaceWidth):

2011-02-28  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Chromium gypi file should include Java bridge files from WebCore/bridge
        https://bugs.webkit.org/show_bug.cgi?id=55387

        No new tests, no code changes.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-03-01  James Simonsen  <simonjam@chromium.org>

        Reviewed by Tony Gentilcore.

        [Web Timing] Handle the case where no responseEnd time is available.
        https://bugs.webkit.org/show_bug.cgi?id=55444

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader): Initialize to 0.
        (WebCore::MainResourceLoader::didFinishLoading): Fall back to current time if no other time is available.

2011-03-01  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed, adding missing change for r80034.

        Add a handler class for Win32 HANDLE
        https://bugs.webkit.org/show_bug.cgi?id=55334

        * platform/win/Win32Handle.h: Added missing WTF_MAKE_NONCOPYABLE macro.

2011-03-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80037.
        http://trac.webkit.org/changeset/80037
        https://bugs.webkit.org/show_bug.cgi?id=55508

        broke compile on SL (Requested by tonyg-cr on #webkit).

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSParser.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/html.css:
        (q:before):
        (q:after):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::dirtyLineBoxesForRenderer):
        * rendering/RenderObject.h:
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        (WebCore::RenderObjectChildList::appendChildNode):
        (WebCore::RenderObjectChildList::insertChildNode):
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):
        * rendering/RenderQuote.cpp: Removed.
        * rendering/RenderQuote.h: Removed.
        * rendering/RenderingAllInOne.cpp:
        * rendering/style/ContentData.cpp:
        (WebCore::ContentData::dataEquivalent):
        (WebCore::ContentData::deleteContent):
        * rendering/style/ContentData.h:
        * rendering/style/QuotesData.cpp: Removed.
        * rendering/style/QuotesData.h: Removed.
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleAllInOne.cpp:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:

2011-03-01  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Paint outline for tables.
        https://bugs.webkit.org/show_bug.cgi?id=55474

        Test: fast/table/table-and-parts-outline.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintObject):

2011-03-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80028.
        http://trac.webkit.org/changeset/80028
        https://bugs.webkit.org/show_bug.cgi?id=55502

        'caused crashes; rolling out while investigating' (Requested
        by jorlow on #webkit).

        * dom/EventQueue.cpp:
        (WebCore::EventQueue::enqueueEvent):
        (WebCore::EventQueue::pendingEventTimerFired):
        (WebCore::EventQueue::dispatchEvent):
        * dom/EventQueue.h:
        * dom/ExceptionCode.cpp:
        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::deleteFunction):
        * storage/IDBDatabaseException.h:
        * storage/IDBDatabaseException.idl:
        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        (WebCore::IDBIndex::get):
        (WebCore::IDBIndex::getKey):
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::get):
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::clear):
        (WebCore::IDBObjectStore::openCursor):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::~IDBRequest):
        (WebCore::IDBRequest::readyState):
        (WebCore::IDBRequest::dispatchEvent):
        (WebCore::IDBRequest::enqueueEvent):
        (WebCore::IDBRequest::source):
        * storage/IDBRequest.h:
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::onAbort):
        * storage/IDBTransaction.h:

2011-03-01  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Hyatt  <hyatt@apple.com>

        content property doesn't support quotes
        https://bugs.webkit.org/show_bug.cgi?id=6503

        Added full support for quotes as defined by CSS 2.1.

        Tests: fast/css/content/content-quotes-01.html
               fast/css/content/content-quotes-02.html
               fast/css/content/content-quotes-03.html
               fast/css/content/content-quotes-04.html
               fast/css/content/content-quotes-05.html

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added RenderQuote.cpp/h and QuotesData.cpp/h to the dependency lists
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseQuotes):
        * css/CSSParser.h:
        Added needed stylesheet parsing support for quotes,
        (no-)open-quote and (no-)close-quote
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Handled setting of the new quotes RenderStyle property and added
        handling of quotes for the content property.
        * css/html.css:
        (q:before):
        (q:after):
        replaced the '"' workaround with open/close-quote
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::dirtyLineBoxesForRenderer):
        Made RenderQuote behave like RenderCounter.
        Needed to ensure that the Quote text is calculated before layout,
        just as it is for RenderCounter.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isQuote):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        (WebCore::RenderObjectChildList::appendChildNode):
        (WebCore::RenderObjectChildList::insertChildNode):
        Handled updating of quote depth when renderers are added and removed
        from the tree.
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):
        * rendering/RenderQuote.cpp: Added.
        (WebCore::adjustDepth):
        (WebCore::RenderQuote::RenderQuote):
        (WebCore::RenderQuote::~RenderQuote):
        (WebCore::RenderQuote::renderName):
        (WebCore::RenderQuote::placeQuote):
        (WebCore::RenderQuote::originalText):
        (WebCore::RenderQuote::computePreferredLogicalWidths):
        (WebCore::RenderQuote::rendererSubtreeAttached):
        (WebCore::RenderQuote::rendererRemovedFromTree):
        (WebCore::RenderQuote::styleDidChange):
        * rendering/RenderQuote.h: Added.
        (WebCore::RenderQuote::isQuote):
        (WebCore::toRenderQuote):
        * rendering/RenderingAllInOne.cpp:
        Included RenderQuote.cpp
        * rendering/style/StyleAllInOne.cpp:
        Included QuotesData.cpp
        * rendering/style/ContentData.cpp:
        (WebCore::ContentData::dataEquivalent):
        Checked for quotetype identity.
        (WebCore::ContentData::deleteContent):
        Accounted for the new QUOTE_TYPE.
        * rendering/style/ContentData.h:
        (WebCore::ContentData::isQuote):
        (WebCore::ContentData::quote):
        (WebCore::ContentData::setQuote):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setContent):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::quotes):
        (WebCore::InheritedFlags::setQuotes):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::operator==):
        Included quotes in equality check.
        * rendering/style/StyleRareInheritedData.h:
        Added quotes

2011-03-01  Michael Nordman  <michaeln@google.com>

        Reviewed by Alexey Proskuryakov.

        Alter the relative priorities of network vs fallback namespaces in the appcache.
        If a resource url is in an appcache's network namespace and fallback namespace, the network
        namespace wins (with the exception of the special '*' network namespace which does not take
        priority over the fallback namespace.
        https://bugs.webkit.org/show_bug.cgi?id=49292

        Test: http/tests/appcache/online-fallback-layering.html

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::isURLInOnlineWhitelist):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::shouldLoadResourceFromApplicationCache):
        (WebCore::ApplicationCacheHost::getApplicationCacheFallbackResource):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):

2011-03-01  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Add a handler class for Win32 HANDLE
        https://bugs.webkit.org/show_bug.cgi?id=55334

        This class will call CloseHandle in the destructor for valid handles.

        * platform/win/Win32Handle.h: Added.

2011-03-01  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Chris Marrin.

        <audio> and <video> should respect private browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=55287
        <rdar://problem/9057699>

        No new tests, this is just the plumbing.

        * dom/Document.cpp:
        (WebCore::Document::privateBrowsingStateDidChange): New.
        (WebCore::Document::registerForPrivateBrowsingStateChangedCallbacks): Ditto.
        (WebCore::Document::unregisterForPrivateBrowsingStateChangedCallbacks): Ditto.
        * dom/Document.h:

        * dom/Element.h:
        (WebCore::Element::privateBrowsingStateDidChange): New.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Register for privacy mode changes.
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Unregister for privacy mode changes.
        (WebCore::HTMLMediaElement::loadResource): Tell player current privacy mode.
        (WebCore::HTMLMediaElement::privateBrowsingStateDidChange):  New, call through to MediaPlayer.
        * html/HTMLMediaElement.h:

        * page/Page.cpp:
        (WebCore::Page::privateBrowsingStateChanged): Call document()->privateBrowsingStateDidChange.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setPrivateBrowsingMode): New, call through to media engine.
        * platform/graphics/MediaPlayer.h:

        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setPrivateBrowsingMode):  Declare new interface.

2011-03-01  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        When an IDBTransaction is aborted, all requests that have not yet fired should fire an ABORT_ERR
        https://bugs.webkit.org/show_bug.cgi?id=54785

        This patch adds in a lot of sanity checks/ASSERTs to make sure we're doing
        the right thing and continue to do the right thing. It also modifies EventQueue
        so that we can cancel an event. To do this efficiently, the vector is now a
        ListHashSet.

        Canelling the event is harder/messier, but the most deterministic thing to do.
        To the user, the work isn't done until we fire the onsuccess/onerror handler.
        So the event (which does fire that) needs to be cancelable.

        transaction-abort.html tests this.

        * dom/EventQueue.cpp:
        (WebCore::EventQueue::enqueueEvent):
        (WebCore::EventQueue::cancelEvent):
        (WebCore::EventQueue::pendingEventTimerFired):
        (WebCore::EventQueue::dispatchEvent):
        * dom/EventQueue.h:
        * dom/ExceptionCode.cpp:
        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::deleteFunction):
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::close):
        * storage/IDBDatabaseException.h:
        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        (WebCore::IDBIndex::get):
        (WebCore::IDBIndex::getKey):
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::get):
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::clear):
        (WebCore::IDBObjectStore::openCursor):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::~IDBRequest):
        (WebCore::IDBRequest::readyState):
        (WebCore::IDBRequest::markEarlyDeath):
        (WebCore::IDBRequest::source):
        (WebCore::IDBRequest::abort):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::dispatchEvent):
        (WebCore::IDBRequest::enqueueEvent):
        * storage/IDBRequest.h:
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::registerRequest):
        (WebCore::IDBTransaction::unregisterRequest):
        (WebCore::IDBTransaction::onAbort):
        * storage/IDBTransaction.h:

2011-03-01  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Only IndexedDB's error event should be cancelable
        https://bugs.webkit.org/show_bug.cgi?id=55413

        * storage/IDBRequest.cpp:
        (WebCore::createSuccessEvent):
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::onAbort):
        (WebCore::IDBTransaction::onComplete):

2011-03-01  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Remove CorrectionIndicator markers sooner.
        https://bugs.webkit.org/show_bug.cgi?id=54893
        <rdar://problem/8997524>

        Test: platform/mac/editing/spelling/removing-underline-after-accepting-autocorrection-using-punctuation.html

        This patch changes the autocorrection behavior on Mac OS X. We want to remove CorrectionIndicator
        marker after any editing command if the command:
        1. is not a SpellingCorrectionCommand itself.
        2. is not the command that triggers the autocorrection.
        This is achieved by adding shouldRetainAutocorrectionIndicator() function to EditCommand. This function returns
        false for all commands derived from EditCommand, except SpellingCorrectionCommand and TypingCommand. This function
        always returns true for SpellingCorrectionCommand. For TypingCommand, the return value is determined by member
        variable m_shouldRetainAutocorrectionIndicator, which can be modified by passing option into the TypingCommand's
        public functions.
        
        To avoid constantly searching marker list, we use variable DocumentMarkerController::m_absentMarkerTypeCache
        to cache whether there is any marker of a particular type.

        This patch also fixes two minor existing bugs.
        
        1. We used to show reversion panel for word with CorrectionIndicator marker. This is incorrect because
        CorrectionIndicator marker can be removed from corrected words. Since all autocorrected words have Replacement
        marker unless the whole word is deleted, the correct behavior is to show reversion panel for word with Replacement
        marker, since all autocorrected words have such marker. However, since we don't want to show the reversion panel
        if an autocorrected word has been edited, we also check to see if the Replacement marker's description is null.
        
        This works as following:
        When we apply an autocorrection, we add Replacement marker to corrected word, and store original word
        as the marker's description. If the user edited the corrected word afterward, we set description to null.
        So when we decide whether to show a reversion panel, we not only check for the existence of Replacement
        marker, but also check if description is null.
        
        2. Fixed an assertion violation in Editor::removeSpellAndCorrectionMarkersFromWordsToBeEdited(), which would
        occur when deleting the first character in an editable area.

        * dom/DocumentMarker.h: Added m_possiblyExistingMarkerTypes to allow quickly checking whether a marker type is
           completely in from the document.

        * dom/DocumentMarkerController.cpp: Most of the functions listed here are optimized for early return by checking
           the return value of possiblyHasMarkers() at beginning.
        (WebCore::DocumentMarkerController::possiblyHasMarkers):
        (WebCore::DocumentMarkerController::DocumentMarkerController):
        (WebCore::DocumentMarkerController::detach):
        (WebCore::DocumentMarkerController::removeMarkers):
        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::copyMarkers):
        (WebCore::DocumentMarkerController::markerContainingPoint):
        (WebCore::DocumentMarkerController::renderedRectsForMarkers):
        (WebCore::DocumentMarkerController::removeMarkersFromMarkerMapVectorPair):
        (WebCore::DocumentMarkerController::repaintMarkers):
        (WebCore::DocumentMarkerController::shiftMarkers):
        (WebCore::DocumentMarkerController::setMarkersActive):
        (WebCore::DocumentMarkerController::hasMarkers):
        (WebCore::DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange):
        * dom/DocumentMarkerController.h:
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply):
        (WebCore::EditCommand::shouldRetainAutocorrectionIndicator):
        (WebCore::EditCommand::setShouldRetainAutocorrectionIndicator):
        * editing/EditCommand.h:
        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::insertLineBreak):
        (WebCore::Editor::insertParagraphSeparator):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::removeSpellAndCorrectionMarkersFromWordsToBeEdited):
        (WebCore::Editor::applyAutocorrectionBeforeTypingIfAppropriate):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeInsertLineBreak):
        (WebCore::executeInsertParagraph):
        (WebCore::executeInsertText):
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::shouldRetainAutocorrectionIndicator):
        * editing/SpellingCorrectionCommand.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::TypingCommand):
        (WebCore::TypingCommand::deleteSelection):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::TypingCommand::updateSelectionIfDifferentFromCurrentSelection):
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::insertLineBreak):
        (WebCore::TypingCommand::insertParagraphSeparatorInQuotedContent):
        (WebCore::TypingCommand::insertParagraphSeparator):
        * editing/TypingCommand.h:
        (WebCore::TypingCommand::create):
        (WebCore::TypingCommand::shouldRetainAutocorrectionIndicator):
        (WebCore::TypingCommand::setShouldRetainAutocorrectionIndicator):
        * manual-tests/autocorrection/type-whitespace-to-dismiss-reversion.html:

2011-03-01  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        FEDisplacementMapElement changes doesn't require relayout
        https://bugs.webkit.org/show_bug.cgi?id=55454

        When the FEDisplacementMapElement receives an update message but the given value remains the same we don't need
        to relayout the filter.

        No new tests are needed because this modification is covered by the dynamic update tests of FEDisplacementMap.

        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::setXChannelSelector):
        (WebCore::FEDisplacementMap::setYChannelSelector):
        (WebCore::FEDisplacementMap::setScale):
        * platform/graphics/filters/FEDisplacementMap.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::setFilterEffectAttribute):
        (WebCore::SVGFEDisplacementMapElement::svgAttributeChanged):
        * svg/SVGFEDisplacementMapElement.h:

2011-03-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8902714> Expand ruby text when it is shorter than the ruby base
        https://bugs.webkit.org/show_bug.cgi?id=55487

        * css/html.css:
        (ruby > rt): Changed the default text-align value to -webkit-auto to signal
        the default expansion behavior.
        * rendering/RenderBlock.h:
        (WebCore::RenderRubyText::textAlignmentForLine): Made protected.
        (WebCore::RenderBlock::adjustInlineDirectionLineBounds): Made protected.
        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::textAlignmentForLine): Added. If text-align is
        -webkit-auto, returns JUSTIFY to allow expansion.
        (WebCore::RenderRubyText::adjustInlineDirectionLineBounds): Added. If
        text-align is -webkit-auto, insets the line such that the inset on each side
        is the half the inter-ideograph expansion, or one ruby character wide,
        whichever is smaller.
        * rendering/RenderRubyText.h:

2011-03-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Timothy Hatcher.

        WebKit2 needs to be made localizable
        https://bugs.webkit.org/show_bug.cgi?id=55483

        * English.lproj/Localizable.strings: Copied from Source/WebKit/English.lproj/Localizable.strings.
        * WebCore.xcodeproj/project.pbxproj:
        Move Localizable.strings to WebCore.

        * WebCore.exp.in:
        Add export for localizedString function.

        * platform/LocalizedStrings.h:
        * platform/mac/LocalizedStringsMac.mm: Added.
        Add function to get localized version of a string from the WebCore bundle.

2011-03-01  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        All Console Messages should be passed to ChromeClients.
        https://bugs.webkit.org/show_bug.cgi?id=54926

        Do not filter the message type here, allow clients
        to filter and deal with the different message types.

        * page/Console.cpp:
        (WebCore::Console::addMessage):

2011-02-23  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Viewport parsing no longer accepts "1.0;" value as valid.
        https://bugs.webkit.org/show_bug.cgi?id=53705

        When parsing numeric values, the "css-viewport" spec says
        to use the number prefix, and the non numeric part of the
        string can be ignored. This matches our behavior before
        r67376. The change was that checking the error out condition
        of String::toFloat doesn't necessarily mean that there
        was a non-numeric prefix. This patch checks if there was
        or wasn't a non-numeric prefix.

        There is a console warning in any case where a numeric
        value is not parsed cleanly. There is an error warning
        when it is not a number at all, and a tip warning when
        it has been truncated.

        Error messages are slightly improved to provide more
        context, both the key and value, when an error happens.

        Test: fast/viewport/viewport-129.html

        * dom/ViewportArguments.cpp:
        (WebCore::numericPrefix):
        (WebCore::findSizeValue):
        (WebCore::findScaleValue):
        (WebCore::findUserScalableValue):
        (WebCore::findTargetDensityDPIValue):
        (WebCore::viewportErrorMessageTemplate):
        (WebCore::viewportErrorMessageLevel):
        (WebCore::reportViewportWarning):
        * dom/ViewportArguments.h:

2011-03-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: InjectedScript.setPropertyValue doesn't work.
        https://bugs.webkit.org/show_bug.cgi?id=55475

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::setPropertyValue):

2011-03-01  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Remove unused JavaString::uchars()
        https://bugs.webkit.org/show_bug.cgi?id=55465

        No new tests, removing dead code only.

        * bridge/jni/JNIBridge.h:
        * bridge/jni/jsc/JavaStringJSC.h:
        (JSC::Bindings::JavaStringImpl::utf8):
        * bridge/jni/v8/JavaStringV8.h:

2011-03-01  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Extremely slow DOM search in GMail
        https://bugs.webkit.org/show_bug.cgi?id=55456

        The solution comprises three major parts:
        - avoid multiple invocations of highlightSearchResults(), one per each nodeIds chunk.
        - cache highlighted node's innerHTML so that no extra _nodeTitleInfo() calls will be needed.
        - replace hand-written Text nodes iteration with a snapshot-based ".//text()" XPathResult.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.addNodesToSearchResult):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.highlightSearchResults):
        (WebInspector.ElementsTreeElement.prototype.updateTitle):
        ():
        * inspector/front-end/utilities.js:
        ():

2011-03-01  Adam Roben  <aroben@apple.com>

        Fix multiple-definition linker warnings introduced by r79978 on Windows

        * rendering/RenderingAllInOne.cpp: Removed TextControlInnerElements.cpp, as it is now being
        compiled separately.

2011-03-01  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Clean up the project files and move common options to WebKit.pri.

        No new tests needed.

        * WebCore.pri: Move common options to WebKit.pri.
        * WebCore.pro: Ditto.

2011-03-01  Steve Block  <steveblock@google.com>

        Reviewed by Pavel Feldman.

        JNI code in Java bridge is not correctly guarded
        https://bugs.webkit.org/show_bug.cgi?id=55459

        No new tests, build fix only.

        * bridge/jni/v8/JNIBridgeV8.cpp:
        * bridge/jni/v8/JNIBridgeV8.h:
        * bridge/jni/v8/JNIUtilityPrivate.cpp:
        * bridge/jni/v8/JNIUtilityPrivate.h:
        * bridge/jni/v8/JavaClassV8.cpp:
        * bridge/jni/v8/JavaClassV8.h:
        * bridge/jni/v8/JavaInstanceV8.cpp:
        * bridge/jni/v8/JavaInstanceV8.h:
        * bridge/jni/v8/JavaNPObjectV8.cpp:
        * bridge/jni/v8/JavaNPObjectV8.h:

2011-03-01  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Bridge.h should not include BridgeJSC.h
        https://bugs.webkit.org/show_bug.cgi?id=55212

        Instead, BridgeJSC.h should include Bridge.h and code should include
        BridgeJSC.h as appropriate.

        This prevents ports that use V8 from having to include JSC-specific
        files, even if the contents of those files are guarded.

        No new tests, cleanup only.

        * bindings/js/JSPluginElementFunctions.cpp:
        * bindings/js/ScriptControllerBrew.cpp:
        * bindings/js/ScriptControllerGtk.cpp:
        * bindings/js/ScriptControllerHaiku.cpp:
        * bindings/js/ScriptControllerQt.cpp:
        * bindings/js/ScriptControllerMac.mm:
        * bindings/js/ScriptControllerWin.cpp:
        * bindings/js/ScriptControllerWx.cpp:
        * bindings/js/ScriptInstance.h:
        * bindings/objc/WebScriptObject.mm:
        * bridge/Bridge.h:
        * bridge/c/c_class.h:
        * bridge/c/c_instance.h:
        * bridge/c/c_runtime.h:
        * bridge/jni/jsc/JNIBridgeJSC.h:
        * bridge/jni/jsc/JavaInstanceJSC.h:
        * bridge/jsc/BridgeJSC.h:
        * bridge/objc/objc_runtime.h:
        * bridge/qt/qt_class.h:
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_pixmapruntime.h:
        * bridge/qt/qt_runtime.h:
        * 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/PluginViewNone.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/mac/PluginViewMac.mm:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/symbian/PluginViewSymbian.cpp:
        * plugins/win/PluginViewWin.cpp:

2011-03-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Antti Koivisto.

        SVG 1.1 2nd Edition color-prop-05-t.svg exposes bug in 'currentColor' handling
        https://bugs.webkit.org/show_bug.cgi?id=54800

        Wrong handling of currentColor on inherit
        https://bugs.webkit.org/show_bug.cgi?id=38102

        Stop storing RefPtr<SVGPaint> objects in the SVGRenderStyle for fill/stroke. These are the last
        two objects that held references to CSSValues, they're all gone now, aligning better with RenderStyle.
        It's also dangerous, as a SVGPaint object can be shared by multiple SVGRenderStyles (MappedAttribute will
        once create a CSSStyleDeclaration for fill="red" and reuse it where possible), and it was easy to
        accidently mutate the object, affecting multiple styles. Instead store a Color, an URI and a paint
        type in SVGRenderStyle, enough to create a SVGPaint object, if needed (eg for computed styles).

        <g color="green"><rect fill="currentColor"/> already worked fine in trunk, but
        <g fill="currentColor" color="green"><rect color="red"/> procuded a red rectangle.

        In order to fix to bug we have to resolve all currentColor values for SVGPaint objects, in SVGCSSStyleSelector,
        as it's already done for SVGColor objects (stop-color, flood-color, etc.) instead of in RenderSVGResource::fill/strokePaintingResource,
        when trying to use the paint server. The correct "color" value that should be used from the RenderStyle, is directly
        available in CSSStyleSelector: in applyProperty m_style->color() gives the desired value. In CSSStyleSelector it's handled
        exactly this way for non-SVG currentColor properties. Also fix computed styles, which did not resolve currentColor for SVGPaint/SVGColor.

        A previous patch implemented the SVGPaint/SVGColor API. SVG demands these CSSValues to be mutable. Introduce
        CSSMutableValue, which extends CSSValue by a Node pointer, and let SVGPaint/SVGColor inherit from it.
        Mutating a SVGPaint/SVGColor object now takes immediate effect, which is reflected in the inline style / computed style.
        (Note that getPresentationAttribute() already takes care of removing the CSSValue from the mapped attribute cache, so that it's no longer shared.)

        Add several new tests covering the patch.

        Tests: svg/W3C-SVG-1.1-SE/color-prop-05-t.svg
               svg/animations/animate-color-fill-currentColor.html
               svg/custom/SVGPaint-mutate-attribute.svg
               svg/custom/SVGPaint-mutate-inline-style.svg

        * GNUMakefile.am: Add CSSMutableValue.h
        * WebCore.gypi: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * css/CSSMutableStyleDeclaration.cpp: Reset the Node pointer in all CSSMutableValues belonging to this style declaration.
        (WebCore::CSSMutableStyleDeclaration::~CSSMutableStyleDeclaration):
        * css/CSSMutableStyleDeclaration.h: Add destructor.
        * css/CSSMutableValue.h: Added.
        (WebCore::CSSMutableValue::CSSMutableValue):
        (WebCore::CSSMutableValue::~CSSMutableValue):
        (WebCore::CSSMutableValue::isMutableValue):
        (WebCore::CSSMutableValue::node):
        (WebCore::CSSMutableValue::setNode):
        (WebCore::CSSMutableValue::setNeedsStyleRecalc):
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::getPropertyCSSValue): Set the Node object of a CSSMutableValue to the Node, this style declaration belongs to.
        * css/CSSValue.h:
        (WebCore::CSSValue::isMutableValue): Return false, default.
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::adjustSVGPaintForCurrentColor): Add helper function, resolving currentColor values for SVGPaint objects.
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue): Use currentColorOrValidColor/adjustSVGPaintForCurrentColor to resolve SVGColor/SVGPaint values.
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty): Store fill/stroke uri, color, paint type seperated in SVGRenderStyle, don't store the full SVGPaint object anymore.
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff): Adapt to SVGPaint changes.
        * rendering/style/SVGRenderStyle.h: Ditto.
        (WebCore::SVGRenderStyle::initialFillOpacity):
        (WebCore::SVGRenderStyle::initialFillPaintType):
        (WebCore::SVGRenderStyle::initialFillPaintColor):
        (WebCore::SVGRenderStyle::initialFillPaintUri):
        (WebCore::SVGRenderStyle::initialStrokeOpacity):
        (WebCore::SVGRenderStyle::initialStrokePaintType):
        (WebCore::SVGRenderStyle::initialStrokePaintColor):
        (WebCore::SVGRenderStyle::initialStrokePaintUri):
        (WebCore::SVGRenderStyle::initialStrokeMiterLimit):
        (WebCore::SVGRenderStyle::initialStopOpacity):
        (WebCore::SVGRenderStyle::initialFloodOpacity):
        (WebCore::SVGRenderStyle::setFillPaint):
        (WebCore::SVGRenderStyle::setStrokePaint):
        (WebCore::SVGRenderStyle::fillPaintType):
        (WebCore::SVGRenderStyle::fillPaintColor):
        (WebCore::SVGRenderStyle::fillPaintUri):
        (WebCore::SVGRenderStyle::strokePaintType):
        (WebCore::SVGRenderStyle::strokePaintColor):
        (WebCore::SVGRenderStyle::strokePaintUri):
        (WebCore::SVGRenderStyle::hasStroke):
        (WebCore::SVGRenderStyle::hasFill):
        * rendering/style/SVGRenderStyleDefs.cpp: Ditto.
        (WebCore::StyleFillData::StyleFillData):
        (WebCore::StyleFillData::operator==):
        (WebCore::StyleStrokeData::StyleStrokeData):
        (WebCore::StyleStrokeData::operator==):
        * rendering/style/SVGRenderStyleDefs.h: Ditto.
        * rendering/svg/RenderSVGResource.cpp: Ditto.
        (WebCore::requestPaintingResource):
        * rendering/svg/RenderSVGResourceClipper.cpp: Ditto.
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage):
        * rendering/svg/SVGResources.cpp: Ditto.
        (WebCore::paintingResourceFromSVGPaint):
        (WebCore::SVGResources::buildCachedResources):
        * svg/SVGColor.cpp: Call setNeedsStyleRecalc() after mutating the object.
        (WebCore::SVGColor::setRGBColor):
        (WebCore::SVGColor::setRGBColorICCColor):
        (WebCore::SVGColor::setColor):
        * svg/SVGColor.h:
        * svg/SVGPaint.cpp: Ditto.
        (WebCore::SVGPaint::setUri):
        (WebCore::SVGPaint::setPaint):
        * svg/SVGPaint.h:

2011-03-01  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Handle decorated lines in the editor
        https://bugs.webkit.org/show_bug.cgi?id=55373

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._startEditing):
        (WebInspector.SourceFrame.prototype._endEditing):
        (WebInspector.SourceFrame.prototype._createTextViewer):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorGutterPanel.prototype.textChanged):
        (WebInspector.TextEditorGutterChunk.prototype.addDecoration):
        (WebInspector.TextEditorGutterChunk.prototype.removeDecoration):
        (WebInspector.TextEditorMainPanel.prototype.set readOnly):
        (WebInspector.TextEditorMainPanel.prototype._handleDOMUpdates):
        (WebInspector.TextEditorMainPanel.prototype._handleDOMSubtreeModified):
        (WebInspector.TextEditorMainPanel.prototype._markDirtyLines):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._removeDecorationsInRange):
        (WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):
        (WebInspector.TextEditorMainPanel.prototype._collectLinesFromDiv):
        (WebInspector.TextEditorMainChunk.prototype.addDecoration):
        (WebInspector.TextEditorMainChunk.prototype.removeDecoration):
        (WebInspector.TextEditorMainChunk.prototype.removeAllDecorations):
        (WebInspector.TextEditorMainChunk.prototype.get decorated):

2011-03-01  Philippe Normand  <pnormand@igalia.com>

        Unreviewed GTK build fix after r79978

        * GNUmakefile.am:

2011-03-01  Andras Becsi  <abecsi@webkit.org>

        Unreviewed build fix.

        [Qt] Fix minimal build.

        No new tests needed.

        * WebCore.pri: Is included in WebKit2.pro, so XP_UNIX can remain here.

2011-03-01  anthony taranto  <anthony.taranto@gmail.com>

        Return undefined value from ScriptController::evaluate(), allowing the
        caller to distinguish between an error and an undefined return value.
        https://bugs.webkit.org/show_bug.cgi?id=51528

        * bindings/v8/ScriptController.cpp: 

2011-03-01  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Kent Tamura.

        Bug 54853 - Move TextControlInnerElements from WebCore/rendering to WebCore/html/shadow
        https://bugs.webkit.org/show_bug.cgi?id=54853
        
        Moving the files from rendering to html/shadow, with the exception of
        the class RenderTextControlInnerBlock, which I moved to RenderTextControlSingleLine
        (this place is not ideal, but only a temporary state during the larger refactoring
        for <input>).

        No new tests. (refactoring)

        * Android.mk:
        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/shadow/TextControlInnerElements.cpp: Copied from Source/WebCore/rendering/TextControlInnerElements.cpp.
        * html/shadow/TextControlInnerElements.h: Copied from Source/WebCore/rendering/TextControlInnerElements.h.
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlInnerBlock::positionForPoint):
        * rendering/RenderTextControlSingleLine.h:
        (WebCore::RenderTextControlInnerBlock::RenderTextControlInnerBlock):
        (WebCore::RenderTextControlInnerBlock::hasLineIfEmpty):
        * rendering/TextControlInnerElements.cpp: Removed.
        * rendering/TextControlInnerElements.h: Removed.

2011-03-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        applyInlineStyleToPushDown and removeInlineStyleFromElement should take EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=55338

        Deployed EditingStyle in applyInlineStyleToPushDown and removeInlineStyleFromElement.

        Also added a convenience function EditingStyle::setProperty, which lazily instantiates
        new CSSMutableStyleDeclaration for m_mutableStyle.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): Takes EditingStyle*.
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement): Ditto.
        (WebCore::ApplyStyleCommand::removeCSSStyle): Ditto.
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode): Calls the above three functions.
        (WebCore::ApplyStyleCommand::removeInlineStyle): Calls pushDownInlineStyleAroundNode.
        * editing/ApplyStyleCommand.h:
        * editing/EditingStyle.cpp:
        (WebCore::HTMLElementEquivalent::addToStyle): Takes EditingStyle*; calls EditingStyle::setProperty.
        (WebCore::HTMLAttributeEquivalent::addToStyle): Ditto.
        (WebCore::EditingStyle::setProperty): Added.  This member function lazily instantiates
        new CSSMutableStyleDeclaration for m_mutableStyle.
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement): Takes EditingStyle*.
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfElement): Ditto.
        (WebCore::EditingStyle::extractConflictingImplicitStyleOfAttributes): Ditto.
        * editing/EditingStyle.h: Added HTMLElementEquivalent and HTMLAttributeEquivalent as friends.
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement): Ditto.
        * editing/InsertTextCommand.cpp: Removed unnecessary includes.
        * editing/RemoveCSSPropertyCommand.h: Ditto.

2011-02-28  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: chromium rebuilds XMLViewer after noop. Fixed gyp file.

        * WebCore.gyp/WebCore.gyp:

2011-02-28  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        KURL should expose a referrer property.
        https://bugs.webkit.org/show_bug.cgi?id=55415

        No change in functionality so no new tests.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setOutgoingReferrer): Refactor to put the majority
        of functionality in KURL::strippedForUseAsReferrer() so that this code can
        be more easily reused.
        * platform/KURL.cpp:
        (WebCore::KURL::strippedForUseAsReferrer): Converts the url to a string
        which is suitable for use as a referrer.
        * platform/KURL.h:

2011-02-28  Chang Shu  <cshu@webkit.org>

        Reviewed by Ryosuke Niwa.

        Remove the support of Frame::isContentEditable and its dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=54292

        Frame::isContentEditable is currently based on two things: Editor::clientIsEditable and
        Document::inDesignMode. In fact, it should only rely on Document::inDesignMode. As a result,
        Editor::clientIsEditable and its client-side implementation can be removed.

        * WebCore.exp.in:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isReadOnly):
        * editing/Editor.cpp:
        * editing/Editor.h:
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelectionFromNone):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isContentEditable):
        (WebCore::HTMLElement::isContentRichlyEditable):
        * page/DragController.cpp:
        (WebCore::DragController::operationForLoad):
        * page/EditorClient.h:
        * page/Frame.cpp:
        * page/Frame.h:

2011-02-28  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Number type input cannot be set to empty string if it has an initial value
        https://bugs.webkit.org/show_bug.cgi?id=53744

        We need to distinguish null strings and empty strings for
        InputElementData::value. So InputType::sanitizeValue() also needs to
        take care of it.

        * dom/InputElement.h: Add a comment to InputElementData::value and
          setValue about null strings.
        * html/InputType.h: Add a comment to sanitizeValue about null strings.
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::sanitizeValue): Returns a null string if the
          proposed value is a null string. Returning an empty string if the
          proposed value is not a number.

2011-02-28  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Number type input should not handle mouse wheel events if it has no focus.
        https://bugs.webkit.org/show_bug.cgi?id=53638

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::handleWheelEventForSpinButton): Check focused().

2011-02-28  Noel Gordon  <noel.gordon@gmail.com>
        Reviewed by James Robinson.

        [chromium] GradientSkia: use the common Gradient stop sorting methods.
        https://bugs.webkit.org/show_bug.cgi?id=54625

        Remove a FIXME: call the Gradient.cpp stop storting routines, no need
        to duplicate that code herein.

        No change in behavior, so no new tests.

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

2011-02-28  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JNI code should include <jni.h> on non-OSX platforms.
        https://bugs.webkit.org/show_bug.cgi?id=55219

        On Mac we need to include <JavaVM/jni.h> as this is a framework
        include. We include jni.h through JNIUtility.h to minimize the
        number of ifdefs.

        No new tests, build fix only.

        * WebCore.xcodeproj/project.pbxproj
        * bridge/jni/JNIUtility.h:
        * bridge/jni/jni_jsobject.h:
        * bridge/jni/jsc/JNIBridgeJSC.h:
        * bridge/jni/jsc/JavaInstanceJSC.h:
        * bridge/jni/v8/JavaInstanceV8.h:

2011-02-28  Nebojsa Sabovic  <neb@chromium.org>

        Reviewed by James Robinson.

        [chromium] Pepper plugins render upside down
        https://bugs.webkit.org/show_bug.cgi?id=55101

        No layout tests for pepper plugins (yet).

        * platform/graphics/chromium/PluginLayerChromium.h:

2011-02-28  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Follow HTML5 spec for document.open() a little more closely
        https://bugs.webkit.org/show_bug.cgi?id=55392

        See: 3.5.1.4 at http://www.whatwg.org/specs/web-apps/current-work/#dom-document-open.

        The second return check matches the spec. The first return check (isExecutingScript())
        was left in place because without it, fast/tokenizer/write-external-script-open.html
        would fail. It also possible there is a spec bug because FF4 crashes on that test and
        IE9 prints "FAILURE." The isLoadingMainResource() check was removed because the main
        resource is always loading while parser->isParsing().

        Test: fast/parser/double-write-from-closed-iframe.html

        * dom/Document.cpp:
        (WebCore::Document::open):

2011-02-28  Avi Drissman  <avi@google.com>

        Reviewed by James Robinson.

        WebCursorInfo needs to match enums in platform/Cursor.h
        https://bugs.webkit.org/show_bug.cgi?id=55094

        * platform/chromium/CursorChromium.cpp:
        (WebCore::grabCursor):
        (WebCore::grabbingCursor):
        * platform/chromium/PlatformCursor.h:

2011-02-28  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        [Mac] Make "Change back to …" contextual menu item work with new autocorrection.
        https://bugs.webkit.org/show_bug.cgi?id=55396
        <rdar://problem/8836093>

        The change in InlineTextBox.cpp fixes a bug, where the rectangle of Replacement marker isn't
        calculated. We need this to do hit test when deciding whether to show "Change back to ..." on
        contextual menu.

        The change in Editor.cpp is for notifying spellchecker about the reversion whenever "Change
        back to ..." is clicked.

        * editing/Editor.cpp:
        (WebCore::Editor::changeBackToReplacedString):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDocumentMarkers):

2011-02-28  Victoria Kirst  <vrk@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Fall back to texSubImage2D when mapTexSubImage2D fails in VideoLayerChromium
        https://bugs.webkit.org/show_bug.cgi?id=55269

        Mesa does not support mapTexSubImage2D, so this change lets
        GPU-accelerated video work with DRT layout tests.

        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::updateTexture):

2011-02-28  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.  Change staticX and staticY
        to be staticInlinePosition and staticBlockPosition.  Patch all of the computations involving these variables to be writing
        mode aware.  Mixed writing modes are not yet supported.

        Added new tests in fast/block/positioning/auto.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustPositionedBlock):
        (WebCore::RenderBlock::layoutPositionedObjects):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::startOffsetForLine):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::appendRunsForObject):
        (WebCore::setStaticPositions):
        (WebCore::RenderBlock::skipTrailingWhitespace):
        (WebCore::RenderBlock::skipLeadingWhitespace):
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionLineBox):
        (WebCore::computeInlineStaticDistance):
        (WebCore::RenderBox::computePositionedLogicalWidth):
        (WebCore::computeBlockStaticDistance):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::borderAndPaddingLogicalLeft):
        (WebCore::RenderBoxModelObject::borderAndPaddingStart):
        (WebCore::RenderBoxModelObject::borderLogicalLeft):
        (WebCore::RenderBoxModelObject::borderLogicalRight):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::relativePositionedInlineOffset):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::staticInlinePosition):
        (WebCore::RenderLayer::staticBlockPosition):
        (WebCore::RenderLayer::setStaticInlinePosition):
        (WebCore::RenderLayer::setStaticBlockPosition):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::hasAutoLeftAndRight):
        (WebCore::InheritedFlags::hasAutoTopAndBottom):
        (WebCore::InheritedFlags::hasStaticInlinePosition):
        (WebCore::InheritedFlags::hasStaticBlockPosition):

2011-02-28  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Anders Carlsson.

        [Qt][WK2] Plugin initialization
        https://bugs.webkit.org/show_bug.cgi?id=48127

        No function change so no new tests.

        * WebCore.pri: Lift the definition of the XP_UNIX macro
        from WebCore.pri to WebKit.pri to apply it to WebKit2 as well.

2011-02-28  Dean Jackson  <dino@apple.com>

        Reviewed by Eric Carlson.

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

        Allow webkitEnterFullScreen to be called from outside
        a user gesture, but only when the correct restrictions
        have been lifted in WebCore. Add a new restriction type
        for this situation. Meanwhile, expose the current
        restrictions externally from HTMLMediaElement, so that
        clients can easily set restrictions on their port.

        No new tests. This doesn't change existing behavior. Some
        WebKit clients may lift the restriction.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        - ensure restrictions initialize with fullscreen restricted
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::requireUserGestureForLoad):
        (WebCore::HTMLMediaElement::requireUserGestureForRateChange):
        (WebCore::HTMLMediaElement::requireUserGestureForFullScreen):
        (WebCore::HTMLMediaElement::setBehaviorRestrictions):
        - new methods to expose the current restrictions
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitEnterFullscreen):

2011-02-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r78789.
        http://trac.webkit.org/changeset/78789
        https://bugs.webkit.org/show_bug.cgi?id=55409

        Incorrect canvas fallback implementation (Requested by
        inferno-sec on #webkit).

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::canHaveChildren):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isFocusable):
        * rendering/RenderHTMLCanvas.cpp:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaint):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):

2011-02-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79425.
        http://trac.webkit.org/changeset/79425
        https://bugs.webkit.org/show_bug.cgi?id=55406

        Incorrect canvas fallback implementation. (Requested by
        inferno-sec on #webkit).

        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::nodeAtPoint):

2011-02-28  Adam Klein  <adamk@chromium.org>

        Reviewed by Adam Barth.

        [fileapi] Implement LocalFileSystem.resolveLocalFileSystemURI
        https://bugs.webkit.org/show_bug.cgi?id=54774

        See http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#methods
        for the spec implemented by this patch.

        Test: fast/filesystem/resolve-uri.html

        * fileapi/DOMFileSystemBase.cpp:
        (WebCore::DOMFileSystemBase::crackFileSystemURL):
        * fileapi/DOMFileSystemBase.h:
        Added constants for "temporary" and "persistent".
        * fileapi/EntryBase.cpp:
        Replace hardcoded strings with aforementioned constants.
        * fileapi/FileSystemCallbacks.cpp:
        (WebCore::ResolveURICallbacks::create):
        (WebCore::ResolveURICallbacks::ResolveURICallbacks):
        (WebCore::ResolveURICallbacks::didOpenFileSystem):
        Chains a call of openFileSystem to calls to getDirectory/getFile.
        * fileapi/FileSystemCallbacks.h:
        * fileapi/LocalFileSystem.cpp:
        (WebCore::LocalFileSystem::readFileSystem):
        * fileapi/LocalFileSystem.h:
        Remove size argument from readFileSystem()
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::resolveLocalFileSystemURI):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2011-02-28  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Oliver Hunt.

        Build fix for Qt port after API changes of http://trac.webkit.org/changeset/79904.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtConnectionObject::execute):

2011-02-25  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        Remove some duplicate code from KURLGoogle.cpp
        https://bugs.webkit.org/show_bug.cgi?id=55266

        No change in functionality so no new tests.

        * WebCore.gyp/WebCore.gyp: Make KURL.cpp get built by Chromium.
        * platform/KURL.cpp:
        Simply moved #include's and some code that was identical (i.e.
        had been copied) to KURLGoogle.cpp outside of ifdef !USE(GOOGLEURL)
        to reduce duplication.
        * platform/KURLGoogle.cpp:
        Removed the duplicate code.

2011-02-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make ScopeChainNode GC allocated
        https://bugs.webkit.org/show_bug.cgi?id=55283

        Update WebCore to deal with the absence of the ScopeChain
        class.

        * ForwardingHeaders/runtime/ScopeChain.h: Added.
        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::JSHTMLElement::pushEventHandlerScope):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeChain):
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadExecState::evaluate):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::pushEventHandlerScope):
        * bindings/js/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::scopeChain):
        * bindings/js/JavaScriptCallFrame.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/c_class.cpp:
        * bridge/c/c_runtime.cpp:
        * bridge/jni/JNIBridge.cpp:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtConnectionObject::execute):
        * plugins/PluginViewNone.cpp:

2011-02-28  Chang Shu  <cshu@webkit.org>

        Reviewed by Adele Peterson.

        REGRESSION (r79762): Items in <select multiple> have focus rings, but shouldn't
        https://bugs.webkit.org/show_bug.cgi?id=55323

        Draw focus ring on selected items only if spatial navigation is enabled.

        Test: fast/forms/select-listbox-multiple-no-focusring.html

        * rendering/RenderBlock.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::addFocusRingRects):

2011-02-28  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Anders Carlsson.

        We can cancel the plugin load and fail with error before m_manualStream
        got a chance to initialize in PluginView::didReceiveResponse. This can
        happen when we run pending document onload events during plugin load that
        remove the frame from underneath. So, change the assert into a null check. 
        https://bugs.webkit.org/show_bug.cgi?id=55307

        * plugins/PluginView.cpp:
        (WebCore::PluginView::didFail):

2011-02-28  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Alexey Proskuryakov.

        Build fix for Intel ICC Compiler.
        https://bugs.webkit.org/show_bug.cgi?id=55221

        The virtual inheritance seems to confuse ICC.
        Anything that links with webkit has an undefined reference otherwise.

        * svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::~SVGTransformable):
        * svg/SVGTransformable.h:

2011-02-28  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] Resource size is incorrectly reported to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=53228

        When calling didReceiveData we are sending an invalid value for
        lengthReceived. Sometimes we were even passing a boolean value instead of the
        expected integer. We should pass the size of the received data instead of the
        total amount of data received.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::gotChunkCallback):
        (WebCore::sendRequestCallback):
        (WebCore::readCallback):

2011-02-28  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Dan Bernstein.

        Cleanup the include guard form an Objective-C files
        https://bugs.webkit.org/show_bug.cgi?id=55379

        Normally Objective-C files do not need include guard.
        r76916 introduced an include guard in EmptyProtocolDefinitions.h.
        The guard is no longer needed after r76991.

        No new tests as there is no new functionality. 

        * platform/mac/EmptyProtocolDefinitions.h:

2011-02-28  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] no resources in scripts panel because debugger is enabled too early.
        https://bugs.webkit.org/show_bug.cgi?id=55389

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::populateScriptObjects):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setFrontend):
        (WebCore::InspectorDebuggerAgent::enableDebuggerAfterShown):
        * inspector/InspectorDebuggerAgent.h:

2011-02-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79877.
        http://trac.webkit.org/changeset/79877
        https://bugs.webkit.org/show_bug.cgi?id=55388

        Breaks chromium build (Requested by antonm_ on #webkit).

        * WebCore.gypi:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateContentsIfDirty):
        (WebCore::ContentLayerChromium::resizeUploadBufferForImage):
        (WebCore::ContentLayerChromium::resizeUploadBuffer):
        (WebCore::SkBitmapConditionalAutoLockerPixels::SkBitmapConditionalAutoLockerPixels):
        (WebCore::SkBitmapConditionalAutoLockerPixels::~SkBitmapConditionalAutoLockerPixels):
        (WebCore::SkBitmapConditionalAutoLockerPixels::lockPixels):
        (WebCore::ContentLayerChromium::updateTextureIfNeeded):
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContentsIfDirty):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::contentRectToTileIndices):
        (WebCore::LayerTilerChromium::update):
        * platform/graphics/chromium/LayerTilerChromium.h:
        * platform/graphics/chromium/PlatformCanvas.cpp: Removed.
        * platform/graphics/chromium/PlatformCanvas.h: Removed.
        * platform/graphics/chromium/PlatformImage.cpp: Removed.
        * platform/graphics/chromium/PlatformImage.h: Removed.

2011-02-28  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: add live edit test.
        https://bugs.webkit.org/show_bug.cgi?id=55360

        Test: inspector/debugger/live-edit.html

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._doubleClick):
        (WebInspector.SourceFrame.prototype._didEditLine):

2011-02-28  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Follow up to r79858, removing optimistic assertion that fails on debug bot.

        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):

2011-02-25  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Abstract "pixels with a graphics context" into its own class
        https://bugs.webkit.org/show_bug.cgi?id=55259

        This creates new PlatformCanvas/PlatformImage classes which wrap
        all of the #ifdef Skia/Cg warts from the compositor.  All classes
        (LayerTilerChromium, ContentLayerChromium, and ImageLayerChromium) are
        modified to use these abstractions.

        Tests: LayoutTests/compositing

        * WebCore.gypi:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateContentsIfDirty):
        (WebCore::ContentLayerChromium::resizeUploadBuffer):
        (WebCore::ContentLayerChromium::updateTextureIfNeeded):
        (WebCore::ContentLayerChromium::updateTexture):
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContentsIfDirty):
        (WebCore::ImageLayerChromium::updateTextureIfNeeded):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::contentRectToTileIndices):
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::updateFromPixels):
        * platform/graphics/chromium/LayerTilerChromium.h:
        * platform/graphics/chromium/PlatformCanvas.cpp: Added.
        (WebCore::PlatformCanvas::PlatformCanvas):
        (WebCore::PlatformCanvas::~PlatformCanvas):
        (WebCore::PlatformCanvas::resize):
        (WebCore::PlatformCanvas::AutoLocker::AutoLocker):
        (WebCore::PlatformCanvas::AutoLocker::~AutoLocker):
        (WebCore::PlatformCanvas::Painter::Painter):
        (WebCore::PlatformCanvas::Painter::~Painter):
        * platform/graphics/chromium/PlatformCanvas.h: Added.
        (WebCore::PlatformCanvas::AutoLocker::pixels):
        (WebCore::PlatformCanvas::Painter::context):
        (WebCore::PlatformCanvas::size):
        * platform/graphics/chromium/PlatformImage.cpp: Copied from Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp.
        (WebCore::PlatformImage::PlatformImage):
        (WebCore::PlatformImage::updateFromImage):
        * platform/graphics/chromium/PlatformImage.h: Added.
        (WebCore::PlatformImage::pixels):
        (WebCore::PlatformImage::size):

2011-02-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79784.
        http://trac.webkit.org/changeset/79784
        https://bugs.webkit.org/show_bug.cgi?id=55386

        This change causes lots of assertion failures in Debug builds
        (Requested by aroben on #webkit).

        * css/CSSStyleSelector.cpp:
        (WebCore::convertToLength):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::createTransformOperations):
        * platform/Length.h:
        (WebCore::Length::Length):
        (WebCore::Length::operator==):
        (WebCore::Length::operator!=):
        (WebCore::Length::rawValue):
        (WebCore::Length::type):
        (WebCore::Length::quirk):
        (WebCore::Length::setValue):
        (WebCore::Length::setRawValue):
        (WebCore::Length::calcFloatValue):
        (WebCore::Length::isZero):
        (WebCore::Length::blend):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):

2011-02-28  Andreas Kling  <kling@webkit.org>

        Reviewed by Darin Adler.

        Use Frame::ownerElement() directly where appropriate.
        https://bugs.webkit.org/show_bug.cgi?id=55385

        Don't take the roundabout way through frame->document->ownerElement
        which just checks that the document->frame is non-null.

        No new test, refactoring only.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::selectFrameElementInParentIfFullySelected):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadWithDocumentLoader):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::scrollRecursively):
        (WebCore::EventHandler::logicalScrollRecursively):
        * page/FrameView.cpp:
        (WebCore::FrameView::init):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::windowClipRect):
        (WebCore::FrameView::paintContents):

2011-02-28  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] source frame is recreated for each inlined script in document.
        https://bugs.webkit.org/show_bug.cgi?id=55377

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForSourceName):
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        (WebInspector.ScriptsPanel.prototype._recreateSourceFrame):

2011-02-28  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix for !ENABLE(SVG_ANIMATION) after r79569.

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::removeAllAnimationElementsFromTarget):

2011-02-28  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        Optimize parameter transmissions in FEConvolveMatrix.
        https://bugs.webkit.org/show_bug.cgi?id=55381

        Parameter transmission via reference is more efficient than with copy. So they are substituted.

        No new tests are needed since this is a refactoring.

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::setKernelSize):
        (WebCore::FEConvolveMatrix::setTargetOffset):
        (WebCore::FEConvolveMatrix::setKernelUnitLength):
        * platform/graphics/filters/FEConvolveMatrix.h:

2011-02-28  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Chromium tests failures due to r79858.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::inspectedPageDestroyed):

2011-02-28  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        XML without style should render as syntax-highlighted source.
        https://bugs.webkit.org/show_bug.cgi?id=13807

        XML tree view mode implemented. If XML does not have any style
        information, it is rendered as highlighted source with collapsable
        elements.

        Tests: fast/css/dumpAsText/xml-stylesheet-pi-not-in-prolog.xml
               fast/encoding/dumpAsText/utf-16-no-bom.xml
               http/tests/xmlviewer/dumpAsText/css-stylesheet.xml
               http/tests/xmlviewer/dumpAsText/frames.html
               http/tests/xmlviewer/dumpAsText/mathml.xml
               http/tests/xmlviewer/dumpAsText/svg.xml
               http/tests/xmlviewer/dumpAsText/wml.xml
               http/tests/xmlviewer/dumpAsText/xhtml-tag.xml
               http/tests/xmlviewer/dumpAsText/xlink.xml
               http/tests/xmlviewer/dumpAsText/xmlviewer-charset-cp1251.xml
               http/tests/xmlviewer/dumpAsText/xmlviewer-charset-utf8.xml
               http/tests/xmlviewer/dumpAsText/xmlviewer.xml
               http/tests/xmlviewer/dumpAsText/xsl-stylesheet.xml
               http/tests/xmlviewer/dumpAsText/xul.xml
               svg/hixie/error/dumpAsText/004.xml
               svg/hixie/error/dumpAsText/005.xml

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchUARules):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::createElement):
        * dom/Document.h:
        (WebCore::Document::usesViewSourceStyles):
        (WebCore::Document::setUsesViewSourceStyles):
        (WebCore::Document::sawElementsInKnownNamespaces):
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::processingInstruction):
        (WebCore::XMLDocumentParser::initializeParserContext):
        (WebCore::XMLDocumentParser::doEnd):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::initializeParserContext):
        (WebCore::XMLDocumentParser::parseProcessingInstruction):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument):
        * xml/XMLTreeViewer.cpp: Added.
        (WebCore::XMLTreeViewer::XMLTreeViewer):
        (WebCore::XMLTreeViewer::hasNoStyleInformation):
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/XMLTreeViewer.h: Added.
        (WebCore::XMLTreeViewer::~XMLTreeViewer):
        * xml/XMLViewer.xsl: Added.
        * xml/XSLStyleSheet.h:
        (WebCore::XSLStyleSheet::createForXMLTreeViewer):

2011-02-28  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: debugger agents should have same livetime as InspectorAgent
        https://bugs.webkit.org/show_bug.cgi?id=55369

        DOM and JS debugger agents are now created in InspectorAgent's constructor and owned
        by the agent. Debugger state is cleared on frontend disconnect.

        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::populateScriptObjects):
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::showScriptsPanel):
        * inspector/InspectorAgent.h:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::create):
        (WebCore::InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent):
        (WebCore::InspectorBrowserDebuggerAgent::~InspectorBrowserDebuggerAgent):
        (WebCore::InspectorBrowserDebuggerAgent::debuggerWasEnabled):
        (WebCore::InspectorBrowserDebuggerAgent::debuggerWasDisabled):
        (WebCore::InspectorBrowserDebuggerAgent::disable):
        (WebCore::InspectorBrowserDebuggerAgent::setFrontend):
        (WebCore::InspectorBrowserDebuggerAgent::clearFrontend):
        (WebCore::InspectorBrowserDebuggerAgent::setAllBrowserBreakpoints):
        (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):
        (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent):
        (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest):
        (WebCore::InspectorBrowserDebuggerAgent::clear):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::debuggerEnabled):
        (WebCore::InspectorController::showAndEnableDebugger):
        (WebCore::InspectorController::disableDebugger):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::create):
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::~InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::startUserInitiatedDebugging):
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::enabled):
        (WebCore::InspectorDebuggerAgent::restore):
        (WebCore::InspectorDebuggerAgent::setFrontend):
        (WebCore::InspectorDebuggerAgent::clearFrontend):
        (WebCore::InspectorDebuggerAgent::setJavaScriptBreakpoint):
        (WebCore::InspectorDebuggerAgent::removeJavaScriptBreakpoint):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::getCompletionsOnCallFrame):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::clear):
        * inspector/InspectorDebuggerAgent.h:
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::Listener::~Listener):
        (WebCore::InspectorDebuggerAgent::setListener):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.enableDebugger):
        (WebInspector.DebuggerModel.prototype.disableDebugger):

2011-02-28  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        FECompositeElement changes doesn't require relayout.
        https://bugs.webkit.org/show_bug.cgi?id=55367

        When the FECompositeElement receives an update message but the given value remains the same we don't need
        to relayout the filter.

        No new tests are needed because this modification is covered by the dynamic update tests of FEComposite.

        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::setOperation):
        (WebCore::FEComposite::setK1):
        (WebCore::FEComposite::setK2):
        (WebCore::FEComposite::setK3):
        (WebCore::FEComposite::setK4):
        * platform/graphics/filters/FEComposite.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::setFilterEffectAttribute):
        (WebCore::SVGFECompositeElement::svgAttributeChanged):
        * svg/SVGFECompositeElement.h:

2011-02-28  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        FrameLoader: Reorder early-returns in checkCompleted()
        https://bugs.webkit.org/show_bug.cgi?id=55366

        Check allChildrenAreComplete() last, since it's the most expensive.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkCompleted):

2011-02-28  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Range::processContents needs cleanup
        https://bugs.webkit.org/show_bug.cgi?id=51006

        Refactored Range::processContents.  Extracted childOfCommonRootBeforeOffset from processContents
        which is used to find processStart and processEnd respectively.  In the case of processStart,
        we use the next sibling of the node returned by childOfCommonRootBeforeOffset when m_start is not
        the common root because copying m_start's ancestors will result in processing too much contents.

        Also extracted processNodes and deleteCharacterData from processContents and processContentsBetweenOffsets.

        In addition, lengthOfContentsInNode was modified to return the correct length instead of
        numeric_limits<unsigned>::max() because the convention that processContentsBetweenOffsets automatically
        corrects the length when endOffset is numeric_limits<unsigned>::max() seemed more confusing than
        having two switch statements that need to be consistent.

        Historically, lengthOfContentsInNode was introduced in r78413 as a build fix because unsigned const
        LengthOfContentsInNode added in r78409 violated WebKit C++ rules and caused build failures on Mac and
        other ports.

        * dom/Range.cpp:
        (WebCore::childOfCommonRootBeforeOffset): Extracted from processContents.
        (WebCore::lengthOfContentsInNode): Added.
        (WebCore::Range::processContents): Calls childOfCommonRootBeforeOffset, lengthOfContentsInNode,
        and processNodes.
        (WebCore::deleteCharacterData): Added.
        (WebCore::Range::processContentsBetweenOffsets): Calls deleteCharacterData and processNodes.
        (WebCore::Range::processNodes): Extracted from processContents and processContentsBetweenOffsets.
        (WebCore::Range::processAncestorsAndTheirSiblings):
        * dom/Range.h:

2011-02-28  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Test harness change follow up.
        Consider missing localized string a warning, not an error in the front-end.

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

2011-02-28  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        getJNIEnv() passes wrong type to AttachCurrentThread() for JNIEnv argument on Android
        https://bugs.webkit.org/show_bug.cgi?id=55218

        AttachCurrentThread() in Android's JVM takes a JINEnv**
        argument.

        No new tests, build fix only.

        * bridge/jni/JNIUtility.cpp:
        (JSC::Bindings::getJNIEnv):

2011-02-28  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        FETurbulenceElement changes doesn't require relayout
        https://bugs.webkit.org/show_bug.cgi?id=55141

        When the FETurbulenceElement receives an update message but the given value remains the same we don't need
        to relayout the filter.
        Besides fix a typo in FETurbulence and change the paramterer type of FETurbulence::setNumOctaves from bool
        to int according to the spec.

        No new tests are needed because this modification is covered by the dynamic update tests of FETurbulence.

        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::FETurbulence):
        (WebCore::FETurbulence::create):
        (WebCore::FETurbulence::type):
        (WebCore::FETurbulence::setType):
        (WebCore::FETurbulence::setBaseFrequencyY):
        (WebCore::FETurbulence::setBaseFrequencyX):
        (WebCore::FETurbulence::setSeed):
        (WebCore::FETurbulence::setNumOctaves):
        (WebCore::FETurbulence::setStitchTiles):
        (WebCore::operator<<):
        * platform/graphics/filters/FETurbulence.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::setFilterEffectAttribute):
        (WebCore::SVGFETurbulenceElement::svgAttributeChanged):
        (WebCore::SVGFETurbulenceElement::build):
        * svg/SVGFETurbulenceElement.h:

2011-02-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: InspectorAgent calls offsetWidth in the middle of painting
        https://bugs.webkit.org/show_bug.cgi?id=54597

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::drawElementTitle):

2011-02-28  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Kent Tamura.

        Bug 55355 - TextIterator should not be a friend of RenderTextControl
        https://bugs.webkit.org/show_bug.cgi?id=55355

        Remove need for 'friend' clause by making innerTextElement() public.

        No new tests. (simple refactoring)

        * rendering/RenderTextControl.h:

2011-02-27  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Remove registerBaseEncodingNames and registerBaseCodecs from TextCodecWinCE
        https://bugs.webkit.org/show_bug.cgi?id=55317

        This functions are obsolete, since r78499 added TextCodecUTF8.
        Also remove the "fast path" for UTF-8 data, because we now have a separate TextCodec.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):
        * platform/text/wince/TextCodecWinCE.cpp:
        * platform/text/wince/TextCodecWinCE.h:

2011-02-27  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Sam Weinig.

        Use OwnPtr to handle the memory of RenderBlock::m_floatingObjects and RenderBlock::m_positionedObjects
        https://bugs.webkit.org/show_bug.cgi?id=55327

        Refactor RenderBlock to use OwnPtr for m_floatingObjects and m_positionedObjects so we do not have
        to release the memory manually.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::~RenderBlock):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::insertPositionedObject):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::addIntrudingFloats):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::positionedObjects):

2011-02-27  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        Eliminate DeprecatedPtrList
        https://bugs.webkit.org/show_bug.cgi?id=17425

        Remove the implementation of DeprecatedPtrList and all its references
        from the build systems.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/DeprecatedPtrList.h: Removed.
        * platform/DeprecatedPtrListImpl.cpp: Removed.
        * platform/DeprecatedPtrListImpl.h: Removed.

2011-02-27  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Use WTF ref counting for FontPlatformDataPrivate
        https://bugs.webkit.org/show_bug.cgi?id=55303

        Make FontPlatformDataPrivate a RefCounted<FPDP>.
        Incidentally fixes an uninitialized member bug in FontPlatformData().

        * platform/graphics/qt/FontPlatformData.h:
        (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::toQFontWeight):
        (WebCore::FontPlatformData::operator==):
        (WebCore::FontPlatformData::hash):

2011-02-27  Benjamin Poulain  <ikipou@gmail.com>

        Reviewed by Darin Adler.

        Eliminate DeprecatedPtrList from RenderBlock
        https://bugs.webkit.org/show_bug.cgi?id=54972

        Refactor RenderBlock to get rid of the DeprecatedPtrList.
        The floating objects are stored in a ListHashSet.

        Refactoring covered by existing test.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::~RenderBlock):
        (WebCore::RenderBlock::addOverflowFromFloats):
        (WebCore::RenderBlock::repaintOverhangingFloats):
        (WebCore::RenderBlock::paintFloats):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::removeFloatingObject):
        (WebCore::RenderBlock::removeFloatingObjectsBelow):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::positionNewFloatOnLine):
        (WebCore::RenderBlock::logicalLeftOffsetForLine):
        (WebCore::RenderBlock::logicalRightOffsetForLine):
        (WebCore::RenderBlock::nextFloatLogicalBottomBelow):
        (WebCore::RenderBlock::lowestFloatLogicalBottom):
        (WebCore::RenderBlock::clearFloats):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::addIntrudingFloats):
        (WebCore::RenderBlock::containsFloat):
        (WebCore::RenderBlock::hitTestFloats):
        (WebCore::RenderBlock::adjustForBorderFit):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatingObjectHashFunctions::hash):
        (WebCore::RenderBlock::FloatingObjectHashFunctions::equal):
        (WebCore::RenderBlock::FloatingObjectHashTranslator::hash):
        (WebCore::RenderBlock::FloatingObjectHashTranslator::equal):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::matchedEndLine):

2011-02-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        <input value="type=submit"> throws a warning (“HTML parse error”)
        https://bugs.webkit.org/show_bug.cgi?id=55120

        This patch removes parse error messages from the HTML parser.  These
        messages are displayed at the wrong times, aren't tested, and aren't
        helpful.  We'll try again with some more informative messages and
        better testing.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::parseError):

2011-02-26  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Remove registerBaseEncodingNames and registerBaseCodecs from TextCodecBrew
        https://bugs.webkit.org/show_bug.cgi?id=55309

        This functions are obsolete, since r78499 added TextCodecUTF8.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):
        * platform/text/brew/TextCodecBrew.cpp:
        * platform/text/brew/TextCodecBrew.h:

2011-02-26  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Darin Adler.

        Delay firing of mutation events while setting attribute values
        https://bugs.webkit.org/show_bug.cgi?id=55199

        Test: fast/dom/attribute-change-on-mutate.html

        * dom/Attr.cpp:
        (WebCore::Attr::setValue):

2011-02-26  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Notify HTMLMediaElement when MediaPlayerPrivateQt's playback state gets changed
        https://bugs.webkit.org/show_bug.cgi?id=55252

        Need to invoke a callback function to notify the HTMLMediaElement
        when MediaPlayerPrivateQt's playback state gets changed.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::MediaPlayerPrivateQt): Set a flag to ignore the playback state change for pre-roll
        (WebCore::MediaPlayerPrivateQt::commitLoad): Call playbackStateChanged() to notify HTMLMediaElement
        (WebCore::MediaPlayerPrivateQt::stateChanged):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:

2011-02-25  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        When plugin document parser finishes parsing, it runs the raw
        document's parser finish functions which call the pending document
        onload events that removes the frame from underneath. So, we protect
        frame (and hence frameloader) in DocumentLoader::commitLoad.
        https://bugs.webkit.org/show_bug.cgi?id=55289

        Test: fast/frames/iframe-plugin-load-remove-document-crash.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitLoad):

2011-02-26  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: rolling out 79799 and 79804 for breaking xml tests on mac.

2011-02-26  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: follow up to r79799. Fixing WinCE+Efl, mute new tests on Qt.
        https://bugs.webkit.org/show_bug.cgi?id=55302

        * CMakeLists.txt:

2011-02-25  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        XML without style should render as syntax-highlighted source.
        https://bugs.webkit.org/show_bug.cgi?id=13807

        XML tree view mode implemented. If XML does not have any style
        information, it is rendered as highlighted source with collapsable
        elements.

        Tests: http/tests/xmlviewer/dumpAsText/css-stylesheet.xml
               http/tests/xmlviewer/dumpAsText/frames.html
               http/tests/xmlviewer/dumpAsText/mathml.xml
               http/tests/xmlviewer/dumpAsText/svg.xml
               http/tests/xmlviewer/dumpAsText/wml.xml
               http/tests/xmlviewer/dumpAsText/xhtml-tag.xml
               http/tests/xmlviewer/dumpAsText/xlink.xml
               http/tests/xmlviewer/dumpAsText/xmlviewer-charset-cp1251.xml
               http/tests/xmlviewer/dumpAsText/xmlviewer-charset-utf8.xml
               http/tests/xmlviewer/dumpAsText/xmlviewer.xml
               http/tests/xmlviewer/dumpAsText/xsl-stylesheet.xml
               http/tests/xmlviewer/dumpAsText/xul.xml

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchUARules):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::createElement):
        * dom/Document.h:
        (WebCore::Document::usesViewSourceStyles):
        (WebCore::Document::setUsesViewSourceStyles):
        (WebCore::Document::sawElementsInKnownNamespaces):
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::processingInstruction):
        (WebCore::XMLDocumentParser::initializeParserContext):
        (WebCore::XMLDocumentParser::doEnd):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::initializeParserContext):
        (WebCore::XMLDocumentParser::parseProcessingInstruction):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument):
        * xml/XMLTreeViewer.cpp: Added.
        (WebCore::XMLTreeViewer::XMLTreeViewer):
        (WebCore::XMLTreeViewer::hasNoStyleInformation):
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/XMLTreeViewer.h: Added.
        (WebCore::XMLTreeViewer::~XMLTreeViewer):
        * xml/XMLViewer.xsl: Added.
        * xml/XSLStyleSheet.h:
        (WebCore::XSLStyleSheet::createFromString):

2011-02-26  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Enable usage of synchronous HTTP feature in Qt
        https://bugs.webkit.org/show_bug.cgi?id=37191

        Currently, we spin an event loop when doing synchronous calls to
        wait for completion. This patch uses synchronous requests in Qt,
        if available, and spins the event loop as a fallback solution.

        Based on work by Simon Hausmann and Peter Hartmann.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::setReplyFinished):
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2011-02-26  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        REGRESSION(r79398): Webkit crash on dojo theme tester page
        https://bugs.webkit.org/show_bug.cgi?id=55290

        The bug was caused by selectionStartCSSPropertyValue's not considering the possibility
        of selectionStartStyle() returning a null pointer. Fixed it by adding a null check.

        Test: editing/execCommand/value-without-selection-crash.html

        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartCSSPropertyValue):

2011-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        No new tests. (no code affected, just exporting a method for DumpRenderTree use)

        * WebCore.exp.in:

2011-02-26  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        On Mac, need to remove misspell underline in Editor::learnSpelling().
        https://bugs.webkit.org/show_bug.cgi?id=55251

        This change makes sure that the misspelling markers are removed after the word is learned.

        * editing/Editor.cpp:
        (WebCore::Editor::learnSpelling):

2011-02-26  Rik Cabanier  <cabanier@adobe.com>

        Reviewed by David Hyatt.

        Fix that allows fixed length values to be floating point
        https://bugs.webkit.org/show_bug.cgi?id=52699

        Transitions now return matrices in floating point. 2 of the transition tests were failing
        because they expected integer values.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::convertToLength):
        (WebCore::convertToIntLength):
        (WebCore::convertToFloatLength):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::createTransformOperations):
        * platform/Length.h:
        (WebCore::Length::Length):
        (WebCore::Length::operator==):
        (WebCore::Length::operator!=):
        (WebCore::Length::rawValue):
        (WebCore::Length::type):
        (WebCore::Length::quirk):
        (WebCore::Length::setValue):
        (WebCore::Length::calcFloatValue):
        (WebCore::Length::isZero):
        (WebCore::Length::blend):
        (WebCore::Length::getIntValue):
        (WebCore::Length::getFloatValue):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):

2011-02-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        malloc in removeChildren shows up on profile of peacekeeper domDynamicCreationCreateElement
        https://bugs.webkit.org/show_bug.cgi?id=55204

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChildren):
         - Using an inlineCapacity of 10 for now. We may want to tweak it later.
         - This removes yet another malloc from code which removes nodes (which is rather common).

2011-02-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        HashSet<T>::end() creation is expensive and should be avoided
        https://bugs.webkit.org/show_bug.cgi?id=55205

        In the common case, m_ranges is an empty set.  When that's
        the case, we spend all our time in skipEmptyBuckets, walking
        the hash storage skipping over empty buckets.
        
        This looks to be at least a 5% speedup on (my local version of) peacekeeper's domDynamicCreationCreateElement.

        Before:
        avg 383.6666666666667
        median 386
        stdev 7.152311203768722
        min 360
        max 391

        After:
        avg 366.3333333333333
        median 366
        stdev 2.712112747574399
        min 362
        max 377

        * dom/Document.cpp:
        (WebCore::Document::nodeChildrenChanged):
        (WebCore::Document::nodeChildrenWillBeRemoved):
        (WebCore::Document::nodeWillBeRemoved):
        (WebCore::Document::textInserted):
        (WebCore::Document::textRemoved):
        (WebCore::Document::textNodesMerged):
        (WebCore::Document::textNodeSplit):

2011-02-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79764.
        http://trac.webkit.org/changeset/79764
        https://bugs.webkit.org/show_bug.cgi?id=55295

        "broke Chromium builds" (Requested by rniwa on #webkit).

        * WebCore.exp.in:

2011-02-26  Adam Klein  <adamk@chromium.org>

        Reviewed by Adam Barth.

        [fileapi] Implement EntrySync.toURI by moving Entry::toURI to EntryBase
        https://bugs.webkit.org/show_bug.cgi?id=54585

        In order to move toURI to EntryBase, it needed access to
        SecurityOrigin. Most of the changes below were to pass a
        ScriptExecutionContext to DOMFileSystemBase to enable this.

        Test: fast/filesystem/workers/file-entry-to-uri-sync.html

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::DOMFileSystem):
        * fileapi/DOMFileSystemBase.cpp:
        (WebCore::DOMFileSystemBase::DOMFileSystemBase):
        (WebCore::DOMFileSystemBase::securityOrigin):
        * fileapi/DOMFileSystemBase.h:
        (WebCore::DOMFileSystemBase::create):
        * fileapi/DOMFileSystemSync.cpp:
        (WebCore::DOMFileSystemSync::create):
        (WebCore::DOMFileSystemSync::DOMFileSystemSync):
        * fileapi/DOMFileSystemSync.h:
        (WebCore::DOMFileSystemSync::create):
        * fileapi/Entry.cpp:
        * fileapi/Entry.h:
        * fileapi/EntryBase.cpp: Added.
        (WebCore::EntryBase::EntryBase):
        (WebCore::EntryBase::~EntryBase):
        (WebCore::EntryBase::toURI):
        * fileapi/EntryBase.h:
        * fileapi/EntrySync.idl:

2011-02-26  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ojan Vafai.

        typing enter in the input element should not fire textInput
        https://bugs.webkit.org/show_bug.cgi?id=54152

        Stop textInput event propagation in HTMLInputElement::preDispatchEventHandler if the event target should submit implicitly.

        Test: fast/forms/textinput-not-fired-on-enter-in-input.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::preDispatchEventHandler): Check m_inputType->shouldSubmitImplicitly for textInputEvents and stop propagation if true.

2011-02-26  James Simonsen  <simonjam@chromium.org>

        Reviewed by Tony Gentilcore.

        [Web Timing] loadEvent timing should refer to first load event if there are many
        https://bugs.webkit.org/show_bug.cgi?id=55201

        Test: fast/dom/webtiming-document-open.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent):

2011-02-26  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Fix isLayoutTimerActive for ports that set a minimumLayoutDelay
        https://bugs.webkit.org/show_bug.cgi?id=54810

        No new tests because no new functionality.

        * dom/Document.cpp:
        (WebCore::Document::isLayoutTimerActive): Moved from HTMLParserScheduler per FIXME. Compare
        minimumLayoutDelay() to m_extraLayoutDelay instead of 0. This spirit of this comparison was
        broken by r52919. The effect would be that ports that set an extra layout delay can't yield
        between tokens. Note: can't be const because minimumLayoutDelay sets a member.
        * dom/Document.h:
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::continueNextChunkTimerFired):
        (WebCore::HTMLParserScheduler::checkForYieldBeforeScript):

2011-02-26  David Dorwin  <ddorwin@chromium.org>

        Reviewed by Darin Fisher.

        Enable WebKit Full Screen API in Chromium. The element becomes the full size of the window, but the window is not yet full screen. Support is disabled by default.

        fullscreen javascript bindings not implemented for v8
        https://bugs.webkit.org/show_bug.cgi?id=44797

        Tested by the existing fullscreen Layout Tests.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-02-26  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Prevent parser yields from triggering early dumpAsText()
        https://bugs.webkit.org/show_bug.cgi?id=55187

        DRT's dumpAsText() takes a snapshot when DocumentLoader::isLoadingInAPISense()
        indicates the page is done. isLoadingInAPISense depends on
        HTMLDocumentParser::isProcessingData(), which just checks if the parser is in an
        insert() or append().

        This means that if the parser is pumping in a resumeParsingAfterScriptExecution() or
        resumeParsingAfterYield(), isLoadingInAPISense() may not be blocked. This patch
        fixes that by repurposing m_writeNestingLevel as m_pumpSessionNestingLevel and
        incrementing it in pumpTokenizer().

        When I locally cause the parser to yield after every token, a lot of tests fail
        because DRT snapshots too early. This patch fixes those tests, however I'm having
        trouble writing a test case that reliably reproduces the problem without this patch
        and passes with it (without changing yield constants). This is because it requires
        4,096 tokens in a single pump session to yield and (len('<b>' * 4096 = 12k, which
        doesn't always happen).

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::~HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::processingData):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        * html/parser/HTMLDocumentParser.h:
        (WebCore::HTMLDocumentParser::inPumpSession):
        (WebCore::HTMLDocumentParser::shouldDelayEnd):
        * html/parser/HTMLParserScheduler.h:
        (WebCore::PumpSession::PumpSession):
        * html/parser/NestingLevelIncrementer.h:

2011-02-26  Yongjun Zhang  <yongjun_zhang@apple.com>

        Reviewed by David Kilzer.

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

        Add a resource load delegate method to query if WebCore should paint the default broken image for failed images.

        Add a new resource load client method (shouldPaintBrokenImage).  WebKit client can decide if WebCore
        should paint the default broken image when an image fails to load or decode.  The method also passes the
        URL of the failed image.

        Test: fast/images/support-broken-image-delegate.html

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::shouldPaintBrokenImage):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        (WebCore::CachedImage::image):
        (WebCore::CachedImage::checkShouldPaintBrokenImage):
        (WebCore::CachedImage::error):
        * loader/cache/CachedImage.h:

2011-02-26  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Database: Data race: should only touch the transaction queue inside the
        lock.
        https://bugs.webkit.org/show_bug.cgi?id=55031

        * storage/Database.cpp:
        (WebCore::Database::changeVersion): only touch queue inside lock.
        (WebCore::Database::runTransaction): only touch queue inside lock.

2011-02-26  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Eric Carlson.

        Missing volumechangeEvent in case of mediaPlayerVolumeChanged gets callback
        https://bugs.webkit.org/show_bug.cgi?id=55147

        When HTMLMediaElement::mediaPlayerVolumeChanged() gets callback, 
        a volumechangeEvent event should be fired if the volume gets changed.

        Test: media/event-attributes.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMuted): Remove updateVolume() since it does nothing when m_player is 0.
        (WebCore::HTMLMediaElement::mediaPlayerVolumeChanged): Fire a volumechangeEvent when the volume is changed.

2011-02-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        disableRangeMutation quirk for mail slows down peacekeeper domDynamicCreationCreateElement
        https://bugs.webkit.org/show_bug.cgi?id=55127

        Before:
        avg 513.4
        median 515
        stdev 7.234638899074368
        min 490
        max 528

        After:
        avg 508.15
        median 510
        stdev 6.966168243733426
        min 485
        max 515

        Yes, the stdev is a bit high to actually support my conclusions.  But looking
        at the profile, this change makes a lot of sense.  I'll up the iterations
        for future testing.

        * dom/Document.cpp:
        (WebCore::disableRangeMutation):
         - This check should only be compiled in if we're planning to run on Tiger or Leopard.

2011-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        No new tests. (no code affected, just exporting a method for DumpRenderTree use)

        * WebCore.exp.in:

2011-02-26  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Antonio Gomes.

        Based on patch by Carlos Garcia Campos  <cgarcia@igalia.com>.

        Spatial Navigation: Add support for <select> element in multiple selection mode
        https://bugs.webkit.org/show_bug.cgi?id=49261

        When spatial navigation is enabled, use space key to toggle select
        items. And the up and down keys should not affect selection but just
        navigate through items, which is indicated visually by a focus ring.

        New Test: fast/spatial-navigation/snav-single-select-list.html
        Enhanced Test: fast/spatial-navigation/snav-multiple-select.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::listBoxDefaultEventHandler):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::addFocusRingRects):
        * rendering/RenderListBox.h:

2011-02-25  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed Qt build fix; included CSSValueList.h in EditingStyle.cpp.

        * editing/EditingStyle.cpp:

2011-02-25  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Move HTMLEquivalent and its subclasses to EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=55207

        Moved HTMLEquivalent and its subclasses from ApplyStyleCommand to EditingStyle,
        and renamed HTMLEquivalent, HTMLEquivalentValueList, HTMLAttributeEquivalent,
        and HTMLEquivalentFontSizeAttribute to HTMLElementEquivalent, HTMLTextDecorationEquivalent,
        HTMLAttributeEquivalent, and HTMLFontSizeEquivalent respectively.

        Also extracted the logic to determine which element and attribute are removed
        as conflictsWithImplicitStyleOfElement, conflictsWithImplicitStyleOfAttributes,
        and extractConflictingImplicitStyleOfAttributes.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement):
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement):
        * editing/ApplyStyleCommand.h:
        * editing/EditingStyle.cpp:
        (WebCore::HTMLElementEquivalent::create): Moved from ApplyStyleCommand.cpp.
        (WebCore::HTMLElementEquivalent::~HTMLElementEquivalent): Ditto.
        (WebCore::HTMLElementEquivalent::matches): Ditto.
        (WebCore::HTMLElementEquivalent::hasAttribute): Ditto.
        (WebCore::HTMLElementEquivalent::propertyExistsInStyle): Ditto.
        (WebCore::HTMLElementEquivalent::HTMLElementEquivalent): Ditto.
        (WebCore::HTMLElementEquivalent::valueIsPresentInStyle): Ditto.
        (WebCore::HTMLElementEquivalent::addToStyle): Ditto.
        (WebCore::HTMLTextDecorationEquivalent::create): Ditto.
        (WebCore::HTMLTextDecorationEquivalent::HTMLTextDecorationEquivalent): Ditto.
        (WebCore::HTMLTextDecorationEquivalent::valueIsPresentInStyle): Ditto.
        (WebCore::HTMLAttributeEquivalent::create): Ditto.
        (WebCore::HTMLAttributeEquivalent::matches): Ditto.
        (WebCore::HTMLAttributeEquivalent::hasAttribute): Ditto.
        (WebCore::HTMLAttributeEquivalent::attributeName): Ditto.
        (WebCore::HTMLAttributeEquivalent::HTMLAttributeEquivalent): Ditto.
        (WebCore::HTMLAttributeEquivalent::valueIsPresentInStyle): Ditto.
        (WebCore::HTMLAttributeEquivalent::addToStyle): Ditto.
        (WebCore::HTMLAttributeEquivalent::attributeValueAsCSSValue): Ditto.
        (WebCore::HTMLFontSizeEquivalent::create): Ditto.
        (WebCore::HTMLFontSizeEquivalent::HTMLFontSizeEquivalent): Ditto.
        (WebCore::HTMLFontSizeEquivalent::attributeValueAsCSSValue): Ditto.
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfElement): Added.
        (WebCore::htmlAttributeEquivalents): Added.
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfAttributes): Added.
        (WebCore::EditingStyle::extractConflictingImplicitStyleOfAttributes): Added.
        * editing/EditingStyle.h:

2011-02-25  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Anders Carlsson.

        AX: Add Xcode entries back to the navigator list for Accessibility cpp files
        https://bugs.webkit.org/show_bug.cgi?id=55280

        * WebCore.xcodeproj/project.pbxproj:

2011-02-25  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Adam Barth.

        WebSocket uses insecure random numbers
        https://bugs.webkit.org/show_bug.cgi?id=54714

        * websockets/WebSocketHandshake.cpp:
        (WebCore::randomNumberLessThan):
        (WebCore::generateSecWebSocketKey):
        (WebCore::generateKey3):

2011-02-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Add API to enumerate/delete files downloaded for <audio> and <video>
        https://bugs.webkit.org/show_bug.cgi?id=55267

        Add review changes missed in r79737.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::clearMediaCacheForSite): Pass string by reference.
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::clearMediaCacheForSite): Ditto.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::clearMediaCacheForSite): Ditto.

2011-02-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Add API to enumerate/delete files downloaded for <audio> and <video>
        https://bugs.webkit.org/show_bug.cgi?id=55267
        <rdar://problem/9049280>

        No new tests, this is just the plumbing.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::getSitesInMediaCache): New, call through to MediaPlayer.
        (WebCore::HTMLMediaElement::clearMediaCache): Ditto.
        (WebCore::HTMLMediaElement::clearMediaCacheForSite): Ditto.
        * html/HTMLMediaElement.h:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::getSitesInMediaCache): New, call through to media engine.
        (WebCore::MediaPlayer::clearMediaCache): Ditto.
        (WebCore::MediaPlayer::clearMediaCacheForSite): Ditto.
        * platform/graphics/MediaPlayer.h:

        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::getSitesInMediaCache): Declare new interface.
        (WebCore::MediaPlayerPrivateInterface::clearMediaCache): Ditto.
        (WebCore::MediaPlayerPrivateInterface::clearMediaCacheForSite): Ditto.

2011-02-25  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Don't add inline continuation outline to the containing block's
        continuationOutlineTable list if it is not enclosed by an anonymous block.
        https://bugs.webkit.org/show_bug.cgi?id=54690

        We currently don't reconnect inline continuations after a child removal.
        As a result, those merged inlines do not get seperated and hence not get enclosed
        by anonymous blocks. In this case, it is better to bail out and paint it ourself.

        Test: fast/table/table-continuation-outline-paint-crash.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint): 
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintsContinuationOutline): helper function to tell
        if this containing block has the continuation flow in its continuations list.
        * rendering/RenderBlock.h: helper function definition.
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::destroy): debug only code that asserts if we leave
        behind a continuation in the containing block's continuation list when it is
        getting destroyed.

2011-02-25  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=55265, remove the unused "Static" type
        from Length.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * platform/Length.h:
        (WebCore::Length::isFixed):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::layout):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::isLogicalWidthSpecified):
        (WebCore::RenderImage::isLogicalHeightSpecified):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::markContainingBlocksForLayout):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::hasStaticX):
        (WebCore::InheritedFlags::hasStaticY):

2011-02-25  Brian Weinstein  <bweinstein@apple.com>

        Windows build fix.

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::getHostnamesWithCookies): Add a const_cast.
        (WebCore::deleteCookiesForHostname): Ditto.

2011-02-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Empty Elements panel after closing and reopening Inspector
        https://bugs.webkit.org/show_bug.cgi?id=55248

        Fixing regression real quick. Test to follow.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::reset):

2011-02-25  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: added missing handle scope into V8InjectedScriptHostCustom.
        https://bugs.webkit.org/show_bug.cgi?id=55256

        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::nodeAsScriptValue):
        (WebCore::V8InjectedScriptHost::currentCallFrameCallback):

2011-02-25  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.
        
        Make positioned objects work with all possible crazy combinations of mixed writing modes.  Added new helper
        functions that flip around the padding box of the containing block and then add in the appropriate border
        side to ensure that the offset of the positioned object is actually correctly placed in the containing block's
        local coordinate space.

        Added two new tests of both replaced and non-replaced positioned elements in mixed writing mode environments.

        * rendering/RenderBox.cpp:
        (WebCore::computeLogicalLeftPositionedOffset):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        (WebCore::computeLogicalTopPositionedOffset):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced):

2011-02-25  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Brady Eidson and looked over by Jessie Berlin.

        WebKit2: Need a way to manage cookies from the web process
        https://bugs.webkit.org/show_bug.cgi?id=55086
        
        Implement the functions needed to manage cookies in CookieJar (getHostnamesWithCookies,
        deleteCookiesWithHostname, and deleteAllCookies) for Mac and CFNetwork (stub out the rest),
        and call them from WebKit2's WebCookieManager.

        No change in behavior needing tests.

        * WebCore.exp.in: Added needed functions to export.
        * platform/CookieJar.h:

        * platform/mac/CookieJar.mm:
        (WebCore::getHostnamesWithCookies): Gets all hostnames with cookies from NSHTTPCookieStorage.
        (WebCore::deleteCookiesForHostname): Deletes all cookies with a given hostname from
            NSHTTPCookieStorage.
        (WebCore::deleteAllCookies): Deletes all cookies from NSHTTPCookieStorage.
        
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::getHostnamesWithCookies): Implement using CFNetwork cookie APIs.
        (WebCore::deleteCookiesForHostname): Ditto.
        (WebCore::deleteAllCookies): Ditto.

        * platform/efl/CookieJarEfl.cpp: Added stub functions.
        * platform/haiku/CookieJarHaiku.cpp: Ditto.
        * platform/network/android/CookieJarAndroid.cpp: Ditto.
        * platform/network/chromium/CookieJarChromium.cpp: Ditto.
        * platform/network/curl/CookieJarCurl.cpp: Ditto.
        * platform/network/soup/CookieJarSoup.cpp: Ditto.
        * platform/network/win/CookieJarWin.cpp: Ditto.
        * platform/qt/CookieJarQt.cpp: Ditto.

2011-02-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Eric Seidel.

        'load' and 'error' events fired for @poster
        https://bugs.webkit.org/show_bug.cgi?id=54908

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent): Don't fire events when being used
        by a video element.

2011-02-25  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.
        
        Patch computePositionedLogicalHeightReplaced to be writing-mode aware.
        
        Added six new tests in fast/replaced.

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

2011-02-25  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix.

        * platform/text/brew/TextBreakIteratorBrew.cpp:
        (WebCore::acquireLineBreakIterator):
        * platform/text/wince/TextBreakIteratorWinCE.cpp:
        (WebCore::acquireLineBreakIterator):

2011-02-25  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Simon Fraser.

        Update the clip layer size whenever the root layer's size and position
        is updated. This only affects the accelerated compositing path.
        https://bugs.webkit.org/show_bug.cgi?id=55103

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):

        Test: platform/chromium/compositing/layout-width-change.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):

2011-02-25  Ned Holbrook  <nholbrook@apple.com>

        Reviewed by Dan Bernstein.

        Minimize calls to ubrk_setText()
        https://bugs.webkit.org/show_bug.cgi?id=54912
        <rdar://problem/9032774>

        Avoid calling ubrk_setText() once per call to isBreakable() by using a LazyLineBreakIterator, which defers
        break iterator creation until needed. This requires replacing the global line break iterator primitive with a
        version that can be nested, since in some cases two iterators may need to be outstanding. In particular,
        layoutInlineChildren() may indirectly call computePreferredLogicalWidths() and each may need an iterator.
        In a test with a paragraph of Japanese text, this reduced the number of ubrk_setText() calls from 164 to 1.

        * platform/text/TextBreakIterator.h: Add LazyLineBreakIterator.
        (WebCore::LazyLineBreakIterator::LazyLineBreakIterator):
        (WebCore::LazyLineBreakIterator::~LazyLineBreakIterator):
        (WebCore::LazyLineBreakIterator::string):
        (WebCore::LazyLineBreakIterator::length):
        (WebCore::LazyLineBreakIterator::get):
        (WebCore::LazyLineBreakIterator::reset):
        * platform/text/TextBreakIteratorICU.cpp: Replace lineBreakIterator() primitive with acquireLineBreakIterator()/releaseLineBreakIterator().
        (WebCore::acquireLineBreakIterator):
        (WebCore::releaseLineBreakIterator):
        * platform/text/brew/TextBreakIteratorBrew.cpp: Ditto.
        (WebCore::acquireLineBreakIterator):
        (WebCore::releaseLineBreakIterator):
        * platform/text/gtk/TextBreakIteratorGtk.cpp: Ditto.
        (WebCore::acquireLineBreakIterator):
        (WebCore::releaseLineBreakIterator):
        * platform/text/qt/TextBreakIteratorQt.cpp: Ditto.
        (WebCore::acquireLineBreakIterator):
        (WebCore::releaseLineBreakIterator):
        * platform/text/wince/TextBreakIteratorWinCE.cpp: Ditto.
        (WebCore::acquireLineBreakIterator):
        (WebCore::releaseLineBreakIterator):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Pass a mapping of RenderText to LazyLineBreakIterator from one call of findNextLineBreak() to the next.
        (WebCore::RenderBlock::findNextLineBreak): Use said mapping, resetting LazyLineBreakIterator for any newly-encountered RenderText.
        * rendering/RenderText.cpp: Use a local LazyLineBreakIterator.
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/break_lines.cpp: Accept LazyLineBreakIterator rather than UniChar buffer.
        (WebCore::nextBreakablePosition):
        * rendering/break_lines.h: Accept LazyLineBreakIterator rather than UniChar buffer.
        (WebCore::isBreakable):

2011-02-25  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.
        
        Patch computePositionedLogicalWidthReplaced to be writing-mode aware.  Not testable yet, since the height function overwrites the values
        in a vertical text environment.

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

2011-02-25  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        When trying to find which lines to dirty for a changed child, make sure
        that we do test if the adjacent next linebox contains that changed child
        and if yes, dirty it. This can happen in cases when we have a word break
        between text nodes.
        https://bugs.webkit.org/show_bug.cgi?id=55206

        Test: fast/text/word-break-next-linebox-not-dirty-crash-main.html

        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):

2011-02-25  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Add basic layout tests for the highlighter
        https://bugs.webkit.org/show_bug.cgi?id=54751

        Test: inspector/editor/highlighter-basics.html

        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter.prototype.highlight):

2011-02-24  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Huge fonts in font preview
        https://bugs.webkit.org/show_bug.cgi?id=55143

        * inspector/front-end/FontView.js:
        (WebInspector.FontView.prototype._createContentIfNeeded):
        (WebInspector.FontView.prototype.show):
        (WebInspector.FontView.prototype.resize):
        (WebInspector.FontView.prototype._measureElement):
        (WebInspector.FontView.prototype.updateFontPreviewSize):

2011-02-25  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Implement SVGColor/SVGPaint API
        https://bugs.webkit.org/show_bug.cgi?id=55119

        SVGColor::cssText() shouldn't return #RRGGBBAA colors
        https://bugs.webkit.org/show_bug.cgi?id=48120

        Rewrite SVGColor/SVGPaint to actually implement their desired setPaint/setColor/setURI APIs.
        SVGPaint is a CSSValue, and its setPaint() function allows to switch to an arbitary paint type.
        That means, unlike all other CSSValues, SVGColor/SVGPaint are mutable. That means changes to
        their CSSValues should be reflected in the elements style as well as in the computed style.
        This patch doesn't yet implement that, the stubbed-out method valueChanged() is what
        needs to be implemented. For now you can grab a SVGColor/SVGPaint object through getCSSPropertyValue
        and manipulate it, in every possible way (SVPaint.uri/paintType/colorType/color attributes are all sync'ed).
        Switch to strict JS bindings (RequiresAllArguments=Raise, StrictTypeChecking) for both objects.

        Enable proper serialization of colors through Color::serialized(), affects some testcases (#FF.. -> #ff..)
        Add extensive tests of all SVGColor/SVGPaint API, currently shows some FAIL messages, as element style
        <-> computed style is not live, after mutating SVGColor/SVGPaint. That will be implemented in a follow-up patch.

        Tests: svg/dom/SVGColor.html
               svg/dom/SVGPaint.html

        * bindings/scripts/CodeGenerator.pm: Remove obsolete handling of "SVGPaintType", take ushort for paintType, as specified in the SVG 1.1 IDLs.
        * bindings/scripts/CodeGeneratorJS.pm: Ditto.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * css/SVGCSSParser.cpp: Adapt to SVGPaint/SVGColor create() naming convention changes.
        (WebCore::CSSParser::parseSVGValue):
        (WebCore::CSSParser::parseSVGPaint):
        (WebCore::CSSParser::parseSVGColor):
        * svg/SVGColor.cpp: Rewrite to fully implement the SVGColor API, merge all constructors into one, use more descriptable create() naming convention.
        (WebCore::valueChanged): Stub implementation, will land in a follow-up patch.
        (WebCore::SVGColor::SVGColor):
        (WebCore::SVGColor::setRGBColor):
        (WebCore::SVGColor::colorFromRGBColorString):
        (WebCore::SVGColor::setRGBColorICCColor):
        (WebCore::SVGColor::setColor):
        (WebCore::SVGColor::cssText):
        * svg/SVGColor.h:
        (WebCore::SVGColor::createFromString):
        (WebCore::SVGColor::createFromColor):
        (WebCore::SVGColor::color):
        (WebCore::SVGColor::colorType):
        (WebCore::SVGColor::~SVGColor):
        (WebCore::SVGColor::setColor):
        (WebCore::SVGColor::setColorType):
        * svg/SVGColor.idl: Enable strict type checking.
        * svg/SVGPaint.cpp: Rewrite to fully implement the SVGPaint API, merge all constructors into one, use more descriptable create() naming convention.
        (WebCore::valueChanged): Stub implementation, will land in a follow-up patch.
        (WebCore::colorTypeForPaintType):
        (WebCore::SVGPaint::SVGPaint):
        (WebCore::SVGPaint::setUri):
        (WebCore::SVGPaint::defaultFill):
        (WebCore::SVGPaint::defaultStroke):
        (WebCore::SVGPaint::setPaint):
        (WebCore::SVGPaint::cssText):
        (WebCore::SVGPaint::matchesTargetURI):
        * svg/SVGPaint.h:
        (WebCore::SVGPaint::createUnknown):
        (WebCore::SVGPaint::createNone):
        (WebCore::SVGPaint::createCurrentColor):
        (WebCore::SVGPaint::createColor):
        (WebCore::SVGPaint::createURI):
        (WebCore::SVGPaint::createURIAndColor):
        (WebCore::SVGPaint::paintType):
        (WebCore::SVGPaint::uri):
        (WebCore::SVGPaint::create):
        (WebCore::SVGPaint::isSVGPaint):
        * svg/SVGPaint.idl: Enable strict type checking.

2011-02-25  Renata Hodovan  <reni@webkit.org>

        Reviewed by Nikolas Zimmermann.

        FESpecularLightingElement changes doesn't require relayout.
        https://bugs.webkit.org/show_bug.cgi?id=54451

        When the FESpecularLightingElement receives an update message but the given value remains the same we don't need
        to relayout the filter. Otherwise, the light source requests a repaint on the specular lighting filter.
        Besides add ASSERTs to DiffuseLightElement::setFilterEffectAttribute as well to avoid lightSources being null.

        No new tests are needed to check the repaint because it is covered by the dynamic update tests of FESpecularLighting.
        We only test what happens if we remove the light source of specularLight.

        Test: svg/dynamic-updates/SVGFESpecularLightingElement-remove-lightSource.html

        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::setSurfaceScale):
        (WebCore::FESpecularLighting::setSpecularConstant):
        (WebCore::FESpecularLighting::setSpecularExponent):
        (WebCore::FESpecularLighting::setKernelUnitLengthX):
        (WebCore::FESpecularLighting::setKernelUnitLengthY):
        * platform/graphics/filters/FESpecularLighting.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::setFilterEffectAttribute):
        (WebCore::SVGFEDiffuseLightingElement::lightElementAttributeChanged):
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::findLightElement):
        (WebCore::SVGFELightElement::findLight):
        (WebCore::SVGFELightElement::svgAttributeChanged):
        * svg/SVGFELightElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::setFilterEffectAttribute):
        (WebCore::SVGFESpecularLightingElement::svgAttributeChanged):
        (WebCore::SVGFESpecularLightingElement::lightElementAttributeChanged):
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/SVGFESpecularLightingElement.h:

2011-02-24  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Revert the support for QNAM affined to a different thread.
        https://bugs.webkit.org/show_bug.cgi?id=55149

        Qt 4.8 will have QNAM use its own thread internally by default,
        no need to keep this complexity in WebKit.

        This mainly reverts:
        http://trac.webkit.org/changeset/73710
        http://trac.webkit.org/changeset/73712

        * WebCore.pro:
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::commitLoad):
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::FormDataIODevice::FormDataIODevice):
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::setLoadMode):
        (WebCore::QNetworkReplyHandler::abort):
        (WebCore::QNetworkReplyHandler::release):
        (WebCore::ignoreHttpError):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        (WebCore::QNetworkReplyHandler::sendQueuedItems):
        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyHandler::reply):
        * platform/network/qt/QtNAMThreadSafeProxy.cpp: Removed.
        * platform/network/qt/QtNAMThreadSafeProxy.h: Removed.
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::willLoadFromCache):
        * platform/qt/CookieJarQt.cpp:
        (WebCore::cookieJar):
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):

2011-02-25  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        FEBlendElement changes doesn't require relayout
        https://bugs.webkit.org/show_bug.cgi?id=55138

        When the FEBlendElement receives an update message but the given value remains the same we don't need
        to relayout the filter.

        No new tests are needed because this modificiation is covered by the dynamic update tests of FEBlend.

        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::setBlendMode):
        * platform/graphics/filters/FEBlend.h:
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::setFilterEffectAttribute):
        (WebCore::SVGFEBlendElement::svgAttributeChanged):
        (WebCore::SVGFEBlendElement::synchronizeProperty):
        * svg/SVGFEBlendElement.h:

2011-02-24  Daniel Bates  <dbates@rim.com>

        Reviewed by Antonio Gomes.

        Clean up: Extract table height adjustment for <caption> into common function
        https://bugs.webkit.org/show_bug.cgi?id=54936

        We use similar logic for adjusting the height of a table with respect
        to a top- and bottom-positioned <caption>. Instead, we should extract
        the common code into a shared function.

        No functionality changed. So no new tests.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::adjustLogicalHeightForCaption): Added.
        (WebCore::RenderTable::layout): Extracted common code to adjust table height
        with respect to the <caption> into RenderTable::adjustLogicalHeightForCaption().
        * rendering/RenderTable.h:

2011-02-24  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Move draw time properties out of *LayerChromium to CCLayerImpl
        https://bugs.webkit.org/show_bug.cgi?id=55013

        This adds a new type (tentatively named CCLayerImpl) responsible for drawing/compositing layers.
        Currently LayerChromiums know about their CCLayerImpls and CCLayerImpls rely on the LayerChromium
        tree for structure.  In theory updates are a LayerChromium-only concept and draw is a CCLayerImpl-only
        concept, but this patch doesn't go all there yet in the interest of keeping the patch small-ish.

        RenderSurfaces are a CCLayerImpl-only concepts and no longer have any direct LayerChromium dependencies.

        Note: I've put CCLayerImpl into a new 'cc' directory under platform/graphics/chromium/ and intentionally
        not added it to the include path.  We plan to add more compositor implementation details to this directory
        and we want to keep accidental dependencies on these files to a minimum.

        See https://bugs.webkit.org/show_bug.cgi?id=54047 for the big picture.

        Refactor only, compositing/ tests cover these codepaths.

        * WebCore.gypi:
        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::requiresClippedUpdateRect):
        (WebCore::ContentLayerChromium::updateContentsIfDirty):
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::cleanupResources):
        (WebCore::LayerChromium::setLayerRenderer):
        (WebCore::LayerChromium::setBounds):
        (WebCore::LayerChromium::setFrame):
        (WebCore::LayerChromium::setNeedsDisplay):
        (WebCore::LayerChromium::setBorderColor):
        (WebCore::LayerChromium::borderColor):
        (WebCore::LayerChromium::setBorderWidth):
        (WebCore::LayerChromium::borderWidth):
        (WebCore::LayerChromium::layerRenderer):
        (WebCore::LayerChromium::setDoubleSided):
        (WebCore::LayerChromium::bounds):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::maskDrawLayer):
        (WebCore::LayerChromium::ccLayerImpl):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::compareLayerZ):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::updateLayersRecursive):
        (WebCore::LayerRendererChromium::setCompositeOffscreen):
        (WebCore::LayerRendererChromium::getOffscreenLayerTexture):
        (WebCore::LayerRendererChromium::drawLayer):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/PluginLayerChromium.cpp:
        (WebCore::PluginLayerChromium::draw):
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::RenderSurfaceChromium):
        (WebCore::RenderSurfaceChromium::drawSurface):
        (WebCore::RenderSurfaceChromium::draw):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::drawYUV):
        (WebCore::VideoLayerChromium::drawRGBA):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp: Added.
        (WebCore::CCLayerImpl::CCLayerImpl):
        (WebCore::CCLayerImpl::~CCLayerImpl):
        (WebCore::CCLayerImpl::superlayer):
        (WebCore::CCLayerImpl::maskLayer):
        (WebCore::CCLayerImpl::replicaLayer):
        (WebCore::CCLayerImpl::setLayerRenderer):
        (WebCore::CCLayerImpl::createRenderSurface):
        (WebCore::CCLayerImpl::updateContentsIfDirty):
        (WebCore::CCLayerImpl::drawsContent):
        (WebCore::CCLayerImpl::draw):
        (WebCore::CCLayerImpl::unreserveContentsTexture):
        (WebCore::CCLayerImpl::bindContentsTexture):
        (WebCore::CCLayerImpl::cleanupResources):
        (WebCore::CCLayerImpl::getDrawRect):
        (WebCore::CCLayerImpl::drawDebugBorder):
        * platform/graphics/chromium/cc/CCLayerImpl.h: Added.
        (WebCore::CCLayerImpl::create):
        (WebCore::CCLayerImpl::setDebugBorderColor):
        (WebCore::CCLayerImpl::debugBorderColor):
        (WebCore::CCLayerImpl::setDebugBorderWidth):
        (WebCore::CCLayerImpl::debugBorderWidth):
        (WebCore::CCLayerImpl::layerRenderer):
        (WebCore::CCLayerImpl::renderSurface):
        (WebCore::CCLayerImpl::clearRenderSurface):
        (WebCore::CCLayerImpl::drawDepth):
        (WebCore::CCLayerImpl::setDrawDepth):
        (WebCore::CCLayerImpl::drawOpacity):
        (WebCore::CCLayerImpl::setDrawOpacity):
        (WebCore::CCLayerImpl::scissorRect):
        (WebCore::CCLayerImpl::setScissorRect):
        (WebCore::CCLayerImpl::targetRenderSurface):
        (WebCore::CCLayerImpl::setTargetRenderSurface):
        (WebCore::CCLayerImpl::doubleSided):
        (WebCore::CCLayerImpl::setDoubleSided):
        (WebCore::CCLayerImpl::bounds):
        (WebCore::CCLayerImpl::setBounds):
        (WebCore::CCLayerImpl::drawTransform):
        (WebCore::CCLayerImpl::setDrawTransform):
        (WebCore::CCLayerImpl::drawableContentRect):
        (WebCore::CCLayerImpl::setDrawableContentRect):

2011-02-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION (r79629): Non-expanding ruby base is start-aligned rather than centered
        https://bugs.webkit.org/show_bug.cgi?id=55197

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Adjust the line boundaries even
        if there are no expansion opportunities. This allows RenderRubyBase to center itself.

2011-02-24  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        REGRESSION (r79466): http/tests/incremental/slow-utf8-html.pl flaky due to incorrect assertions
        https://bugs.webkit.org/show_bug.cgi?id=55135

        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::decode): Removed incorrect assertions.

2011-02-24  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Image-based cursors do not work
        https://bugs.webkit.org/show_bug.cgi?id=55184

        * WebCore.exp.in: Exported new entry points now used by WebKit2.

2011-02-24  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        ImageBuffer::clip creates an image of the incorrect context in IOSurface case
        https://bugs.webkit.org/show_bug.cgi?id=55170

        Test: fast/canvas/2d.fillText.gradient.html

        * platform/graphics/cg/ImageBufferCG.cpp: Clipping against ImageBuffer's context
        instead of ourself (the passed in context).

2011-02-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        RenderBoxModelObject::paintBoxShadow should bail earlier
        https://bugs.webkit.org/show_bug.cgi?id=55186

        Make paintBoxShadow() bail early if there is no shadow, and make
        callers consistent in not checking for box-shadow before calling it.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxDecorations):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBoxDecorations):

2011-02-24  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        Add a USE() macro to control use of the built-in UTF8 codec
        https://bugs.webkit.org/show_bug.cgi?id=55189

        Guards the built in UTF8 codec registration with USE(BUILTIN_UTF8_CODEC). ICU is used if the USE() is not set.

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerEncodingNames):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):

2011-02-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/8902740> Expand ruby base when it is shorter than the ruby text
        https://bugs.webkit.org/show_bug.cgi?id=55183

        Test: fast/ruby/base-shorter-than-text.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::availableLogicalWidthForLine):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::adjustInlineDirectionLineBounds): Added. The base clase implementation does nothing.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::textAlignmentForLine): Added. Implements the logic that changes "justify" to "auto" for
        the last line or a line that ends with a hard break.
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Use textAlignmentForLine(), compute the available
        width more efficiently, and call adjustInlineDirectionLineBounds() for justified lines.
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::rubyRun): Added.
        (WebCore::RenderRubyBase::textAlignmentForLine): Added. Alwyas returns "justify".
        (WebCore::RenderRubyBase::adjustInlineDirectionLineBounds): Added. Insets the line such that the inset is
        half the width of a single intra-line expansion.
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::addChild): 

2011-02-24  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r79604.
        http://trac.webkit.org/changeset/79604
        https://bugs.webkit.org/show_bug.cgi?id=55017

        Causes assertions to fail on some SVG tests

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-02-24  Oliver Hunt  <oliver@apple.com>

        Build fix

        * bindings/js/JSBindingsAllInOne.cpp:

2011-02-24  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.

        Rework the logical height computation for positioned elements to work in terms of before and after.  That way the offset is determined from
        the correct container side in flipped block writing modes (e.g., vertical-rl).
        
        Patch locationOffsetIncludingFlipping to use the containing block to flip so that it will behave correctly with absolute/fixed positioned
        elements.
        
        Patch offsetFromContainer to use the flipped location offset for absolute/fixed positioned elements so that localToAbsolute works properly.

        Added twelve tests in fast/block/positioning/vertical-rl and fast/block/positioning/vertical-lr.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::offsetFromContainer):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        (WebCore::RenderBox::locationOffsetIncludingFlipping):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::logicalTop):
        (WebCore::InheritedFlags::logicalBottom):

2011-02-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make WeakGCMap use new handle infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=55100

        Update to new WeakGCMap APIs, this requires threading global
        data to a few functions that did not need it in the past, but
        also gets rid of a large number of destructors, as well as the
        forgetDOMNode, etc APIs.

        We can also drop the JSDebugWrapperSet as its only purpose was
        to ensure that we retained correct semantics in the old WeakGCMap,
        but happilly these semantics are now guaranteed by the map itself.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::hasCachedDOMObjectWrapperUnchecked):
        (WebCore::cacheDOMObjectWrapper):
        (WebCore::hasCachedDOMNodeWrapperUnchecked):
        (WebCore::cacheDOMNodeWrapper):
        (WebCore::isObservableThroughDOM):
        (WebCore::markDOMNodesForDocument):
        (WebCore::takeWrappers):
        (WebCore::updateDOMNodeDocument):
        (WebCore::markDOMObjectWrapper):
        (WebCore::markDOMNodeWrapper):
        (WebCore::stringWrapperDestroyed):
        (WebCore::jsStringSlowCase):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWrapper.cpp:
        (WebCore::DOMObject::~DOMObject):
        * bindings/js/JSDebugWrapperSet.cpp: Removed.
        * bindings/js/JSDebugWrapperSet.h: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/jsc/BridgeJSC.cpp:
        (JSC::Bindings::Instance::createRuntimeObject):
        * bridge/jsc/BridgeJSC.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::~RuntimeObject):
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        (JSC::Bindings::RootObject::addRuntimeObject):
        (JSC::Bindings::RootObject::removeRuntimeObject):
        * bridge/runtime_root.h:

2011-02-24  James Robinson  <jamesr@chromium.org>

        Fix chromium compile.

        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::toStringCallback):

2011-02-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r79607.
        http://trac.webkit.org/changeset/79607
        https://bugs.webkit.org/show_bug.cgi?id=55157

        Broke Chromium layout tests.

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::updateVolumeSliderContainer):
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::volumeSliderOffsetFromMuteButton):
        * rendering/RenderMediaControls.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::volumeSliderOffsetFromMuteButton):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::volumeSliderOffsetFromMuteButton):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::volumeSliderOffsetFromMuteButton):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::volumeSliderOffsetFromMuteButton):
        * rendering/RenderThemeWin.h:

2011-02-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix the clang -Woverloaded-virtual build.

        JSLocation has a toString function which conflicts with the virtual JSObject::toString  member function.
        Fix this by renaming the implementation function from JSLocation::toString to JSLocation::toStringFunction.

        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::toStringFunction):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::toStringFunctionCallback):
        * page/Location.idl:

2011-02-24  Anders Carlsson  <andersca@apple.com>

        Fix clang build.

        * bindings/objc/WebScriptObject.mm:
        (-[WebUndefined release]):
        Release should be "oneway void".

        (-[WebUndefined retainCount]):
        Return NSUIntegerMax instead of UINT_MAX.

2011-02-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Simplify RenderTheme::volumeSliderOffsetFromMuteButton, unduplicate code.
        https://bugs.webkit.org/show_bug.cgi?id=55157

        Refactoring, no functional changes. Covered by existing tests.

        RenderTheme::volumeSliderOffsetFromMuteButton has the same duplicated
        logic for all platforms. This patch:
        a) moves the common logic of determining absolute positioning to a
           platform-agnostic place;
        b) simplifies the method to return constant offset.

        * html/shadow/MediaControls.cpp:
        (WebCore::volumeSliderOffset): Added new helper function,
            capturing common logic of finding the absolute position of the volume slider.
        (WebCore::MediaControls::updateVolumeSliderContainer): Changed to use the
            new helper.
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::volumeSliderOffsetRelativeToMuteButton): Simplified.
        * rendering/RenderMediaControls.h: Ditto.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::volumeSliderOffsetRelativeToMuteButton): Ditto.
        * rendering/RenderTheme.h: Ditto.
        * rendering/RenderThemeChromiumMac.h: Ditto.
        * rendering/RenderThemeChromiumMac.mm: Ditto.
        (WebCore::RenderThemeChromiumMac::volumeSliderOffsetRelativeToMuteButton): Ditto.
        * rendering/RenderThemeMac.h: Ditto.
        * rendering/RenderThemeMac.mm: Ditto.
        (WebCore::RenderThemeMac::volumeSliderOffsetRelativeToMuteButton): Ditto.
        * rendering/RenderThemeWin.cpp: Ditto.
        (WebCore::RenderThemeWin::volumeSliderOffsetRelativeToMuteButton): Ditto.
        * rendering/RenderThemeWin.h: Ditto.

2011-02-24  Tom Sepez  <tsepez@chromium.org>

        Reviewed by Darin Fisher.

        Make frameview resized event dispatch async so that it occurs
        after layout has completed.
        
        https://bugs.webkit.org/show_bug.cgi?id=54467
        Test: fast/replaced/frame-removed-during-resize-smaller.html

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

2011-02-24  Xianzhu Wang  <wangxianzhu@google.com>

        Reviewed by Adam Barth.

        Use loader->init() instead of loader->load() to avoid complex fake
        request loading and cleanup logic, and also avoid ResourceLoader leaks.

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

        Test: svg/misc/SVGImage-leak-ResourceLoader.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-02-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Chromium Mac build fix after r79591.

        * WebCore.gypi: Added RenderMediaControls to WebCore.gypi.

2011-02-24  Misha Tyutyunik  <michael.tyutyunik@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Dont use QPixmapCache if QPixmapCache::cacheLimit() is too small 
        (2048Kb for now).
        https://bugs.webkit.org/show_bug.cgi?id=54887

        No new tests required.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::allowAcceleratedCompositingCache):
        (WebCore::GraphicsLayerQtImpl::drawLayerContent):
        (WebCore::GraphicsLayerQtImpl::paint):
        (WebCore::GraphicsLayerQtImpl::flushChanges):

2011-02-20  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Nikolas Zimmermann.

        [CAIRO] Support ImageBuffers clip operation on all Cairo ports
        https://bugs.webkit.org/show_bug.cgi?id=23526

        Add support for ImageBuffer clipping on Cairo by emulating them with image
        masks. Since masking is immediate on Cairo, we must store the mask surfaces
        on a stack and apply them during restorePlatformState.

        * platform/graphics/GraphicsContext.h: Add pushImageMask.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::savePlatformState): Push an empty mask onto the
        stack, so we can keep track of when to actually apply the image mask.
        (WebCore::GraphicsContext::restorePlatformState): When we are ready to apply
        an image mask, use cairo_mask_surface to mask the group that we pushed onto
        our surface.
        (WebCore::GraphicsContext::pushImageMask): Added. This method will push a surface
        onto the image mask stack and push a group onto the Cairo state, so that the masking
        only affects what we paint after this point.
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h: Added a class to keep
        track of image masking information after calls to pushImageMask.
        (WebCore::ImageMaskInformation::update): Added
        (WebCore::ImageMaskInformation::valid): Added
        (WebCore::ImageMaskInformation::maskSurface): Added
        (WebCore::ImageMaskInformation::maskRect): Added
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::clip): Call GraphicsContext::pushImageMask.

2011-02-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        Add RenderMediaControls to Mac build, unduplicate one method.
        https://bugs.webkit.org/show_bug.cgi?id=55152

        Refactoring, no functional changes.

        * WebCore.xcodeproj/project.pbxproj: Added RenderMediaControls to project,
            ran sort-XCode-project-file.
        * rendering/RenderMediaControls.cpp: Moved ENABLE(VIDEO) and PLATFORM(WIN)
            defines to allow building on Mac.
        * rendering/RenderMediaControls.h: Ditto.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::volumeSliderOffsetFromMuteButton): Replaced guts
            with a call to RenderMediaControls function.

2011-02-24  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r79584.
        http://trac.webkit.org/changeset/79584
        https://bugs.webkit.org/show_bug.cgi?id=44797

        [chromium] Patch does not compile if ENABLE_FULLSCREEN_API is
        not set

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-02-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        Do not cache the default cairo font options using a static
        variable. It fixes a memory leak reported by valgrind.

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::getDefaultFontOptions):
        (WebCore::FontPlatformData::initializeWithFontFace):

2011-02-24  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed, rolling out r79570.
        http://trac.webkit.org/changeset/79570
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Breaks chromium build because glue/mocks/mock_web_frame.h/cc
        was not updated

        * WebCore.exp.in:

2011-02-24  David Dorwin  <ddorwin@chromium.org>

        Reviewed by Eric Seidel.

        Enable WebKit Full Screen API in Chromium. The element becomes the full size of the window, but the window is not yet full screen. Support is disabled by default.

        fullscreen javascript bindings not implemented for v8
        https://bugs.webkit.org/show_bug.cgi?id=44797

        Tested by the existing fullscreen Layout Tests.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-02-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move querySelectorAll from CSS agent to DOM agent where it belongs.
        https://bugs.webkit.org/show_bug.cgi?id=55131

        Test: inspector/elements/dom-agent-query-selector.html

        * inspector/Inspector.idl:
        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::nodeToSelectOn):
        (WebCore::InspectorDOMAgent::querySelector):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.setRuleSelector.callback):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.addRule.callback):
        (WebInspector.CSSStyleModel.prototype.addRule):

2011-02-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fragment parsing does not need to use HTMLSourceTracker
        https://bugs.webkit.org/show_bug.cgi?id=55011

        Any performance gains from this patch are likely
        the result of working around:
        https://bugs.webkit.org/show_bug.cgi?id=55005
        (Which suggests that fixing bug 55005 will speed
        up normal HTML parsing substantially.)

        Assuming I ran the numbers correct, here is the
        change from PerformanceTests/Parser/tiny-innerHTML:
        Before patch:
        avg 5586.1
        median 5594
        stdev 41.295157101045135
        min 5425
        max 5633

        After Patch:
        avg 2603.9
        median 2609.5
        stdev 32.500615378789355
        min 2475
        max 2649

        Removing just the HTMLSourceTracker calls brought our
        score from 5500 to 5200, removing the XSSFilter as well
        brought it to 2600 on my machine.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLDocumentParser.h:

2011-02-24   Amruth Raj  <amruthraj@motorola.com> and Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com> and Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement WebEventFactory, WebErrors classes for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=48510

        Exported static functions for GTK, we need them to create events
        in WebKit2.

        * platform/PlatformKeyboardEvent.h:
        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::keyIdentifierForGdkKeyCode):
        (WebCore::PlatformKeyboardEvent::windowsKeyCodeForGdkKeyCode):
        (WebCore::PlatformKeyboardEvent::singleCharacterString):

2011-02-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Remove the GFile GOwnPtr specialization
        https://bugs.webkit.org/show_bug.cgi?id=55154

        Convert uses of GOwnPtr<GFile> to GRefPtr<GFile>.

        No new tests. This should not change behavior.

        * plugins/gtk/PluginPackageGtk.cpp: Fix include order and remove unnecessary include.
        (WebCore::PluginPackage::load): Use GRefPtr for GFile instead of GOwnPtr.

2011-02-24  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Rename PLATFORM(SKIA) to USE(SKIA)
        https://bugs.webkit.org/show_bug.cgi?id=55090

        * config.h: Removed second define of PLATFORM(SKIA).
        * html/HTMLCanvasElement.cpp:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/Gradient.cpp:
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.cpp:
        * platform/graphics/Pattern.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/GLES2Canvas.cpp:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        * platform/graphics/chromium/LayerChromium.cpp:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        * platform/graphics/chromium/ShaderChromium.h:
        * platform/graphics/gpu/LoopBlinnPathProcessor.cpp:
        * platform/graphics/transforms/AffineTransform.h:
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/image-decoders/ImageDecoder.cpp:
        * platform/image-decoders/ImageDecoder.h:
        * rendering/svg/RenderSVGResourceSolidColor.cpp:

2011-02-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: follow up to 79566. USE_PARAM not declared
        https://bugs.webkit.org/show_bug.cgi?id=55155

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::currentCallFrame):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::currentCallFrameCallback):

2011-02-24  Emil A Eklund  <eae@chromium.org>

        Reviewed by Simon Fraser.

        Add support for missing properties to getComputedStyle
        https://bugs.webkit.org/show_bug.cgi?id=23668

        Implement getComputedStyle for the content, counter and outline-offset
        properties.

        Test: fast/css/getComputedStyle/computed-style-properties.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::contentToCSSValue):
        (WebCore::counterToCSSValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText):
        * css/CSSPrimitiveValue.h:

2011-02-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        SegmentedString does not need an m_composite member
        https://bugs.webkit.org/show_bug.cgi?id=55083

        Storing m_composite as distinct from m_substrings.isEmpty()
        was just error prone and eventually going to get us in trouble.

        I also cleaned up some of the style in SegementedString.*
        since this file long predates check-webkit-style.

        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::SegmentedString):
        (WebCore::SegmentedString::operator=):
        (WebCore::SegmentedString::length):
        (WebCore::SegmentedString::setExcludeLineNumbers):
        (WebCore::SegmentedString::clear):
        (WebCore::SegmentedString::append):
        (WebCore::SegmentedString::prepend):
        (WebCore::SegmentedString::advanceSubstring):
        (WebCore::SegmentedString::toString):
        * platform/text/SegmentedString.h:
        (WebCore::SegmentedSubstring::SegmentedSubstring):
        (WebCore::SegmentedSubstring::appendTo):
        (WebCore::SegmentedString::SegmentedString):
        (WebCore::SegmentedString::isComposite):

2011-02-24  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Add missing include for UnusedParam.h

        Not reviewed.

        * platform/mac/FileSystemMac.mm: Add include.  It should have
        originally been added with r76614.

2011-02-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Alexey Proskuryakov.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        No new tests. (no code affected, just exporting a method for DumpRenderTree use)

        * WebCore.exp.in:

2011-02-24  Dirk Schulze  <krit@webkit.org>

        Reviewed by Darin Adler.

        Removing a SVG animation target during animation crashes WebKit
        https://bugs.webkit.org/show_bug.cgi?id=12065

        SVGAnimations with IRI references via 'xlink:href' are slow
        https://bugs.webkit.org/show_bug.cgi?id=49437

        Store reference to target element for SVG animation elements. This is important if the
        target gets referenced via 'xlink:href'. At the moment we would call getElementById() multiple
        times on every animation step. A very expensive operation. This will be avoided with this patch.
        On the other hand, we need to be sure that the target element is always valid. The reference is
        reset, if the target was removed from document or its destructor was called. A HashMap in
        SVGDocumentExtensions stores all mappings from target element to all current animation elements.

        Tests: svg/custom/animate-target-id-changed.svg
               svg/custom/animate-target-removed-from-document.svg

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::~SVGDocumentExtensions):
        (WebCore::SVGDocumentExtensions::addAnimationElementToTarget): New animation gets applied to target.
        (WebCore::SVGDocumentExtensions::removeAnimationElementFromTarget): Animation stoped, remove it from HashMap.
        (WebCore::SVGDocumentExtensions::removeAllAnimationElementsFromTarget): Target no longer in document, reset all
        references in SVG animation elements. 
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::~SVGElement):
        (WebCore::SVGElement::removedFromDocument):
        (WebCore::SVGElement::attributeChanged):
        * svg/SVGElement.h:
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::removedFromDocument):
        * svg/SVGVKernElement.cpp:
        (WebCore::SVGVKernElement::removedFromDocument):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::SVGSMILElement):
        (WebCore::SVGSMILElement::removedFromDocument):
        (WebCore::SVGSMILElement::eventBaseFor):
        (WebCore::SVGSMILElement::targetElement):
        * svg/animation/SVGSMILElement.h:
        (WebCore::SVGSMILElement::resetTargetElement):

2011-02-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel.

        REGRESSION: Accelerated transitions are jumpy
        https://bugs.webkit.org/show_bug.cgi?id=55022
        
        When an accelerated transition used the default timing function,
        a typo in toCAMediaTimingFunction() resulting in the incorrect
        timing function being used.

        Test: transitions/default-timing-function.html

        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (toCAMediaTimingFunction):

2011-02-24  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove bogus optimizations in TextBreakIteratorQt
        https://bugs.webkit.org/show_bug.cgi?id=55139

        Let QTextBoundaryFinder hold a deep copy of the string data it's
        operating on, and don't use the same working buffer for all iterators.

        * platform/text/qt/TextBreakIteratorQt.cpp:
        (WebCore::TextBreakIterator::TextBreakIterator):
        (WebCore::setUpIterator):

2011-02-24  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Bug in the highlighter
        https://bugs.webkit.org/show_bug.cgi?id=54876

        Tests: inspector/editor/highlighter-long-line.html
               inspector/editor/highlighter-paste-in-comment.html

        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype.set highlightChunkLimit):
        (WebInspector.TextEditorHighlighter.prototype.updateHighlight):
        (WebInspector.TextEditorHighlighter.prototype._highlightLines):

2011-02-24  James Simonsen  <simonjam@chromium.org>

        Reviewed by Tony Gentilcore.

        [Web Timing] Zero out navigationStart and unloadEvent on cross-origin redirect
        https://bugs.webkit.org/show_bug.cgi?id=55068

        Test: http/tests/misc/webtiming-origins.html

        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::navigationStart): Zero out on cross origin redirect.
        (WebCore::PerformanceTiming::unloadEventStart): Ditto.
        (WebCore::PerformanceTiming::unloadEventEnd): Ditto.

2011-02-24  Adam Klein  <adamk@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Add code to WebKit Chromium to allow access to NetworkStateNotifier
        https://bugs.webkit.org/show_bug.cgi?id=54516

        Give Chromium's NetworkStateNotifier the ability to change the value
        of m_isOnLine, rather than making it always true.

        No new tests, not sure how to test this. No other LayoutTests seem
        to exercise navigator.onLine.

        * WebCore.gypi:
        * platform/network/NetworkStateNotifier.cpp:
        (WebCore::NetworkStateNotifier::setOnLine): Moved and renamed from NetworkStateNotifierAndroid.
        * platform/network/NetworkStateNotifier.h:
        (WebCore::NetworkStateNotifier::networkStateChange): Forward to setOnLine.
        * platform/network/android/NetworkStateNotifierAndroid.cpp: Removed.
        * platform/network/chromium/NetworkStateNotifierChromium.cpp: Removed.
        * platform/network/chromium/NetworkStateNotifierPrivate.h: Removed.

2011-02-24  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Eric Seidel.

        Support building WebKit with Python 3
        https://bugs.webkit.org/show_bug.cgi?id=55038

        Add support for Python 3 without breaking support for Python 2.

        Main issues:
        -print is a function in Python 3
        -list.sort() no longer have the cmp parameter
        -string.uppercase and string.lowercase have been removed

        * html/parser/create-html-entity-table:

2011-02-24  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Eric Seidel.

        AX: WebKit should expose MathML at least as well as it exposes ARIA role="math"
        https://bugs.webkit.org/show_bug.cgi?id=55049

        Make <math> elements behave as ARIA math roles and use MathML::alttext as a
        possible accessible label.
 
        Test: platform/mac/accessibility/math-alttext.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityDescription):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * mathml/mathattrs.in:

2011-02-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: adjust protocol message format according to spec.
        https://bugs.webkit.org/show_bug.cgi?id=55140

        * inspector/CodeGeneratorInspector.pm:

2011-02-24  Adam Roben  <aroben@apple.com>

        Windows Production build fix

        * platform/network/cf/AuthenticationCF.cpp: Add an extra #include as a workaround for
        <rdar://problem/9042114>.

2011-02-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor inspect() workflow so that it did not push dom nodes.
        https://bugs.webkit.org/show_bug.cgi?id=55057

        Test: inspector/console/command-line-api-inspect.html

        I am working on getting rid of DOM agent pushes - everything should happen upon
        front-end request. This patch changes the way we handle inspect() command line
        api: instead of pushing nodes, we are telling front-end that inspect(object) has
        been requested. It is then up to front-end to request dom nodes and focus them in
        the tree. I also made inspect() work in a generic manner, using same routines for
        nodes, databases, storages and potentially new elements.

        As a side-effect, we don't do console.log from within inspect() anymore, but dump
        inspected value as inspect's result.

        Also, I added individual object release method and made object groups optional.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::scriptValueAsNode):
        (WebCore::InjectedScriptHost::nodeAsScriptValue):
        (WebCore::JSInjectedScriptHost::inspect):
        (WebCore::JSInjectedScriptHost::databaseId):
        (WebCore::JSInjectedScriptHost::storageId):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::scriptValueAsNode):
        (WebCore::InjectedScriptHost::nodeAsScriptValue):
        (WebCore::V8InjectedScriptHost::inspectCallback):
        (WebCore::V8InjectedScriptHost::databaseIdCallback):
        (WebCore::V8InjectedScriptHost::storageIdCallback):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::nodeForObjectId):
        (WebCore::InjectedScript::releaseObject):
        (WebCore::InjectedScript::wrapForConsole):
        (WebCore::InjectedScript::inspectNode):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::inspectImpl):
        (WebCore::InjectedScriptHost::databaseIdImpl):
        (WebCore::InjectedScriptHost::storageIdImpl):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::focusNode):
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::storageId):
        (WebCore::InspectorDOMStorageAgent::didUseDOMStorage):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDOMStorageResource.cpp:
        * inspector/InspectorDOMStorageResource.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::databaseId):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.cpp:
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::releaseObject):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.evaluateInTargetWindow):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        * inspector/front-end/DOMStorage.js:
        * inspector/front-end/Database.js:
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
        * inspector/front-end/inspector.js:
        (WebInspector.inspect):

2011-02-22  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: refactor "script or resource" mess in scripts panel.
        https://bugs.webkit.org/show_bug.cgi?id=54961

        - Use sourceName instead of scriptOrResource
        - Replace two huge functions _addScriptToFilesMenu and _showScriptOrResource that are
          calling each other recursively with small one-purpose non-recursive functions

        Test: inspector/debugger/scripts-panel.html

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.get defaultFocusedElement):
        (WebInspector.ScriptsPanel.prototype._scriptSourceChanged):
        (WebInspector.ScriptsPanel.prototype._addScript):
        (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelectAndShowSourceFrameIfNeeded):
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect.optionCompare):
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype.canShowSourceLine):
        (WebInspector.ScriptsPanel.prototype.showSourceLine):
        (WebInspector.ScriptsPanel.prototype._showSourceFrame):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForSourceName):
        (WebInspector.ScriptsPanel.prototype._recreateSourceFrame):
        (WebInspector.ScriptsPanel.prototype._sourceFrameLoaded):
        (WebInspector.ScriptsPanel.prototype._addItemToBackForwardList):
        (WebInspector.ScriptsPanel.prototype._sourceNameForScript):
        (WebInspector.ScriptsPanel.prototype._scriptForSourceName):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        (WebInspector.ScriptsPanel.prototype._filesSelectChanged):
        (WebInspector.ScriptsPanel.prototype._goBack):
        (WebInspector.ScriptsPanel.prototype._goForward):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.setExecutionLine):

2011-02-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fragment parsing does not need to use HTMLSourceTracker
        https://bugs.webkit.org/show_bug.cgi?id=55011

        Any performance gains from this patch are likely
        the result of working around:
        https://bugs.webkit.org/show_bug.cgi?id=55005
        (Which suggests that fixing bug 55005 will speed
        up normal HTML parsing substantially.)

        Assuming I ran the numbers correct, here is the
        change from PerformanceTests/Parser/tiny-innerHTML:
        Before patch:
        avg 5586.1
        median 5594
        stdev 41.295157101045135
        min 5425
        max 5633

        After Patch:
        avg 2603.9
        median 2609.5
        stdev 32.500615378789355
        min 2475
        max 2649

        Removing just the HTMLSourceTracker calls brought our
        score from 5500 to 5200, removing the XSSFilter as well
        brought it to 2600 on my machine.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLDocumentParser.h:

2011-02-24  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] MinGW build fails to link
        https://bugs.webkit.org/show_bug.cgi?id=55050

        Prepend the libraries of subcomponents instead of appending them
        to fix the library order according to the dependency of the libraries

        No new tests needed.

        * WebCore.pri:

2011-02-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP's script-src should block JavaScript URLs
        https://bugs.webkit.org/show_bug.cgi?id=54787

        Blocking JavaScript URLs required some re-architecting of the lifetime
        of the ContentSecurityPolicy object.  We now manage the lifetime the
        same way we manage the lifetime of the SecurityOrigin object.  In
        particular, when SecurityOrigin inherits into an about:blank iframe, we
        inherit the CSP object as well.  (This is covered by the test added in
        this patch.) In the future, we might consider making
        ContentSecurityPolicy a component of SecurityOrigin instead of a
        component of Document.

        I noted the trickiness in
        http://www.w3.org/Security/wiki/Content_Security_Policies so that we'll
        make sure it gets defined properly in the spec.

        Test: http/tests/security/contentSecurityPolicy/javascript-url.html

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * dom/Document.h:
        (WebCore::Document::contentSecurityPolicy):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs):
        * page/ContentSecurityPolicy.h:
        (WebCore::ContentSecurityPolicy::create):

2011-02-21  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] GRefPtr support for GstElement
        https://bugs.webkit.org/show_bug.cgi?id=54870

        * CMakeListsEfl.txt:
        * GNUmakefile.am:
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp: Added.
        (WTF::GstElement):
        * platform/graphics/gstreamer/GRefPtrGStreamer.h: Added.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcQuery):

2011-02-24  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Share code between elementFromPoint and caretRangeFromPoint in Document.
        https://bugs.webkit.org/show_bug.cgi?id=54610

        Eliminate duplicate code by moving shared logic from elementFromPoint and
        caretRangeFromPoint into helper function.

        * dom/Document.cpp:
        (WebCore::nodeFromPoint):
        (WebCore::Document::elementFromPoint):
        (WebCore::Document::caretRangeFromPoint):

2011-02-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::removeAttribute):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::cachedResources):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):

2011-02-24  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Eric Seidel.

        [gtk] Failing collinear arcTo canvas tests
        https://bugs.webkit.org/show_bug.cgi?id=54658

        Check for collinearity of the three points that affect how arcTo call
        results. This behavior is in accordance with the HTML standard.

        No new tests added as this is already covered by at least two tests.

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::areaOfTriangleFormedByPoints):
        (WebCore::Path::addArcTo):

2011-02-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: There is a validator of the protocol message format.

        It has two parts. InspectorBackendStub.js is the frontend part.
        InspectorBackendDispatcher.cpp is the backend part.
        Both parts are checking protocol message format and report the error if
        the message has not enough fields or the types of fields do not match with
        Inspector.idl specification. These validators are generated automatically.

        In addition, we have a number of places at the backend where we check the
        function arguments and do nothing if the arguments are invalid
        from the business logic point of view.

        This patch bring us an ability to report a custom error from such function to the frontend.

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

        * inspector/CodeGeneratorInspector.pm:
        * inspector/InjectedScriptHost.cpp:
        * inspector/InspectorAgent.cpp:
        * inspector/InspectorAgent.h:
        * inspector/InspectorApplicationCacheAgent.cpp:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        * inspector/InspectorTimelineAgent.h:

2011-02-24  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Ojan Vafai.

        Crash when deleting inside a blockquote with a large offset
        https://bugs.webkit.org/show_bug.cgi?id=55098

        The bug was caused by inconsistency in lineBreakExistsAtPosition and breakOutOfEmptyMailBlockquotedParagraph.
        While lineBreakExistsAtPosition was checking that a line break exists at the downstream of the given position,
        breakOutOfEmptyMailBlockquotedParagraph wasn't using the downstream for caretPos. Fixed the bug by using
        the downstream position to instantiate caretPos.

        Co-author: Abhishek Arya <inferno@chromium.org>.

        Test: editing/deleting/delete-blockquote-large-offsets.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph):

2011-02-24  Robert Kroeger  <rjkroege@chromium.org>

        Reviewed by Darin Fisher.

        Added timestamps to PlatformTouchEvent etc.

        PlatformTouchEvent doesn't have a timestamp and so
        eventSender.leapForward cannot be used for touchevent based tests.
        This change adds a timestamp to PlatformTouchEvent and initializes
        it in a reasonable manner on Android and Qt platforms.

        [chromium] [WebCore] [android] Touch events are missing time stamps
        https://bugs.webkit.org/show_bug.cgi?id=53510

        * platform/PlatformTouchEvent.h:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        (WebCore::PlatformTouchEvent::timestamp):
        * platform/android/PlatformTouchEventAndroid.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        * platform/qt/PlatformTouchEventQt.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):

2011-02-24  Renata Hodovan  <reni@webkit.org>

        Unreviewed GTK, Snow Leopard build fix for r79474.

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::setKernelUnitLength):
        * platform/graphics/filters/FEConvolveMatrix.h:

2011-02-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        Use IntRect instead of a pointer to a GtkAllocation struct to avoid
        unnecessary memory allocations.

        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::plugAddedCallback):

2011-02-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the build with GTK+ 3.

        * plugins/PluginView.h:

2011-02-23  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Refactor HTMLEquivalent into a hierachy of classes
        https://bugs.webkit.org/show_bug.cgi?id=55025

        Converted HTMLEquivalent into a class.  Some logic in removeImplicitlyStyledElement is
        extracted as member functions of HTMLEquivalent and its subclasses.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::HTMLEquivalent::create): Added.
        (WebCore::HTMLEquivalent::~HTMLEquivalent): Added.
        (WebCore::HTMLEquivalent::matches): Returns true if the element is an equivalent, meaning that
        the element's implicit style affects the property of this equivalence.
        (WebCore::HTMLEquivalent::hasAttribute): Returns true if this equivalence requires attributes;
        e.g. color, size, dir.
        (WebCore::HTMLEquivalent::propertyExistsInStyle): Returns true if the property of this equivalence
        exists in the specified style. e.g. if this equivalence is for size attribute and font-size property,
        this function returns true if the specified style has font-size property set.
        (WebCore::HTMLEquivalent::HTMLEquivalent): Added.
        (WebCore::HTMLEquivalent::valueIsPresentInStyle): Returns true if the specified style has the
        implicit style of the specified element of this equivalence.
        (WebCore::HTMLEquivalent::addToStyle): Adds the implicit style of the element of this equivalence
        to the specified mutable style.
        (WebCore::HTMLEquivalentValueList::create): Added.
        (WebCore::HTMLEquivalentValueList::HTMLEquivalentValueList): Added.
        (WebCore::HTMLEquivalentValueList::valueIsPresentInStyle): Added.
        (WebCore::HTMLEquivalentAttribute::create): Added.
        (WebCore::HTMLEquivalentAttribute::matches): Added.
        (WebCore::HTMLEquivalentAttribute::hasAttribute): Added.
        (WebCore::HTMLEquivalentAttribute::attributeName): Added.
        (WebCore::HTMLEquivalentAttribute::HTMLEquivalentAttribute): Added.
        (WebCore::HTMLEquivalentAttribute::valueIsPresentInStyle): Added.
        (WebCore::HTMLEquivalentAttribute::addToStyle): Added.
        (WebCore::HTMLEquivalentAttribute::attributeValueAsCSSValue): Added.
        (WebCore::HTMLEquivalentFontSizeAttribute::create): Added.
        (WebCore::HTMLEquivalentFontSizeAttribute::HTMLEquivalentFontSizeAttribute): Added.
        (WebCore::HTMLEquivalentFontSizeAttribute::attributeValueAsCSSValue): Added.
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement): Uses new classes.

2011-02-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79510.
        http://trac.webkit.org/changeset/79510
        https://bugs.webkit.org/show_bug.cgi?id=55114

        It made ~200 tests crash on Qt bot (Requested by Ossy_ on
        #webkit).

        * platform/text/TextBreakIterator.h:
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::lineBreakIterator):
        * platform/text/qt/TextBreakIteratorQt.cpp:
        (WebCore::lineBreakIterator):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/break_lines.cpp:
        (WebCore::nextBreakablePosition):
        * rendering/break_lines.h:
        (WebCore::isBreakable):

2011-02-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Mark Rowe.
        
        Used svn merge -r79502:79501 to roll out r79502 because it broke the
        SnowLeopard and Leopard builds.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/HTMLConverter.h: Removed.
        * platform/mac/HTMLConverter.mm: Removed.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):

2011-02-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/9002157> Garbage in the bottom right corner of the window 
        when scrolling

        When there is both a horizontal and a vertical scrollbar, it is necessary to 
        include the space between them in the invalidation.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::setScrollOffsetFromAnimation):

2011-02-23  Ned Holbrook  <nholbrook@apple.com>

        Reviewed by Dan Bernstein.

        Minimize calls to ubrk_setText()
        https://bugs.webkit.org/show_bug.cgi?id=54912
        <rdar://problem/9032774>

        Avoid calling ubrk_setText() once per call to isBreakable() by using a LazyLineBreakIterator, which defers
        break iterator creation until needed. This requires replacing the global line break iterator primitive with a
        version that can be nested, since in some cases two iterators may need to be outstanding. In particular,
        layoutInlineChildren() may indirectly call computePreferredLogicalWidths() and each may need an iterator.
        In a test with a paragraph of Japanese text, this reduced the number of ubrk_setText() calls from 164 to 1.

        * platform/text/TextBreakIterator.h: Add LazyLineBreakIterator.
        (WebCore::LazyLineBreakIterator::LazyLineBreakIterator):
        (WebCore::LazyLineBreakIterator::~LazyLineBreakIterator):
        (WebCore::LazyLineBreakIterator::string):
        (WebCore::LazyLineBreakIterator::length):
        (WebCore::LazyLineBreakIterator::get):
        (WebCore::LazyLineBreakIterator::reset):
        * platform/text/TextBreakIteratorICU.cpp: Replace lineBreakIterator() primitive with acquireLineBreakIterator()/releaseLineBreakIterator().
        (WebCore::acquireLineBreakIterator):
        (WebCore::releaseLineBreakIterator):
        * platform/text/qt/TextBreakIteratorQt.cpp: Ditto TextBreakIteratorICU.cpp.
        (WebCore::acquireLineBreakIterator):
        (WebCore::releaseLineBreakIterator):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Pass a mapping of RenderText to LazyLineBreakIterator from one call of findNextLineBreak() to the next.
        (WebCore::RenderBlock::findNextLineBreak): Use said mapping, resetting LazyLineBreakIterator for any newly-encountered RenderText.
        * rendering/RenderText.cpp: Use a local LazyLineBreakIterator.
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/break_lines.cpp: Accept LazyLineBreakIterator rather than TextBreakIterator.
        (WebCore::nextBreakablePosition):
        * rendering/break_lines.h: Accept LazyLineBreakIterator rather than TextBreakIterator.
        (WebCore::isBreakable):

2011-02-23  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * platform/mac/HTMLConverter.h:

2011-02-17  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: Copied content loses formatting on paste to external apps.
        https://bugs.webkit.org/show_bug.cgi?id=47615
        <rdar://problem/9001214>

        This patch adds a way for WebKit2 to create NSAttributedStrings from
        a DOM range without using the AppKit api initWithDOMRange that internally
        needs to access the WebView. The NSAttributedString is needed to create
        RTF formats in the pasteboard.
        This is to be considered a first step, since in the future we want to have
        an implementation based on the TextIterator.
        
        * WebCore.xcodeproj/project.pbxproj: Added new file.
        * platform/mac/HTMLConverter.h: Added.
        * platform/mac/HTMLConverter.mm: Added.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection): We now use WebHTMLConverter
        class for WebKit2 to create the NSAttributedString from the DOM range.

2011-02-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.

        Patch computePositionedLogicalHeightUsing to be writing-mode-aware. 

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        * rendering/RenderBox.h:

2011-02-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Flash item placed on wrong location right after load
        https://bugs.webkit.org/show_bug.cgi?id=37769

        If a plugin is GtkSocket based, do not set the widget allocation until the
        window is actually embedded in the parent. When the window is embedded, use
        any pending allocation for the call to gtk_widget_size_allocate. This bug
        seems to only appear with Flash movies loaded as the src of an iframe.

        * manual-tests/plugins/windowed-in-iframe.html: Added.
        * plugins/PluginView.h: Add a few new members to track window embedding state.
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded): If this is a GtkSocket-based plugin
        wait until the plug-added signal fires to set the widget allocation.
        (WebCore::PluginView::plugAddedCallback): Updated to be a static method, so that
        we can access private members. If there is a pending allocation, call gtk_widget_size_allocate
        with it.
        (WebCore::PluginView::platformStart): Update the plugin state, so that we do not
        call gtk_widget_size_allocate if the window isn't embedded.

2011-02-18  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adam Roben.

        Mac OS X Services are not available for selected text in WebKit2 windows.
        https://bugs.webkit.org/show_bug.cgi?id=54777
        <rdar://problem/8666428>

        The changes to WebCore for this bug are limited to exposing a new
        entry point in the Editor class to write to the pasteboard and
        changes to the Pasteboard class to write the selection with
        a given set of pasteboard types. The majority of the work
        is done in WebKit2.
        
        * WebCore.exp.in:
        * editing/Editor.h:
        * editing/mac/EditorMac.mm: Added entrypoint to write the
        selection to the pasteboard.
        (WebCore::Editor::writeSelectionToPasteboard):
        * platform/Pasteboard.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::writeRange):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):

2011-02-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.

        Patch computePositionedLogicalHeight to be writing-mode-aware.  Functions it calls have not been
        patched yet, so still not testable in a vertical text environment.

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

2011-02-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.

        Patch computePositionedLogicalWidthUsing to be writing-mode-aware. Still not testable in a vertical text
        environment, since height computations will overwrite all values computed here until they are patched as well.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        * rendering/RenderBox.h:

2011-02-23  Renata Hodovan  <reni@webkit.org>

        Reviewed by Nikolas Zimmermann.

        FEColorMatrixElement changes doesn't require relayout
        https://bugs.webkit.org/show_bug.cgi?id=54880

        When the FEColorMatrixElement receives an update message but the given value remains the same we don't need
        to relayout the filter.

        No new tests are needed because this modificiation is covered by the dynamic update tests of FEColorMatrix.

        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::setType):
        (WebCore::FEColorMatrix::setValues):
        * platform/graphics/filters/FEColorMatrix.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::setFilterEffectAttribute):
        (WebCore::SVGFEColorMatrixElement::svgAttributeChanged):
        * svg/SVGFEColorMatrixElement.h:

2011-02-23  James Robinson  <jamesr@chromium.org>

        REGRESSION(79466): fast/parser/test-unicode-characters-in-attribute-name.html fails

        Reverts TextCodecUTF16.cpp back to pre-79466 state.  The crash fix in 79466 was for UTF-8 only, it also caused the UTF16 path to fail.

        * platform/text/TextCodecUTF16.cpp:
        (WebCore::newStreamingTextDecoderUTF16LE):
        (WebCore::newStreamingTextDecoderUTF16BE):
        (WebCore::TextCodecUTF16::decode):
        (WebCore::TextCodecUTF16::encode):

2011-02-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.

        Patch computePositionedLogicalWidth to be writing-mode-aware.  Functions it calls have not been
        patched yet, so still not testable in a vertical text environment.

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

2011-02-23  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r79428.
        http://trac.webkit.org/changeset/79428
        https://bugs.webkit.org/show_bug.cgi?id=54714

        Does not work in the Chromium sandbox

        * websockets/WebSocketHandshake.cpp:
        (WebCore::generateSecWebSocketKey):
        (WebCore::generateKey3):

2011-02-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.
        
        Add logical accessors for the left()/right()/top()/bottom() properties on the RenderStyle.

        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::logicalLeft):
        (WebCore::InheritedFlags::logicalRight):
        (WebCore::InheritedFlags::logicalTop):
        (WebCore::InheritedFlags::logicalBottom):

2011-02-23  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        Fix crash seen in one of the regression tests.

        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::decode): Handle case where we did not decode any new data,
        we were not told to flush, and we had a buffered byte. The assertion here was incorrect,
        and the correct thing to do is nothing.

2011-02-23  Sergey Glazunov  <serg.glazunov@gmail.com>

        Reviewed by James Robinson.

        SVGCursorElement::removeClient() should verify that its argument is connected with
        the proper cursor element.
        https://bugs.webkit.org/show_bug.cgi?id=54979

        Test: svg/css/multiple-cursors-crash.html

        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::removeClient):

2011-02-23  Renata Hodovan  <reni@webkit.org>

        Reviewed by Darin Adler.

        FEConvolveMatrixElement changes doesn't require relayout
        https://bugs.webkit.org/show_bug.cgi?id=55067

        When the FEConvolveMatrixElement receives an update message but the
        given value remains the same we don't need to relayout the filter.

        No new tests are needed because this modificiation is covered by the
        dynamic update tests of FEConvolveMatrix.

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::setDivisor):
        (WebCore::FEConvolveMatrix::setBias):
        (WebCore::FEConvolveMatrix::setTargetOffset):
        (WebCore::FEConvolveMatrix::edgeMode):
        (WebCore::FEConvolveMatrix::setEdgeMode):
        (WebCore::FEConvolveMatrix::setPreserveAlpha):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::setFilterEffectAttribute):
        (WebCore::SVGFEConvolveMatrixElement::svgAttributeChanged):
        * svg/SVGFEConvolveMatrixElement.h:

2011-02-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Rolled back in r79367 with SnowLeopard Release bot crash fixed.
        https://bugs.webkit.org/show_bug.cgi?id=54999

        * ForwardingHeaders/wtf/DoublyLinkedList.h: Added.

2011-02-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Add more thorough manual test coverage for media controls
        https://bugs.webkit.org/show_bug.cgi?id=55006

        * manual-tests/media-controls.html: Added.

2011-02-23  Darin Adler  <darin@apple.com>

        Fix build.

        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::decode): Removed stray unused local variable.

2011-02-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Setting shadow host should also attach and set inDocument, just like
        appending/inserting a child.
        https://bugs.webkit.org/show_bug.cgi?id=55065

        No new tests, because functionality is not yet used.

        * dom/Element.cpp:
        (WebCore::Element::setShadowRoot): Add attaching and setting inDocument
            for the shadow DOM subtree, like the host.

2011-02-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler and Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.
        
        - Add clientLogicalWidth and clientLogicalHeight that call the correct clientWidth or clientHeight based off
        writing-mode.
        - Patch clientLogicalBottom to use clientLogicalHeight.
        - Convert containingBlockWidthForPositioned and containingBlockHeightForPositioned to be logical and to make use of
        clientLogicalHeight/Width.  Also make them able to handle perpendicular writing mode containining blocks.
        - Refine containingBlockLogicalHeightForPositioned to match containingBlockLogicalWidthForPositioned more closely.
        
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned):
        (WebCore::RenderBox::computePositionedLogicalWidth):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::clientLogicalWidth):
        (WebCore::RenderBox::clientLogicalHeight):
        (WebCore::RenderBox::clientLogicalBottom):

2011-02-23  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        REGRESSION (new UTF-8 decoder): Reproducible crash on alltommac.se
        https://bugs.webkit.org/show_bug.cgi?id=54862

        Correct handling of end of buffer partial sequence in UTF-8 and UTF-16 decoders when flushing with zero length
        https://bugs.webkit.org/show_bug.cgi?id=54444

        No new tests at this time. I will add some tests later, but since multiple
        people are hitting this I wanted to get it in as quickly as possible.

        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::decode): Tweaked coding style quite a bit.
        Removed special case for zero length now that main code handles it
        correctly. Used words instead of abbreviations for local variable names.
        Added error handling for a trailing byte.

        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::consumePartialSequenceByte): Added. Helper function
        to make the handleError and handlePartialSequence functions clearer.
        (WebCore::TextCodecUTF8::handleError): Added. Helper function to make the
        handlePartialSequence clearer.
        (WebCore::TextCodecUTF8::handlePartialSequence): Added. Factored out code for
        the partial sequence case. Making this a separate function probably helps make
        the fast case a little faster. This new version handles more cases correctly,
        which is what fixes the crashes we were seeing. In particular, it no longer
        assumes that the partial sequence is truly partial, because there are cases
        where we end up handling complete sequences here, such as when a complete
        sequence is inside a malformed partial sequence.
        (WebCore::TextCodecUTF8::decode): Removed partial sequence code and made this
        call handlePartialSequence instead. Could be streamlined if we double checked
        that passing a reference to "destination" and "source" doesn't harm code
        generation too much, so perhaps someone can do that research on a few compilers
        later and clean this up. Removed special case for zero length now that the
        main code handles that correctly.

        * platform/text/TextCodecUTF8.h: Added declarations for new functions.
        Made partial sequence buffer large enough to hold a whole sequence so we can
        use it to complete and decode a sequence in place.

2011-02-23  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Make clear float lineboxes resilient against overflows.        
        https://bugs.webkit.org/show_bug.cgi?id=54995

        We try to dirty everthing in block range if we have a negative
        logical bottom, or if our logical bottom is less than our logical
        top, or if our logical top is equal to INT_MAX. Plus, we also dirty
        a linebox if its block logical height is less than zero.
        Tests: fast/overflow/overflow-height-float-not-removed-crash2.html
               fast/overflow/overflow-height-float-not-removed-crash3.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeFloatingObject):
        (WebCore::RenderBlock::markLinesDirtyInBlockRange):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection): remove the hack
        added in r69735. we don't need this anymore since we are making the
        underlying float dirty logic resilient.

2011-02-22  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Per-page minimum DOMTimer interval broken for repeating timers
        https://bugs.webkit.org/show_bug.cgi?id=55014

        When the minimum timer interval is adjusted, if the timer is
        repeating, cause its repeat interval to be set to its original
        timeout clamped to the new minimum interval.

        Tests: fast/dom/timer-increase-min-interval-repeating.html
               fast/dom/timer-increase-then-decrease-min-interval-repeating.html

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::adjustMinimumTimerInterval):

2011-02-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        Fix two issues seen in WebKit2 views on Mac:
        - <rdar://problem/8867831> WebKit2: Insertion points in form fields no longer blink
        - <rdar://problem/8950362> REGRESSION (WebKit2): Cannot deselect text

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Initialize m_activationEventNumber
        to -1. Since WebKit2 doesn�t support non-activating clicks yet (<http://webkit.org/b/55053>
        <rdar://problem/9042197>) and doesn�t send event numbers, all events were considered to be
        window-activating events. This in turn prevented them from clearing the selection and resuming
        caret blinking on mouse up.

2011-02-23  Jacob Dinu  <dinu.jacob@nokia.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Linking error for some InspectorController symbols
        https://bugs.webkit.org/show_bug.cgi?id=54953

        Moved out hideHighlight definition from under JAVASCRIPT_DEBUGGER flag 

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::hideHighlight):
        (WebCore::InspectorController::resume):

2011-02-23  Hans Wennborg  <hans@chromium.org>

        IndexedDB: Move some SQL code into IDBBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=54889

        The idea is to gather all the SQL logic into IDBBackingStore.

        No new functionality, so no new tests.

        * storage/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::IDBBackingStore):
        (WebCore::runCommands):
        (WebCore::createTables):
        (WebCore::createMetaDataTable):
        (WebCore::getDatabaseSchemaVersion):
        (WebCore::migrateDatabase):
        (WebCore::IDBBackingStore::open):
        (WebCore::IDBBackingStore::extractIDBDatabaseMetaData):
        (WebCore::IDBBackingStore::setIDBDatabaseMetaData):
        (WebCore::IDBBackingStore::getObjectStores):
        (WebCore::IDBBackingStore::createObjectStore):
        (WebCore::doDelete):
        (WebCore::IDBBackingStore::deleteObjectStore):
        (WebCore::whereSyntaxForKey):
        (WebCore::bindKeyToQuery):
        (WebCore::IDBBackingStore::getObjectStoreRecord):
        (WebCore::bindKeyToQueryWithNulls):
        (WebCore::IDBBackingStore::putObjectStoreRecord):
        (WebCore::IDBBackingStore::deleteIndexDataForRecord):
        (WebCore::IDBBackingStore::putIndexDataForRecord):
        (WebCore::IDBBackingStore::createIndex):
        (WebCore::IDBBackingStore::deleteIndex):
        (WebCore::IDBBackingStore::clearObjectStore):
        * storage/IDBBackingStore.h:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::createObjectStoreInternal):
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStoreInternal):
        (WebCore::IDBDatabaseBackendImpl::setVersionInternal):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::IDBFactoryBackendImpl):
        (WebCore::IDBFactoryBackendImpl::addIDBBackingStore):
        (WebCore::IDBFactoryBackendImpl::removeIDBBackingStore):
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::getInternal):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::clearInternal):
        (WebCore::populateIndex):
        (WebCore::IDBObjectStoreBackendImpl::createIndexInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndexInternal):

2011-02-23  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Fix the Symbian build after r79334
        https://bugs.webkit.org/show_bug.cgi?id=55044

        No new tests as there is no new functionality.

        * WebCore.pri: Reorder symbian blocks to make sure that
        system-sqlite is set before it is tested.

        Copy the rules from JavaScriptCore.pri for defineTest().

2011-02-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Use AtomicString::fromUTF8 instead of String::fromUTF8 for AtomicStrings
        https://bugs.webkit.org/show_bug.cgi?id=54992

        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readHTTPHeaders):

2011-02-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [CMake] Move platform dependent files out of main CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=53891

        Apple Windows port does not use the image decoders,
        so move them into the platform specific CMake files.

        * CMakeLists.txt:
        * CMakeListsEfl.txt:
        * CMakeListsWinCE.txt:

2011-02-21  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Jittering when animating a rotated image
        https://bugs.webkit.org/show_bug.cgi?id=50775

        Since Skia does not seem to suffer from pixel cracks when scaling to
        non-integral sizes the way CG does, no-op roundToDevicePixels on the
        Skia implementation.

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

2011-02-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [WINCE] Get rid of TemporaryLinkStubs.cpp
        https://bugs.webkit.org/show_bug.cgi?id=54825

        * CMakeListsWinCE.txt:
        * platform/network/win/CookieStorageWin.cpp: Copied from platform/wince/TemporaryLinkStubs.cpp.
        * platform/wince/TemporaryLinkStubs.cpp: Removed.

2011-02-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Rename PLATFORM(CF) to USE(CF)
        https://bugs.webkit.org/show_bug.cgi?id=53540

        * WebCore.gyp/WebCore.gyp:
        * editing/SmartReplace.cpp:
        * editing/SmartReplaceICU.cpp:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
        (WebCore::MainResourceLoader::didReceiveData):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::didFail):
        * loader/archive/ArchiveFactory.cpp:
        (WebCore::archiveMIMETypes):
        * platform/FileSystem.h:
        * platform/KURL.h:
        * platform/KURLGoogle.cpp:
        * platform/RunLoopTimer.h:
        * platform/SharedBuffer.cpp:
        * platform/SharedBuffer.h:
        * platform/UUID.cpp:
        (WebCore::createCanonicalUUIDString):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceRequestBase.h:
        * platform/network/curl/ResourceHandleCurl.cpp:
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::certificatePath):
        * platform/text/cf/StringCF.cpp:
        * platform/text/cf/StringImplCF.cpp:
        * platform/win/BString.cpp:
        * platform/win/BString.h:
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::getWebLocData):
        (WebCore::getURL):
        (WebCore::getClipboardData):
        * platform/win/ClipboardWin.cpp:
        (WebCore::writeFileToDataObject):
        * platform/win/SearchPopupMenuWin.cpp:
        (WebCore::SearchPopupMenuWin::enabled):
        (WebCore::SearchPopupMenuWin::saveRecentSearches):
        (WebCore::SearchPopupMenuWin::loadRecentSearches):

2011-02-23  Benjamin Kalman  <kalman@chromium.org>

        Reviewed by Ojan Vafai.

        Moving or selecting backwards by words jumps to start of contenteditable region if contenteditable=false span is encountered
        https://bugs.webkit.org/show_bug.cgi?id=51001

        Test: editing/selection/extend-backward-by-word-over-non-editable.html

        Revert some previous changes (the TextIteratorEndsAtEditingBoundary text iteration behaviour) which caused this
        bug in the first place, and fix SimplifiedBackwardsTextIterator's iteration range check as an alternative fix.

        The original bug was that double-clicking on an inline editable span at the start of a paragraph would clear the
        selection (webkit.org/b/36360).  This was caused by upstream/downstream VisbiblePosition complications.  To fix,
        refuse to iterate beyond the start node (rather than refusing to iterate across editable boundaries, which
        causes this bug).

        To see why this is correct, and to make it clearer that is indeed what is happening, the text iterator code has
        been slightly restructured to express the invariant that the iterator will never advance past the start node.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator): Remove references to TextIterationEndsAtEditing boundary.
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator): Remove m_pastStartNode as the
        mechanism for iteration range checking, and use a flag m_havePassedStartNode instead.
        (WebCore::SimplifiedBackwardsTextIterator::advance): Clean up, use advanceRespectingRange and
        m_havePassedStartNode for iteration range checking rather than m_pastStartNode.
        (WebCore::SimplifiedBackwardsTextIterator::advanceRespectingRange): The new way of modifying m_node
        which updates m_havePassedStartNode and refuses to continue when it becomes true.
        * editing/TextIterator.h: Remove TextIteratorEndsAtEditingBoundary, update for new/removed prototypes and
        member variables.
        * editing/visible_units.cpp:
        (WebCore::previousBoundary): Remove references to TextIteratorEndsAtEditingBoundary.

2011-02-23  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Adam Barth.

        WebSocket uses insecure random numbers
        https://bugs.webkit.org/show_bug.cgi?id=54714

        * websockets/WebSocketHandshake.cpp:
        (WebCore::randomNumberLessThan):
        (WebCore::generateSecWebSocketKey):
        (WebCore::generateKey3):

2011-02-21  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Rename IDBSQLiteDatabase to IDBBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=54864

        No new functionality, so no new tests.

        * GNUmakefile.am:
        * WebCore.gypi:
        * storage/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::IDBBackingStore):
        (WebCore::IDBBackingStore::~IDBBackingStore):
        * storage/IDBBackingStore.h:
        (WebCore::IDBBackingStore::create):
        (WebCore::IDBBackingStore::db):
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::currentRowExists):
        (WebCore::IDBCursorBackendImpl::database):
        * storage/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::sqliteDatabase):
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::setVersionInternal):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
        * storage/IDBDatabaseBackendImpl.h:
        (WebCore::IDBDatabaseBackendImpl::create):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::removeIDBBackingStore):
        (WebCore::openSQLiteDatabase):
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl):
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        (WebCore::IDBIndexBackendImpl::sqliteDatabase):
        * storage/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::create):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::IDBObjectStoreBackendImpl):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
        (WebCore::IDBObjectStoreBackendImpl::loadIndexes):
        (WebCore::IDBObjectStoreBackendImpl::sqliteDatabase):
        * storage/IDBObjectStoreBackendImpl.h:
        (WebCore::IDBObjectStoreBackendImpl::create):

2011-02-23  Dominic Mazzoni  <dmazzoni@google.com>

        Reviewed by Kenneth Russell.

        Add a hit test handler for canvas elements that handles clicks on the canvas but ignores children.
        https://bugs.webkit.org/show_bug.cgi?id=54697

        New test to prevent this from regressing in the future: canvas/canvas-mouse-events.html

        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::nodeAtPoint):

2011-02-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Remove obsolete focusRingColor functions
        https://bugs.webkit.org/show_bug.cgi?id=54824

        * CMakeListsWinCE.txt:
        * platform/graphics/haiku/ColorHaiku.cpp:
        * platform/graphics/wince/ColorWinCE.cpp: Removed.

2011-02-22  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        On Mac OS X, English contractions are marked misspelled with certain user preference setting.
        https://bugs.webkit.org/show_bug.cgi?id=54975

        manual test: manual-tests/autocorrection/spellcheck-on-contraction-when-autocorrection-is-off.html

        Without this patch, we check for contraction only when autocorrection or other type of auto-
        substituation is on. And we failed to check for contraction if only spellchecking is turned on.
        This patch implements the desired behavior, checking for contraction when either correction/substitution,
        or spellchecking, is on.

        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        * manual-tests/autocorrection/spellcheck-on-contraction-when-autocorrection-is-off.html: Added.

2011-02-22  Charlie Reis  <creis@chromium.org>

        Reviewed by Darin Fisher.

        Remove DatabasePolicy from FrameLoaderTypes
        https://bugs.webkit.org/show_bug.cgi?id=54968

        The DatabasePolicy enum is no longer needed now that we avoid stopping
        loaders on same-document navigations.

        Existing test: storage/hash-change-with-xhr.html

        * WebCore.exp.in:
        * loader/DocumentLoader.cpp:
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/FrameLoaderTypes.h:
        * workers/WorkerThread.cpp:

2011-02-22  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] QWebView ignores a palette set with QWebView::setPalette()
        https://bugs.webkit.org/show_bug.cgi?id=31742

        Use custom QWebView palette if the view provides one.
        Modified version of a patch made by Fabrizio Machado.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeQt::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeQt::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeQt::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeQt::platformFocusRingColor):

2011-02-22  Brian Salomon  <bsalomon@google.com>

        Reviewed by Kenneth Russell.

        Don't disable accelerated canvas when using the skia gpu backend.

        No new tests are required.

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

2011-02-22  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] <select>s on http://www.ryanair.com render wrong
        https://bugs.webkit.org/show_bug.cgi?id=29647

        Reducing padding in <select> elements to improve its rendering and introducing a
        rendering adjustment specific to QMacStyle.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::setPopupPadding):
        (WebCore::RenderThemeQt::paintMenuList):

2011-02-22  Andreas Kling  <kling@webkit.org>

        Reviewed by Dan Bernstein.

        FontCache: Make cTargetInactiveFontData an int instead of float.
        https://bugs.webkit.org/show_bug.cgi?id=54963

        * platform/graphics/FontCache.cpp:

2011-02-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Make Editor::selectionComputedStyle return EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=54933

        Renamed selectionComputedStyle to selectionStartStyle and changed the return type to EditingStyle.
        It also no longer takes a boolean shouldUseFixedFontDefaultSize.

        Also added EditingStyle::mergeTypingStyle which replaced old editingStyleIncludingTypingStyle. This function
        doesn't extract inheritable properties prior to merge because this turned out be a bug, which was revealed
        by an existing layout test only after the code was shared with selectionStartStyle.

        No tests are added since this is a refactoring.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Calls EditingStyle::create and EditingStyle::mergeTypingStyle.
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem): Ditto.
        * editing/EditingStyle.cpp: Removed editingStyleIncludingTypingStyle.
        (WebCore::EditingStyle::mergeTypingStyle): Added.
        * editing/EditingStyle.h:
        (WebCore::EditingStyle::shouldUseFixedDefaultFontSize): Added.
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartHasStyle): Calls selectionStartStyle.
        (WebCore::Editor::selectionHasStyle): Ditto.
        (WebCore::Editor::selectionStartCSSPropertyValue): Ditto.
        (WebCore::Editor::selectionStartStyle): Renamed from selectionComputedStyle; returns EditingStyle.
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeToggleStyleInList): Calls selectionStartStyle.
        * editing/InsertLineBreakCommand.cpp:
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::calculateStyleBeforeInsertion): Calls EditingStyle::create and
        EditingStyle::mergeTypingStyle.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Ditto.

2011-02-22  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] painting of windowed plugins faulty on certain scroll events

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

        Invalidate the pluginview's relative rect rather then the frameRect(). This is because QWebFrame::renderRelativeCoords()
        imitates ScrollView and adds the scroll offset back on to the rect we damage here (making the co-ordinates absolute
        to the frame again) before passing it to FrameView.

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

2011-02-22  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        Minimal build broken
        https://bugs.webkit.org/show_bug.cgi?id=54743

        Moved the code of setInspectorExtensionAPI and
        dispatchMessageFromFrontend out of #if
        ENABLE(JAVASCRIPT_DEBUGGER) to fix link error of the minimal build.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setInspectorExtensionAPI):
        (WebCore::InspectorController::dispatchMessageFromFrontend):

2011-02-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79367.
        http://trac.webkit.org/changeset/79367
        https://bugs.webkit.org/show_bug.cgi?id=55012

        all layout tests are crashing on Snow Leopard (Requested by
        rniwa on #webkit).

        * ForwardingHeaders/wtf/DoublyLinkedList.h: Removed.

2011-02-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Deploy EditingStyle in removeInlineStyleFromElement and removeCSSStyle
        https://bugs.webkit.org/show_bug.cgi?id=54944

        Deployed EditingStyle in removeInlineStyleFromElement and removeCSSStyle.

        Also extracted EditingStyle::conflictsWithInlineStyleOfElement from ApplyStyleCommand::removeCSSStyle,
        which returns true iff the specified element has inline style that conflicts or matches the editing style.
        It also appends conflicting property IDs to the vector of property IDs if one is specified.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle): Calls removeCSSStyle.
        (WebCore::ApplyStyleCommand::applyInlineStyle): Calls shouldSplitTextElement.
        (WebCore::ApplyStyleCommand::removeStyleFromRunBeforeApplyingStyle): Calls removeInlineStyleFromElement.
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): Takes EditingStyle* instead of CSSMutableStyleDeclaration*.
        (WebCore::ApplyStyleCommand::removeCSSStyle): Ditto; extracted the logic to decide properties to remove as
        conflictsWithInlineStyleOfElement.
        (WebCore::ApplyStyleCommand::highestAncestorWithConflictingInlineStyle): Calls shouldRemoveInlineStyleFromElement.
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode): Calls removeInlineStyleFromElement.
        (WebCore::ApplyStyleCommand::removeInlineStyle): Ditto.
        (WebCore::ApplyStyleCommand::shouldSplitTextElement): Takes EditingStyle* instead of CSSMutableStyleDeclaration*.
        * editing/ApplyStyleCommand.h:
        (WebCore::ApplyStyleCommand::shouldRemoveInlineStyleFromElement): Ditto.
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement): Extracted from ApplyStyleCommand::removeCSSStyle.
        * editing/EditingStyle.h:
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement): Added.

2011-02-22  Chang Shu  <cshu@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] editing/deleting/5408255.html fails
        https://bugs.webkit.org/show_bug.cgi?id=54964

        Move WebCore resource file to QtWebKit since they are referred in WebKit.

        * WebCore.pro:

2011-02-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/8762042> and https://bugs.webkit.org/show_bug.cgi?id=54514
        API to view and delete Application Cache data by origin.

        Implement these to be used by WK2 API:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::getOriginsWithCache):
        (WebCore::ApplicationCacheStorage::deleteEntriesForOrigin):

2011-02-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Manage MarkedBlocks in a linked list instead of a vector, so arbitrary removal is O(1)
        https://bugs.webkit.org/show_bug.cgi?id=54999
        
        New WTF header.

        * ForwardingHeaders/wtf/DoublyLinkedList.h: Copied from ForwardingHeaders/wtf/FixedArray.h.

2011-02-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=54991 
        Scrollbar::nativeTheme()->usesOverlayScrollbars() should not be consulted for CSS 
        Scrollbars
        -and corresponding-
        <rdar://problem/9034318>

        Instead of consulting the theme directly, callers should ask the Scrollbar or 
        ScrollableArea if the scrollbars are overlay or not. 

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::setScrollOffsetFromAnimation):
        (WebCore::ScrollableArea::hasOverlayScrollbars):
        * platform/ScrollableArea.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::isOverlayScrollbar):
        * platform/Scrollbar.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::includeVerticalScrollbarSize):
        (WebCore::RenderBox::includeHorizontalScrollbarSize):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::verticalScrollbarWidth):
        (WebCore::RenderLayer::horizontalScrollbarHeight):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::verticalScrollbarWidth):
        * rendering/RenderScrollbar.h:
        (WebCore::RenderScrollbar::isOverlayScrollbar):

2011-02-22  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Redesign the build system
        https://bugs.webkit.org/show_bug.cgi?id=51339

        Move inspector's resource files into the final build step to fix the layout test regression.

        No new tests needed.

        * WebCore.pro: Move inspector's resource files into QtWebKit.pro.

2011-02-22  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] fast/frames/iframe-scale-applied-twice.html fails after r79167
        https://bugs.webkit.org/show_bug.cgi?id=54990

        No new tests. This will cause fast/events/scroll-after-click-on-tab-index.html
        to start passing again.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::visibleContentRect): Update this method to match the original
        in the parent class.

2011-01-17  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] fast/events/scroll-after-click-on-tab-index has been failing on the bots
        https://bugs.webkit.org/show_bug.cgi?id=49177

        * platform/ScrollView.cpp: Remove the GTK+ guards around the implementation
        of platformAddChild and platformRemoveChild. This code can be shared.
        * platform/gtk/MainFrameScrollbarGtk.cpp:
        (MainFrameScrollbarGtk::attachAdjustment): Prevent re-attaching an already attached
        adjustment. Connect the adjustment value-changed signal handler after resetting the
        adjustment. This prevents the rest from stomping on pre-existing WebCore values.
        (MainFrameScrollbarGtk::gtkValueChanged): If the scrollbar is no longer attached to
        a scrollview do not listing for value changes. These scrollbars are defunct.
        * platform/gtk/ScrollViewGtk.cpp: Remove duplicated empty methods.

2011-02-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor InjectedScript : InspectorDOMAgent interaction.
        https://bugs.webkit.org/show_bug.cgi?id=54954

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::toNode):
        (WebCore::JSInjectedScriptHost::inspect):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::toNode):
        (WebCore::V8InjectedScriptHost::inspectCallback):
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::nodeForObjectId):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::inspect):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::focusNode):
        * inspector/InspectorAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::inspect):
        (WebCore::InspectorDOMAgent::pushNodeToFrontend):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.evaluateInTargetWindow):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.getStyles):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.receivedImages):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.pushImageNodes):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMDispatcher.prototype.childNodeRemoved):
        (WebInspector.DOMDispatcher.prototype.inspectElementRequested):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.pushNodeToFrontend):

2011-02-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Part of <rdar://problem/8762042> and https://bugs.webkit.org/show_bug.cgi?id=54514
        API to view and delete Application Cache data by origin.

        Stub these out for now:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::getOriginsWithCache):
        (WebCore::ApplicationCacheStorage::deleteEntriesForOrigin):
        (WebCore::ApplicationCacheStorage::deleteAllEntries): Moved implementation here from WebKit/Mac
        * loader/appcache/ApplicationCacheStorage.h:

        Export the new symbols:
        * WebCore.exp.in:

2011-02-22  Anders Carlsson  <andersca@apple.com>

        Fix debug build.

        * WebCore.exp.in:

2011-02-22  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Anders Carlsson.

        notImplemented() should behave identical in WebCore and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=54449

        No functional change so no new tests.

        * WebCore.xcodeproj/project.pbxproj: Add NotImplemented.h as private header
        to be able to use it in WebKit2.

2011-02-22  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Laszlo Gombos.
        Rubber-stamped by Csaba Osztrogonác.

        [Qt] Redesign the build system
        https://bugs.webkit.org/show_bug.cgi?id=51339

        The patch landed in r79320 didn't contain the cleanup
        which was already addressed in the last attachment.

        No new tests needed.

        * WebCore.pri: Add common LIB and CONFIG options.
        * WebCore.pro: Add accidentally moved sections.

2011-02-22  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, rolling out r79321.
        http://trac.webkit.org/changeset/79321
        https://bugs.webkit.org/show_bug.cgi?id=53146

        Regresses  fast/forms/listbox-typeahead-cyrillic.html and fast
        /spatial-navigation/snav-single-select.html on GTK

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::notifyChildrenSelectionChange):
        (WebCore::AXObjectCache::postPlatformNotification):

2011-02-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Inspector.IDL change. rename attribute notify -> event.
        https://bugs.webkit.org/show_bug.cgi?id=54958

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:

2011-02-22  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Timeline agent should have same lifetime as InspectorAgent
        https://bugs.webkit.org/show_bug.cgi?id=54951

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::releaseFrontendLifetimeAgents):
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::domContentLoadedEventFired):
        (WebCore::InspectorAgent::loadEventFired):
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::startTimelineProfiler):
        (WebCore::InspectorController::stopTimelineProfiler):
        (WebCore::InspectorController::timelineProfilerEnabled):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::retrieveTimelineAgent):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::~InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::setFrontend):
        (WebCore::InspectorTimelineAgent::clearFrontend):
        (WebCore::InspectorTimelineAgent::restore):
        (WebCore::InspectorTimelineAgent::startTimelineProfiler):
        (WebCore::InspectorTimelineAgent::stopTimelineProfiler):
        (WebCore::InspectorTimelineAgent::timelineProfilerStarted):
        (WebCore::InspectorTimelineAgent::didCommitLoad):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::clearRecordStack):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::create):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._toggleTimelineButtonClicked):

2011-02-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: flakyness of inspector tests.
        https://bugs.webkit.org/show_bug.cgi?id=54729

        As far as we have the protocol with sequence numbers we can simplify test harness support
        and drop out chomium specific methods.

        * inspector/CodeGeneratorInspector.pm:
        * inspector/front-end/TestController.js:
        (WebInspector.TestController):
        (WebInspector.TestController.prototype.notifyDone):
        (WebInspector.TestController.prototype.runAfterPendingDispatches):
        (WebInspector.TestController.prototype._evaluateForTestInFrontend):
        * inspector/front-end/inspector.js:
        (WebInspector.dispatch):

2011-02-22  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Combo boxes should emit object:selection-changed even when collapsed
        https://bugs.webkit.org/show_bug.cgi?id=53146

        Emit the selection-changed signals when the menu list value has changed

        Test: platform/gtk/accessibility/combo-box-collapsed-selection-changed.html

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::getListObject): New, return the right list object for
        menu lists and list boxes.
        (WebCore::notifyChildrenSelectionChange): Support menu lists.
        (WebCore::AXObjectCache::postPlatformNotification): Call function
        notifyChildrenSelectionChange for AXMenuListValueChanged.

2011-02-22  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] Redesign the build system
        https://bugs.webkit.org/show_bug.cgi?id=51339

        Part 2.

        Build WebCore as a static library, compile the WebKit API and WebKit2 API
        in a final step and link to WebKit2, WebCore and JSC libraries to fix
        linking issues resulting from stripped away symbols.

        No new tests needed.

        * WebCore.pri: Add needed rules for handling the static library.
        * WebCore.pro: Reorganize API and linker options to QtWebKit.pro.

2011-02-22  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] navigation does not work when inspector is opened.
        https://bugs.webkit.org/show_bug.cgi?id=54947

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::loadFromCookie):
        * inspector/InspectorState.h:

2011-02-15  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Built-in HTML5 <audio> (and sometimes <video>) UI doesn't update playhead location or time displays
        https://bugs.webkit.org/show_bug.cgi?id=46142

        Push a LayoutStateMaintainer in RenderMedia::layout() before calling layout() on the
        container elements.  This is necessary because, during layout(), the child renderers
        query the current LayoutState to determine where they will be repainting.  If a new
        LayoutState is not pushed here, child renderers will attempt to repaint relative to
        their grandparent's origin instead of their parents', and repaint operations will fail.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::layout):

2011-02-22  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Cleaning: remove a overzealous check for the pointer "files" from Chrome::setToolTip()
        https://bugs.webkit.org/show_bug.cgi?id=54952

        Remove the unnecessary condition from the if(), HTMLInputElement::files() always return
        a valid reference for the input type FileInputType. 

        * page/Chrome.cpp:
        (WebCore::Chrome::setToolTip):

2011-02-21  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: extract source mapping from SourceFrame to DebuggerPresentationModel.
        https://bugs.webkit.org/show_bug.cgi?id=54645

        This is needed to map one script to several source files.

        Test: inspector/debugger/source-frame.html

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/DebuggerPresentationModel.js: Added.
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.breakpointsForSourceName):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointRemoved):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointResolved):
        (WebInspector.DebuggerPresentationModel.prototype._encodeSourceLocation):
        (WebInspector.DebuggerPresentationModel.prototype._actualLocationToSourceLocation):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._breakpointAdded):
        (WebInspector.ScriptsPanel.prototype._breakpointRemoved):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForResource):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForScript):
        (WebInspector.ScriptsPanel.prototype._addSourceFrame):
        (WebInspector.ScriptsPanel.prototype._removeSourceFrame):
        (WebInspector.ScriptsPanel.prototype._sourceFrameLoaded):
        (WebInspector.ScriptsPanel.prototype._clearCurrentExecutionLine):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        (WebInspector.SourceFrameContentProviderForScript.prototype._buildSource):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.get loaded):
        (WebInspector.SourceFrame.prototype._createTextViewer):
        (WebInspector.SourceFrame.prototype._setTextViewerDecorations):
        (WebInspector.SourceFrame.prototype.setExecutionLine):
        (WebInspector.SourceFrame.prototype.clearExecutionLine):
        (WebInspector.SourceFrame.prototype.addBreakpoint):
        (WebInspector.SourceFrame.prototype.removeBreakpoint):
        (WebInspector.SourceFrame.prototype._contextMenu.addConditionalBreakpoint.didEditBreakpointCondition):
        (WebInspector.SourceFrame.prototype._contextMenu.addConditionalBreakpoint):
        (WebInspector.SourceFrame.prototype._findBreakpoint.filter):
        (WebInspector.SourceFrame.prototype._findBreakpoint):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-02-22  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: provide a button to expand inspector toolbar when not all panel buttons fit
        https://bugs.webkit.org/show_bug.cgi?id=54671

        - factored toolbar handling out of inspector.js
        - added toolbar dropdown

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onCreatePanel):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.get toolbarItem):
        * inspector/front-end/Toolbar.js: Added.
        (WebInspector.Toolbar):
        (WebInspector.Toolbar.prototype.resize):
        (WebInspector.Toolbar.prototype.addPanel):
        (WebInspector.Toolbar.prototype._toolbarDragStart):
        (WebInspector.Toolbar.prototype._toolbarDragEnd):
        (WebInspector.Toolbar.prototype._toolbarDrag):
        (WebInspector.Toolbar.prototype._onClose):
        (WebInspector.Toolbar.prototype._setDropdownVisible):
        (WebInspector.Toolbar.prototype._toggleDropdown):
        (WebInspector.Toolbar.prototype._updateDropdownButtonAndHideDropdown):
        (WebInspector.Toolbar.createPanelToolbarItem.onToolbarItemClicked):
        (WebInspector.Toolbar.createPanelToolbarItem):
        (WebInspector.ToolbarDropdown):
        (WebInspector.ToolbarDropdown.prototype.show):
        (WebInspector.ToolbarDropdown.prototype.hide):
        (WebInspector.ToolbarDropdown.prototype.get visible):
        (WebInspector.ToolbarDropdown.prototype._populate):
        (WebInspector.ToolbarDropdown.prototype._onKeyDown):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (#toolbar):
        (.toolbar-item):
        (.toolbar-item.toggleable):
        (.toolbar-item.toggleable.toggled-on):
        (#toolbar-dropdown .toolbar-icon):
        (#toolbar-dropdown .toolbar-label):
        (#toolbar-controls):
        (#toolbar-dropdown-arrow):
        (body.attached #toolbar-dropdown-arrow):
        (#toolbar-dropdown-arrow.dropdown-visible):
        (#toolbar-dropdown-arrow:hover):
        (#toolbar-dropdown-arrow:active):
        (#toolbar-dropdown):
        (body.detached.platform-mac-snowleopard #toolbar-dropdown):
        (#toolbar-dropdown .scrollable-content):
        (#toolbar-dropdown .toolbar-item):
        (#toolbar-dropdown .toolbar-item.toggleable.toggled-on):
        (#toolbar-dropdown .toolbar-item:hover):
        (#toolbar-dropdown .toolbar-item.toggleable.toggled-on:hover):
        (#toolbar-dropdown .toolbar-item:active .toolbar-icon):
        (.scrollable-content):
        (.scrollable-content::-webkit-scrollbar):
        (.scrollable-content::-webkit-resizer):
        (.scrollable-content::-webkit-scrollbar-thumb:vertical):
        (.scrollable-content::-webkit-scrollbar-thumb:vertical:active):
        (.scrollable-content::-webkit-scrollbar-track:vertical):
        (.toolbar-search-item):
        (#search):
        (body.attached #search):
        (#search-results-matches):
        (#close-button-left, #close-button-right):
        (.close-left):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.set attached):
        (WebInspector.addPanel):
        (WebInspector.windowResize):

2011-02-22  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] make distcheck fails
        https://bugs.webkit.org/show_bug.cgi?id=54943

        Added new headers and removed references to deleted files.

        * GNUmakefile.am:

2011-02-21  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: make DOM storage and Database agents have the same lifetime as InspectorAgent
        https://bugs.webkit.org/show_bug.cgi?id=54891

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::createFrontendLifetimeAgents):
        (WebCore::InspectorAgent::releaseFrontendLifetimeAgents):
        (WebCore::InspectorAgent::didCommitLoad):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::instrumentingAgents):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::~InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::setFrontend):
        (WebCore::InspectorDOMStorageAgent::clearFrontend):
        (WebCore::InspectorDOMStorageAgent::selectDOMStorage):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageResourceForId):
        (WebCore::InspectorDOMStorageAgent::didUseDOMStorage):
        (WebCore::InspectorDOMStorageAgent::clearResources):
        * inspector/InspectorDOMStorageAgent.h:
        (WebCore::InspectorDOMStorageAgent::create):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didOpenDatabase):
        (WebCore::InspectorDatabaseAgent::clearResources):
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::~InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::setFrontend):
        (WebCore::InspectorDatabaseAgent::clearFrontend):
        (WebCore::InspectorDatabaseAgent::databaseForId):
        (WebCore::InspectorDatabaseAgent::selectDatabase):
        * inspector/InspectorDatabaseAgent.h:
        (WebCore::InspectorDatabaseAgent::create):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didOpenDatabaseImpl):
        (WebCore::InspectorInstrumentation::didUseDOMStorageImpl):

2011-02-22  Steve Lacey  <sjl@chromium.org>

        Reviewed by Darin Fisher.

        Rename new media statistics apis to better names

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

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::webkitAudioDecodedByteCount):
        (WebCore::HTMLMediaElement::webkitVideoDecodedByteCount):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitDecodedFrameCount):
        (WebCore::HTMLVideoElement::webkitDroppedFrameCount):
        * html/HTMLVideoElement.h:
        * html/HTMLVideoElement.idl:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::decodedFrameCount):
        (WebCore::MediaPlayer::droppedFrameCount):
        (WebCore::MediaPlayer::audioDecodedByteCount):
        (WebCore::MediaPlayer::videoDecodedByteCount):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::decodedFrameCount):
        (WebCore::MediaPlayerPrivateInterface::droppedFrameCount):
        (WebCore::MediaPlayerPrivateInterface::audioDecodedByteCount):
        (WebCore::MediaPlayerPrivateInterface::videoDecodedByteCount):

2011-02-21  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Kent Tamura.

        Bug 54435 - Simplify CSSStyleSelector::canShareStyleWithElement
        https://bugs.webkit.org/show_bug.cgi?id=54435

        Changed the function to a series of early-exit 'if's,
        removed most temporary variables.

        No new tests. (refactoring)

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

2011-02-21  Nico Weber  <thakis@chromium.org>

        Reviewed by James Robinson.

        [chromium] PopupContainer::show() confuses clang's -Woverloaded-virtual
        https://bugs.webkit.org/show_bug.cgi?id=54923

        Rename PopupContainer::show() to showInRect(), to make it obvious it's
        not an override of ScrollView::show().

        No intended functionality change.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::showInRect):
        (WebCore::PopupMenuChromium::show):
        * platform/chromium/PopupMenuChromium.h:

2011-02-21  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by Antti Koivisto.

        Improve the local{SharedStyle,CousinList} algorithm
        https://bugs.webkit.org/show_bug.cgi?id=45507

        This change improves the algorithm to find shared styles: the old
        algorithm would stop the search after the first cousin, even if
        the search threshold is not met. As such, the algorithm would
        systematically miss sharings across second cousins and beyond.
        The new algorithm continues the search, as long as threshold is
        not met. It also separates the threshold for sibling/cousins
        search, from that on the levels of search, which is easier to
        optimize.
        The new algorithm finds up to 30% more sharings on some sites
        (e.g. amazon.com and rakuten.co.jp) with no noticeable slowdown.

        No new test, refactoring only.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::locateCousinList):
        (WebCore::CSSStyleSelector::locateSharedStyle):
        While changing the algorithm, cleaned up the style of those 2 methods
        (use early return, renamed some variables).

        * css/CSSStyleSelector.h:

2011-02-21  Nico Weber  <thakis@chromium.org>

        Reviewed by Adam Barth.

        RenderTableCell::baselinePosition() confuses clang's -Woverloaded-virtual
        https://bugs.webkit.org/show_bug.cgi?id=54922

        RenderTableCell::baselinePosition() has the same name as a virtual
        method in superclass RenderBlock. Rename the subclass method to make
        it clear it's not an attempted override.

        No intended functionality change.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::cellBaselinePosition):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layoutRows):

2011-02-21  Benjamin Kalman  <kalman@chromium.org>

        Reviewed by Ryosuke Niwa.

        Extending selection by a boundary granularity (LineBoundary/ParagraphBoundary/DocumentBoundary) sets incorrect
        start/end of selection for RTL
        https://bugs.webkit.org/show_bug.cgi?id=54724

        On mac, the selection should always grow when extending by a boundary granularity (line/paragraph/document).
        This is achieved by extending from the start for the "left" direction (e.g. pressing left arrow key), or
        extending from the end when for the "right" direction (e.g. pressing right arrow key).

        However, this has a bug for RTL text, which should actually extend from the *end* when extending left (since
        direction is obviously reversed) and likewise extend from the start when extending right.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modify):

2011-02-21  Nico Weber  <thakis@chromium.org>

        Reviewed by Adam Barth.

        ImageDocument::imageChanged() confuses clang's -Woverride-virtual
        https://bugs.webkit.org/show_bug.cgi?id=54924

        Rename ImageDocument::imageChanged() to imageUpdated() to make clear
        that it's not an override of CachedResourceClient::imageChanged().

        * html/ImageDocument.cpp:
        (WebCore::ImageDocumentParser::appendBytes):
        (WebCore::ImageDocumentParser::finish):
        (WebCore::ImageDocument::imageUpdated):
        * html/ImageDocument.h:

2011-02-21  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Kent Tamura.

        Bug 54934 - Sort the WebCore project file(s)
        https://bugs.webkit.org/show_bug.cgi?id=54934

        No new tests. (no code affected)

        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:

2011-02-21  Nico Weber  <thakis@chromium.org>

        Reviewed by Adam Barth.

        canAccommodateEllipsis() confuses clang's -Woverloaded-virtual
        https://bugs.webkit.org/show_bug.cgi?id=54909

        Rename the overload in RootInlineBox to lineCanAccomodateEllipsis() to
        unconfuse clang. No intended functionality change.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::checkLinesForTextOverflow):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::applyLineClamp):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::lineCanAccommodateEllipsis):
        * rendering/RootInlineBox.h:

2011-02-21  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein.

        Fix for for https://bugs.webkit.org/show_bug.cgi?id=54402
        REGRESSION (r72052): Placeholder text doesn't have the right padding for search fields on Windows

        Test: updated fast/forms/placeholder-position.html and tested manually

        Consider padding and margin for the results and cancel buttons.  This is important for the Windows 
        theme which uses padding to correctly position those buttons.  This change fixes the placeholder 
        position, and also better aligns the results popup list with the actual text you type.

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::clientPaddingLeft):
        (WebCore::RenderTextControlSingleLine::clientPaddingRight):

2011-02-21  Nico Weber  <thakis@chromium.org>

        Reviewed by Kent Tamura.

        GIFImageDecoder::setSize() tries to override the superclass method but fails
        https://bugs.webkit.org/show_bug.cgi?id=54305

        The superclass uses unsigned instead of int for its parameters, so
        GIFImageDecoder::setSize() was an overload, not an override.

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

2011-02-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Deploy EditingStyle more in ApplyStyleCommand and do some cleanup
        https://bugs.webkit.org/show_bug.cgi?id=54528

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::init): Allows style to be a null pointer.
        (WebCore::ApplyStyleCommand::applyInlineStyle): Overrides the value of text-decoration property by that of
        -webkit-text-decorations-in-effect and remove the latter property when present. This allows removeImplicitlyStyledElement
        to ignore -webkit-text-decorations-in-effect. Also uses the return value of EditingStyle::textDirection to determine
        whether or not we need to apply unicode-bidi / direction instead of directly checking the value of unicode-bidi property.
        (WebCore::ApplyStyleCommand::fixRangeAndApplyInlineStyle): Takes EditingStyle* instead of CSSMutableStyleDeclaration*.
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange): Ditto.
        (WebCore::ApplyStyleCommand::removeStyleFromRunBeforeApplyingStyle): Ditto.
        (WebCore::ApplyStyleCommand::removeCSSStyle): Ditto.
        (WebCore::ApplyStyleCommand::highestAncestorWithConflictingInlineStyle): Ditto.
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode): Ditto.
        (WebCore::ApplyStyleCommand::removeInlineStyle): Ditto; no longer collapse text decoration properties because
        ApplyStyleCommand::applyInlineStyle already does it.
        * editing/ApplyStyleCommand.h:
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::textDirection): Exits early when m_mutableStyle is null.
        (WebCore::EditingStyle::collapseTextDecorationProperties): Extracted from ApplyStyleCommand::removeInlineStyle.
        * editing/EditingStyle.h:

2011-02-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler and Alexey Proskuryakov.

        <http://webkit.org/b/54919> / <rdar://problem/7689300> WebCore should retrieve unclamped frame delays from ImageIO

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::frameDurationAtIndex): Look for the unclamped frame delay in the
        frame properties dictionary and use that if it exists. If it does not exist in the
        dictionary then fall back to using the clamped frame delay.

2011-02-21  James Kozianski  <koz@chromium.org>

        Reviewed by Kent Tamura.

        Causes elements to be unfocusable after tabindex property is removed.
        https://bugs.webkit.org/show_bug.cgi?id=54727

        Test: fast/html/tabindex-removal.html

        * dom/Node.cpp:
        (WebCore::Node::clearTabIndexExplicitly):
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::clearTabIndexExplicitly):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):

2011-02-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/8995483> Remove stubs of unneeded NSURLAuthenticationChallengeSender methods

        * platform/network/mac/AuthenticationMac.mm: Remove the stubs that are no longer needed.

2011-02-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Overhang areas need to be invalidated on scroll
        <rdar://problem/9032194>
        https://bugs.webkit.org/show_bug.cgi?id=54917

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        We need to explicitly invalidate the overhang areas when we scroll the contents
        of a ScrollView, since they could contain arbitrary content that cannot be blitted.

2011-02-21  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Stephanie Lewis.

        Fix the Leopard Debug build by incorporating the RenderSVGAllInOne.cpp

        No new tests required.

        * WebCore.xcodeproj/project.pbxproj:

2011-02-21  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Darin Adler.

        Remove global initializer in CookieStorageCFNet.cpp
        https://bugs.webkit.org/show_bug.cgi?id=54905

        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::currentCookieStorage):
        (WebCore::setCurrentCookieStorage):
        (WebCore::setCookieStoragePrivateBrowsingEnabled):

2011-02-18  Jer Noble  <jer.noble@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Media document videos play only sound, no video (affects trailers.apple.com)
        https://bugs.webkit.org/show_bug.cgi?id=54771

        Now that video is accelerated, we no longer need to special case
        video playing within a media document.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::preferredRenderingMode):
        (WebCore::MediaPlayerPrivateQTKit::supportsAcceleratedRendering):

2011-02-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Roben.

        REGRESSION (WebKit2): HTTP requests time out after 60 seconds
        https://bugs.webkit.org/show_bug.cgi?id=54755
        <rdar://problem/9006592>

        No new tests - it won't be great to have a test that runs for a minute.

        It's now possible to set a default timeout to be used at ResourceRequest creation. If one
        hasn't been set, ResourceRequest will behave as before (use NSURLRequest default on Mac,
        or use INT_MAX on other platforms).

        * WebCore.exp.in:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::defaultTimeoutInterval): Get the ResourceRequest notion of
        default timeout interval (may be 0 if using NSURLRequest default).
        (WebCore::ResourceRequestBase::setDefaultTimeoutInterval): Set the static member variable.
        (WebCore::ResourceRequestBase::updatePlatformRequest): Added an assertion that resource
        request is updated. Plaform code often calls updateResourceRequest() indirectly from this
        function, and that must obviously be a no-op.
        (WebCore::ResourceRequestBase::updateResourceRequest): Added an assertion in the opposite
        direction.
        * platform/network/ResourceRequestBase.h: Changed "unspecifiedTimeoutInterval" to
        "defaultTimeoutInterval". It has been used as default by most platforms anyway.
        (WebCore::ResourceRequestBase::ResourceRequestBase):

        * platform/network/mac/ResourceRequestMac.mm: (WebCore::ResourceRequest::doUpdatePlatformRequest):
        Now zero is the magic value, not INT_MAX. We'll use NSURLRequest default if neither
        setTimeoutInterval() nor setDefaultTimeoutInterval() has been called.

2011-02-21  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] editing/pasteboard/dataTransfer-setData-getData.html fails
        https://bugs.webkit.org/show_bug.cgi?id=54895

        Correct the GTK+ clipboard implementation to know that "text" is an alias
        for "text/html" data. This corrects the failing test.

        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::dataObjectTypeFromHTMLClipboardType): Accept "text" as well as "Text".
        (WebCore::ClipboardGtk::types): Advertise "text" as well as "Text".

2011-02-21  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        ProcessingInstruction should provide a way to know if it is of CSS type.
        https://bugs.webkit.org/show_bug.cgi?id=54868

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::ProcessingInstruction):
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::setCSSStyleSheet):
        * dom/ProcessingInstruction.h:
        (WebCore::ProcessingInstruction::isCSS):

2011-02-21  Simon Fraser  <simon.fraser@apple.com>

        Put JSDOMImplementationCustom.cpp where it belongs in the project.

        * WebCore.xcodeproj/project.pbxproj:

2011-02-21  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 54894 - Make inheritance structure described by ClassInfo match C++ class hierarchy.

        The ClassInfo objects describe an inheritance hierarchy, with each ClassInfo instance
        containing a pointer to its parent class. These links should reflect the inheritance
        hierarchy of C++ classes below JSObject. For the large part it does, but in some cases
        entries in the C++ hierarchy are skipped over. This presently likely doesn't matter,
        since intervening C++ classes may not have ClassInfo - but would be a potential bug
        were ClassInfo were to be added.

        * bindings/js/JSAudioConstructor.cpp:
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSImageConstructor.cpp:
        * bindings/js/JSOptionConstructor.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/objc/objc_runtime.mm:
        * bridge/runtime_object.cpp:

2011-02-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: navigation does not work after reopening frontend.
        https://bugs.webkit.org/show_bug.cgi?id=54879

        Test: http/tests/inspector-enabled/open-close-open.html

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::setFrontend):
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::unmute):
        * inspector/InspectorState.h:

2011-02-21  Adam Roben  <aroben@apple.com>

        Protect the PluginView when evaluating javascript: URLs

        Fixes <http://webkit.org/b/54884> <rdar://problem/9030864>
        plugins/get-url-with-javascript-destroying-plugin.html crashing on Windows since it was
        added

        Reviewed by Sam Weinig.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::performRequest): Protect the PluginView, not just its parent frame,
        when evaluating javascript: URLs.

2011-02-21  Martin Robinson  <mrobinson@igalia.com>

        Fix GTK+ build after r79223.

        * GNUmakefile.am: Add file missing from the source list.

2011-02-14  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: audits should not warn about gzip compression for 304s
        https://bugs.webkit.org/show_bug.cgi?id=54343

        Do not run compression-related audits on 304 resources.
        Drive-by: handle multi-encoding resources (Content-Encoding: sdhc,gzip) correctly.

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.GzipRule.prototype.doRun):
        (WebInspector.AuditRules.GzipRule.prototype._isCompressed):

2011-02-08  Anton Muhin  <antonm@chromium.org>

       Reviewed by Adam Barth and Alexey Proskuryakov.

       Propagate security origin of parent document into HTML documents created with DOMImplementation
       https://bugs.webkit.org/show_bug.cgi?id=53611

       This restores invariant that JS wrappers residing in the same JS context should come
       from the same security origin.

       Absence of regressions is covered by the current tests.  Different security origin of
       DOMImplementation is difficult to check with layout tests as DOMImplementation
       resides in the same JS context as parent document and therefore there are no security origin checks.
       This is observable however in C++.

       * Android.jscbindings.mk:
       * CMakeLists.txt:
       * WebCore.gypi:
       * WebCore.pro:
       * WebCore.vcproj/WebCore.vcproj:
       * WebCore.xcodeproj/project.pbxproj:
       * bindings/v8/V8GCController.cpp:
       (WebCore::NodeGrouperVisitor::visitDOMWrapper):
       * dom/DOMImplementation.cpp:
       (WebCore::DOMImplementation::DOMImplementation):
       (WebCore::DOMImplementation::createDocument):
       * dom/DOMImplementation.h:
       (WebCore::DOMImplementation::create):
       (WebCore::DOMImplementation::documentDestroyed):
       (WebCore::DOMImplementation::parentDocument):
       * dom/DOMImplementation.idl:
       * dom/Document.cpp:
       (WebCore::Document::~Document):
       (WebCore::Document::implementation):
       * dom/Document.h:

2011-02-21  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Optimize editing updates in gutter panel
        https://bugs.webkit.org/show_bug.cgi?id=54866

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.set startEditingListener):
        (WebInspector.TextViewer.prototype.set endEditingListener):
        (WebInspector.TextViewer.prototype.endUpdates):
        (WebInspector.TextViewer.prototype._enterInternalTextChangeMode):
        (WebInspector.TextViewer.prototype._exitInternalTextChangeMode):
        (WebInspector.TextEditorChunkedPanel.prototype._chunkNumberForLine):
        (WebInspector.TextEditorGutterPanel.prototype._expandChunks):
        (WebInspector.TextEditorGutterPanel.prototype.textChanged):
        (WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):

2011-02-21  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Audits] Image dimensions in inline style not checked
        https://bugs.webkit.org/show_bug.cgi?id=54738

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):

2011-02-21  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: create and destroy DOM agent along with InspectorAgent
        https://bugs.webkit.org/show_bug.cgi?id=54875

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InstrumentingAgents.h: Added. Agents that want to instrument WebCore should register themselve
        on this object.
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::~InstrumentingAgents):
        (WebCore::InstrumentingAgents::inspectorBrowserDebuggerAgent):
        (WebCore::InstrumentingAgents::setInspectorBrowserDebuggerAgent):
        (WebCore::InstrumentingAgents::inspectorConsoleAgent):
        (WebCore::InstrumentingAgents::setInspectorConsoleAgent):
        (WebCore::InstrumentingAgents::inspectorDOMAgent):
        (WebCore::InstrumentingAgents::setInspectorDOMAgent):
        (WebCore::InstrumentingAgents::inspectorDOMStorageAgent):
        (WebCore::InstrumentingAgents::setInspectorDOMStorageAgent):
        (WebCore::InstrumentingAgents::inspectorDatabaseAgent):
        (WebCore::InstrumentingAgents::setInspectorDatabaseAgent):
        (WebCore::InstrumentingAgents::inspectorDebuggerAgent):
        (WebCore::InstrumentingAgents::setInspectorDebuggerAgent):
        (WebCore::InstrumentingAgents::inspectorProfilerAgent):
        (WebCore::InstrumentingAgents::setInspectorProfilerAgent):
        (WebCore::InstrumentingAgents::inspectorResourceAgent):
        (WebCore::InstrumentingAgents::setInspectorResourceAgent):
        (WebCore::InstrumentingAgents::inspectorRuntimeAgent):
        (WebCore::InstrumentingAgents::setInspectorRuntimeAgent):
        (WebCore::InstrumentingAgents::inspectorStorageAgent):
        (WebCore::InstrumentingAgents::setInspectorStorageAgent):
        (WebCore::InstrumentingAgents::inspectorTimelineAgent):
        (WebCore::InstrumentingAgents::setInspectorTimelineAgent):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::createFrontendLifetimeAgents):
        (WebCore::InspectorAgent::releaseFrontendLifetimeAgents):
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::domContentLoadedEventFired):
        (WebCore::InspectorAgent::loadEventFired):
        * inspector/InspectorAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::~InspectorCSSAgent):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::clearConsoleMessages):
        (WebCore::InspectorConsoleAgent::clearFrontend):
        (WebCore::InspectorConsoleAgent::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorConsoleAgent::setMonitoringXHREnabled):
        (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.cpp: DOM agent now lives even when the front-end is not attached.
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::setFrontend): Add DOM agent to the set of active agents when the front-end
        is attached.
        (WebCore::InspectorDOMAgent::clearFrontend):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):

2011-02-21  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][V8]REGRESSION(r79157): Fix build
        https://bugs.webkit.org/show_bug.cgi?id=54871

        * bridge/npruntime_internal.h: Add one more undef because of evil X11 macro.

2011-02-16  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Mihai Parparita.

        [V8] SerializedScriptValue: fix JS exception handling.
        https://bugs.webkit.org/show_bug.cgi?id=54555

        Added checks for exceptions and empty handles:
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::Serializer::Serializer):
        (WebCore::Serializer::serialize):
        (WebCore::Serializer::checkException):
        (WebCore::Serializer::reportFailure):
        (WebCore::Serializer::ArrayState::advance):
        (WebCore::Serializer::AbstractObjectState::AbstractObjectState):
        (WebCore::Serializer::AbstractObjectState::advance):
        (WebCore::Serializer::push):
        (WebCore::Serializer::handleError):
        (WebCore::Serializer::newObjectState):
        (WebCore::Serializer::doSerialize):
        (WebCore::SerializedScriptValue::SerializedScriptValue):

2011-02-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Add selectionchange event
        https://bugs.webkit.org/show_bug.cgi?id=45712

        Added the support for asynchronous selectionchange event, which is fired whenever selection is changed.
        This event is not cancelable and does not bubble. An event listener can be attached to a document by
        body element's onselectionchange attribute or via document's onselectionchange property.

        Note that WebKit's implementation fires the event asynchronously whereas Internet Explorer's implementation
        fires it synchronously. This implies that a script that modify selection (e.g. via selection's addRange)
        will not observe the event before the control returns to JavaScript.

        See also: http://msdn.microsoft.com/en-us/library/ms536968(VS.85).aspx

        Tests: fast/events/selectionchange-iframe.html
               fast/events/selectionchange-user-initiated.html

        * dom/Document.cpp:
        (WebCore::Document::enqueueDocumentEvent): Added.
        * dom/Document.h: Added selectionchange event listener.
        * dom/Document.idl: Added onselectionchagne attribute.
        * dom/EventNames.h: Added selectionchange
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection): Fires selectionchange event.
        * html/HTMLAttributeNames.in: Added onselectionchange.
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute): Handles onselectionchange attribute.

2011-02-21  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: protocol error messages are dumping incorrectly in Layout tests.
        https://bugs.webkit.org/show_bug.cgi?id=54859

        * inspector/CodeGeneratorInspector.pm:

2011-02-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: generate protocol documentation based on IDL.
        https://bugs.webkit.org/show_bug.cgi?id=54822

        * inspector/CodeGeneratorInspector.pm:

2011-02-21  Andoni Morales Alastruey  <amorales@flumotion.com>

        Reviewed by Martin Robinson.

        [GStreamer] Add URI queries support in webkitwebsrc
        https://bugs.webkit.org/show_bug.cgi?id=54627

        This allow replying to URI queries from downstream elements
        with the uri currently set in the source element.

        No new tests, this feature is dedicated to internal GStreamer use,
        such as the upcoming HTTP Live Streaming element.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcQuery):

2011-02-21  Andoni Morales Alastruey  <amorales@flumotion.com>

        Reviewed by Martin Robinson.

        [GStreamer] Add 'location' property in webkitwebsrc
        https://bugs.webkit.org/show_bug.cgi?id=54628

        No new tests, this feature is dedicated to internal GStreamer use,
        such as the upcoming HTTP Live Streaming element.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_class_init):
        (webKitWebSrcSetProperty):
        (webKitWebSrcGetProperty):

2011-02-17  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Rename Position::node() to Position::deprecatedNode()
        https://bugs.webkit.org/show_bug.cgi?id=54622

        Done the rename. All calls to node() are replaced by calls to deprecatedNode() except when
        calls were of the form node()->document() and node()->inDocument() in which case they were
        replaced by anchorNode()->document() and anchorNode()->inDocument() respectively.

        * WebCore.exp.in: Added Position::containerNode.

        The rest abbreviated for simplicity. Please see svn log.

2011-02-20  Gavin Barraclough  <barraclough@apple.com>

        Build fix (remove includes).

        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSLocationCustom.cpp:

2011-02-20  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=54839
        Remove PrototypeFunction, NativeFunctionWrapper, and GlobalEvalFunction.

        Historically, Native functions used to be represented by PrototypeFunctions, however
        since introducing call optimizations to the JIT this has used JSFunctions for host
        calls too. At the point this change was made, the interpreter continued to use
        PrototypeFunctions, however since fallback from the JIT to interpreter was introduced
        the interpreter has had to be able to run using host functions represented using
        JSFunctions - leading to an unnecessary and redundant divergence in behaviour between 
        interpreter only builds, and situations where the JIT has fallen back to interpreting.

        NativeFunctionWrapper only existed to select between PrototypeFunction and JSFunction
        for wrappers for host functions, and as such can also be removed.

        GlobalEvalFunction is a redundant wrapper that happens to be derived from
        PrototypeFunction. It existed to hold a reference to the global object - but since all
        functions how derive from JSObjectWithGlobalObject, this no longer requires an
        additional class to provide this functionality.

        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSLocationCustom.cpp:
            Removed use of redundant classes.

2011-02-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79169.
        http://trac.webkit.org/changeset/79169
        https://bugs.webkit.org/show_bug.cgi?id=54846

        Made unexpected results for tests without CJK characters
        (Requested by tkent on #webkit).

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        (WebCore::FontPlatformData::orientation):
        * platform/graphics/skia/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):

2011-02-20  Chun-Lung Huang  <alvincl.huang@gmail.com>

        Reviewed by Kent Tamura.

        On Chromium Windows, glyphs in vertical text tests are rotated 90
        degrees clockwise. https://bugs.webkit.org/show_bug.cgi?id=51450

        This platform dependent patch makes Chromium Windows show the
        vertical writing text correctly. Job was done by adding a prefix '@'
        in front of the font family name (Windows Only). No new tests added.

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        (WebCore::FontPlatformData::orientation):
        * platform/graphics/skia/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):

2011-02-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dirk Schulze.

        REGRESSION (r73369-r73405): transform animation interpolates incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=54793
        
        After the refactoring in r73380, the ending state for some types of
        accelerated animations was computed incorrectly, because the TransformationMatrix
        wasn't reset to identity before the ending value transformations were applied.
        
        Fix by cleaning up the code to use explicit, separate values for
        starting and ending values. Only matrix-type animations had this
        issue, but cleaned up other clauses similarly.

        Test: animations/3d/matrix-transform-type-animation.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setTransformAnimationEndpoints):

2011-02-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9028929> REGRESSION (r75897): Scaling applied twice to an iframe with a transformed ancestor

        Test: fast/frames/iframe-scale-applied-twice.html

        * page/FrameView.cpp:
        (WebCore::FrameView::create): Set the initial bounds of the view to match the
        frame size.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRect): Based on bounds, not frame size.
        (WebCore::ScrollView::updateScrollbars): Ditto.
        (WebCore::ScrollView::setFrameRect): Moved code that really handles bounds size
        change to setBoundsSize().
        (WebCore::ScrollView::setBoundsSize): Added.
        (WebCore::ScrollView::setInitialBoundsSize): Added. Sets the bounds size but does
        not update anything.
        (WebCore::ScrollView::frameRectsChanged): Based on bounds, not frame size.
        (WebCore::ScrollView::scrollbarCornerPresent): Ditto.
        * platform/ScrollView.h:
        (WebCore::ScrollView::boundsSize): Added this getter.
        * platform/Widget.h:
        (WebCore::Widget::resize): Set the bounds size to the frame size.
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint): Fixed an error in the indirect drawing code
        path where the buffer rect was resized to capture only the damaged part, but was
        still drawn in the original location.

2011-02-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Eric Seidel.

        Tighten up access permissions by using libxslt API
        https://bugs.webkit.org/show_bug.cgi?id=52688
        <rdar://problem/8909191> 

        * xml/XSLTProcessorLibxslt.cpp: (WebCore::XSLTProcessor::transformToString): We are only
        interested in a string result, so let libxslt know about that.

2011-02-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79104.
        http://trac.webkit.org/changeset/79104
        https://bugs.webkit.org/show_bug.cgi?id=54835

        Might have caused flaky canaries (Requested by tonyg-cr on
        #webkit).

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::canTakeNextToken):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::isLayoutTimerActive):
        * html/parser/HTMLParserScheduler.h:
        (WebCore::HTMLParserScheduler::checkForYieldBeforeToken):
        * page/FrameView.h:

2011-02-20  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG animation - analyze attribute type for animation
        https://bugs.webkit.org/show_bug.cgi?id=54542

        Analyze animated attribute type to determine the kind of animation. Removed enum PropertyType and replace it
        with AnimatedAttributeType instead. More cleanup of the animation code.
        Added missing fillAttributeToPropertyTypeMap() for SVGGElement.

        Use QualifiedName instead of AtomicStrings for attribute names. This makes it easier to handle animated attributes
        from a different namespace like xlink:href. The rest of the SVG code is using QualifiedNames as well.

        No change of functionality on the animation code. The changes for the <g>-element affect animateTransform. Sadly
        animateTransform is not supported by our SVG animation test script at the moment. Can still be tested manually
        with the W3C test suite in trunk.

        The change on SVGUseElement gets covered by animate-elem-39-t.svg

        Test: svg/animations/animate-dynamic-update-attributeName.html

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::SVGAnimateElement):
        (WebCore::SVGAnimateElement::hasValidAttributeType):
        (WebCore::SVGAnimateElement::determineAnimatedAttributeType):
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        (WebCore::inheritsFromProperty):
        (WebCore::SVGAnimateElement::calculateFromAndToValues):
        (WebCore::SVGAnimateElement::calculateFromAndByValues):
        (WebCore::SVGAnimateElement::resetToBaseValue):
        (WebCore::SVGAnimateElement::applyResultsToTarget):
        (WebCore::SVGAnimateElement::calculateDistance):
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::hasValidAttributeType):
        (WebCore::parsePoint):
        (WebCore::SVGAnimateMotionElement::resetToBaseValue):
        (WebCore::SVGAnimateMotionElement::calculateAnimatedValue):
        (WebCore::SVGAnimateMotionElement::calculateDistance):
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::hasValidAttributeType):
        (WebCore::SVGAnimateTransformElement::determineAnimatedAttributeType):
        (WebCore::SVGAnimateTransformElement::resetToBaseValue):
        (WebCore::SVGAnimateTransformElement::calculateAnimatedValue):
        (WebCore::SVGAnimateTransformElement::calculateFromAndByValues):
        (WebCore::SVGAnimateTransformElement::applyResultsToTarget):
        (WebCore::SVGAnimateTransformElement::calculateDistance):
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimationElement.cpp:
        (WebCore::parseKeyTimes):
        (WebCore::parseKeySplines):
        (WebCore::SVGAnimationElement::isTargetAttributeCSSProperty):
        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue):
        (WebCore::SVGAnimationElement::calculateKeyTimesForCalcModePaced):
        (WebCore::solveEpsilon):
        (WebCore::SVGAnimationElement::calculatePercentFromKeyPoints):
        (WebCore::SVGAnimationElement::currentValuesFromKeyPoints):
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
        (WebCore::SVGAnimationElement::startedActiveInterval):
        * svg/SVGAnimationElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::fillAttributeToPropertyTypeMap):
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::attributeToPropertyTypeMap):
        (WebCore::SVGGElement::fillAttributeToPropertyTypeMap): Added to fill the animated attribute map for this element.
        * svg/SVGGElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::fillAttributeToPropertyTypeMap): Changed attribute type to AnimatedString for xlink:href.
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::baseValueFor):
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SMILTimeContainer.h:
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::SVGSMILElement):
        (WebCore::constructQualifiedName): Create a QualifiedName from a attribute name.
        (WebCore::SVGSMILElement::insertedIntoDocument): Update local varaible of attribute name.
        (WebCore::SVGSMILElement::removedFromDocument): Ditto.
        (WebCore::SVGSMILElement::attributeChanged): Ditto.
        * svg/animation/SVGSMILElement.h:
        (WebCore::SVGSMILElement::attributeName):

2011-02-20  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Add missing UNUSED_PARAM() when !ENABLE(FULLSCREEN_API)

        Not reviewed.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForFullScreen):

2011-02-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement PlatformKeyboardEvent::getCurrentModifierState()
        https://bugs.webkit.org/show_bug.cgi?id=52880

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState):

2011-02-19  Andreas Kling  <kling@webkit.org>

        Reviewed by Oliver Hunt.

        DragController should use Color::serialized() when passing colors to CSSStyleDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=54545

        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):

2011-02-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add phase in addition to momentumPhase to platform wheel events
        Part of <rdar://problem/8945362>

        Rename existing phase to momentumPhase.

        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        (WebCore::PlatformWheelEvent::momentumPhase):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        (WebCore::ScrollAnimatorMac::smoothScrollWithEvent):
        * platform/mac/WheelEventMac.mm:
        (WebCore::momentumPhaseForEvent):
        (WebCore::phaseForEvent):
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2011-02-19  Gavin Barraclough  <barraclough@apple.com>

        Qt build fix.

        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::createStructure):

2011-02-19  Gavin Barraclough  <barraclough@apple.com>

        Qt build fix.

        * bridge/qt/qt_instance.cpp:
        * bridge/qt/qt_pixmapruntime.cpp:

2011-02-19  Gavin Barraclough  <barraclough@apple.com>

        Qt build fix.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getMethod):
        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapInstance::getMethod):

2011-02-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 54786 - Devirtualize JSCell::classInfo()

        Instead of making a virtual function call, add a pointer to the ClassInfo
        onto Structure.

        This removes a virtual function call, and paves the way towards removing all
        the createStructure methods, and StructureFlags/AnonymousSlotCount properties
        (these should be able to move onto ClassInfo).

        Calls to Structure::create must now pass a pointer to the ClassInfo for the
        structure. All objects now have a ClassInfo pointer, non-object cell types
        still do not.

        Changes are most mechanical, involving three steps:
            * Remove virtual classInfo() methods.
            * Add &s_info parameter to calls to Structure::create.
            * Rename ClassInfo static members on classes from 'info' to 's_info',
              for consistency.

        * WebCore.exp.in:
        * bindings/js/JSAudioConstructor.cpp:
        * bindings/js/JSAudioConstructor.h:
        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSGeolocationCustom.cpp:
        * bindings/js/JSImageConstructor.cpp:
        * bindings/js/JSImageConstructor.h:
        * bindings/js/JSImageDataCustom.cpp:
        * bindings/js/JSOptionConstructor.cpp:
        * bindings/js/JSOptionConstructor.h:
        * bindings/js/JSWorkerContextBase.cpp:
        * bindings/js/JSWorkerContextBase.h:
        * bindings/js/SerializedScriptValue.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/CRuntimeObject.cpp:
        * bridge/c/CRuntimeObject.h:
        * bridge/c/c_instance.cpp:
        * bridge/jni/jsc/JNIUtilityPrivate.cpp:
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        * bridge/jni/jsc/JavaRuntimeObject.cpp:
        * bridge/jni/jsc/JavaRuntimeObject.h:
        * bridge/jsc/BridgeJSC.cpp:
        * bridge/objc/ObjCRuntimeObject.h:
        * bridge/objc/ObjCRuntimeObject.mm:
        * bridge/objc/objc_instance.mm:
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        * bridge/runtime_array.cpp:
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        * bridge/runtime_object.h:

2011-02-19  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Martin Robinson.

        [cairo][canvas] Drawing from/into float rectangles with width or height in range 0 to 1 fails
        https://bugs.webkit.org/show_bug.cgi?id=54491

        When width or height in float rectangle are in range (0, 0.5) or (-0.5, 0)
        and would round to 0, alter the behaviour to ensure that width or height are
        at least 1 pixel in size in these cases.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels):

2011-02-19  Dan Bernstein  <mitz@apple.com>

        LLVM Compiler build fix.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::blurLayerImage): Eliminated a file static that generated
        a global initializer since the compiler does not evaluate sqrtf at compile time.

2011-02-19  Brian Ryner  <bryner@chromium.org>

        Reviewed by Adam Barth.

        Replace the #include of DocumentLoader.h in Document.h with a
        forward declaration, and add a missing #include now that this
        transitive include is gone.
        https://bugs.webkit.org/show_bug.cgi?id=50489

        No new tests required.

        * bindings/ScriptControllerBase.cpp:
        * dom/Document.h:

2011-02-19  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Antonio Gomes.

        [EFL] Remove WebCore::currentTime()
        https://bugs.webkit.org/show_bug.cgi?id=53886

        There is no declaration for it and we use WTF::currentTime() everywhere.

        * platform/efl/SystemTimeEfl.cpp:

2011-02-19  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Move KeygenWinCE from wince into win directory
        https://bugs.webkit.org/show_bug.cgi?id=54804

        Move this file into the win directory, since it can be used on all windows platforms.

        * CMakeListsWinCE.txt:
        * platform/win/SSLKeyGeneratorWin.cpp: Renamed from platform/wince/KeygenWinCE.cpp.

2011-02-19  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Make FileChooserWin.cpp more portable and use it on WinCE
        https://bugs.webkit.org/show_bug.cgi?id=54803

        * CMakeListsWinCE.txt:
        * platform/win/FileChooserWin.cpp:
        (WebCore::FileChooser::basenameForWidth):
        * platform/wince/FileChooserWinCE.cpp: Removed.

2011-02-19  James Simonsen  <simonjam@chromium.org>

        Reviewed by Adam Barth.

        Make ScriptElement match the HTML5 spec
        https://bugs.webkit.org/show_bug.cgi?id=54676

        This implements the "prepare a script" section of the HTML5 spec in ScriptElement::prepareScript().
        http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#prepare-a-script

        There are a couple of things missing from the spec that would be new functionality. These will be added later.
        - Support for async=false
        - Empty src attribute should dispatch an error.

        There are a couple of slight behavioral changes to match the spec.
        - An XHTML script that is loaded then copied will not fire load on the copy.
        - If onbeforeload moves the script to a different document, then it will not try to execute again because wasAlreadyStarted is true.

        The parsers were updated to use the new API, but not rewritten to look like the spec. That will be done separately.

        Test: All existing tests.

        * dom/ScriptElement.cpp: Rewritten to match HTML5 spec.
        (WebCore::ScriptElement::ScriptElement):
        (WebCore::ScriptElement::insertedIntoDocument): Logic moved to prepareScript.
        (WebCore::ScriptElement::childrenChanged): Logic moved to prepareScript.
        (WebCore::ScriptElement::handleSourceAttribute): Logic moved to prepareScript.
        (WebCore::isLegacySupportedJavaScriptLanguage): Added to support old script types in layout tests.
        (WebCore::ScriptElement::isScriptTypeSupported): Derived from old shouldExecuteAsJavaScript().
        (WebCore::ScriptElement::prepareScript): START HERE. Main change. Should read exactly like HTML5's "prepare a script." Legacy type support needed for layout tests using XML parser.
        (WebCore::ScriptElement::requestScript): Most logic moved to prepareScript. Check security settings here.
        (WebCore::ScriptElement::executeScript): Combined evaluateScript() and executeScript() from old code. Logic moved to prepareScript.
        (WebCore::ScriptElement::stopLoadRequest): Ignore parser executed scripts.
        (WebCore::ScriptElement::execute): Renamed executeScript.
        (WebCore::ScriptElement::notifyFinished): We should only listen for non-parser executed scripts.
        (WebCore::ScriptElement::ignoresLoadRequest): New variable names.
        (WebCore::ScriptElement::childrenAreCommentsOrEmptyText): Added for HTML5 compliance.
        (WebCore::ScriptElement::scriptCharset): Use HTML5 variables.
        * dom/ScriptElement.h:
        (WebCore::ScriptElement::willBeParserExecuted): Added.
        (WebCore::ScriptElement::readyToBeParserExecuted): Added.
        (WebCore::ScriptElement::willExecuteWhenDocumentFinishedParsing): Added.
        (WebCore::ScriptElement::cachedScript): prepareScript() is the only place that should load scripts. This accessor lets the parsers listen for when loads finish.
        (WebCore::ScriptElement::isParserInserted): Added.
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::endElementNs): Should behave the same. Offloads much of its work to prepareScript().
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parseEndElement): Identical to libxml2 changes.
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::insertedIntoDocument): No longer needs url.
        (WebCore::HTMLScriptElement::hasSourceAttribute): Added.
        * html/HTMLScriptElement.h:
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::requestPendingScript): Requesting scripts offloaded to ScriptElement.
        (WebCore::HTMLScriptRunner::runScript): Should behave the same. Offloads much of its work to prepareScript().
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::svgAttributeChanged): New ScriptElement function names.
        (WebCore::SVGScriptElement::insertedIntoDocument): No longer needs url.
        (WebCore::SVGScriptElement::finishParsingChildren): ScriptElement::finishParsingChildren is gone.
        (WebCore::SVGScriptElement::hasSourceAttribute): Added.
        (WebCore::SVGScriptElement::dispatchLoadEvent): New ScriptElement function names.
        * svg/SVGScriptElement.h:

2011-02-19  Marc-Antoine Ruel  <maruel@chromium.org>

        Reviewed by James Robinson.

        Split webcore_rendering off webcore_remaining to reduce its size for WPO builds
        https://bugs.webkit.org/show_bug.cgi?id=54789

        * WebCore.gyp/WebCore.gyp:

2011-02-19  Bill Budge  <bbudge@chromium.org>

        Reviewed by David Levin.

        ThreadableLoaderClient needs willSendRequest method
        https://bugs.webkit.org/show_bug.cgi?id=54688

        No new tests. Exposes no new functionality

        * WebCore.gypi:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::willSendRequest):
        (WebCore::DocumentThreadableLoader::didReceiveData):
        (WebCore::DocumentThreadableLoader::didReceiveCachedMetadata):
        * loader/DocumentThreadableLoaderClient.h: Added.
        (WebCore::DocumentThreadableLoaderClient::isDocumentThreadableLoaderClient):
        (WebCore::DocumentThreadableLoaderClient::willSendRequest):
        * loader/ThreadableLoaderClient.h:
        (WebCore::ThreadableLoaderClient::isDocumentThreadableLoaderClient):

2011-02-19  Charlie Reis  <creis@chromium.org>

        Reviewed by Mihai Parparita.

        Ensure loading has stopped in HistoryController::goToItem
        https://bugs.webkit.org/show_bug.cgi?id=54517

        Avoid stopping all loaders in goToItem for same document navigations
        or pseudo-back-forward URLs.  Make HistoryController::goToItem private
        to force callers to go through Page::goToItem.  Also add a callback to
        FrameLoaderClient to let clients decide whether to stop loading first.

        Test: http/tests/navigation/forward-to-fragment-fires-onload.html

        * loader/EmptyClients.h:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.cpp:
        * loader/HistoryController.h:
        * page/Page.cpp:

2011-02-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Daniel Bates.

        Fix xssAuditor/iframe-injection.html
        https://bugs.webkit.org/show_bug.cgi?id=54591

        We should block the iframe src attribute.  Although this technically
        can't be used to run script, it's a pretty easy vector for stealing
        passwords.

        * html/parser/XSSFilter.cpp:
        (WebCore::XSSFilter::filterTokenInitial):
        (WebCore::XSSFilter::filterIframeToken):
        * html/parser/XSSFilter.h:

2011-02-18  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Let the parser yield for layout before running scripts
        https://bugs.webkit.org/show_bug.cgi?id=54355

        Prior to this patch, the parser would yield to perform a layout/paint before running a
        script only if the script or a stylesheet blocking the script is not loaded yet. Since we
        don't preload scan into the body while parsing the head, typically we'll block on a script
        early in the body that causes us to yield to do the first paint within a reasonable time.

        However, I'm planning to change the PreloadScanner to scan into the body from the head.
        That significantly improves overall load time, but would hurt first paint time because
        fewer scripts would be blocked during parsing and thus wouldn't yield.

        This change causes us to yield before running scripts if we haven't painted yet (regardless
        of whether or not the script is loaded). In addition to allowing the above mentioned
        PreloadScanner change to be implemented without regressing first paint time, this also
        improves first paint time by itself.

        I tested Alexa's top 45 websites using Web Page Replay to control the content and simulate
        bandwidth. This patch improved average first paint time by 1% over an unlimited connection,
        6% over a 1Mbps connection and 11% over a 5Mbps connection. There was no statistically
        signifcant change in page load time.

        Within the pages tested, 33 had no statistically significant change in time to first paint,
        12 improved, and none regressed. Of the improved, some of the standouts from the 1Mbps set
        are: 20% on youtube, 37% on wiki, 27% on ebay, 13% on cnn, 16% on espn, 74% on sohu.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::canTakeNextToken): This is the new yield point.
        (WebCore::HTMLDocumentParser::pumpTokenizer): Remove ASSERT that we are not paused. isPaused
        means that we are waiting for a script. Bug 54574 changed pumpTokenizer() so that it does
        the right thing whether we are just before a token or waiting for a script. Now that we may
        yield before a token or before a script, this may be called while paused.
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::isLayoutTimerActive): Added a FIXME because r52919 changed minimumLayoutDelay()
        to return m_extraLayoutDelay instead of 0 as a minimum. So checking !minimumLayoutDelay()
        no longer works. The fix is to change it to check minimumLayoutDelay() ==
        m_extraLayoutDelay. But this is all the more reason to move this method onto Document. I'll
        do this in a follow up.
        (WebCore::HTMLParserScheduler::checkForYieldBeforeScript): Added.
        * page/FrameView.h:
        (WebCore::FrameView::hasEverPainted): Added.

2011-02-18  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Andreas Kling.

        [Qt]  Button Element is rendered w/ text off-center.
        https://bugs.webkit.org/show_bug.cgi?id=53373

        Test: LayoutTests/fast/forms/button-white-space.html 

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

2011-02-18  Jonathan Backer  <backer@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] Fix leak of texture IDs in compositor.
        https://bugs.webkit.org/show_bug.cgi?id=54750

        No new tests. It is extremely unlikely that this leak would have
        any user visible impact because only a few bytes of space are wasted
        (we're leaking texture IDs, not actual textures) and the space of
        texture IDs is large (32 bits).

       * platform/graphics/chromium/TextureManager.cpp:
        (WebCore::TextureManager::requestTexture):

2011-02-18  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Always display the media controls when requiresFullscreenForVideoPlayback() is true
        https://bugs.webkit.org/show_bug.cgi?id=54308

        For video element, it should have controls when 
        Chrome::requiresFullscreenForVideoPlayback() is true.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::controls):

2011-02-18  Adrienne Walker  <enne@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Use nearest-neighbor filtering for root layer.
        https://bugs.webkit.org/show_bug.cgi?id=54409
        https://bugs.webkit.org/show_bug.cgi?id=54509

        This setting creates more consistent images for LayoutTests and
        prevents small floating point errors in texture coordinates from
        creating off-by-one pixel color differences.

        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::update):

2011-02-18  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Kent Tamura.

        [EFL] Fix coding style errors in RenderThemeEfl.h
        https://bugs.webkit.org/show_bug.cgi?id=54693

        Fix style errors in RenderThemeEfl.h

        * platform/efl/RenderThemeEfl.h:

2011-02-18  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] The localized vendor name for Qt SIS packages should be "Nokia"
        https://bugs.webkit.org/show_bug.cgi?id=54742

        This change was applied in the Qt repository (qt/src/3rdparty/webkit),
        so we should do the same here in QtWebKit.

        Patch by Eckhart Koppen <eckhart.koppen@nokia.com>
        a8a84f1667966acfa093c4be0b7d4b0900ddd3d9:

        The previously used name "Nokia, Qt" was not usable for Nokia
        Content Signing, which only allows "Nokia" as the visible vendor
        name. The unique vendor ID remains as "Nokia, Qt"

        * WebCore.pro:

2011-02-18  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] REGRESSION(r67516) : on www.gmail.com a strange rendering issue appears on the
        menu bar due to flash.
        https://bugs.webkit.org/show_bug.cgi?id=54741

        Only show plugins with a valid size. We then don't involve X11 if there is
        nothing to see anyway.

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

2011-02-18  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Kent Tamura.

        [EFL] Remove GDK dependency.
        https://bugs.webkit.org/show_bug.cgi?id=53978

        Remove GLIB_SUPPORT macro in GDK related code.
        Regardless of GLIB_SUPPORT, getDefaultFontOptions() will works same way.

        * CMakeListsEfl.txt:
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::getDefaultFontOptions):

2011-02-18  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by James Robinson.

        [Chromium] Add elliptical gradient support to GradientSkia
        https://bugs.webkit.org/show_bug.cgi?id=51841

        Covered by existing tests, these need new rebaselines once this patch
        lands for chrome linux, win32

        fast/gradients/css3-color-stop-units.html
        fast/gradients/css3-color-stops.html
        fast/gradients/css3-linear-angle-gradients.html
        fast/gradients/css3-radial-gradients.html
        fast/gradients/css3-radial-gradients2.html
        fast/gradients/css3-radial-gradients3.html
        fast/gradients/css3-repeating-radial-gradients.html

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

2011-02-18  James Robinson  <jamesr@chromium.org>

        Fix typo in boundary test in ASSERT() - test is for an inclusive range, not exclusive.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateTextureIfNeeded):

2011-02-18  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Tiled backing store area is too big.
        Error in area calculcation causes size of backing store
        up to 6 times bigger than viewport with default multipliers.
        https://bugs.webkit.org/show_bug.cgi?id=54587

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::createTiles):

2011-02-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/9018729> Horizontal scroller doesn't 
        appear when loading a page with a Horizontal scrollbar from 
        the back/forward cache.

        This patch adds a new  bool member variable to FrameView to 
        keep track of whether we are loading a page from the back/
        forward cache. If we are, don't suppress scrollbars on 
        first layout.
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::layout):
        * page/FrameView.h:
        (WebCore::FrameView::setIsRestoringFromBackForward):
        (WebCore::FrameView::isRestoringFromBackForward):

2011-02-18  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r78846.

        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::TextRunComponent::TextRunComponent):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawLineForTextChecking):
        (WebCore::GraphicsContext::drawText):
        * platform/wince/FileChooserWinCE.cpp:
        (WebCore::FileChooser::basenameForWidth):

2011-02-18  Emil A Eklund  <eae@chromium.org>

        Reviewed by Darin Adler.

        Crash in EventHandler::sendContextMenuEventForKey
        https://bugs.webkit.org/show_bug.cgi?id=54495

        Test: fast/events/menu-keydown-on-hidden-element.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEventForKey): Add null check.

2011-02-15  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Clean up shader code from LayerChromium classes
        https://bugs.webkit.org/show_bug.cgi?id=54484

        This is a refactoring and there should be no change in functionality.
        All shader code is pulled out into classes in ShaderChromium.
        The SharedValues classes are now turned into ProgramBinding, one per
        shader program.  These contain shader classes that know about what
        variables they can bind.

        * WebCore.gypi:
        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::draw):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/GeometryBinding.cpp: Added.
        (WebCore::GeometryBinding::GeometryBinding):
        (WebCore::GeometryBinding::~GeometryBinding):
        (WebCore::GeometryBinding::prepareForDraw):
        * platform/graphics/chromium/GeometryBinding.h: Copied from Source/WebCore/platform/graphics/chromium/PluginLayerChromium.h.
        (WebCore::GeometryBinding::initialized):
        (WebCore::GeometryBinding::context):
        (WebCore::GeometryBinding::quadVerticesVbo):
        (WebCore::GeometryBinding::quadElementsVbo):
        (WebCore::GeometryBinding::positionAttribLocation):
        (WebCore::GeometryBinding::texCoordAttribLocation):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::drawDebugBorder):
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::sharedGeometry):
        (WebCore::LayerRendererChromium::borderProgram):
        (WebCore::LayerRendererChromium::contentLayerProgram):
        (WebCore::LayerRendererChromium::canvasLayerProgram):
        (WebCore::LayerRendererChromium::videoLayerRGBAProgram):
        (WebCore::LayerRendererChromium::videoLayerYUVProgram):
        (WebCore::LayerRendererChromium::pluginLayerProgram):
        (WebCore::LayerRendererChromium::renderSurfaceProgram):
        (WebCore::LayerRendererChromium::renderSurfaceMaskProgram):
        (WebCore::LayerRendererChromium::tilerProgram):
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::draw):
        (WebCore::LayerTilerChromium::drawTexturedQuad):
        * platform/graphics/chromium/LayerTilerChromium.h:
        * platform/graphics/chromium/PluginLayerChromium.cpp:
        (WebCore::PluginLayerChromium::draw):
        * platform/graphics/chromium/PluginLayerChromium.h:
        * platform/graphics/chromium/ProgramBinding.cpp: Added.
        (WebCore::ProgramBindingBase::ProgramBindingBase):
        (WebCore::ProgramBindingBase::~ProgramBindingBase):
        (WebCore::ProgramBindingBase::init):
        (WebCore::ProgramBindingBase::loadShader):
        (WebCore::ProgramBindingBase::createShaderProgram):
        * platform/graphics/chromium/ProgramBinding.h: Added.
        (WebCore::ProgramBindingBase::program):
        (WebCore::ProgramBindingBase::initialized):
        (WebCore::ProgramBinding::ProgramBinding):
        (WebCore::ProgramBinding::vertexShader):
        (WebCore::ProgramBinding::fragmentShader):
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::drawSurface):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/ShaderChromium.cpp: Added.
        (WebCore::VertexShaderPosTex::VertexShaderPosTex):
        (WebCore::VertexShaderPosTex::init):
        (WebCore::VertexShaderPosTex::getShaderString):
        (WebCore::VertexShaderPosTexYUVStretch::VertexShaderPosTexYUVStretch):
        (WebCore::VertexShaderPosTexYUVStretch::init):
        (WebCore::VertexShaderPosTexYUVStretch::getShaderString):
        (WebCore::VertexShaderPos::VertexShaderPos):
        (WebCore::VertexShaderPos::init):
        (WebCore::VertexShaderPos::getShaderString):
        (WebCore::VertexShaderPosTexTransform::VertexShaderPosTexTransform):
        (WebCore::VertexShaderPosTexTransform::init):
        (WebCore::VertexShaderPosTexTransform::getShaderString):
        (WebCore::FragmentTexAlphaBinding::FragmentTexAlphaBinding):
        (WebCore::FragmentTexAlphaBinding::init):
        (WebCore::FragmentShaderRGBATexFlipAlpha::getShaderString):
        (WebCore::FragmentShaderRGBATexAlpha::getShaderString):
        (WebCore::FragmentShaderBGRATexAlpha::getShaderString):
        (WebCore::FragmentShaderRGBATexAlphaMask::FragmentShaderRGBATexAlphaMask):
        (WebCore::FragmentShaderRGBATexAlphaMask::init):
        (WebCore::FragmentShaderRGBATexAlphaMask::getShaderString):
        (WebCore::FragmentShaderYUVVideo::FragmentShaderYUVVideo):
        (WebCore::FragmentShaderYUVVideo::init):
        (WebCore::FragmentShaderYUVVideo::getShaderString):
        (WebCore::FragmentShaderColor::FragmentShaderColor):
        (WebCore::FragmentShaderColor::init):
        (WebCore::FragmentShaderColor::getShaderString):
        * platform/graphics/chromium/ShaderChromium.h: Added.
        (WebCore::VertexShaderPosTex::matrixLocation):
        (WebCore::VertexShaderPosTexYUVStretch::matrixLocation):
        (WebCore::VertexShaderPosTexYUVStretch::yWidthScaleFactorLocation):
        (WebCore::VertexShaderPosTexYUVStretch::uvWidthScaleFactorLocation):
        (WebCore::VertexShaderPos::matrixLocation):
        (WebCore::VertexShaderPosTexTransform::matrixLocation):
        (WebCore::VertexShaderPosTexTransform::texTransformLocation):
        (WebCore::FragmentTexAlphaBinding::alphaLocation):
        (WebCore::FragmentTexAlphaBinding::samplerLocation):
        (WebCore::FragmentShaderRGBATexAlphaMask::alphaLocation):
        (WebCore::FragmentShaderRGBATexAlphaMask::samplerLocation):
        (WebCore::FragmentShaderRGBATexAlphaMask::maskSamplerLocation):
        (WebCore::FragmentShaderYUVVideo::yTextureLocation):
        (WebCore::FragmentShaderYUVVideo::uTextureLocation):
        (WebCore::FragmentShaderYUVVideo::vTextureLocation):
        (WebCore::FragmentShaderYUVVideo::alphaLocation):
        (WebCore::FragmentShaderYUVVideo::ccMatrixLocation):
        (WebCore::FragmentShaderYUVVideo::signAdjLocation):
        (WebCore::FragmentShaderColor::colorLocation):
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::draw):
        (WebCore::VideoLayerChromium::drawYUV):
        (WebCore::VideoLayerChromium::drawRGBA):
        * platform/graphics/chromium/VideoLayerChromium.h:

2011-02-18  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Update texture for ContentLayerChromiums in draw() call instead of updateContents..() call
        https://bugs.webkit.org/show_bug.cgi?id=54315

        This defers all operations on the compositor's GL context until the
        draw() call which is a prerequisite for moving the draw() off-thread.
        Also cleans up the update cycle a bit - there were some unused local
        variables and whatnot.

        One consequence of this change is that the upload buffer is retained
        across updates now instead of allocated by each paint.  This is
        necessary so that the full layer contents can be uploaded if the
        texture manager evicts the layer's backing texture.  This costs more
        persistent memory but avoids lots of allocator churn on updates.
        Another nonobvious detail is that I have to update the texture for
        ContentLayerChromiums in bindContentsTexture() because mask layers
        never draw(), they are instead bound to the secondary texture unit.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::requiresClippedUpdateRect):
        (WebCore::ContentLayerChromium::updateContentsIfDirty):
        (WebCore::ContentLayerChromium::resizeUploadBufferForImage):
        (WebCore::ContentLayerChromium::resizeUploadBuffer):
        (WebCore::SkBitmapConditionalAutoLockerPixels::SkBitmapConditionalAutoLockerPixels):
        (WebCore::SkBitmapConditionalAutoLockerPixels::~SkBitmapConditionalAutoLockerPixels):
        (WebCore::SkBitmapConditionalAutoLockerPixels::lockPixels):
        (WebCore::ContentLayerChromium::updateTextureIfNeeded):
        (WebCore::ContentLayerChromium::draw):
        (WebCore::ContentLayerChromium::unreserveContentsTexture):
        (WebCore::ContentLayerChromium::bindContentsTexture):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContentsIfDirty):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setBounds):
        * platform/graphics/chromium/LayerChromium.h:

2011-02-18  Kenneth Russell  <kbr@google.com>

        Unreviewed, Chromium build fix on certain Linux platforms.

        * platform/graphics/gpu/LoopBlinnSolidFillShader.cpp:

2011-02-18  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement client based geolocation for qtport
        https://bugs.webkit.org/show_bug.cgi?id=42629

        Implements client based geolocation for qtwebkit. Removed old code related to non-client based geolocation

        No tests as yet. This will be raised as different bug as new mock client implementation need to be done.

        * WebCore.pro:
        * features.pri:
        * platform/qt/GeolocationServiceQt.cpp: Removed.
        * platform/qt/GeolocationServiceQt.h: Removed.

2011-02-18  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Dave Hyatt.

        Add support for dir=auto
        https://bugs.webkit.org/show_bug.cgi?id=50916

        When an element has dir attribute with value "auto", call defaultWritingMode
        to find its directionality.
        Added a flag SelfOrAncestorHasDirAutoFlag, and added hooks in the DOM to set
        and check this flag. This flag is set on every node between an element with
        dir=auto attribute and its first text node. Changes in the DOM between those
        elements will trigger re-evaluating the directionality, but changes not
        between those element do not need to be concerned.
        The DOM hooks were added to childrenChanged, and to parseMappedAttribute.
        The directionality is evaluated when children are added, and cleared when they are
        removed. Directionality flag is also cleared on a child that is no longer determining
        the directionality due to a sibling being added before that child.

        Added 2 static CSSMutableStyleDeclarations to be used for elements with dir=auto.
        We cannot used the mapped declaration, because it can take only one value.

        Tests: fast/dom/HTMLElement/attr-dir-auto-change-before-text-node.html
               fast/dom/HTMLElement/attr-dir-auto-change-child-node.html
               fast/dom/HTMLElement/attr-dir-auto-change-text.html
               fast/dom/HTMLElement/attr-dir-auto-children.html
               fast/dom/HTMLElement/attr-dir-auto-remove-add-children.html
               fast/dom/HTMLElement/attr-dir-auto.html
               fast/dom/HTMLElement/attr-dir-value-change.html

        * css/CSSStyleSelector.cpp:
        (WebCore::leftToRightDeclaration):
        (WebCore::rightToLeftDeclaration):
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::styleForElement):
        * dom/Node.h:
        (WebCore::Node::selfOrAncestorHasDirAutoAttribute):
        (WebCore::Node::setSelfOrAncestorHasDirAutoAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::mapToEntry):
        (WebCore::HTMLElement::parseMappedAttribute):
        (WebCore::setHasDirAutoFlagRecursively):
        (WebCore::HTMLElement::childrenChanged):
        (WebCore::HTMLElement::directionalityIfhasDirAutoAttribute):
        (WebCore::HTMLElement::directionality):
        (WebCore::HTMLElement::dirAttributeChanged):
        (WebCore::HTMLElement::adjustDirectionalityIfNeededAfterChildAttributeChanged):
        (WebCore::HTMLElement::calculateAndAdjustDirectionality):
        (WebCore::HTMLElement::adjustDirectionalityIfNeededAfterChildrenChanged):
        * html/HTMLElement.h:

2011-02-18  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Antonio Gomes.

        Navigating downwards / upwards does not focus on the links spread across more than one line.
        https://bugs.webkit.org/show_bug.cgi?id=54639

        When 2 anchor elements span more than one line each, and one ends on the same line that the
        second starts on, the rects reported by their renderers are overlapping. When handling
        2 overlapping nodes, check for this case, and don't assume that one of the nodes is on a higher layer.   

        Test: fast/spatial-navigation/snav-two-elements-one-line.html

        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfNeeded):
        (WebCore::FocusController::findFocusCandidateInContainer):
        * page/SpatialNavigation.cpp:
        (WebCore::areElementsOnSameLine):
        (WebCore::distanceDataForNode):
        * page/SpatialNavigation.h:

2011-02-18  Ben Vanik  <benvanik@google.com>

        Reviewed by Kenneth Russell.

        Bug 53940: Implement the OES_vertex_array_object WebGL extension
        https://bugs.webkit.org/show_bug.cgi?id=53940

        Initial implementation of the OES_vertex_array_object extension adding the OESVertexArrayObject
        extension container and WebGLVertexArrayObjectOES VAO object. The extension is plumbed through
        the Extensions3D interface and implemented in the Extensions3DOpenGL (WebKit/OSX) version when
        it is available.
        Two big changes touching code outside of the extension files:
        * Moved the typedefs at the top of GraphicsContext3D.h to GraphicsTypes3D.h (modeled after
          GraphicsTypes.h). They are not namespaced as they weren't before.
        * To make the code cleaner/clearer all vertex attribute state has been moved to the
          WebGLVertexArrayObjectOES type (struct VertexAttribState) except for values which are still
          on the WebGLRenderingContext. A default VAO is now used to store the existing attribute
          states for when no other VAO is used. Code in WebGLRenderingContext dealing with buffers and
          vertex attributes now defers to or stores values in the bound array object.

        Tested against the WebGL conformance suite and the new
        oes-vertex-array-object test:
        https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/sdk/tests/conformance/oes-vertex-array-object.html

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp: Modified property svn:ignore.
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/OESVertexArrayObject.cpp: Added.
        (WebCore::OESVertexArrayObject::OESVertexArrayObject):
        (WebCore::OESVertexArrayObject::~OESVertexArrayObject):
        (WebCore::OESVertexArrayObject::getName):
        (WebCore::OESVertexArrayObject::create):
        (WebCore::OESVertexArrayObject::createVertexArrayOES):
        (WebCore::OESVertexArrayObject::deleteVertexArrayOES):
        (WebCore::OESVertexArrayObject::isVertexArrayOES):
        (WebCore::OESVertexArrayObject::bindVertexArrayOES):
        * html/canvas/OESVertexArrayObject.h: Added.
        * html/canvas/OESVertexArrayObject.idl: Added.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLGetInfo.cpp:
        (WebCore::WebGLGetInfo::WebGLGetInfo):
        (WebCore::WebGLGetInfo::getWebGLVertexArrayObjectOES):
        * html/canvas/WebGLGetInfo.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::initializeNewContext):
        (WebCore::WebGLRenderingContext::bindBuffer):
        (WebCore::WebGLRenderingContext::deleteBuffer):
        (WebCore::WebGLRenderingContext::disableVertexAttribArray):
        (WebCore::WebGLRenderingContext::validateElementArraySize):
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative):
        (WebCore::WebGLRenderingContext::validateIndexArrayPrecise):
        (WebCore::WebGLRenderingContext::validateRenderingState):
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::enableVertexAttribArray):
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        (WebCore::WebGLRenderingContext::getVertexAttrib):
        (WebCore::WebGLRenderingContext::vertexAttribPointer):
        (WebCore::WebGLRenderingContext::validateBufferDataParameters):
        (WebCore::WebGLRenderingContext::vertexAttribfImpl):
        (WebCore::WebGLRenderingContext::vertexAttribfvImpl):
        (WebCore::WebGLRenderingContext::initVertexAttrib0):
        (WebCore::WebGLRenderingContext::simulateVertexAttrib0):
        (WebCore::WebGLRenderingContext::restoreStatesAfterVertexAttrib0Simulation):
        (WebCore::WebGLRenderingContext::getNumberOfExtensions):
        (WebCore::WebGLRenderingContext::getExtensionNumber):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore::WebGLRenderingContext::getMaxVertexAttribs):
        (WebCore::WebGLRenderingContext::setBoundVertexArrayObject):
        (WebCore::WebGLRenderingContext::VertexAttribValue::VertexAttribValue):
        * html/canvas/WebGLVertexArrayObjectOES.cpp: Added.
        (WebCore::WebGLVertexArrayObjectOES::create):
        (WebCore::WebGLVertexArrayObjectOES::WebGLVertexArrayObjectOES):
        (WebCore::WebGLVertexArrayObjectOES::deleteObjectImpl):
        * html/canvas/WebGLVertexArrayObjectOES.h: Added.
        (WebCore::WebGLVertexArrayObjectOES::~WebGLVertexArrayObjectOES):
        (WebCore::WebGLVertexArrayObjectOES::VertexAttribState::VertexAttribState):
        (WebCore::WebGLVertexArrayObjectOES::isDefaultObject):
        (WebCore::WebGLVertexArrayObjectOES::hasEverBeenBound):
        (WebCore::WebGLVertexArrayObjectOES::setHasEverBeenBound):
        (WebCore::WebGLVertexArrayObjectOES::getElementArrayBuffer):
        (WebCore::WebGLVertexArrayObjectOES::setElementArrayBuffer):
        (WebCore::WebGLVertexArrayObjectOES::getVertexAttribState):
        (WebCore::WebGLVertexArrayObjectOES::isVertexArray):
        * html/canvas/WebGLVertexArrayObjectOES.idl: Added.
        * platform/graphics/Extensions3D.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsTypes3D.h: Added.
        * platform/graphics/chromium/Extensions3DChromium.h:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supports):
        (WebCore::Extensions3DOpenGL::createVertexArrayOES):
        (WebCore::Extensions3DOpenGL::deleteVertexArrayOES):
        (WebCore::Extensions3DOpenGL::isVertexArrayOES):
        (WebCore::Extensions3DOpenGL::bindVertexArrayOES):
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        * platform/graphics/qt/Extensions3DQt.cpp:
        (WebCore::Extensions3DQt::createVertexArrayOES):
        (WebCore::Extensions3DQt::deleteVertexArrayOES):
        (WebCore::Extensions3DQt::isVertexArrayOES):
        (WebCore::Extensions3DQt::bindVertexArrayOES):
        * platform/graphics/qt/Extensions3DQt.h:

2011-02-17  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: reflect changes to styles when they happen outside inspector.
        https://bugs.webkit.org/show_bug.cgi?id=44620

        Notify InspectorInstrumentation of inline style changes from CSSMutableStyleDeclaration
        whenever the style change does not come from a direct "style" attribute modification.
        The performance regression occurs only with the Web Inspector opened, when inline styles
        are modified through setting style.cssText or style.<styleAttribute>: according to the Web Inspector protocol,
        an attribute change requires that all attributes for the node in question be pushed into the frontend.

        Test: inspector/styles/styles-update-from-js.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setNeedsStyleRecalc):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::RevalidateStyleAttributeTask::reset):
        (WebCore::RevalidateStyleAttributeTask::RevalidateStyleAttributeTask):
        (WebCore::RevalidateStyleAttributeTask::scheduleFor):
        (WebCore::RevalidateStyleAttributeTask::onTimer):
        (WebCore::InspectorDOMAgent::reset):
        (WebCore::InspectorDOMAgent::didInvalidateStyleAttr):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didInvalidateStyleAttrImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didInvalidateStyleAttr):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheetForInlineStyle::didModifyElementAttribute):
        (WebCore::InspectorStyleSheetForInlineStyle::ensureParsedDataReady):
        (WebCore::InspectorStyleSheetForInlineStyle::elementStyleText):
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._attributesUpdated):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._rebuildSectionsForStyleRules):
        (WebInspector.StylesSidebarPane.prototype.addBlankSection):
        (WebInspector.StylePropertiesSection.prototype.onpopulate):
        (WebInspector.StylePropertiesSection.prototype.addNewBlankProperty):
        (WebInspector.ComputedStylePropertiesSection.prototype.onpopulate):
        (WebInspector.BlankStylePropertiesSection):
        (WebInspector.StylePropertyTreeElement):
        (WebInspector.StylePropertyTreeElement.prototype):
        (WebInspector.StylePropertyTreeElement.prototype.element.userInput.previousContent.context.moveDirection):

2011-02-16  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Refactor pumpTokenizer loop
        https://bugs.webkit.org/show_bug.cgi?id=54574

        1. This makes pumpTokenizer() safe to call when waiting for a script or when about to get
           the next token, although ASSERTs still enforce that we aren't waiting for a script. This
           enables resumeParsingAfterYield() to call pumpTokenizer with no modifications even if we
           yield before running a script rather than before taking a token (see bug 54355).
        2. This also picks up the refCount >= 1 assert when stopped.

        Tested PerformanceTests/Parser to verify no regression. If anything it got faster.
        Before:
          avg 985.05
          median 985.5
          stdev 3.007906248539007
          min 980
          max 990
        After:
          avg 980.05
          median 981
          stdev 3.122098653149833
          min 974
          max 985

        No new tests because no new functionality.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::canTakeNextToken): Added.
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLDocumentParser.h:

2011-02-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79003.
        http://trac.webkit.org/changeset/79003
        https://bugs.webkit.org/show_bug.cgi?id=54753

        It broke tests on GTK bots (Requested by Ossy on #webkit).

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::lastChildConsideringContinuation):
        * dom/Node.cpp:
        (WebCore::Node::removeEventListener):
        * html/DateComponents.cpp:
        (WebCore::DateComponents::parseTime):

2011-02-18  Csaba Osztrogonác  <ossy@webkit.org>

        Rubber-stamped by Andreas Kling.

        Warning fix. Use ASSERT_UNUSED() instead of ASSERT().

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::lastChildConsideringContinuation):
        * dom/Node.cpp:
        (WebCore::Node::removeEventListener):
        * html/DateComponents.cpp:
        (WebCore::DateComponents::parseTime):

2011-02-18  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Optimize editing updates in main panel
        https://bugs.webkit.org/show_bug.cgi?id=54661

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer):
        (WebInspector.TextViewer.prototype._textChanged):
        (WebInspector.TextViewer.prototype._enterInternalTextChangeMode):
        (WebInspector.TextViewer.prototype._exitInternalTextChangeMode):
        (WebInspector.TextViewer.prototype._syncDecorationsForLine):
        (WebInspector.TextEditorChunkedPanel.prototype.textChanged):
        (WebInspector.TextEditorChunkedPanel.prototype._scroll):
        (WebInspector.TextEditorChunkedPanel.prototype.chunkForLine):
        (WebInspector.TextEditorChunkedPanel.prototype._totalHeight):
        (WebInspector.TextEditorGutterPanel.prototype._expandChunks):
        (WebInspector.TextEditorGutterChunk):
        (WebInspector.TextEditorGutterChunk.prototype.addDecoration):
        (WebInspector.TextEditorGutterChunk.prototype.removeDecoration):
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype._expandChunks):
        (WebInspector.TextEditorMainPanel.prototype._highlightDataReady):
        (WebInspector.TextEditorMainPanel.prototype._markSkippedPaintLines):
        (WebInspector.TextEditorMainPanel.prototype._paintSkippedLines):
        (WebInspector.TextEditorMainPanel.prototype._paintLines):
        (WebInspector.TextEditorMainPanel.prototype._paintLine):
        (WebInspector.TextEditorMainPanel.prototype._positionToSelection):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):
        (WebInspector.TextEditorMainPanel.prototype._updateHighlightsForRange):
        (WebInspector.TextEditorMainPanel.prototype._collectLinesFromDiv):
        (WebInspector.TextEditorMainChunk):
        (WebInspector.TextEditorMainChunk.prototype.get startLine):
        (WebInspector.TextEditorMainChunk.prototype.set startLine):
        (WebInspector.TextEditorMainChunk.prototype.getExpandedLineRow):
        (WebInspector.TextEditorMainChunk.prototype.updateCollapsedLineRow):

2011-02-18  Steve Block  <steveblock@google.com>

        Reviewed by Andreas Kling

        Memory allocation error in convertV8ObjectToNPVariant() for strings
        https://bugs.webkit.org/show_bug.cgi?id=54737

        Include the termination character in the length when allocating memory
        and copying the string. This fixes a crashing bug on Android.

        This should be tested by the java/ tests on Chromium, but these
        tests are currently skipped.

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

2011-02-18  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, rolling out r78979.
        http://trac.webkit.org/changeset/78979
        https://bugs.webkit.org/show_bug.cgi?id=53146

        causes multiple crashes on GTK

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::notifyChildrenSelectionChange):
        (WebCore::AXObjectCache::postPlatformNotification):

2011-02-18  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] minimal build unrecognized options
        https://bugs.webkit.org/show_bug.cgi?id=50890

        * GNUmakefile.am: new feature defines for optional features build.

2011-02-17  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Populate indexes created for object stores with data
        https://bugs.webkit.org/show_bug.cgi?id=54669

        Make sure that indices for object stores that already hold data get
        populated.

        * storage/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::hasValidId):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::populateIndex):
        (WebCore::IDBObjectStoreBackendImpl::createIndexInternal):

2011-02-18  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Combo boxes should emit object:selection-changed even when collapsed
        https://bugs.webkit.org/show_bug.cgi?id=53146

        Emit the selection-changed signals when the menu list value has changed

        Test: platform/gtk/accessibility/combo-box-collapsed-selection-changed.html

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::getListObject): New, return the right list object for
        menu lists and list boxes.
        (WebCore::notifyChildrenSelectionChange): Support menu lists.
        (WebCore::AXObjectCache::postPlatformNotification): Call function
        notifyChildrenSelectionChange for AXMenuListValueChanged.

2011-02-18  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] atk_text_get_selection/atk_text_set_selection fails for list items
        https://bugs.webkit.org/show_bug.cgi?id=53453

        Ensure that atk_text_{get|set}_selection() work with list items.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_text_get_text): Properly handle list item
        markers when returning the text for an object for a given interval
        specified through the startOffset and endOffset parameters.
        (getSelectionOffsetsForObject): Bear in mind list item markers
        when returning the offsets for a selection over a list item.
        (webkit_accessible_text_set_selection): Adjust offsets if needed
        for list items with item markers. Ensure that it returns TRUE only
        when everything went fine setting the text selection.

2011-02-18  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=54728
        checkSelector*Value functions used in fastCheckSelector fail to inline
        
        Wrap the functions used as template arguments to classes.

        * css/CSSStyleSelector.cpp:
        (WebCore::fastCheckSingleSelector):
        (WebCore::ClassCheck::checkValue):
        (WebCore::IdCheck::checkValue):
        (WebCore::TagCheck::checkValue):
        (WebCore::CSSStyleSelector::SelectorChecker::fastCheckSelector):

2011-02-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Composited iframe content is missing from snapshots in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=54696

        We need to propagate the 'flattening' paint behavior flag
        down to subviews while painting. WebKit1 does this via
        code in WebFrameView, but this is a more general fix
        that works in WebKit2 as well.
        
        Made a utility method, parentFrameView(), which I changed
        some other methods to use as well.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::isEnclosedInCompositingLayer):
        (WebCore::FrameView::useSlowRepaints):
        (WebCore::FrameView::useSlowRepaintsIfNotOverlapped):
        (WebCore::FrameView::isOverlappedIncludingAncestors):
        (WebCore::FrameView::parentFrameView):
        (WebCore::FrameView::paintContents):
        * page/FrameView.h:

2011-02-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/8898595> Pages that use fixed positioning display poorly when scaled

        * html/HTMLBodyElement.cpp:
        (WebCore::adjustForZoom): Account for page scale.
        (WebCore::HTMLBodyElement::setScrollLeft): Ditto.
        (WebCore::HTMLBodyElement::setScrollTop): Ditto.
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollXForFixedPosition): Moved from ScrollView here and changed to
        account for page scale: when the page is scaled, the “viewport” with respect to which fixed
        objects are positioned is scaled as well. Since it’s now bigger than the real viewport (that is,
        the frame view), we move it around in proportion to the document scroll, so that when the document
        is fully scrolled to the bottom-right, the bottom right of the scaled viewport is visible.
        (WebCore::FrameView::scrollYForFixedPosition): Ditto.
        (WebCore::FrameView::scrollOffsetForFixedPosition): Moved from ScrollView here.
        * page/FrameView.h:
        * platform/ScrollView.cpp: Moved functions to FrameView.
        * platform/ScrollView.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateRepaintRectsAfterScroll): Account for the RenderView being transformed.
        (WebCore::RenderLayer::calculateClipRects): Used scrollOffsetForFixedPosition().
        (WebCore::RenderLayer::backgroundClipRect): Ditto.

2011-02-17  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Add support for GPU accelerated path rendering
        https://bugs.webkit.org/show_bug.cgi?id=44729

        Incorporates the Loop and Blinn path rendering algorithm as an
        option to the GPU-accelerated canvas code, currently only compiled
        in to the Chromium port. Currently it's toggled by changing a
        hardcoded constant in
        SharedGraphicsContext3D::useLoopBlinnForPathRendering() and is
        disabled by default. This mechanism can be improved once we've
        gained more confidence in the implementation. There are some known
        bugs that need to be fixed first.

        No new tests; ran some 2D Canvas tests manually with the new flag
        both enabled and disabled.

        * WebCore.gypi:
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::GLES2Canvas):
        (WebCore::GLES2Canvas::fillPath):
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/gpu/LoopBlinnClassifier.h:
        * platform/graphics/gpu/LoopBlinnLocalTriangulator.h:
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):
        (WebCore::SharedGraphicsContext3D::SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::createBuffer):
        (WebCore::SharedGraphicsContext3D::bindBuffer):
        (WebCore::SharedGraphicsContext3D::bufferData):
        (WebCore::SharedGraphicsContext3D::bufferSubData):
        (WebCore::SharedGraphicsContext3D::useLoopBlinnForPathRendering):
        (WebCore::SharedGraphicsContext3D::useLoopBlinnInteriorProgram):
        (WebCore::SharedGraphicsContext3D::useLoopBlinnExteriorProgram):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::fillPath):

2011-02-16  Stephen White  <senorblanco@chromium.org>

        Reviewed by James Robinson.

        Layout Test fast/canvas/setWidthResetAfterForcedRender.html fails on
        accelerated 2D canvas w/compositor enabled.
        https://bugs.webkit.org/show_bug.cgi?id=54561

        When resetting the CanvasRenderingContext2D, we also need to send a
        contentChanged() to the relevant RenderLayer.  This is similar to what
        is done in didDraw().

        Covered by fast/canvas/setWidthResetAfterForcedRender.html, but note 
        that this test will still fail pixel tests because the compositor
        is not compatible with repaint tests (the green square is now white,
        but the half-transparent grey repaint rect does not appear).

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

2011-02-17  Sergey Glazunov  <serg.glazunov@gmail.com>

        Reviewed by Kenneth Russell.

        Null out the WEBKIT_lose_context WebGL extension's context pointer when
        the WebGL rendering context is removed.
        https://bugs.webkit.org/show_bug.cgi?id=54679

        Test: fast/canvas/webgl/context-destroyed-crash.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::~WebGLRenderingContext):
        * html/canvas/WebKitLoseContext.cpp:
        (WebCore::WebKitLoseContext::loseContext): Add null-check for m_context.
        * html/canvas/WebKitLoseContext.h:
        (WebCore::WebKitLoseContext::contextDestroyed):

2011-02-17  Kenneth Russell  <kbr@google.com>

        Reviewed by Chris Marrin.

        Construction of Uint8Array from JS Array (and possibly others) incorrectly clamps values
        https://bugs.webkit.org/show_bug.cgi?id=52768

        Removed incorrect clamping code from IntegralTypedArrayBase. Fixed
        code which casts from incoming double to the destination type.
        Changed the JSC bindings to use this code, rather than a copy of
        the casting code and a different constructor, in order to reuse
        the fix.

        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::constructArrayBufferView):
        * html/canvas/Int32Array.h:
        (WebCore::Int32Array::set):
        * html/canvas/Int8Array.h:
        (WebCore::Int8Array::set):
        * html/canvas/IntegralTypedArrayBase.h:
        (WebCore::IntegralTypedArrayBase::set):
        * html/canvas/Uint16Array.h:
        (WebCore::Uint16Array::set):
        * html/canvas/Uint32Array.h:
        (WebCore::Uint32Array::set):
        * html/canvas/Uint8Array.h:
        (WebCore::Uint8Array::set):

2011-02-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Knob proportion not quite right during rubber-band.
        <rdar://problem/9015201>

        Change knob proportion algorithm to treat overhang as making the view smaller,
        rather than document bigger.

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

2011-02-16  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Andreas Kling.

        Summary: HTML5 <details> and <summary>: HTMLSummaryElement
        https://bugs.webkit.org/show_bug.cgi?id=54584

        Adding class HTMLSummaryElement to build systems. This class will be used in
        the implementation of new HTML5 tag <summary>.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLSummaryElement.cpp: Added.
        (WebCore::HTMLSummaryElement::create):
        (WebCore::HTMLSummaryElement::HTMLSummaryElement):
        * html/HTMLSummaryElement.h: Added.
        * html/HTMLTagNames.in:

2011-02-17  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        Throwing in an IndexedDB error or success event should lead to the transaction aborting
        https://bugs.webkit.org/show_bug.cgi?id=54249

        When an exception is thrown but not handled  within an IDBRequests success/error event,
        we should abort the transaction.

        Test: storage/indexeddb/exception-in-event-aborts.html

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::uncaughtExceptionInEventHandler):
        * dom/EventTarget.h:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::uncaughtExceptionInEventHandler):
        * storage/IDBRequest.h:

2011-02-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        WebKit2: Support Dictionary popup
        <rdar://problem/7660670>

        Add some necessary exports.

        * WebCore.exp.in:

2011-02-17  W. James MacLean  <wjmaclean@chromium.org>

        Reviewed by James Robinson.

        [chromium] Add command-line flag to enable composite to offscreen texture.
        https://bugs.webkit.org/show_bug.cgi?id=52311

        Add plumbing to allow command-line switch to enable offscreen compositing. Function
        LayerRendererChromium::copyOffscreenTextureToDisplay used for now to mimic
        normal renderer operation.

        Existing functionality not changed; offscreen compositing will be tested via GPU test framework.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::setRootLayer):
        (WebCore::LayerRendererChromium::setCompositeOffscreen):
        (WebCore::LayerRendererChromium::copyOffscreenTextureToDisplay):
        (WebCore::LayerRendererChromium::useRenderSurface):
        (WebCore::LayerRendererChromium::setScissorToRect):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::isCompositingOffscreen):

2011-02-17  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes after recent changes.

        * dom/ScriptedAnimationController.h:
        * platform/graphics/wx/FontWx.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawLineForTextChecking):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::setFrameRect):

2011-02-16  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Brady Eidson.

        WebKit2: Need a way to manage the WebCore Cache
        https://bugs.webkit.org/show_bug.cgi?id=54501
        
        Add a way to get a set of all of the origins that have entries in the
        WebCore memory cache, and a method to remove all resources from the memory
        cache from a given security origin.

        No change in behavior.

        * WebCore.exp.in: Add functions that need to be exported.
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::removeResourcesWithOrigin):
        (WebCore::MemoryCache::getOriginsWithCache):
        * loader/cache/MemoryCache.h:

2011-02-16  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=54244
        
        Convert the line box tree to floating point and eliminate font rounding hacks.  This patch removes all of the rounding
        hacks from the Font code and makes sure all Font APIs involving width measurement and width offsets use floats.
        
        The line box tree's x, y and logicalWidth members have all been converted to floats and all of the line box APIs have
        been changed as well.
        
        In terms of pixel adjustments, overflow is using an enclosing model (so it will be enclosingIntRect of a line box's x/y/width/height).
        
        Background and border painting is using a rounding model, so borders and backgrounds will round to the nearest pixel when painting.
        
        Replaced elements still snap to integer positions on lines, and they use a rounding model as well, although their underlying line boxes
        still have a precise floating point position.

        Justification will now allow subpixel positioning to occur as well.  Platforms that don't support subpixel positioning should already
        be rounding justification spacing in their font code.

        Many layout test results change on Mac, since rounding hacks were used there and are now gone.

        * WebCore.exp.in:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * platform/chromium/FileChooserChromium.cpp:
        (WebCore::FileChooser::basenameForWidth):
        * platform/graphics/Font.cpp:
        (WebCore::Font::width):
        * platform/graphics/Font.h:
        (WebCore::Font::spaceWidth):
        (WebCore::Font::tabWidth):
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForSimpleText):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawEmphasisMarks):
        (WebCore::GraphicsContext::drawBidiText):
        (WebCore::GraphicsContext::drawHighlightForText):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        (WebCore::SimpleFontData::platformGlyphInit):
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::spaceWidth):
        * platform/graphics/StringTruncator.cpp:
        (WebCore::stringWidth):
        (WebCore::truncateString):
        (WebCore::StringTruncator::centerTruncate):
        (WebCore::StringTruncator::rightTruncate):
        (WebCore::StringTruncator::width):
        * platform/graphics/StringTruncator.h:
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::xPos):
        (WebCore::TextRun::expansion):
        (WebCore::TextRun::directionalOverride):
        (WebCore::TextRun::disableSpacing):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator):
        (WebCore::WidthIterator::advance):
        * platform/graphics/WidthIterator.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawLineForTextChecking):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController):
        (WebCore::ComplexTextController::advance):
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/ComplexTextController.h:
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForComplexText):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForTextChecking):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawLineForTextChecking):
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::platformGlyphInit):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawLineForTextChecking):
        (WebCore::GraphicsContext::drawLineForText):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawLineForTextChecking):
        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem):
        * platform/gtk/FileChooserGtk.cpp:
        (WebCore::FileChooser::basenameForWidth):
        * platform/mac/DragImageMac.mm:
        (WebCore::widthWithFont):
        (WebCore::drawAtPoint):
        * platform/mac/FileChooserMac.mm:
        (WebCore::FileChooser::basenameForWidth):
        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageForLink):
        * platform/win/FileChooserWin.cpp:
        (WebCore::FileChooser::basenameForWidth):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::calculatePositionAndSize):
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::WebCoreTextFloatWidth):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::addNodeToRectBasedTestResult):
        * rendering/HitTestResult.h:
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::adjustPosition):
        (WebCore::InlineBox::placeEllipsisBox):
        (WebCore::InlineBox::locationIncludingFlipping):
        (WebCore::InlineBox::flipForWritingMode):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::adjustLineDirectionPosition):
        (WebCore::InlineBox::adjustBlockDirectionPosition):
        (WebCore::InlineBox::setX):
        (WebCore::InlineBox::x):
        (WebCore::InlineBox::setY):
        (WebCore::InlineBox::y):
        (WebCore::InlineBox::width):
        (WebCore::InlineBox::height):
        (WebCore::InlineBox::logicalLeft):
        (WebCore::InlineBox::logicalRight):
        (WebCore::InlineBox::setLogicalLeft):
        (WebCore::InlineBox::pixelSnappedLogicalLeft):
        (WebCore::InlineBox::pixelSnappedLogicalRight):
        (WebCore::InlineBox::setLogicalWidth):
        (WebCore::InlineBox::logicalWidth):
        (WebCore::InlineBox::verticalAlign):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::roundedFrameRect):
        (WebCore::InlineFlowBox::adjustPosition):
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection):
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::verticalPositionForBox):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::addBoxShadowVisualOverflow):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::InlineFlowBox::computeOverflow):
        (WebCore::InlineFlowBox::setLayoutOverflow):
        (WebCore::InlineFlowBox::setVisualOverflow):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        (WebCore::InlineFlowBox::placeEllipsisBox):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::maxYLayoutOverflow):
        (WebCore::InlineFlowBox::maxXLayoutOverflow):
        (WebCore::InlineFlowBox::layoutOverflowRect):
        (WebCore::InlineFlowBox::maxYVisualOverflow):
        (WebCore::InlineFlowBox::maxXVisualOverflow):
        (WebCore::InlineFlowBox::visualOverflowRect):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::placeEllipsisBox):
        (WebCore::InlineTextBox::nodeAtPoint):
        (WebCore::paintTextWithShadows):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::paintDocumentMarkers):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        (WebCore::InlineTextBox::textPos):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::setExpansion):
        * rendering/RenderBR.h:
        (WebCore::RenderBR::width):
        * rendering/RenderBlock.cpp:
        (WebCore::stripTrailingSpace):
        (WebCore::updatePreferredWidth):
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        (WebCore::RenderBlock::adjustForBorderFit):
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlock::fitBelowFloats):
        (WebCore::textWidth):
        (WebCore::tryHyphenating):
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionLineBox):
        (WebCore::RenderBox::flipForWritingMode):
        * rendering/RenderBox.h:
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::width):
        (WebCore::RenderCombineText::adjustTextOrigin):
        (WebCore::RenderCombineText::combineText):
        * rendering/RenderCombineText.h:
        (WebCore::RenderCombineText::combinedTextWidth):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::computePreferredLogicalWidths):
        * rendering/RenderCounter.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::getReplacementTextGeometry):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::computePreferredLogicalWidths):
        * rendering/RenderImage.cpp:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::linesBoundingBox):
        (WebCore::RenderInline::linesVisualOverflowBoundingBox):
        (WebCore::RenderInline::addFocusRingRects):
        (WebCore::RenderInline::paintOutline):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::trimmedPrefWidths):
        (WebCore::RenderText::minLogicalWidth):
        (WebCore::RenderText::maxLogicalWidth):
        (WebCore::RenderText::computePreferredLogicalWidths):
        (WebCore::RenderText::firstRunOrigin):
        (WebCore::RenderText::firstRunX):
        (WebCore::RenderText::firstRunY):
        (WebCore::RenderText::width):
        (WebCore::RenderText::linesBoundingBox):
        * rendering/RenderText.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::getAvgCharWidth):
        (WebCore::RenderTextControl::paintPlaceholder):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeTextRun):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::placeEllipsis):
        (WebCore::RootInlineBox::placeEllipsisBox):
        (WebCore::RootInlineBox::adjustPosition):
        (WebCore::RootInlineBox::beforeAnnotationsAdjustment):
        (WebCore::RootInlineBox::paddedLayoutOverflowRect):
        * rendering/RootInlineBox.h:
        * rendering/VerticalPositionCache.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::offsetForPosition):
        (WebCore::SVGInlineTextBox::positionForOffset):
        (WebCore::SVGInlineTextBox::constructTextRun):
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeRenderSVGTextBox):
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::SVGTextMetrics::SVGTextMetrics):
        (WebCore::constructTextRun):
        * svg/SVGFont.cpp:
        (WebCore::floatWidthMissingGlyphCallback):
        (WebCore::Font::drawTextUsingSVGFont):

2011-02-17  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        'ex' coordinates fail, when SVGFont doesn't provide an explicit xHeight attribute
        https://bugs.webkit.org/show_bug.cgi?id=54672

        Measure the xHeight from the 'x' glyph of a SVGFont, if the font itself doesn't explicitely specify an x-height attribute.
        Fixes the modern version of SVG 1.1 2nd Edition coords-units-03-b.svg.

        Test: svg/W3C-SVG-1.1-SE/coords-units-03-b.svg

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):

2011-02-10  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Adam Roben.

        HTML5 <details> and <summary>: localized text
        https://bugs.webkit.org/show_bug.cgi?id=54260

        The method defaultDetailsSummaryText was added to LocalizationStrategy class and to
        platform/LocalizedStrings. It is used to provide the default label to be used by a
        <details> tag that has no <summary> child.

        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.cpp:
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::defaultDetailsSummaryText):
        * platform/LocalizedStrings.h:
        * platform/android/LocalizedStringsAndroid.cpp:
        (WebCore::defaultDetailsSummaryText):
        * platform/brew/LocalizedStringsBrew.cpp:
        (WebCore::defaultDetailsSummaryText):
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::defaultDetailsSummaryText):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::defaultDetailsSummaryText):
        * platform/haiku/LocalizedStringsHaiku.cpp:
        (WebCore::defaultDetailsSummaryText):
        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::defaultDetailsSummaryText):

2011-02-17  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Laszlo Gombos.

        Updated include paths for phonon.

        [Qt] WebKit patches required to work with a modularized version of Qt
        https://bugs.webkit.org/show_bug.cgi?id=53916

        Build fix. No tests.

        * WebCore.pro:

2011-02-17  Hui Huang  <hui.2.huang@nokia.com>

        Reviewed by Laszlo Gombos.

        The URL of HTML5 Video Element is percent encoded at websites such as youtube.
        It is percent encoded again by QUrl constructor QUrl::QUrl(QString). This causes
        the HTTP GET request for the video to be rejected by the service provider. 
        https://bugs.webkit.org/show_bug.cgi?id=53973.

        The bug is fixed by constructing QUrl from the encoded URL.

        New test function tst_QWebPage::loadHtml5Video() is added in 
        Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::commitLoad):

2011-02-17  Andreas Kling  <kling@webkit.org>

        Reviewed by Antti Koivisto.

        [Qt] Crash when calling QWebFrame::setUrl() while a previous load has pending requests
        https://bugs.webkit.org/show_bug.cgi?id=49216

        CachedResourceRequest::didFail() will protect the CachedResourceLoader's
        document() while it runs, but if we're being called from the Document destructor,
        the protecting RefPtr<Document> will cause a double-delete instead.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::~CachedResourceLoader): Clear the m_document
        pointer so CachedResourceRequest::didFail() won't try to protect it.
        (WebCore::CachedResourceLoader::frame): Add null-check for m_document.

2011-02-17  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Add updateHighlight method to the highlighter
        https://bugs.webkit.org/show_bug.cgi?id=54448

        * inspector/front-end/SourceTokenizer.js:
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter.prototype.set mimeType):
        (WebInspector.TextEditorHighlighter.prototype.reset):
        (WebInspector.TextEditorHighlighter.prototype.updateHighlight):
        (WebInspector.TextEditorHighlighter.prototype._highlightInChunks):
        (WebInspector.TextEditorHighlighter.prototype._highlightLines):

2011-02-16  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: show all inlined scripts from single document in the same source frame.
        https://bugs.webkit.org/show_bug.cgi?id=54544

        Currently when debugging synchronously executed inlined scripts each script is shown in it's own source frame ("example.html:24").
        We should show such scripts in the same source frame "example.html" with <script></script> framing.

        Test: inspector/debugger/debug-inlined-scripts.html

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._scriptSourceChanged):
        (WebInspector.ScriptsPanel.prototype._addScript):
        (WebInspector.ScriptsPanel.prototype._resourceForURL):
        (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
        (WebInspector.ScriptsPanel.prototype.addConsoleMessage):
        (WebInspector.ScriptsPanel.prototype.clearConsoleMessages):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForResource):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForScript):
        (WebInspector.ScriptsPanel.prototype._recreateSourceFrame):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu.optionCompare):
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu):
        (WebInspector.SourceFrameContentProviderForScript.prototype.requestContent):
        (WebInspector.SourceFrameContentProviderForScript.prototype._buildSource):

2011-02-17  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        svg/batik/paints/patternRegions-positioned-objects.svg fails on Windows
        https://bugs.webkit.org/show_bug.cgi?id=44484

        Pattern of pattern defined with objectBoundingBox does not render correctly
        https://bugs.webkit.org/show_bug.cgi?id=53463

        Fix <pattern> + patternContentUnits="objectBoundingBox" support.
        We were incorrrectly translating the tile image transform, by the target objects bbox.x()/y().
        RenderSVGResourceMask/Clipper don't have this error.
        
        Fix nesting <patterns> in objectBoundingBox mode, propagate the tileImageTransform as new user-space
        when drawing the pattern children. <mask> + <clipPath> don't have the problem.

        Test: svg/custom/nested-pattern-boundingBoxModeContent.svg

        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildTileImageTransform):
        (WebCore::RenderSVGResourcePattern::createTileImage):

2011-02-17  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed.

        [Qt][V8] Buildfix after r78752.

        * CodeGenerators.pri: Add missing IDL files.

2011-02-17  Benjamin Kalman  <kalman@chromium.org>

        Reviewed by Ryosuke Niwa.

        RTL lineboundary left/right is reversed when cursor is at start of RTL container
        https://bugs.webkit.org/show_bug.cgi?id=54534

        Test: editing/selection/extend-left-right-by-lineboundary.html

        Add missing cases for extending left/right by lineboundary.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingRight):
        (WebCore::SelectionController::modifyExtendingLeft):

2011-02-16  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] libsoup critical warnings
        https://bugs.webkit.org/show_bug.cgi?id=54557

        Avoid pausing a soup message for already downloaded resources.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::platformSetDefersLoading):

2011-02-16  Brian Ryner  <bryner@chromium.org>

        Reviewed by Darin Fisher.

        Split the socket address field into separate IP address and port fields.
        This will make the field less error-prone to parse, for example when
        dealing with IPv6 literals.
        https://bugs.webkit.org/show_bug.cgi?id=54607

        No new tests required.

        * platform/network/chromium/ResourceResponse.cpp:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::remoteIPAddress):
        (WebCore::ResourceResponse::setRemoteIPAddress):
        (WebCore::ResourceResponse::remotePort):
        (WebCore::ResourceResponse::setRemotePort):

2011-02-16  Dominic Mazzoni  <dmazzoni@google.com>

        Reviewed by Chris Fleizach.

        Add support for canvas fallback content.
        https://bugs.webkit.org/show_bug.cgi?id=50126

        Test: accessibility/canvas-fallback-content.html

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::canHaveChildren):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isFocusable):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::recursiveSetNoNeedsLayout):
        (WebCore::RenderHTMLCanvas::layout):
        (WebCore::RenderHTMLCanvas::nodeAtPoint):
        * rendering/RenderHTMLCanvas.h:
        (WebCore::RenderHTMLCanvas::children):
        (WebCore::RenderHTMLCanvas::canHaveChildren):
        (WebCore::RenderHTMLCanvas::virtualChildren):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaint):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):

2011-02-16  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Allow acceleratesDrawing for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=54511

        Plumb through preference for accelerated drawing.
        
        When accelerated drawing is enabled, set a flag on new GraphicsLayers.

        Not testable via Layout Tests

        * WebCore.exp.in:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setAcceleratedDrawingEnabled):
        * page/Settings.h:
        (WebCore::Settings::acceleratedDrawingEnabled):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):

2011-02-16  Victoria Kirst  <vrk@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Fix green pixels at edge of certain GPU-accelerated videos
        https://bugs.webkit.org/show_bug.cgi?id=54559

        Adds logic to properly resize the range of YUV textures to only
        select legitimate values.

        * platform/graphics/chromium/VideoFrameChromium.h:
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::SharedValues::SharedValues):
        (WebCore::VideoLayerChromium::allocateTexturesIfNeeded):
        (WebCore::VideoLayerChromium::drawYUV):
        * platform/graphics/chromium/VideoLayerChromium.h:
        (WebCore::VideoLayerChromium::SharedValues::yWidthScaleFactorLocation):
        (WebCore::VideoLayerChromium::SharedValues::uvWidthScaleFactorLocation):

2011-02-16  Bill Budge  <bbudge@chromium.org>

        Reviewed by David Levin.

        Need didReceiveCachedMetadata, and finishTime for didFinishLoading exposed in ThreadableLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=54313

        No tests needed, exposes no new functionality

        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::didFinishLoading):
        * fileapi/FileReaderLoader.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::setDefersLoading):
        (WebCore::DocumentThreadableLoader::didReceiveCachedMetadata):
        (WebCore::DocumentThreadableLoader::didFinishLoading):
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/DocumentThreadableLoader.h:
        * loader/ThreadableLoaderClient.h:
        (WebCore::ThreadableLoaderClient::didReceiveData):
        (WebCore::ThreadableLoaderClient::didReceiveCachedMetadata):
        (WebCore::ThreadableLoaderClient::didFinishLoading):
        * loader/ThreadableLoaderClientWrapper.h:
        (WebCore::ThreadableLoaderClientWrapper::didReceiveData):
        (WebCore::ThreadableLoaderClientWrapper::didReceiveCachedMetadata):
        (WebCore::ThreadableLoaderClientWrapper::didFinishLoading):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::workerContextDidReceiveCachedMetadata):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveCachedMetadata):
        (WebCore::workerContextDidFinishLoading):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishLoading):
        * loader/WorkerThreadableLoader.h:
        * notifications/Notification.cpp:
        (WebCore::Notification::didFinishLoading):
        * notifications/Notification.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::didFinishLoading):
        * page/EventSource.h:
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::didFinishLoading):
        * workers/WorkerScriptLoader.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XMLHttpRequest.h:

2011-02-16  Jeremy Orlow  <jorlow@chromium.org>

        Fix uninitialized memory error.

        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::close):

2011-02-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix xssAuditor/form-action.html
        https://bugs.webkit.org/show_bug.cgi?id=54590

        We should block form actions.  Although this technically can't be used
        to run script, it's a pretty easy vector for stealing passwords.

        * html/parser/XSSFilter.cpp:
        (WebCore::XSSFilter::filterTokenInitial):
        (WebCore::XSSFilter::filterFormToken):
        * html/parser/XSSFilter.h:

2011-02-16  Abhishek Arya  <inferno@chromium.org>

        Reviewed by James Robinson.

        Remove the early bail added in r75823 since we can run into anonymous
        blocks when traversing the parents chain for clearing floats.
        https://bugs.webkit.org/show_bug.cgi?id=54601

        removeFloatingOrPositionedChildFromBlockLists tries to find the topmost
        parent containing "this" block and then tries to remove it from its floats
        list and mark all descendants blocks for layout. I added a bailout condition
        in r75823 because we thought that if one of the parent render block does not 
        contain "this" float, then it is safe to assume that none of the grand parents
        will have it. This is a wrong assumption since anonymous blocks do not have
        float objects and we need to go higher in the chain to find the top most parent
        containing this float. Instead of breaking out of the loop, it is ok to keep
        traversing the chain till we find that parent. Otherwise, we will leave deleted
        floats in the grand parents floats list.

        Test: fast/block/float/floats-not-cleared-from-grand-parents.html

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

2011-02-16  Andreas Kling  <kling@webkit.org>

        Reviewed by Ryosuke Niwa.

        Editing styles should not emit #RRGGBBAA colors
        https://bugs.webkit.org/show_bug.cgi?id=54540

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::extractTextStyles): Use Color::serialized()
        instead of Color::nameForRenderTreeAsText().

2011-02-16  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Improve showTree of Range, Position, and VisiblePosition
        https://bugs.webkit.org/show_bug.cgi?id=54536

        Enhanced showTree of Range, Position, and VisiblePosition.

        * dom/Position.cpp:
        (WebCore::Position::showAnchorTypeAndOffset): Added; dumps "legacy" if the position
        is a legacy position and also dumps anchor type.
        (WebCore::Position::showTreeForThis): Calls showAnchorTypeAndOffset.
        * dom/Position.h:
        * dom/Range.cpp:
        (showTree): No longer calls deprecatedEditingOffset.
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::debugPosition): No longer included in release build.
        Calls Position::showAnchorTypeAndOffset instead of manually calling deprecatedEditingOffset.
        * editing/VisiblePosition.h:
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::debugPosition): Ditto.
        (WebCore::VisibleSelection::showTreeForThis): Ditto.
        * editing/VisibleSelection.h:
        * page/EventHandler.cpp:

2011-02-16  David Grogan  <dgrogan@chromium.org>

        Reviewed by Jeremy Orlow.

        fix compile error introduced in 78752
        https://bugs.webkit.org/show_bug.cgi?id=54604

        * storage/IDBRequest.h:

2011-02-16  Jeremy Orlow  <jorlow@chromium.org>

        Back out IndexedDB change thats no longer necessary
        https://bugs.webkit.org/show_bug.cgi?id=54603

        Backing out 78645 as it turns out that it's not necessary.

        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBFactoryBackendInterface.h:

2011-02-16  Brian Salomon  <bsalomon@google.com>

        Reviewed by James Robinson.

        Skia's gpu backed just needs the correct context bound before drawing. It will bind the correct FBO itself and doing so externally confuses it unless resetContext is called.

        No new tests required.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::syncSoftwareCanvas):

2011-02-16  Mike Reed  <reed@google.com>

        Reviewed by Kenneth Russell.

        Use non-asserting pack function for decoding images, since webgl may want
        a non-premultiplied version of the image.
        https://bugs.webkit.org/show_bug.cgi?id=54023

        No new tests.
        fast/canvas/webgl/gl-teximage.html
        fast/canvas/webgl/tex-image-with-format-and-type.html
        fast/canvas/webgl/texture-transparent-pixels-initialized.html

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageFrame::setRGBA):

2011-02-16  David Grogan  <dgrogan@chromium.org>

        Reviewed by Jeremy Orlow.

        indexeddb: make setVersion fire blocked event if other connections are open
        https://bugs.webkit.org/show_bug.cgi?id=53728

        Tests: storage/indexeddb/set_version_blocked.html
               storage/indexeddb/set_version_queue.html

        * WebCore.gypi:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):
        * dom/Event.cpp:
        (WebCore::Event::isIDBVersionChangeEvent):
        * dom/Event.h:
        * dom/EventNames.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toIDBVersionChangeRequest):
        * dom/EventTarget.h:
        * storage/IDBCallbacks.h:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::setVersion):
        (WebCore::IDBDatabase::close):
        * storage/IDBDatabase.h:
        * storage/IDBDatabase.idl:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::PendingSetVersionCall::create):
        (WebCore::IDBDatabaseBackendImpl::PendingSetVersionCall::version):
        (WebCore::IDBDatabaseBackendImpl::PendingSetVersionCall::callbacks):
        (WebCore::IDBDatabaseBackendImpl::PendingSetVersionCall::PendingSetVersionCall):
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::setVersion):
        (WebCore::IDBDatabaseBackendImpl::open):
        (WebCore::IDBDatabaseBackendImpl::close):
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBDatabaseBackendInterface.h:
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::onBlocked):
        (WebCore::IDBRequest::dispatchEvent):
        (WebCore::IDBRequest::source):
        * storage/IDBRequest.h:
        * storage/IDBVersionChangeEvent.cpp: Copied from Source/WebKit/chromium/src/WebIDBCallbacksImpl.h.
        (WebCore::IDBVersionChangeEvent::create):
        (WebCore::IDBVersionChangeEvent::IDBVersionChangeEvent):
        (WebCore::IDBVersionChangeEvent::~IDBVersionChangeEvent):
        (WebCore::IDBVersionChangeEvent::version):
        * storage/IDBVersionChangeEvent.h: Copied from Source/WebKit/chromium/src/WebIDBCallbacksImpl.h.
        (WebCore::IDBVersionChangeEvent::isIDBVersionChangeEvent):
        * storage/IDBVersionChangeEvent.idl: Added.
        * storage/IDBVersionChangeRequest.cpp: Copied from Source/WebKit/chromium/src/WebIDBCallbacksImpl.h.
        (WebCore::IDBVersionChangeRequest::create):
        (WebCore::IDBVersionChangeRequest::IDBVersionChangeRequest):
        (WebCore::IDBVersionChangeRequest::~IDBVersionChangeRequest):
        (WebCore::IDBVersionChangeRequest::onBlocked):
        * storage/IDBVersionChangeRequest.h: Copied from Source/WebKit/chromium/src/WebIDBCallbacksImpl.h.
        * storage/IDBVersionChangeRequest.idl: Copied from Source/WebKit/chromium/src/WebIDBCallbacksImpl.h.

2011-02-16  Robin Cao  <robin.cao@torchmobile.com.cn>

        Reviewed by James Robinson.

        PlatformContextSkia::applyAntiAliasedClipPaths does not work for paths which have evenOdd property
        https://bugs.webkit.org/show_bug.cgi?id=54336

        We need to take fill type of paths into account when drawing them.

        No new tests, covered by svg/W3C-SVG-1.1/masking-path-05-f.svg.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::applyAntiAliasedClipPaths):

2011-02-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        REGRESSION (r61234): washingtonpost.com top bar looks wrong, doesn't animate
        https://bugs.webkit.org/show_bug.cgi?id=53717

        Test: http/tests/local/absolute-url-strip-whitespace.html

        This was theoretically tested already in fast/url, however the
        tests were disabled due to lack of any clean way to test absolute
        url parsing in JavaScript.  I added a test which mimics the sites
        behavior using our local http server.  There seems to be no other
        way to test this at the moment.

        * platform/KURL.cpp:
        (WebCore::shouldTrimFromURL):
         - Any char 0-20 should be removed (matches google-url and other browsers).
        (WebCore::KURL::init):

2011-02-16  Abhishek Arya  <inferno@chromium.org>

        Reviewed by James Robinson.

        Traverse the next sibling tree to find the text fragment for a first letter.
        https://bugs.webkit.org/show_bug.cgi?id=54568

        We cannot assume that the next sibling to the first letter will a text fragment
        since there can be intermediatary Apple-style-span inline elements wrapping the
        text fragment. So, we traverse the next sibling tree to find it.
        Test: fast/css/first-letter-text-fragment-crash.html

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

2011-02-16  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] r78718 introduced some assertion failures in some HTTP tests
        https://bugs.webkit.org/show_bug.cgi?id=54592

        No new tests. This fix is covered by tests that are currently failing.

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateFromSoupMessage): Instead of setting the existing
        headers and then selectively removing ones that do not exist in the updated soup
        message, just remove all headers from the map first.

2011-02-16  Jian Li  <jianli@chromium.org>

        Reviewed by Kenneth Russell.

        [V8] DataView constructor can be applied as a regular method
        https://bugs.webkit.org/show_bug.cgi?id=54563

        Tested by adding a new test case to fast/canvas/webgl/data-view-test.html.

        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::constructorCallback):

== Rolled over to ChangeLog-2011-02-16 ==
